X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=nfs3%2Fnfs3_prot.h;h=2f8a3737ddf5e6f4d86e444ff8745f4140fb8f55;hb=388030970805a70cb4fad34ade5e3de7a3607a57;hp=0f06618b4ae30a18c399cd8dd23ac0087cff10c2;hpb=c3245fe423dd5c3a68b4c1e90ba253e7fae3473e;p=bluesky.git diff --git a/nfs3/nfs3_prot.h b/nfs3/nfs3_prot.h index 0f06618..2f8a373 100644 --- a/nfs3/nfs3_prot.h +++ b/nfs3/nfs3_prot.h @@ -22,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; @@ -653,14 +655,40 @@ typedef struct { /* 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; @@ -681,6 +709,10 @@ typedef struct { /* 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); @@ -689,49 +721,49 @@ extern void async_rpc_send_reply(RPCRequest *req, void *result); #define NFS_V3 3 #define NFSPROC3_NULL 0 -extern void * nfsproc3_null_3_svc(void *, RPCRequest *); +extern void nfsproc3_null_3_svc(void *, RPCRequest *); #define NFSPROC3_GETATTR 1 -extern getattr3res * nfsproc3_getattr_3_svc(nfs_fh3 *, RPCRequest *); +extern void nfsproc3_getattr_3_svc(nfs_fh3 *, RPCRequest *); #define NFSPROC3_SETATTR 2 -extern wccstat3 * nfsproc3_setattr_3_svc(setattr3args *, RPCRequest *); +extern void nfsproc3_setattr_3_svc(setattr3args *, RPCRequest *); #define NFSPROC3_LOOKUP 3 -extern lookup3res * nfsproc3_lookup_3_svc(diropargs3 *, RPCRequest *); +extern void nfsproc3_lookup_3_svc(diropargs3 *, RPCRequest *); #define NFSPROC3_ACCESS 4 -extern access3res * nfsproc3_access_3_svc(access3args *, RPCRequest *); +extern void nfsproc3_access_3_svc(access3args *, RPCRequest *); #define NFSPROC3_READLINK 5 -extern readlink3res * nfsproc3_readlink_3_svc(nfs_fh3 *, RPCRequest *); +extern void nfsproc3_readlink_3_svc(nfs_fh3 *, RPCRequest *); #define NFSPROC3_READ 6 -extern read3res * nfsproc3_read_3_svc(read3args *, RPCRequest *); +extern void nfsproc3_read_3_svc(read3args *, RPCRequest *); #define NFSPROC3_WRITE 7 -extern write3res * nfsproc3_write_3_svc(write3args *, RPCRequest *); +extern void nfsproc3_write_3_svc(write3args *, RPCRequest *); #define NFSPROC3_CREATE 8 -extern diropres3 * nfsproc3_create_3_svc(create3args *, RPCRequest *); +extern void nfsproc3_create_3_svc(create3args *, RPCRequest *); #define NFSPROC3_MKDIR 9 -extern diropres3 * nfsproc3_mkdir_3_svc(mkdir3args *, RPCRequest *); +extern void nfsproc3_mkdir_3_svc(mkdir3args *, RPCRequest *); #define NFSPROC3_SYMLINK 10 -extern diropres3 * nfsproc3_symlink_3_svc(symlink3args *, RPCRequest *); +extern void nfsproc3_symlink_3_svc(symlink3args *, RPCRequest *); #define NFSPROC3_MKNOD 11 -extern diropres3 * nfsproc3_mknod_3_svc(mknod3args *, RPCRequest *); +extern void nfsproc3_mknod_3_svc(mknod3args *, RPCRequest *); #define NFSPROC3_REMOVE 12 -extern wccstat3 * nfsproc3_remove_3_svc(diropargs3 *, RPCRequest *); +extern void nfsproc3_remove_3_svc(diropargs3 *, RPCRequest *); #define NFSPROC3_RMDIR 13 -extern wccstat3 * nfsproc3_rmdir_3_svc(diropargs3 *, RPCRequest *); +extern void nfsproc3_rmdir_3_svc(diropargs3 *, RPCRequest *); #define NFSPROC3_RENAME 14 -extern rename3res * nfsproc3_rename_3_svc(rename3args *, RPCRequest *); +extern void nfsproc3_rename_3_svc(rename3args *, RPCRequest *); #define NFSPROC3_LINK 15 -extern link3res * nfsproc3_link_3_svc(link3args *, RPCRequest *); +extern void nfsproc3_link_3_svc(link3args *, RPCRequest *); #define NFSPROC3_READDIR 16 -extern readdir3res * nfsproc3_readdir_3_svc(readdir3args *, RPCRequest *); +extern void nfsproc3_readdir_3_svc(readdir3args *, RPCRequest *); #define NFSPROC3_READDIRPLUS 17 -extern readdirplus3res * nfsproc3_readdirplus_3_svc(readdirplus3args *, RPCRequest *); +extern void nfsproc3_readdirplus_3_svc(readdirplus3args *, RPCRequest *); #define NFSPROC3_FSSTAT 18 -extern fsstat3res * nfsproc3_fsstat_3_svc(nfs_fh3 *, RPCRequest *); +extern void nfsproc3_fsstat_3_svc(nfs_fh3 *, RPCRequest *); #define NFSPROC3_FSINFO 19 -extern fsinfo3res * nfsproc3_fsinfo_3_svc(nfs_fh3 *, RPCRequest *); +extern void nfsproc3_fsinfo_3_svc(nfs_fh3 *, RPCRequest *); #define NFSPROC3_PATHCONF 20 -extern pathconf3res * nfsproc3_pathconf_3_svc(nfs_fh3 *, RPCRequest *); +extern void nfsproc3_pathconf_3_svc(nfs_fh3 *, RPCRequest *); #define NFSPROC3_COMMIT 21 -extern commit3res * nfsproc3_commit_3_svc(commit3args *, RPCRequest *); +extern void nfsproc3_commit_3_svc(commit3args *, RPCRequest *); /* the xdr functions */ @@ -816,6 +848,8 @@ extern bool_t xdr_commit3args (XDR *, commit3args*); extern bool_t xdr_commit3resok (XDR *, commit3resok*); extern bool_t xdr_commit3res (XDR *, commit3res*); +extern void xdr_string_create(XDR *xdrs, GString *string, enum xdr_op op); + #ifdef __cplusplus } #endif