Annotation of qemu/fsdev/file-op-9p.h, revision 1.1.1.3

1.1       root        1: /*
                      2:  * Virtio 9p
                      3:  *
                      4:  * Copyright IBM, Corp. 2010
                      5:  *
                      6:  * Authors:
                      7:  *  Aneesh Kumar K.V <[email protected]>
                      8:  *
                      9:  * This work is licensed under the terms of the GNU GPL, version 2.  See
                     10:  * the COPYING file in the top-level directory.
                     11:  *
                     12:  */
                     13: #ifndef _FILEOP_H
                     14: #define _FILEOP_H
                     15: #include <sys/types.h>
                     16: #include <dirent.h>
                     17: #include <sys/time.h>
                     18: #include <utime.h>
                     19: #include <sys/stat.h>
                     20: #include <sys/uio.h>
                     21: #include <sys/vfs.h>
1.1.1.2   root       22: 
1.1       root       23: #define SM_LOCAL_MODE_BITS    0600
                     24: #define SM_LOCAL_DIR_MODE_BITS    0700
                     25: 
                     26: typedef struct FsCred
                     27: {
                     28:     uid_t   fc_uid;
                     29:     gid_t   fc_gid;
                     30:     mode_t  fc_mode;
                     31:     dev_t   fc_rdev;
                     32: } FsCred;
                     33: 
                     34: struct xattr_operations;
1.1.1.2   root       35: struct FsContext;
                     36: struct V9fsPath;
                     37: 
                     38: typedef struct extended_ops {
                     39:     int (*get_st_gen)(struct FsContext *, struct V9fsPath *,
                     40:                       mode_t, uint64_t *);
                     41: } extended_ops;
                     42: 
                     43: /* export flags */
                     44: #define V9FS_IMMEDIATE_WRITEOUT     0x00000001
                     45: #define V9FS_PATHNAME_FSCONTEXT     0x00000002
                     46: /*
                     47:  * uid/gid set on fileserver files
                     48:  */
                     49: #define V9FS_SM_PASSTHROUGH         0x00000004
                     50: /*
                     51:  * uid/gid part of xattr
                     52:  */
                     53: #define V9FS_SM_MAPPED              0x00000008
                     54: /*
                     55:  * Server will try to set uid/gid.
                     56:  * On failure ignore the error.
                     57:  */
                     58: #define V9FS_SM_NONE                0x00000010
1.1.1.3 ! root       59: /*
        !            60:  * uid/gid part of .virtfs_meatadata namespace
        !            61:  */
        !            62: #define V9FS_SM_MAPPED_FILE         0x00000020
        !            63: #define V9FS_RDONLY                 0x00000040
        !            64: #define V9FS_PROXY_SOCK_FD          0x00000080
        !            65: #define V9FS_PROXY_SOCK_NAME        0x00000100
        !            66: 
        !            67: #define V9FS_SEC_MASK               0x0000003C
        !            68: 
        !            69: 
        !            70: typedef struct FileOperations FileOperations;
        !            71: /*
        !            72:  * Structure to store the various fsdev's passed through command line.
        !            73:  */
        !            74: typedef struct FsDriverEntry {
        !            75:     char *fsdev_id;
        !            76:     char *path;
        !            77:     int export_flags;
        !            78:     FileOperations *ops;
        !            79: } FsDriverEntry;
1.1       root       80: 
                     81: typedef struct FsContext
                     82: {
                     83:     uid_t uid;
1.1.1.2   root       84:     char *fs_root;
                     85:     int export_flags;
1.1       root       86:     struct xattr_operations **xops;
1.1.1.2   root       87:     struct extended_ops exops;
                     88:     /* fs driver specific data */
                     89:     void *private;
1.1       root       90: } FsContext;
                     91: 
1.1.1.2   root       92: typedef struct V9fsPath {
                     93:     uint16_t size;
                     94:     char *data;
                     95: } V9fsPath;
                     96: 
                     97: typedef union V9fsFidOpenState V9fsFidOpenState;
                     98: 
