minix/servers/vfs/request.h

322 lines
6.3 KiB
C
Raw Normal View History

/* Low level request messages are built and sent by wrapper functions.
* This file contains the request and response structures for accessing
* those wrappers functions.
*/
#include <sys/types.h>
/* Structure for REQ_GETNODE and REQ_PUTNODE requests */
typedef struct node_req {
endpoint_t fs_e;
ino_t inode_nr;
} node_req_t;
/* Structure for response that contains inode details */
typedef struct node_details {
endpoint_t fs_e;
ino_t inode_nr;
mode_t fmode;
off_t fsize;
unsigned short inode_index;
/* For char/block special files */
dev_t dev;
/* Fields used by the exec() syscall */
uid_t uid;
gid_t gid;
time_t ctime;
} node_details_t;
/* Structure for REQ_OPEN request */
typedef struct open_req {
endpoint_t fs_e;
ino_t inode_nr;
char *lastc;
int oflags;
mode_t omode;
uid_t uid;
gid_t gid;
} open_req_t;
/* Structure for REQ_READ and REQ_WRITE request */
typedef struct readwrite_req {
int rw_flag;
endpoint_t fs_e;
endpoint_t user_e;
ino_t inode_nr;
unsigned short inode_index;
int seg;
u64_t pos;
unsigned int num_of_bytes;
char *user_addr;
} readwrite_req_t;
/* Structure for response of REQ_READ and REQ_WRITE */
typedef struct readwrite_res {
u64_t new_pos;
unsigned int cum_io;
} readwrite_res_t;
/* Structure for REQ_PIPE request */
typedef struct pipe_req {
int fs_e;
uid_t uid;
gid_t gid;
} pipe_req_t;
/* Structure for REQ_CLONE_OPCL request */
typedef struct clone_opcl_req {
int fs_e;
dev_t dev;
} clone_opcl_req_t;
/* Structure for REQ_FTRUNC request */
typedef struct ftrunc_req {
int fs_e;
ino_t inode_nr;
off_t start;
off_t end;
} ftrunc_req_t;
/* Structure for REQ_CHOWN request */
typedef struct chown_req {
int fs_e;
ino_t inode_nr;
uid_t uid;
gid_t gid;
uid_t newuid;
gid_t newgid;
} chown_req_t;
/* Structure for REQ_CHMOD request */
typedef struct chmod_req {
int fs_e;
ino_t inode_nr;
uid_t uid;
gid_t gid;
mode_t rmode;
} chmod_req_t;
/* Structure for REQ_ACCESS request */
typedef struct access_req {
int fs_e;
ino_t inode_nr;
uid_t uid;
gid_t gid;
mode_t amode;
} access_req_t;
/* Structure for REQ_MKNOD request */
typedef struct mknod_req {
int fs_e;
ino_t inode_nr;
uid_t uid;
gid_t gid;
mode_t rmode;
dev_t dev;
char *lastc;
} mknod_req_t;
/* Structure for REQ_MKDIR request */
typedef struct mkdir_req {
int fs_e;
ino_t d_inode_nr;
uid_t uid;
gid_t gid;
mode_t rmode;
char *lastc;
} mkdir_req_t;
/* Structure for REQ_STAT, REQ_FSTAT, REQ_FSTATFS requests */
typedef struct stat_req {
int fs_e;
ino_t inode_nr;
uid_t uid;
gid_t gid;
int who_e;
char *buf;
int pos;
} stat_req_t;
/* Structure for REQ_UNLINK request */
typedef struct unlink_req {
int fs_e;
ino_t d_inode_nr;
uid_t uid;
gid_t gid;
char *lastc;
} unlink_req_t;
/* Structure for REQ_UTIME request */
typedef struct utime_req {
int fs_e;
ino_t inode_nr;
uid_t uid;
gid_t gid;
time_t actime;
time_t modtime;
} utime_req_t;
/* Structure for REQ_GETDIR request */
typedef struct getdir_req {
endpoint_t fs_e;
ino_t inode_nr;
uid_t uid;
gid_t gid;
} getdir_req_t;
/* Structure for REQ_LINK request */
typedef struct link_req {
endpoint_t fs_e;
ino_t linked_file;
ino_t link_parent;
uid_t uid;
gid_t gid;
char *lastc;
} link_req_t;
/* Structure for REQ_SLINK request */
typedef struct slink_req {
endpoint_t fs_e;
ino_t parent_dir;
uid_t uid;
gid_t gid;
char *lastc;
endpoint_t who_e;
char *path_addr;
unsigned short path_length;
} slink_req_t;
/* Structure for REQ_RDLINK request */
typedef struct rdlink_req {
endpoint_t fs_e;
ino_t inode_nr;
uid_t uid;
gid_t gid;
endpoint_t who_e;
char *path_buffer;
unsigned short max_length;
} rdlink_req_t;
/* Structure for REQ_RENAME request */
typedef struct rename_req {
endpoint_t fs_e;
ino_t old_dir;
ino_t new_dir;
uid_t uid;
gid_t gid;
char *old_name;
char *new_name;
} rename_req_t;
/* Structure for REQ_MOUNTPOINT request */
typedef struct mountpoint_req {
endpoint_t fs_e;
ino_t inode_nr;
uid_t uid;
gid_t gid;
} mountpoint_req_t;
/* Structure for REQ_READSUPER request */
typedef struct readsuper_req {
endpoint_t fs_e;
time_t boottime;
endpoint_t driver_e;
dev_t dev;
char *slink_storage;
char isroot;
char readonly;
} readsuper_req_t;
/* Structure for response of READSUPER request */
typedef struct readsuper_res {
endpoint_t fs_e;
ino_t inode_nr;
mode_t fmode;
off_t fsize;
int blocksize;
off_t maxsize;
} readsuper_res_t;
/* Structure for REQ_TRUNC request */
typedef struct trunc_req {
endpoint_t fs_e;
ino_t inode_nr;
uid_t uid;
gid_t gid;
off_t length;
} trunc_req_t;
/* Structure for REQ_LOOKUP request */
typedef struct lookup_req {
/* Fields filled in by the caller */
char *path;
char *lastc;
int flags;
/* Fields filled in by the path name traversal method */
endpoint_t fs_e;
ino_t start_dir;
ino_t root_dir; /* process' root directory */
uid_t uid;
gid_t gid;
unsigned char symloop;
} lookup_req_t;
/* Structure for a lookup response */
typedef struct lookup_res {
endpoint_t fs_e;
ino_t inode_nr;
mode_t fmode;
off_t fsize;
/* For char/block special files */
dev_t dev;
/* Fields used for handling mount point and symbolic links */
int char_processed;
unsigned char symloop;
} lookup_res_t;
/* Structure for REQ_BREAD and REQ_BWRITE request (block spec files) */
typedef struct breadwrite_req {
int rw_flag;
short blocksize;
endpoint_t fs_e;
endpoint_t user_e;
endpoint_t driver_e;
dev_t dev;
u64_t pos;
unsigned int num_of_bytes;
char *user_addr;
} breadwrite_req_t;
/* Structure for REQ_ request */