X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=nfs3%2Fnfs3_prot.h;h=2f8a3737ddf5e6f4d86e444ff8745f4140fb8f55;hb=7f01069131555a0e9ab332e578a9eb2815e1e12d;hp=5839996e5de44f7cb846deefa7c3f28e9d463d34;hpb=2246171d841d34e6368e340a6b76b7ee9d9a1084;p=bluesky.git diff --git a/nfs3/nfs3_prot.h b/nfs3/nfs3_prot.h index 5839996..2f8a373 100644 --- a/nfs3/nfs3_prot.h +++ b/nfs3/nfs3_prot.h @@ -1,19 +1,15 @@ -/* - * Please do not edit this file. - * It was generated using rpcgen. - */ - #ifndef _NFS3_PROT_H_RPCGEN #define _NFS3_PROT_H_RPCGEN #include +#include + #ifdef __cplusplus extern "C" { #endif - typedef u_quad_t uint64; typedef quad_t int64; @@ -26,6 +22,8 @@ typedef int int32; #define NFS3_CREATEVERFSIZE 8 #define NFS3_WRITEVERFSIZE 8 +extern char nfsd_instance_verf_cookie[NFS3_WRITEVERFSIZE]; + typedef char *filename3; typedef char *nfspath3; @@ -642,151 +640,133 @@ struct commit3res { }; typedef struct commit3res commit3res; +/* Structure for tracking a single incoming TCP connection for RPCs. For now, + * used for NFS only. */ +typedef struct { + GIOChannel *channel; + + /* The reassembled message, thus far. */ + GString *msgbuf; + + /* Remaining number of bytes in this message fragment; 0 if we next expect + * another fragment header. */ + uint32_t frag_len; + + /* If frag_len is zero: the number of bytes of the fragment header that + * have been read so far. */ + int frag_hdr_bytes; + + /* Mutex protecting send operations on the socket (to ensure that replies + * are not accidentally interleaved). */ + GMutex *send_lock; + + /* Is this a UDP connection? */ + gboolean udp_transport; + + /* For UDP connections only, the address of the sender. */ + struct sockaddr_in peer; + + /* For UDP only, a buffer for accumulating the full contents of a message + * before it is sent */ + GString *sendbuf; +} RPCConnection; + +/* Linked list of cleanup functions to call when a request is completed. */ +struct cleanup_list { + void (*func)(void *arg); + void *arg; + struct cleanup_list *next; +}; + +struct BlueSkyProfile; + +/* Used to track a single outstanding RPC request. Not all of the fields are + * initially filled in, but more are filled in as the request is processed. */ +typedef struct { + /* The corresponding connection on which the request was made. */ + RPCConnection *connection; + + /* To track the time to complete this request and a timing breakdown. */ + struct BlueSkyProfile *profile; + + /* Transaction ID of the request, in host byte order. */ + uint32_t xid; + + /* Raw XDR arguments for the call, including headers (everything except the + * fragment headers). Also, the offset to the actual arguments (number of + * bytes making up the headers). */ + GString *raw_args; + size_t raw_args_header_bytes; + + /* Decoded header information. */ + int req_proc; + + /* The XDR-decoded argument of the call, and the procedure to use for + * freeing these arguments. The actual freeing is done automatically when + * the response is sent. */ + void *args; + xdrproc_t xdr_args_free; + + /* Procedure to be used for encoding the eventual return value into XDR. */ + xdrproc_t xdr_result; + + /* Functions to be called when the response is sent to clean up any + * resources. */ + struct cleanup_list *cleanup; +} RPCRequest; + +extern void async_rpc_send_reply(RPCRequest *req, void *result); + #define NFS_PROGRAM 100003 #define NFS_V3 3 -#if defined(__STDC__) || defined(__cplusplus) -#define NFSPROC3_NULL 0 -extern void * nfsproc3_null_3(void *, CLIENT *); -extern void * nfsproc3_null_3_svc(void *, struct svc_req *); -#define NFSPROC3_GETATTR 1 -extern getattr3res * nfsproc3_getattr_3(nfs_fh3 *, CLIENT *); -extern getattr3res * nfsproc3_getattr_3_svc(nfs_fh3 *, struct svc_req *); -#define NFSPROC3_SETATTR 2 -extern wccstat3 * nfsproc3_setattr_3(setattr3args *, CLIENT *); -extern wccstat3 * nfsproc3_setattr_3_svc(setattr3args *, struct svc_req *); -#define NFSPROC3_LOOKUP 3 -extern lookup3res * nfsproc3_lookup_3(diropargs3 *, CLIENT *); -extern lookup3res * nfsproc3_lookup_3_svc(diropargs3 *, struct svc_req *); -#define NFSPROC3_ACCESS 4 -extern access3res * nfsproc3_access_3(access3args *, CLIENT *); -extern access3res * nfsproc3_access_3_svc(access3args *, struct svc_req *); -#define NFSPROC3_READLINK 5 -extern readlink3res * nfsproc3_readlink_3(nfs_fh3 *, CLIENT *); -extern readlink3res * nfsproc3_readlink_3_svc(nfs_fh3 *, struct svc_req *); -#define NFSPROC3_READ 6 -extern read3res * nfsproc3_read_3(read3args *, CLIENT *); -extern read3res * nfsproc3_read_3_svc(read3args *, struct svc_req *); -#define NFSPROC3_WRITE 7 -extern write3res * nfsproc3_write_3(write3args *, CLIENT *); -extern write3res * nfsproc3_write_3_svc(write3args *, struct svc_req *); -#define NFSPROC3_CREATE 8 -extern diropres3 * nfsproc3_create_3(create3args *, CLIENT *); -extern diropres3 * nfsproc3_create_3_svc(create3args *, struct svc_req *); -#define NFSPROC3_MKDIR 9 -extern diropres3 * nfsproc3_mkdir_3(mkdir3args *, CLIENT *); -extern diropres3 * nfsproc3_mkdir_3_svc(mkdir3args *, struct svc_req *); -#define NFSPROC3_SYMLINK 10 -extern diropres3 * nfsproc3_symlink_3(symlink3args *, CLIENT *); -extern diropres3 * nfsproc3_symlink_3_svc(symlink3args *, struct svc_req *); -#define NFSPROC3_MKNOD 11 -extern diropres3 * nfsproc3_mknod_3(mknod3args *, CLIENT *); -extern diropres3 * nfsproc3_mknod_3_svc(mknod3args *, struct svc_req *); -#define NFSPROC3_REMOVE 12 -extern wccstat3 * nfsproc3_remove_3(diropargs3 *, CLIENT *); -extern wccstat3 * nfsproc3_remove_3_svc(diropargs3 *, struct svc_req *); -#define NFSPROC3_RMDIR 13 -extern wccstat3 * nfsproc3_rmdir_3(diropargs3 *, CLIENT *); -extern wccstat3 * nfsproc3_rmdir_3_svc(diropargs3 *, struct svc_req *); -#define NFSPROC3_RENAME 14 -extern rename3res * nfsproc3_rename_3(rename3args *, CLIENT *); -extern rename3res * nfsproc3_rename_3_svc(rename3args *, struct svc_req *); -#define NFSPROC3_LINK 15 -extern link3res * nfsproc3_link_3(link3args *, CLIENT *); -extern link3res * nfsproc3_link_3_svc(link3args *, struct svc_req *); -#define NFSPROC3_READDIR 16 -extern readdir3res * nfsproc3_readdir_3(readdir3args *, CLIENT *); -extern readdir3res * nfsproc3_readdir_3_svc(readdir3args *, struct svc_req *); -#define NFSPROC3_READDIRPLUS 17 -extern readdirplus3res * nfsproc3_readdirplus_3(readdirplus3args *, CLIENT *); -extern readdirplus3res * nfsproc3_readdirplus_3_svc(readdirplus3args *, struct svc_req *); -#define NFSPROC3_FSSTAT 18 -extern fsstat3res * nfsproc3_fsstat_3(nfs_fh3 *, CLIENT *); -extern fsstat3res * nfsproc3_fsstat_3_svc(nfs_fh3 *, struct svc_req *); -#define NFSPROC3_FSINFO 19 -extern fsinfo3res * nfsproc3_fsinfo_3(nfs_fh3 *, CLIENT *); -extern fsinfo3res * nfsproc3_fsinfo_3_svc(nfs_fh3 *, struct svc_req *); -#define NFSPROC3_PATHCONF 20 -extern pathconf3res * nfsproc3_pathconf_3(nfs_fh3 *, CLIENT *); -extern pathconf3res * nfsproc3_pathconf_3_svc(nfs_fh3 *, struct svc_req *); -#define NFSPROC3_COMMIT 21 -extern commit3res * nfsproc3_commit_3(commit3args *, CLIENT *); -extern commit3res * nfsproc3_commit_3_svc(commit3args *, struct svc_req *); -extern int nfs_program_3_freeresult (SVCXPRT *, xdrproc_t, caddr_t); - -#else /* K&R C */ #define NFSPROC3_NULL 0 -extern void * nfsproc3_null_3(); -extern void * nfsproc3_null_3_svc(); +extern void nfsproc3_null_3_svc(void *, RPCRequest *); #define NFSPROC3_GETATTR 1 -extern getattr3res * nfsproc3_getattr_3(); -extern getattr3res * nfsproc3_getattr_3_svc(); +extern void nfsproc3_getattr_3_svc(nfs_fh3 *, RPCRequest *); #define NFSPROC3_SETATTR 2 -extern wccstat3 * nfsproc3_setattr_3(); -extern wccstat3 * nfsproc3_setattr_3_svc(); +extern void nfsproc3_setattr_3_svc(setattr3args *, RPCRequest *); #define NFSPROC3_LOOKUP 3 -extern lookup3res * nfsproc3_lookup_3(); -extern lookup3res * nfsproc3_lookup_3_svc(); +extern void nfsproc3_lookup_3_svc(diropargs3 *, RPCRequest *); #define NFSPROC3_ACCESS 4 -extern access3res * nfsproc3_access_3(); -extern access3res * nfsproc3_access_3_svc(); +extern void nfsproc3_access_3_svc(access3args *, RPCRequest *); #define NFSPROC3_READLINK 5 -extern readlink3res * nfsproc3_readlink_3(); -extern readlink3res * nfsproc3_readlink_3_svc(); +extern void nfsproc3_readlink_3_svc(nfs_fh3 *, RPCRequest *); #define NFSPROC3_READ 6 -extern read3res * nfsproc3_read_3(); -extern read3res * nfsproc3_read_3_svc(); +extern void nfsproc3_read_3_svc(read3args *, RPCRequest *); #define NFSPROC3_WRITE 7 -extern write3res * nfsproc3_write_3(); -extern write3res * nfsproc3_write_3_svc(); +extern void nfsproc3_write_3_svc(write3args *, RPCRequest *); #define NFSPROC3_CREATE 8 -extern diropres3 * nfsproc3_create_3(); -extern diropres3 * nfsproc3_create_3_svc(); +extern void nfsproc3_create_3_svc(create3args *, RPCRequest *); #define NFSPROC3_MKDIR 9 -extern diropres3 * nfsproc3_mkdir_3(); -extern diropres3 * nfsproc3_mkdir_3_svc(); +extern void nfsproc3_mkdir_3_svc(mkdir3args *, RPCRequest *); #define NFSPROC3_SYMLINK 10 -extern diropres3 * nfsproc3_symlink_3(); -extern diropres3 * nfsproc3_symlink_3_svc(); +extern void nfsproc3_symlink_3_svc(symlink3args *, RPCRequest *); #define NFSPROC3_MKNOD 11 -extern diropres3 * nfsproc3_mknod_3(); -extern diropres3 * nfsproc3_mknod_3_svc(); +extern void nfsproc3_mknod_3_svc(mknod3args *, RPCRequest *); #define NFSPROC3_REMOVE 12 -extern wccstat3 * nfsproc3_remove_3(); -extern wccstat3 * nfsproc3_remove_3_svc(); +extern void nfsproc3_remove_3_svc(diropargs3 *, RPCRequest *); #define NFSPROC3_RMDIR 13 -extern wccstat3 * nfsproc3_rmdir_3(); -extern wccstat3 * nfsproc3_rmdir_3_svc(); +extern void nfsproc3_rmdir_3_svc(diropargs3 *, RPCRequest *); #define NFSPROC3_RENAME 14 -extern rename3res * nfsproc3_rename_3(); -extern rename3res * nfsproc3_rename_3_svc(); +extern void nfsproc3_rename_3_svc(rename3args *, RPCRequest *); #define NFSPROC3_LINK 15 -extern link3res * nfsproc3_link_3(); -extern link3res * nfsproc3_link_3_svc(); +extern void nfsproc3_link_3_svc(link3args *, RPCRequest *); #define NFSPROC3_READDIR 16 -extern readdir3res * nfsproc3_readdir_3(); -extern readdir3res * nfsproc3_readdir_3_svc(); +extern void nfsproc3_readdir_3_svc(readdir3args *, RPCRequest *); #define NFSPROC3_READDIRPLUS 17 -extern readdirplus3res * nfsproc3_readdirplus_3(); -extern readdirplus3res * nfsproc3_readdirplus_3_svc(); +extern void nfsproc3_readdirplus_3_svc(readdirplus3args *, RPCRequest *); #define NFSPROC3_FSSTAT 18 -extern fsstat3res * nfsproc3_fsstat_3(); -extern fsstat3res * nfsproc3_fsstat_3_svc(); +extern void nfsproc3_fsstat_3_svc(nfs_fh3 *, RPCRequest *); #define NFSPROC3_FSINFO 19 -extern fsinfo3res * nfsproc3_fsinfo_3(); -extern fsinfo3res * nfsproc3_fsinfo_3_svc(); +extern void nfsproc3_fsinfo_3_svc(nfs_fh3 *, RPCRequest *); #define NFSPROC3_PATHCONF 20 -extern pathconf3res * nfsproc3_pathconf_3(); -extern pathconf3res * nfsproc3_pathconf_3_svc(); +extern void nfsproc3_pathconf_3_svc(nfs_fh3 *, RPCRequest *); #define NFSPROC3_COMMIT 21 -extern commit3res * nfsproc3_commit_3(); -extern commit3res * nfsproc3_commit_3_svc(); -extern int nfs_program_3_freeresult (); -#endif /* K&R C */ +extern void nfsproc3_commit_3_svc(commit3args *, RPCRequest *); /* the xdr functions */ -#if defined(__STDC__) || defined(__cplusplus) extern bool_t xdr_uint64 (XDR *, uint64*); extern bool_t xdr_int64 (XDR *, int64*); extern bool_t xdr_uint32 (XDR *, uint32*); @@ -868,89 +848,7 @@ extern bool_t xdr_commit3args (XDR *, commit3args*); extern bool_t xdr_commit3resok (XDR *, commit3resok*); extern bool_t xdr_commit3res (XDR *, commit3res*); -#else /* K&R C */ -extern bool_t xdr_uint64 (); -extern bool_t xdr_int64 (); -extern bool_t xdr_uint32 (); -extern bool_t xdr_int32 (); -extern bool_t xdr_filename3 (); -extern bool_t xdr_nfspath3 (); -extern bool_t xdr_cookieverf3 (); -extern bool_t xdr_createverf3 (); -extern bool_t xdr_writeverf3 (); -extern bool_t xdr_nfsstat3 (); -extern bool_t xdr_ftype3 (); -extern bool_t xdr_specdata3 (); -extern bool_t xdr_nfs_fh3 (); -extern bool_t xdr_nfstime3 (); -extern bool_t xdr_fattr3 (); -extern bool_t xdr_post_op_attr (); -extern bool_t xdr_wcc_attr (); -extern bool_t xdr_pre_op_attr (); -extern bool_t xdr_wcc_data (); -extern bool_t xdr_post_op_fh3 (); -extern bool_t xdr_set_uint32 (); -extern bool_t xdr_set_uint64 (); -extern bool_t xdr_time_how (); -extern bool_t xdr_set_time (); -extern bool_t xdr_sattr3 (); -extern bool_t xdr_diropargs3 (); -extern bool_t xdr_diropres3ok (); -extern bool_t xdr_diropres3 (); -extern bool_t xdr_wccstat3 (); -extern bool_t xdr_getattr3res (); -extern bool_t xdr_sattrguard3 (); -extern bool_t xdr_setattr3args (); -extern bool_t xdr_lookup3resok (); -extern bool_t xdr_lookup3res (); -extern bool_t xdr_access3args (); -extern bool_t xdr_access3resok (); -extern bool_t xdr_access3res (); -extern bool_t xdr_readlink3resok (); -extern bool_t xdr_readlink3res (); -extern bool_t xdr_read3args (); -extern bool_t xdr_read3resok (); -extern bool_t xdr_read3res (); -extern bool_t xdr_stable_how (); -extern bool_t xdr_write3args (); -extern bool_t xdr_write3resok (); -extern bool_t xdr_write3res (); -extern bool_t xdr_createmode3 (); -extern bool_t xdr_createhow3 (); -extern bool_t xdr_create3args (); -extern bool_t xdr_mkdir3args (); -extern bool_t xdr_symlinkdata3 (); -extern bool_t xdr_symlink3args (); -extern bool_t xdr_devicedata3 (); -extern bool_t xdr_mknoddata3 (); -extern bool_t xdr_mknod3args (); -extern bool_t xdr_rename3args (); -extern bool_t xdr_rename3wcc (); -extern bool_t xdr_rename3res (); -extern bool_t xdr_link3args (); -extern bool_t xdr_link3wcc (); -extern bool_t xdr_link3res (); -extern bool_t xdr_readdir3args (); -extern bool_t xdr_entry3 (); -extern bool_t xdr_dirlist3 (); -extern bool_t xdr_readdir3resok (); -extern bool_t xdr_readdir3res (); -extern bool_t xdr_readdirplus3args (); -extern bool_t xdr_entryplus3 (); -extern bool_t xdr_dirlistplus3 (); -extern bool_t xdr_readdirplus3resok (); -extern bool_t xdr_readdirplus3res (); -extern bool_t xdr_fsstat3resok (); -extern bool_t xdr_fsstat3res (); -extern bool_t xdr_fsinfo3resok (); -extern bool_t xdr_fsinfo3res (); -extern bool_t xdr_pathconf3resok (); -extern bool_t xdr_pathconf3res (); -extern bool_t xdr_commit3args (); -extern bool_t xdr_commit3resok (); -extern bool_t xdr_commit3res (); - -#endif /* K&R C */ +extern void xdr_string_create(XDR *xdrs, GString *string, enum xdr_op op); #ifdef __cplusplus }