1 /* 2 * HCPROTO.H 3 * 4 * $DragonFly: src/bin/cpdup/hcproto.h,v 1.4 2008/04/16 17:38:19 dillon Exp $ 5 */ 6 7 #ifndef _HCPROTO_H_ 8 #define _HCPROTO_H_ 9 10 #define HCPROTO_VERSION 6 11 #define HCPROTO_VERSION_COMPAT 2 12 #define HCPROTO_VERSION_LUCC 6 /* lutimes, lchflags, lchmod */ 13 14 #define HC_HELLO 0x0001 15 16 #define HC_STAT 0x0010 17 #define HC_LSTAT 0x0011 18 #define HC_OPENDIR 0x0012 19 #define HC_READDIR 0x0013 20 #define HC_CLOSEDIR 0x0014 21 #define HC_OPEN 0x0015 22 #define HC_CLOSE 0x0016 23 #define HC_READ 0x0017 24 #define HC_WRITE 0x0018 25 #define HC_REMOVE 0x0019 26 #define HC_MKDIR 0x001A 27 #define HC_RMDIR 0x001B 28 #define HC_CHOWN 0x001C 29 #define HC_LCHOWN 0x001D 30 #define HC_CHMOD 0x001E 31 #define HC_LINK 0x001F 32 #define HC_CHFLAGS 0x0020 33 #define HC_READLINK 0x0021 34 #define HC_UMASK 0x0022 35 #define HC_SYMLINK 0x0023 36 #define HC_RENAME 0x0024 37 #define HC_UTIMES 0x0025 38 #define HC_MKNOD 0x0026 39 #define HC_GETEUID 0x0027 40 #define HC_GETGROUPS 0x0028 41 #define HC_SCANDIR 0x0029 42 #define HC_READFILE 0x002A 43 #define HC_LUTIMES 0x002B 44 #define HC_LCHFLAGS 0x002C 45 #define HC_LCHMOD 0x002D 46 47 #define LC_HELLOSTR (0x0001|LCF_STRING) 48 #define LC_PATH1 (0x0010|LCF_STRING) 49 #define LC_PATH2 (0x0011|LCF_STRING) 50 #define LC_OFLAGS (0x0012|LCF_INT32) 51 #define LC_MODE (0x0013|LCF_INT32) 52 #define LC_BYTES (0x0014|LCF_INT32) 53 #define LC_OWNER (0x0015|LCF_INT32) 54 #define LC_GROUP (0x0016|LCF_INT32) 55 #define LC_DEV (0x0017|LCF_INT32) 56 #define LC_INO (0x0018|LCF_INT64) 57 #define LC_NLINK (0x0019|LCF_INT32) 58 #define LC_UID (0x001A|LCF_INT32) 59 #define LC_GID (0x001B|LCF_INT32) 60 #define LC_RDEV (0x001C|LCF_INT32) 61 #define LC_ATIME (0x001D|LCF_INT64) 62 #define LC_MTIME (0x001E|LCF_INT64) 63 #define LC_CTIME (0x001F|LCF_INT64) 64 #define LC_FILESIZE (0x0020|LCF_INT64) 65 #define LC_FILEBLKS (0x0021|LCF_INT64) 66 #define LC_FILEFLAGS (0x0022|LCF_INT64) 67 #define LC_FSMID (0x0023|LCF_INT64) 68 #define LC_DESCRIPTOR (0x0024|LCF_INT32) 69 #define LC_DATA (0x0025|LCF_BINARY) 70 #define LC_TYPE (0x0026|LCF_INT32) 71 #define LC_BLKSIZE (0x0027|LCF_INT32) 72 #define LC_VERSION (0x0028|LCF_INT32) 73 #define LC_COUNT (0x0029|LCF_INT32) 74 #define LC_ATIMENSEC (0x002A|LCF_INT32) 75 #define LC_MTIMENSEC (0x002B|LCF_INT32) 76 #define LC_CTIMENSEC (0x002C|LCF_INT32) 77 78 #define XO_NATIVEMASK 3 /* passed through directly */ 79 #define XO_CREAT 0x00010000 80 #define XO_EXCL 0x00020000 81 #define XO_TRUNC 0x00040000 82 83 #define HC_DESC_DIR 1 84 #define HC_DESC_FD 2 85 86 #ifndef MAXNAMLEN 87 #define MAXNAMLEN 255 88 #endif 89 90 struct HCDirEntry { 91 char d_name[MAXNAMLEN + 1]; 92 }; 93 94 int hc_connect(struct HostConf *hc, int readonly); 95 void hc_slave(int fdin, int fdout); 96 97 int hc_hello(struct HostConf *hc); 98 int hc_stat(struct HostConf *hc, const char *path, struct stat *st); 99 int hc_lstat(struct HostConf *hc, const char *path, struct stat *st); 100 DIR *hc_opendir(struct HostConf *hc, const char *path); 101 struct HCDirEntry *hc_readdir(struct HostConf *hc, DIR *dir, struct stat **statpp); 102 int hc_closedir(struct HostConf *hc, DIR *dir); 103 int hc_open(struct HostConf *hc, const char *path, int flags, mode_t mode); 104 int hc_close(struct HostConf *hc, int fd); 105 ssize_t hc_read(struct HostConf *hc, int fd, void *buf, size_t bytes); 106 ssize_t hc_write(struct HostConf *hc, int fd, const void *buf, size_t bytes); 107 int hc_remove(struct HostConf *hc, const char *path); 108 int hc_mkdir(struct HostConf *hc, const char *path, mode_t mode); 109 int hc_rmdir(struct HostConf *hc, const char *path); 110 int hc_chown(struct HostConf *hc, const char *path, uid_t owner, gid_t group); 111 int hc_lchown(struct HostConf *hc, const char *path, uid_t owner, gid_t group); 112 int hc_chmod(struct HostConf *hc, const char *path, mode_t mode); 113 int hc_lchmod(struct HostConf *hc, const char *path, mode_t mode); 114 int hc_mknod(struct HostConf *hc, const char *path, mode_t mode, dev_t rdev); 115 int hc_link(struct HostConf *hc, const char *name1, const char *name2); 116 int hc_chflags(struct HostConf *hc, const char *path, u_long flags); 117 int hc_lchflags(struct HostConf *hc, const char *path, u_long flags); 118 int hc_readlink(struct HostConf *hc, const char *path, char *buf, int bufsiz); 119 mode_t hc_umask(struct HostConf *hc, mode_t numask); 120 int hc_symlink(struct HostConf *hc, const char *name1, const char *name2); 121 int hc_rename(struct HostConf *hc, const char *name1, const char *name2); 122 int hc_utimes(struct HostConf *hc, const char *path, const struct timeval *times); 123 int hc_lutimes(struct HostConf *hc, const char *path, const struct timeval *times); 124 uid_t hc_geteuid(struct HostConf *hc); 125 int hc_getgroups(struct HostConf *hc, gid_t **gidlist); 126 127 #endif 128 129