322 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			322 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
 | 
						|
/* 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;
 | 
						|
	off_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 {
 | 
						|
	off_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;
 | 
						|
	off_t pos;
 | 
						|
	unsigned int num_of_bytes;
 | 
						|
	char *user_addr;
 | 
						|
} breadwrite_req_t;
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/* Structure for REQ_ request */
 |