send.h 2.3 KB

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