/* * Virtio 9p Proxy callback * * Copyright IBM, Corp. 2011 * * Authors: * M. Mohan Kumar * * This work is licensed under the terms of the GNU GPL, version 2. See * the COPYING file in the top-level directory. */ #ifndef _QEMU_VIRTIO_9P_PROXY_H #define _QEMU_VIRTIO_9P_PROXY_H #define PROXY_MAX_IO_SZ (64 * 1024) #define V9FS_FD_VALID INT_MAX /* * proxy iovec only support one element and * marsha/unmarshal doesn't do little endian conversion. */ #define proxy_unmarshal(in_sg, offset, fmt, args...) \ v9fs_unmarshal(in_sg, 1, offset, 0, fmt, ##args) #define proxy_marshal(out_sg, offset, fmt, args...) \ v9fs_marshal(out_sg, 1, offset, 0, fmt, ##args) union MsgControl { struct cmsghdr cmsg; char control[CMSG_SPACE(sizeof(int))]; }; typedef struct { uint32_t type; uint32_t size; } ProxyHeader; #define PROXY_HDR_SZ (sizeof(ProxyHeader)) enum { T_SUCCESS = 0, T_ERROR, T_OPEN, T_CREATE, T_MKNOD, T_MKDIR, T_SYMLINK, T_LINK, T_LSTAT, T_READLINK, T_STATFS, T_CHMOD, T_CHOWN, T_TRUNCATE, T_UTIME, T_RENAME, T_REMOVE, T_LGETXATTR, T_LLISTXATTR, T_LSETXATTR, T_LREMOVEXATTR, T_GETVERSION, }; typedef struct { uint64_t st_dev; uint64_t st_ino; uint64_t st_nlink; uint32_t st_mode; uint32_t st_uid; uint32_t st_gid; uint64_t st_rdev; uint64_t st_size; uint64_t st_blksize; uint64_t st_blocks; uint64_t st_atim_sec; uint64_t st_atim_nsec; uint64_t st_mtim_sec; uint64_t st_mtim_nsec; uint64_t st_ctim_sec; uint64_t st_ctim_nsec; } ProxyStat; typedef struct { uint64_t f_type; uint64_t f_bsize; uint64_t f_blocks; uint64_t f_bfree; uint64_t f_bavail; uint64_t f_files; uint64_t f_ffree; uint64_t f_fsid[2]; uint64_t f_namelen; uint64_t f_frsize; } ProxyStatFS; #endif