|
|
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.