1.1       root       99: void cred_init(FsCred *);
                    100: 
1.1.1.3 ! root      101: struct FileOperations
1.1       root      102: {
1.1.1.3 ! root      103:     int (*parse_opts)(QemuOpts *, struct FsDriverEntry *);
1.1.1.2   root      104:     int (*init)(struct FsContext *);
                    105:     int (*lstat)(FsContext *, V9fsPath *, struct stat *);
                    106:     ssize_t (*readlink)(FsContext *, V9fsPath *, char *, size_t);
                    107:     int (*chmod)(FsContext *, V9fsPath *, FsCred *);
                    108:     int (*chown)(FsContext *, V9fsPath *, FsCred *);
                    109:     int (*mknod)(FsContext *, V9fsPath *, const char *, FsCred *);
                    110:     int (*utimensat)(FsContext *, V9fsPath *, const struct timespec *);
1.1       root      111:     int (*remove)(FsContext *, const char *);
1.1.1.2   root      112:     int (*symlink)(FsContext *, const char *, V9fsPath *,
                    113:                    const char *, FsCred *);
                    114:     int (*link)(FsContext *, V9fsPath *, V9fsPath *, const char *);
1.1       root      115:     int (*setuid)(FsContext *, uid_t);
1.1.1.2   root      116:     int (*close)(FsContext *, V9fsFidOpenState *);
                    117:     int (*closedir)(FsContext *, V9fsFidOpenState *);
                    118:     int (*opendir)(FsContext *, V9fsPath *, V9fsFidOpenState *);
                    119:     int (*open)(FsContext *, V9fsPath *, int, V9fsFidOpenState *);
                    120:     int (*open2)(FsContext *, V9fsPath *, const char *,
                    121:                  int, FsCred *, V9fsFidOpenState *);
                    122:     void (*rewinddir)(FsContext *, V9fsFidOpenState *);
                    123:     off_t (*telldir)(FsContext *, V9fsFidOpenState *);
                    124:     int (*readdir_r)(FsContext *, V9fsFidOpenState *,
                    125:                      struct dirent *, struct dirent **);
                    126:     void (*seekdir)(FsContext *, V9fsFidOpenState *, off_t);
                    127:     ssize_t (*preadv)(FsContext *, V9fsFidOpenState *,
                    128:                       const struct iovec *, int, off_t);
                    129:     ssize_t (*pwritev)(FsContext *, V9fsFidOpenState *,
                    130:                        const struct iovec *, int, off_t);
                    131:     int (*mkdir)(FsContext *, V9fsPath *, const char *, FsCred *);
                    132:     int (*fstat)(FsContext *, int, V9fsFidOpenState *, struct stat *);
1.1       root      133:     int (*rename)(FsContext *, const char *, const char *);
1.1.1.2   root      134:     int (*truncate)(FsContext *, V9fsPath *, off_t);
                    135:     int (*fsync)(FsContext *, int, V9fsFidOpenState *, int);
                    136:     int (*statfs)(FsContext *s, V9fsPath *path, struct statfs *stbuf);
                    137:     ssize_t (*lgetxattr)(FsContext *, V9fsPath *,
1.1       root      138:                          const char *, void *, size_t);
1.1.1.2   root      139:     ssize_t (*llistxattr)(FsContext *, V9fsPath *, void *, size_t);
                    140:     int (*lsetxattr)(FsContext *, V9fsPath *,
1.1       root      141:                      const char *, void *, size_t, int);
1.1.1.2   root      142:     int (*lremovexattr)(FsContext *, V9fsPath *, const char *);
                    143:     int (*name_to_path)(FsContext *, V9fsPath *, const char *, V9fsPath *);
                    144:     int (*renameat)(FsContext *ctx, V9fsPath *olddir, const char *old_name,
                    145:                     V9fsPath *newdir, const char *new_name);
                    146:     int (*unlinkat)(FsContext *ctx, V9fsPath *dir, const char *name, int flags);
1.1       root      147:     void *opaque;
1.1.1.3 ! root      148: };
1.1       root      149: 
                    150: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.