1494a8ebeSWei Liu /* 2494a8ebeSWei Liu * 9p Proxy callback 3494a8ebeSWei Liu * 4494a8ebeSWei Liu * Copyright IBM, Corp. 2011 5494a8ebeSWei Liu * 6494a8ebeSWei Liu * Authors: 7494a8ebeSWei Liu * M. Mohan Kumar <mohan@in.ibm.com> 8494a8ebeSWei Liu * 9494a8ebeSWei Liu * This work is licensed under the terms of the GNU GPL, version 2. See 10494a8ebeSWei Liu * the COPYING file in the top-level directory. 11494a8ebeSWei Liu */ 12*2a6a4076SMarkus Armbruster 13*2a6a4076SMarkus Armbruster #ifndef QEMU_9P_PROXY_H 14*2a6a4076SMarkus Armbruster #define QEMU_9P_PROXY_H 15494a8ebeSWei Liu 16494a8ebeSWei Liu #define PROXY_MAX_IO_SZ (64 * 1024) 17494a8ebeSWei Liu #define V9FS_FD_VALID INT_MAX 18494a8ebeSWei Liu 19494a8ebeSWei Liu /* 20494a8ebeSWei Liu * proxy iovec only support one element and 21494a8ebeSWei Liu * marsha/unmarshal doesn't do little endian conversion. 22494a8ebeSWei Liu */ 23494a8ebeSWei Liu #define proxy_unmarshal(in_sg, offset, fmt, args...) \ 242209bd05SWei Liu v9fs_iov_unmarshal(in_sg, 1, offset, 0, fmt, ##args) 25494a8ebeSWei Liu #define proxy_marshal(out_sg, offset, fmt, args...) \ 262209bd05SWei Liu v9fs_iov_marshal(out_sg, 1, offset, 0, fmt, ##args) 27494a8ebeSWei Liu 28494a8ebeSWei Liu union MsgControl { 29494a8ebeSWei Liu struct cmsghdr cmsg; 30494a8ebeSWei Liu char control[CMSG_SPACE(sizeof(int))]; 31494a8ebeSWei Liu }; 32494a8ebeSWei Liu 33494a8ebeSWei Liu typedef struct { 34494a8ebeSWei Liu uint32_t type; 35494a8ebeSWei Liu uint32_t size; 36494a8ebeSWei Liu } ProxyHeader; 37494a8ebeSWei Liu 38494a8ebeSWei Liu #define PROXY_HDR_SZ (sizeof(ProxyHeader)) 39494a8ebeSWei Liu 40494a8ebeSWei Liu enum { 41494a8ebeSWei Liu T_SUCCESS = 0, 42494a8ebeSWei Liu T_ERROR, 43494a8ebeSWei Liu T_OPEN, 44494a8ebeSWei Liu T_CREATE, 45494a8ebeSWei Liu T_MKNOD, 46494a8ebeSWei Liu T_MKDIR, 47494a8ebeSWei Liu T_SYMLINK, 48494a8ebeSWei Liu T_LINK, 49494a8ebeSWei Liu T_LSTAT, 50494a8ebeSWei Liu T_READLINK, 51494a8ebeSWei Liu T_STATFS, 52494a8ebeSWei Liu T_CHMOD, 53494a8ebeSWei Liu T_CHOWN, 54494a8ebeSWei Liu T_TRUNCATE, 55494a8ebeSWei Liu T_UTIME, 56494a8ebeSWei Liu T_RENAME, 57494a8ebeSWei Liu T_REMOVE, 58494a8ebeSWei Liu T_LGETXATTR, 59494a8ebeSWei Liu T_LLISTXATTR, 60494a8ebeSWei Liu T_LSETXATTR, 61494a8ebeSWei Liu T_LREMOVEXATTR, 62494a8ebeSWei Liu T_GETVERSION, 63494a8ebeSWei Liu }; 64494a8ebeSWei Liu 65494a8ebeSWei Liu typedef struct { 66494a8ebeSWei Liu uint64_t st_dev; 67494a8ebeSWei Liu uint64_t st_ino; 68494a8ebeSWei Liu uint64_t st_nlink; 69494a8ebeSWei Liu uint32_t st_mode; 70494a8ebeSWei Liu uint32_t st_uid; 71494a8ebeSWei Liu uint32_t st_gid; 72494a8ebeSWei Liu uint64_t st_rdev; 73494a8ebeSWei Liu uint64_t st_size; 74494a8ebeSWei Liu uint64_t st_blksize; 75494a8ebeSWei Liu uint64_t st_blocks; 76494a8ebeSWei Liu uint64_t st_atim_sec; 77494a8ebeSWei Liu uint64_t st_atim_nsec; 78494a8ebeSWei Liu uint64_t st_mtim_sec; 79494a8ebeSWei Liu uint64_t st_mtim_nsec; 80494a8ebeSWei Liu uint64_t st_ctim_sec; 81494a8ebeSWei Liu uint64_t st_ctim_nsec; 82494a8ebeSWei Liu } ProxyStat; 83494a8ebeSWei Liu 84494a8ebeSWei Liu typedef struct { 85494a8ebeSWei Liu uint64_t f_type; 86494a8ebeSWei Liu uint64_t f_bsize; 87494a8ebeSWei Liu uint64_t f_blocks; 88494a8ebeSWei Liu uint64_t f_bfree; 89494a8ebeSWei Liu uint64_t f_bavail; 90494a8ebeSWei Liu uint64_t f_files; 91494a8ebeSWei Liu uint64_t f_ffree; 92494a8ebeSWei Liu uint64_t f_fsid[2]; 93494a8ebeSWei Liu uint64_t f_namelen; 94494a8ebeSWei Liu uint64_t f_frsize; 95494a8ebeSWei Liu } ProxyStatFS; 96494a8ebeSWei Liu #endif 97