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 */ 12494a8ebeSWei Liu #ifndef _QEMU_9P_PROXY_H 13494a8ebeSWei Liu #define _QEMU_9P_PROXY_H 14494a8ebeSWei Liu 15494a8ebeSWei Liu #define PROXY_MAX_IO_SZ (64 * 1024) 16494a8ebeSWei Liu #define V9FS_FD_VALID INT_MAX 17494a8ebeSWei Liu 18494a8ebeSWei Liu /* 19494a8ebeSWei Liu * proxy iovec only support one element and 20494a8ebeSWei Liu * marsha/unmarshal doesn't do little endian conversion. 21494a8ebeSWei Liu */ 22494a8ebeSWei Liu #define proxy_unmarshal(in_sg, offset, fmt, args...) \ 23*2209bd05SWei Liu v9fs_iov_unmarshal(in_sg, 1, offset, 0, fmt, ##args) 24494a8ebeSWei Liu #define proxy_marshal(out_sg, offset, fmt, args...) \ 25*2209bd05SWei Liu v9fs_iov_marshal(out_sg, 1, offset, 0, fmt, ##args) 26494a8ebeSWei Liu 27494a8ebeSWei Liu union MsgControl { 28494a8ebeSWei Liu struct cmsghdr cmsg; 29494a8ebeSWei Liu char control[CMSG_SPACE(sizeof(int))]; 30494a8ebeSWei Liu }; 31494a8ebeSWei Liu 32494a8ebeSWei Liu typedef struct { 33494a8ebeSWei Liu uint32_t type; 34494a8ebeSWei Liu uint32_t size; 35494a8ebeSWei Liu } ProxyHeader; 36494a8ebeSWei Liu 37494a8ebeSWei Liu #define PROXY_HDR_SZ (sizeof(ProxyHeader)) 38494a8ebeSWei Liu 39494a8ebeSWei Liu enum { 40494a8ebeSWei Liu T_SUCCESS = 0, 41494a8ebeSWei Liu T_ERROR, 42494a8ebeSWei Liu T_OPEN, 43494a8ebeSWei Liu T_CREATE, 44494a8ebeSWei Liu T_MKNOD, 45494a8ebeSWei Liu T_MKDIR, 46494a8ebeSWei Liu T_SYMLINK, 47494a8ebeSWei Liu T_LINK, 48494a8ebeSWei Liu T_LSTAT, 49494a8ebeSWei Liu T_READLINK, 50494a8ebeSWei Liu T_STATFS, 51494a8ebeSWei Liu T_CHMOD, 52494a8ebeSWei Liu T_CHOWN, 53494a8ebeSWei Liu T_TRUNCATE, 54494a8ebeSWei Liu T_UTIME, 55494a8ebeSWei Liu T_RENAME, 56494a8ebeSWei Liu T_REMOVE, 57494a8ebeSWei Liu T_LGETXATTR, 58494a8ebeSWei Liu T_LLISTXATTR, 59494a8ebeSWei Liu T_LSETXATTR, 60494a8ebeSWei Liu T_LREMOVEXATTR, 61494a8ebeSWei Liu T_GETVERSION, 62494a8ebeSWei Liu }; 63494a8ebeSWei Liu 64494a8ebeSWei Liu typedef struct { 65494a8ebeSWei Liu uint64_t st_dev; 66494a8ebeSWei Liu uint64_t st_ino; 67494a8ebeSWei Liu uint64_t st_nlink; 68494a8ebeSWei Liu uint32_t st_mode; 69494a8ebeSWei Liu uint32_t st_uid; 70494a8ebeSWei Liu uint32_t st_gid; 71494a8ebeSWei Liu uint64_t st_rdev; 72494a8ebeSWei Liu uint64_t st_size; 73494a8ebeSWei Liu uint64_t st_blksize; 74494a8ebeSWei Liu uint64_t st_blocks; 75494a8ebeSWei Liu uint64_t st_atim_sec; 76494a8ebeSWei Liu uint64_t st_atim_nsec; 77494a8ebeSWei Liu uint64_t st_mtim_sec; 78494a8ebeSWei Liu uint64_t st_mtim_nsec; 79494a8ebeSWei Liu uint64_t st_ctim_sec; 80494a8ebeSWei Liu uint64_t st_ctim_nsec; 81494a8ebeSWei Liu } ProxyStat; 82494a8ebeSWei Liu 83494a8ebeSWei Liu typedef struct { 84494a8ebeSWei Liu uint64_t f_type; 85494a8ebeSWei Liu uint64_t f_bsize; 86494a8ebeSWei Liu uint64_t f_blocks; 87494a8ebeSWei Liu uint64_t f_bfree; 88494a8ebeSWei Liu uint64_t f_bavail; 89494a8ebeSWei Liu uint64_t f_files; 90494a8ebeSWei Liu uint64_t f_ffree; 91494a8ebeSWei Liu uint64_t f_fsid[2]; 92494a8ebeSWei Liu uint64_t f_namelen; 93494a8ebeSWei Liu uint64_t f_frsize; 94494a8ebeSWei Liu } ProxyStatFS; 95494a8ebeSWei Liu #endif 96