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