1*494a8ebeSWei Liu /* 2*494a8ebeSWei Liu * 9p Proxy callback 3*494a8ebeSWei Liu * 4*494a8ebeSWei Liu * Copyright IBM, Corp. 2011 5*494a8ebeSWei Liu * 6*494a8ebeSWei Liu * Authors: 7*494a8ebeSWei Liu * M. Mohan Kumar <mohan@in.ibm.com> 8*494a8ebeSWei Liu * 9*494a8ebeSWei Liu * This work is licensed under the terms of the GNU GPL, version 2. See 10*494a8ebeSWei Liu * the COPYING file in the top-level directory. 11*494a8ebeSWei Liu */ 12*494a8ebeSWei Liu #ifndef _QEMU_9P_PROXY_H 13*494a8ebeSWei Liu #define _QEMU_9P_PROXY_H 14*494a8ebeSWei Liu 15*494a8ebeSWei Liu #define PROXY_MAX_IO_SZ (64 * 1024) 16*494a8ebeSWei Liu #define V9FS_FD_VALID INT_MAX 17*494a8ebeSWei Liu 18*494a8ebeSWei Liu /* 19*494a8ebeSWei Liu * proxy iovec only support one element and 20*494a8ebeSWei Liu * marsha/unmarshal doesn't do little endian conversion. 21*494a8ebeSWei Liu */ 22*494a8ebeSWei Liu #define proxy_unmarshal(in_sg, offset, fmt, args...) \ 23*494a8ebeSWei Liu v9fs_unmarshal(in_sg, 1, offset, 0, fmt, ##args) 24*494a8ebeSWei Liu #define proxy_marshal(out_sg, offset, fmt, args...) \ 25*494a8ebeSWei Liu v9fs_marshal(out_sg, 1, offset, 0, fmt, ##args) 26*494a8ebeSWei Liu 27*494a8ebeSWei Liu union MsgControl { 28*494a8ebeSWei Liu struct cmsghdr cmsg; 29*494a8ebeSWei Liu char control[CMSG_SPACE(sizeof(int))]; 30*494a8ebeSWei Liu }; 31*494a8ebeSWei Liu 32*494a8ebeSWei Liu typedef struct { 33*494a8ebeSWei Liu uint32_t type; 34*494a8ebeSWei Liu uint32_t size; 35*494a8ebeSWei Liu } ProxyHeader; 36*494a8ebeSWei Liu 37*494a8ebeSWei Liu #define PROXY_HDR_SZ (sizeof(ProxyHeader)) 38*494a8ebeSWei Liu 39*494a8ebeSWei Liu enum { 40*494a8ebeSWei Liu T_SUCCESS = 0, 41*494a8ebeSWei Liu T_ERROR, 42*494a8ebeSWei Liu T_OPEN, 43*494a8ebeSWei Liu T_CREATE, 44*494a8ebeSWei Liu T_MKNOD, 45*494a8ebeSWei Liu T_MKDIR, 46*494a8ebeSWei Liu T_SYMLINK, 47*494a8ebeSWei Liu T_LINK, 48*494a8ebeSWei Liu T_LSTAT, 49*494a8ebeSWei Liu T_READLINK, 50*494a8ebeSWei Liu T_STATFS, 51*494a8ebeSWei Liu T_CHMOD, 52*494a8ebeSWei Liu T_CHOWN, 53*494a8ebeSWei Liu T_TRUNCATE, 54*494a8ebeSWei Liu T_UTIME, 55*494a8ebeSWei Liu T_RENAME, 56*494a8ebeSWei Liu T_REMOVE, 57*494a8ebeSWei Liu T_LGETXATTR, 58*494a8ebeSWei Liu T_LLISTXATTR, 59*494a8ebeSWei Liu T_LSETXATTR, 60*494a8ebeSWei Liu T_LREMOVEXATTR, 61*494a8ebeSWei Liu T_GETVERSION, 62*494a8ebeSWei Liu }; 63*494a8ebeSWei Liu 64*494a8ebeSWei Liu typedef struct { 65*494a8ebeSWei Liu uint64_t st_dev; 66*494a8ebeSWei Liu uint64_t st_ino; 67*494a8ebeSWei Liu uint64_t st_nlink; 68*494a8ebeSWei Liu uint32_t st_mode; 69*494a8ebeSWei Liu uint32_t st_uid; 70*494a8ebeSWei Liu uint32_t st_gid; 71*494a8ebeSWei Liu uint64_t st_rdev; 72*494a8ebeSWei Liu uint64_t st_size; 73*494a8ebeSWei Liu uint64_t st_blksize; 74*494a8ebeSWei Liu uint64_t st_blocks; 75*494a8ebeSWei Liu uint64_t st_atim_sec; 76*494a8ebeSWei Liu uint64_t st_atim_nsec; 77*494a8ebeSWei Liu uint64_t st_mtim_sec; 78*494a8ebeSWei Liu uint64_t st_mtim_nsec; 79*494a8ebeSWei Liu uint64_t st_ctim_sec; 80*494a8ebeSWei Liu uint64_t st_ctim_nsec; 81*494a8ebeSWei Liu } ProxyStat; 82*494a8ebeSWei Liu 83*494a8ebeSWei Liu typedef struct { 84*494a8ebeSWei Liu uint64_t f_type; 85*494a8ebeSWei Liu uint64_t f_bsize; 86*494a8ebeSWei Liu uint64_t f_blocks; 87*494a8ebeSWei Liu uint64_t f_bfree; 88*494a8ebeSWei Liu uint64_t f_bavail; 89*494a8ebeSWei Liu uint64_t f_files; 90*494a8ebeSWei Liu uint64_t f_ffree; 91*494a8ebeSWei Liu uint64_t f_fsid[2]; 92*494a8ebeSWei Liu uint64_t f_namelen; 93*494a8ebeSWei Liu uint64_t f_frsize; 94*494a8ebeSWei Liu } ProxyStatFS; 95*494a8ebeSWei Liu #endif 96