send.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Copyright (C) 2012 Alexander Block. All rights reserved.
  4. * Copyright (C) 2012 STRATO. All rights reserved.
  5. */
  6. #ifndef BTRFS_SEND_H
  7. #define BTRFS_SEND_H
  8. #include "ctree.h"
  9. #define BTRFS_SEND_STREAM_MAGIC "btrfs-stream"
  10. #define BTRFS_SEND_STREAM_VERSION 1
  11. #define BTRFS_SEND_BUF_SIZE SZ_64K
  12. #define BTRFS_SEND_READ_SIZE (48 * SZ_1K)
  13. enum btrfs_tlv_type {
  14. BTRFS_TLV_U8,
  15. BTRFS_TLV_U16,
  16. BTRFS_TLV_U32,
  17. BTRFS_TLV_U64,
  18. BTRFS_TLV_BINARY,
  19. BTRFS_TLV_STRING,
  20. BTRFS_TLV_UUID,
  21. BTRFS_TLV_TIMESPEC,
  22. };
  23. struct btrfs_stream_header {
  24. char magic[sizeof(BTRFS_SEND_STREAM_MAGIC)];
  25. __le32 version;
  26. } __attribute__ ((__packed__));
  27. struct btrfs_cmd_header {
  28. /* len excluding the header */
  29. __le32 len;
  30. __le16 cmd;
  31. /* crc including the header with zero crc field */
  32. __le32 crc;
  33. } __attribute__ ((__packed__));
  34. struct btrfs_tlv_header {
  35. __le16 tlv_type;
  36. /* len excluding the header */
  37. __le16 tlv_len;
  38. } __attribute__ ((__packed__));
  39. /* commands */
  40. enum btrfs_send_cmd {
  41. BTRFS_SEND_C_UNSPEC,
  42. BTRFS_SEND_C_SUBVOL,
  43. BTRFS_SEND_C_SNAPSHOT,
  44. BTRFS_SEND_C_MKFILE,
  45. BTRFS_SEND_C_MKDIR,
  46. BTRFS_SEND_C_MKNOD,
  47. BTRFS_SEND_C_MKFIFO,
  48. BTRFS_SEND_C_MKSOCK,
  49. BTRFS_SEND_C_SYMLINK,
  50. BTRFS_SEND_C_RENAME,
  51. BTRFS_SEND_C_LINK,
  52. BTRFS_SEND_C_UNLINK,
  53. BTRFS_SEND_C_RMDIR,
  54. BTRFS_SEND_C_SET_XATTR,
  55. BTRFS_SEND_C_REMOVE_XATTR,
  56. BTRFS_SEND_C_WRITE,
  57. BTRFS_SEND_C_CLONE,
  58. BTRFS_SEND_C_TRUNCATE,
  59. BTRFS_SEND_C_CHMOD,
  60. BTRFS_SEND_C_CHOWN,
  61. BTRFS_SEND_C_UTIMES,
  62. BTRFS_SEND_C_END,
  63. BTRFS_SEND_C_UPDATE_EXTENT,
  64. __BTRFS_SEND_C_MAX,
  65. };
  66. #define BTRFS_SEND_C_MAX (__BTRFS_SEND_C_MAX - 1)
  67. /* attributes in send stream */
  68. enum {
  69. BTRFS_SEND_A_UNSPEC,
  70. BTRFS_SEND_A_UUID,
  71. BTRFS_SEND_A_CTRANSID,
  72. BTRFS_SEND_A_INO,
  73. BTRFS_SEND_A_SIZE,
  74. BTRFS_SEND_A_MODE,
  75. BTRFS_SEND_A_UID,
  76. BTRFS_SEND_A_GID,
  77. BTRFS_SEND_A_RDEV,
  78. BTRFS_SEND_A_CTIME,
  79. BTRFS_SEND_A_MTIME,
  80. BTRFS_SEND_A_ATIME,
  81. BTRFS_SEND_A_OTIME,
  82. BTRFS_SEND_A_XATTR_NAME,
  83. BTRFS_SEND_A_XATTR_DATA,
  84. BTRFS_SEND_A_PATH,
  85. BTRFS_SEND_A_PATH_TO,
  86. BTRFS_SEND_A_PATH_LINK,
  87. BTRFS_SEND_A_FILE_OFFSET,
  88. BTRFS_SEND_A_DATA,
  89. BTRFS_SEND_A_CLONE_UUID,
  90. BTRFS_SEND_A_CLONE_CTRANSID,
  91. BTRFS_SEND_A_CLONE_PATH,
  92. BTRFS_SEND_A_CLONE_OFFSET,
  93. BTRFS_SEND_A_CLONE_LEN,
  94. __BTRFS_SEND_A_MAX,
  95. };
  96. #define BTRFS_SEND_A_MAX (__BTRFS_SEND_A_MAX - 1)
  97. #ifdef __KERNEL__
  98. long btrfs_ioctl_send(struct file *mnt_file, struct btrfs_ioctl_send_args *arg);
  99. #endif
  100. #endif