1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22 /* 23 * Copyright (c) 2012 Alexander Block. All rights reserved. 24 * Copyright (c) 2012 STRATO AG. All rights reserved. 25 */ 26 27 #ifndef _SYS_FAR_H 28 #define _SYS_FAR_H 29 30 #include <sys/inttypes.h> 31 #include <sys/types.h> 32 #include <sys/dmu.h> 33 #include <sys/vnode.h> 34 35 #ifdef __cplusplus 36 extern "C" { 37 #endif 38 39 #define FAR_SEND_STREAM_MAGIC "btrfs-stream" 40 #define FAR_SEND_STREAM_VERSION 1 41 42 #define FAR_SEND_BUF_SIZE 65536 43 #define FAR_SEND_READ_SIZE 49152 44 45 typedef struct _far_stream_header { 46 char fs_magic[sizeof (FAR_SEND_STREAM_MAGIC)]; 47 uint32_t fs_version; 48 } __attribute__((__packed__)) far_stream_header_t; 49 50 typedef struct _far_cmd_header { 51 /* len of the payload, not including header */ 52 uint32_t fc_len; 53 uint16_t fc_cmd; 54 /* the crc includes the header, but with fc_crc assumed as 0 */ 55 uint32_t fc_crc; 56 } __attribute__((__packed__)) far_cmd_header_t; 57 58 typedef struct _far_attr_header { 59 uint16_t fa_type; 60 /* len of the payload, not including header */ 61 uint16_t fa_len; 62 } __attribute__((__packed__)) far_attr_header_t; 63 64 /* commands */ 65 #define FAR_CMD_SUBVOL 1 66 #define FAR_CMD_SNAPSHOT 2 67 #define FAR_CMD_MKFILE 3 68 #define FAR_CMD_MKDIR 4 69 #define FAR_CMD_MKNOD 5 70 #define FAR_CMD_MKFIFO 6 71 #define FAR_CMD_MKSOCK 7 72 #define FAR_CMD_SYMLINK 8 73 #define FAR_CMD_RENAME 9 74 #define FAR_CMD_LINK 10 75 #define FAR_CMD_UNLINK 11 76 #define FAR_CMD_RMDIR 12 77 #define FAR_CMD_SET_XATTR 13 78 #define FAR_CMD_REMOVE_XATTR 14 79 #define FAR_CMD_WRITE 15 80 #define FAR_CMD_CLONE 16 81 #define FAR_CMD_TRUNCATE 17 82 #define FAR_CMD_CHMOD 18 83 #define FAR_CMD_CHOWN 19 84 #define FAR_CMD_UTIMES 20 85 #define FAR_CMD_END 21 86 #define FAR_CMD_MAX 21 87 88 /* attributes */ 89 #define FAR_ATTR_UUID 1 90 #define FAR_ATTR_CTRANSID 2 91 #define FAR_ATTR_INO 3 92 #define FAR_ATTR_SIZE 4 93 #define FAR_ATTR_MODE 5 94 #define FAR_ATTR_UID 6 95 #define FAR_ATTR_GID 7 96 #define FAR_ATTR_RDEV 8 97 #define FAR_ATTR_CTIME 9 98 #define FAR_ATTR_MTIME 10 99 #define FAR_ATTR_ATIME 11 100 #define FAR_ATTR_OTIME 12 101 #define FAR_ATTR_XATTR_NAME 13 102 #define FAR_ATTR_XATTR_DATA 14 103 #define FAR_ATTR_PATH 15 104 #define FAR_ATTR_PATH_TO 16 105 #define FAR_ATTR_PATH_LINK 17 106 #define FAR_ATTR_FILE_OFFSET 18 107 #define FAR_ATTR_DATA 19 108 #define FAR_ATTR_CLONE_UUID 20 109 #define FAR_ATTR_CLONE_CTRANSID 21 110 #define FAR_ATTR_CLONE_PATH 22 111 #define FAR_ATTR_CLONE_OFFSET 23 112 #define FAR_ATTR_CLONE_LEN 24 113 #define FAR_ATTR_MAX 24 114 115 int far_send(objset_t *tosnap, objset_t *fromsnap, int outfd, vnode_t *vp, 116 offset_t *off); 117 118 #ifdef __cplusplus 119 } 120 #endif 121 122 #endif /* _SYS_FAR_H */