| /*  | 
 |  * NFS mounter V3;  see RFC 1813 | 
 |  */ | 
 | /* | 
 | #pragma lib "libsunrpc.a" | 
 | #pragma src "/sys/src/libsunrpc" | 
 | */ | 
 | #define _NFS3H_ /* sorry */ | 
 |  | 
 | enum { | 
 | 	NfsMount1HandleSize = 32, | 
 | 	NfsMount3MaxPathSize = 1024, | 
 | 	NfsMount3MaxNameSize = 255, | 
 | 	NfsMount3MaxHandleSize = 64, | 
 | 	NfsMount3Program = 100005, | 
 | 	NfsMount3Version = 3, | 
 | 	NfsMount1Program = 100005, | 
 | 	NfsMount1Version = 1 | 
 | }; | 
 | typedef struct NfsMount3TNull NfsMount3TNull; | 
 | typedef struct NfsMount3RNull NfsMount3RNull; | 
 | typedef struct NfsMount3TMnt NfsMount3TMnt; | 
 | typedef struct NfsMount3RMnt NfsMount3RMnt; | 
 | typedef struct NfsMount3TDump NfsMount3TDump; | 
 | typedef struct NfsMount3Entry NfsMount3Entry; | 
 | typedef struct NfsMount3RDump NfsMount3RDump; | 
 | typedef struct NfsMount3TUmnt NfsMount3TUmnt; | 
 | typedef struct NfsMount3RUmnt NfsMount3RUmnt; | 
 | typedef struct NfsMount3Export NfsMount3Export; | 
 | typedef struct NfsMount3TUmntall NfsMount3TUmntall; | 
 | typedef struct NfsMount3RUmntall NfsMount3RUmntall; | 
 | typedef struct NfsMount3TExport NfsMount3TExport; | 
 | typedef struct NfsMount3RExport NfsMount3RExport; | 
 |  | 
 | typedef enum | 
 | { | 
 | 	NfsMount3CallTNull, | 
 | 	NfsMount3CallRNull, | 
 | 	NfsMount3CallTMnt, | 
 | 	NfsMount3CallRMnt, | 
 | 	NfsMount3CallTDump, | 
 | 	NfsMount3CallRDump, | 
 | 	NfsMount3CallTUmnt, | 
 | 	NfsMount3CallRUmnt, | 
 | 	NfsMount3CallTUmntall, | 
 | 	NfsMount3CallRUmntall, | 
 | 	NfsMount3CallTExport, | 
 | 	NfsMount3CallRExport | 
 | } NfsMount3CallType; | 
 |  | 
 | struct NfsMount3TNull { | 
 | 	SunCall call; | 
 | }; | 
 |  | 
 | struct NfsMount3RNull { | 
 | 	SunCall call; | 
 | }; | 
 |  | 
 | struct NfsMount3TMnt { | 
 | 	SunCall call; | 
 | 	char *path; | 
 | }; | 
 |  | 
 | struct NfsMount3RMnt { | 
 | 	SunCall call; | 
 | 	uint status; | 
 | 	uchar *handle; | 
 | 	uint len; | 
 | 	u32int *auth; | 
 | 	u32int nauth; | 
 | }; | 
 |  | 
 | struct NfsMount3TDump { | 
 | 	SunCall call; | 
 | }; | 
 |  | 
 | struct NfsMount3Entry { | 
 | 	char *host; | 
 | 	char *path; | 
 | }; | 
 |  | 
 | struct NfsMount3RDump { | 
 | 	SunCall call; | 
 | 	uchar *data; | 
 | 	u32int count; | 
 | }; | 
 |  | 
 | struct NfsMount3TUmnt { | 
 | 	SunCall call; | 
 | 	char *path; | 
 | }; | 
 |  | 
 | struct NfsMount3RUmnt { | 
 | 	SunCall call; | 
 | }; | 
 |  | 
 | struct NfsMount3Export { | 
 | 	char *path; | 
 | 	char **g; | 
 | 	u32int ng; | 
 | }; | 
 |  | 
 | struct NfsMount3TUmntall { | 
 | 	SunCall call; | 
 | }; | 
 |  | 
 | struct NfsMount3RUmntall { | 
 | 	SunCall call; | 
 | }; | 
 |  | 
 | struct NfsMount3TExport { | 
 | 	SunCall call; | 
 | }; | 
 |  | 
 | struct NfsMount3RExport { | 
 | 	SunCall call; | 
 | 	uchar *data; | 
 | 	u32int count; | 
 | }; | 
 |  | 
 | uint nfsmount3exportgroupsize(uchar*); | 
 | uint nfsmount3exportsize(NfsMount3Export*); | 
 | int nfsmount3exportpack(uchar*, uchar*, uchar**, NfsMount3Export*); | 
 | int nfsmount3exportunpack(uchar*, uchar*, uchar**, char**, char***, NfsMount3Export*); | 
 | int nfsmount3entrypack(uchar*, uchar*, uchar**, NfsMount3Entry*); | 
 | int nfsmount3entryunpack(uchar*, uchar*, uchar**, NfsMount3Entry*); | 
 | uint nfsmount3entrysize(NfsMount3Entry*); | 
 |  | 
 | extern SunProg nfsmount3prog; | 
 |  | 
 | /* | 
 |  * NFS V3; see RFC 1813 | 
 |  */ | 
 | enum { | 
 | 	Nfs3MaxHandleSize = 64, | 
 | 	Nfs3CookieVerfSize = 8, | 
 | 	Nfs3CreateVerfSize = 8, | 
 | 	Nfs3WriteVerfSize = 8, | 
 | 	Nfs3AccessRead = 1, | 
 | 	Nfs3AccessLookup = 2, | 
 | 	Nfs3AccessModify = 4, | 
 | 	Nfs3AccessExtend = 8, | 
 | 	Nfs3AccessDelete = 16, | 
 | 	Nfs3AccessExecute = 32, | 
 | 	Nfs3FsHasLinks = 1, | 
 | 	Nfs3FsHasSymlinks = 2, | 
 | 	Nfs3FsHomogeneous = 8, | 
 | 	Nfs3FsCanSetTime = 16, | 
 |  | 
 | 	Nfs3Version = 3,	 | 
 | 	Nfs3Program = 100003 | 
 | }; | 
 | typedef enum | 
 | { | 
 | 	Nfs3Ok = 0, | 
 | 	Nfs3ErrNotOwner = 1, | 
 | 	Nfs3ErrNoEnt = 2, | 
 | 	Nfs3ErrIo = 5, | 
 | 	Nfs3ErrNxio = 6, | 
 | 	Nfs3ErrNoMem = 12, | 
 | 	Nfs3ErrAcces = 13, | 
 | 	Nfs3ErrExist = 17, | 
 | 	Nfs3ErrXDev = 18, | 
 | 	Nfs3ErrNoDev = 19, | 
 | 	Nfs3ErrNotDir = 20, | 
 | 	Nfs3ErrIsDir = 21, | 
 | 	Nfs3ErrInval = 22, | 
 | 	Nfs3ErrFbig = 27, | 
 | 	Nfs3ErrNoSpc = 28, | 
 | 	Nfs3ErrRoFs = 30, | 
 | 	Nfs3ErrMLink = 31, | 
 | 	Nfs3ErrNameTooLong = 63, | 
 | 	Nfs3ErrNotEmpty = 66, | 
 | 	Nfs3ErrDQuot = 69, | 
 | 	Nfs3ErrStale = 70, | 
 | 	Nfs3ErrRemote = 71, | 
 | 	Nfs3ErrBadHandle = 10001, | 
 | 	Nfs3ErrNotSync = 10002, | 
 | 	Nfs3ErrBadCookie = 10003, | 
 | 	Nfs3ErrNotSupp = 10004, | 
 | 	Nfs3ErrTooSmall = 10005, | 
 | 	Nfs3ErrServerFault = 10006, | 
 | 	Nfs3ErrBadType = 10007, | 
 | 	Nfs3ErrJukebox = 10008, | 
 | 	Nfs3ErrFprintNotFound = 10009, | 
 | 	Nfs3ErrAborted = 10010 | 
 | } Nfs3Status; | 
 |  | 
 | void nfs3errstr(Nfs3Status); | 
 |  | 
 | typedef enum | 
 | { | 
 | 	Nfs3FileReg = 1, | 
 | 	Nfs3FileDir = 2, | 
 | 	Nfs3FileBlock = 3, | 
 | 	Nfs3FileChar = 4, | 
 | 	Nfs3FileSymlink = 5, | 
 | 	Nfs3FileSocket = 6, | 
 | 	Nfs3FileFifo = 7 | 
 | } Nfs3FileType; | 
 |  | 
 | enum | 
 | { | 
 | 	Nfs3ModeSetUid = 0x800, | 
 | 	Nfs3ModeSetGid = 0x400, | 
 | 	Nfs3ModeSticky = 0x200 | 
 | }; | 
 |  | 
 | typedef enum | 
 | { | 
 | 	Nfs3CallTNull, | 
 | 	Nfs3CallRNull, | 
 | 	Nfs3CallTGetattr, | 
 | 	Nfs3CallRGetattr, | 
 | 	Nfs3CallTSetattr, | 
 | 	Nfs3CallRSetattr, | 
 | 	Nfs3CallTLookup, | 
 | 	Nfs3CallRLookup, | 
 | 	Nfs3CallTAccess, | 
 | 	Nfs3CallRAccess, | 
 | 	Nfs3CallTReadlink, | 
 | 	Nfs3CallRReadlink, | 
 | 	Nfs3CallTRead, | 
 | 	Nfs3CallRRead, | 
 | 	Nfs3CallTWrite, | 
 | 	Nfs3CallRWrite, | 
 | 	Nfs3CallTCreate, | 
 | 	Nfs3CallRCreate, | 
 | 	Nfs3CallTMkdir, | 
 | 	Nfs3CallRMkdir, | 
 | 	Nfs3CallTSymlink, | 
 | 	Nfs3CallRSymlink, | 
 | 	Nfs3CallTMknod, | 
 | 	Nfs3CallRMknod, | 
 | 	Nfs3CallTRemove, | 
 | 	Nfs3CallRRemove, | 
 | 	Nfs3CallTRmdir, | 
 | 	Nfs3CallRRmdir, | 
 | 	Nfs3CallTRename, | 
 | 	Nfs3CallRRename, | 
 | 	Nfs3CallTLink, | 
 | 	Nfs3CallRLink, | 
 | 	Nfs3CallTReadDir, | 
 | 	Nfs3CallRReadDir, | 
 | 	Nfs3CallTReadDirPlus, | 
 | 	Nfs3CallRReadDirPlus, | 
 | 	Nfs3CallTFsStat, | 
 | 	Nfs3CallRFsStat, | 
 | 	Nfs3CallTFsInfo, | 
 | 	Nfs3CallRFsInfo, | 
 | 	Nfs3CallTPathconf, | 
 | 	Nfs3CallRPathconf, | 
 | 	Nfs3CallTCommit, | 
 | 	Nfs3CallRCommit | 
 | } Nfs3CallType; | 
 |  | 
 | typedef struct Nfs3Handle Nfs3Handle; | 
 | typedef struct Nfs3Time Nfs3Time; | 
 | typedef struct Nfs3Attr Nfs3Attr; | 
 | typedef struct Nfs3WccAttr Nfs3WccAttr; | 
 | typedef struct Nfs3Wcc Nfs3Wcc; | 
 | typedef enum | 
 | { | 
 | 	Nfs3SetTimeDont = 0, | 
 | 	Nfs3SetTimeServer = 1, | 
 | 	Nfs3SetTimeClient = 2 | 
 | } Nfs3SetTime; | 
 |  | 
 | typedef struct Nfs3SetAttr Nfs3SetAttr; | 
 | typedef struct Nfs3TNull Nfs3TNull; | 
 | typedef struct Nfs3RNull Nfs3RNull; | 
 | typedef struct Nfs3TGetattr Nfs3TGetattr; | 
 | typedef struct Nfs3RGetattr Nfs3RGetattr; | 
 | typedef struct Nfs3TSetattr Nfs3TSetattr; | 
 | typedef struct Nfs3RSetattr Nfs3RSetattr; | 
 | typedef struct Nfs3TLookup Nfs3TLookup; | 
 | typedef struct Nfs3RLookup Nfs3RLookup; | 
 | typedef struct Nfs3TAccess Nfs3TAccess; | 
 | typedef struct Nfs3RAccess Nfs3RAccess; | 
 | typedef struct Nfs3TReadlink Nfs3TReadlink; | 
 | typedef struct Nfs3RReadlink Nfs3RReadlink; | 
 | typedef struct Nfs3TRead Nfs3TRead; | 
 | typedef struct Nfs3RRead Nfs3RRead; | 
 | typedef enum | 
 | { | 
 | 	Nfs3SyncNone = 0, | 
 | 	Nfs3SyncData = 1, | 
 | 	Nfs3SyncFile = 2 | 
 | } Nfs3Sync; | 
 |  | 
 | typedef struct Nfs3TWrite Nfs3TWrite; | 
 | typedef struct Nfs3RWrite Nfs3RWrite; | 
 | typedef enum | 
 | { | 
 | 	Nfs3CreateUnchecked = 0, | 
 | 	Nfs3CreateGuarded = 1, | 
 | 	Nfs3CreateExclusive = 2 | 
 | } Nfs3Create; | 
 |  | 
 | typedef struct Nfs3TCreate Nfs3TCreate; | 
 | typedef struct Nfs3RCreate Nfs3RCreate; | 
 | typedef struct Nfs3TMkdir Nfs3TMkdir; | 
 | typedef struct Nfs3RMkdir Nfs3RMkdir; | 
 | typedef struct Nfs3TSymlink Nfs3TSymlink; | 
 | typedef struct Nfs3RSymlink Nfs3RSymlink; | 
 | typedef struct Nfs3TMknod Nfs3TMknod; | 
 | typedef struct Nfs3RMknod Nfs3RMknod; | 
 | typedef struct Nfs3TRemove Nfs3TRemove; | 
 | typedef struct Nfs3RRemove Nfs3RRemove; | 
 | typedef struct Nfs3TRmdir Nfs3TRmdir; | 
 | typedef struct Nfs3RRmdir Nfs3RRmdir; | 
 | typedef struct Nfs3TRename Nfs3TRename; | 
 | typedef struct Nfs3RRename Nfs3RRename; | 
 | typedef struct Nfs3TLink Nfs3TLink; | 
 | typedef struct Nfs3RLink Nfs3RLink; | 
 | typedef struct Nfs3TReadDir Nfs3TReadDir; | 
 | typedef struct Nfs3Entry Nfs3Entry; | 
 | typedef struct Nfs3RReadDir Nfs3RReadDir; | 
 | typedef struct Nfs3TReadDirPlus Nfs3TReadDirPlus; | 
 | typedef struct Nfs3EntryPlus Nfs3EntryPlus; | 
 | typedef struct Nfs3RReadDirPlus Nfs3RReadDirPlus; | 
 | typedef struct Nfs3TFsStat Nfs3TFsStat; | 
 | typedef struct Nfs3RFsStat Nfs3RFsStat; | 
 | typedef struct Nfs3TFsInfo Nfs3TFsInfo; | 
 | typedef struct Nfs3RFsInfo Nfs3RFsInfo; | 
 | typedef struct Nfs3TPathconf Nfs3TPathconf; | 
 | typedef struct Nfs3RPathconf Nfs3RPathconf; | 
 | typedef struct Nfs3TCommit Nfs3TCommit; | 
 | typedef struct Nfs3RCommit Nfs3RCommit; | 
 |  | 
 | struct Nfs3Handle { | 
 | 	uchar h[Nfs3MaxHandleSize]; | 
 | 	u32int len; | 
 | }; | 
 |  | 
 | struct Nfs3Time { | 
 | 	u32int sec; | 
 | 	u32int nsec; | 
 | }; | 
 |  | 
 | struct Nfs3Attr { | 
 | 	Nfs3FileType type; | 
 | 	u32int mode; | 
 | 	u32int nlink; | 
 | 	u32int uid; | 
 | 	u32int gid; | 
 | 	u64int size; | 
 | 	u64int used; | 
 | 	u32int major; | 
 | 	u32int minor; | 
 | 	u64int fsid; | 
 | 	u64int fileid; | 
 | 	Nfs3Time atime; | 
 | 	Nfs3Time mtime; | 
 | 	Nfs3Time ctime; | 
 | }; | 
 |  | 
 | struct Nfs3WccAttr { | 
 | 	u64int size; | 
 | 	Nfs3Time mtime; | 
 | 	Nfs3Time ctime; | 
 | }; | 
 |  | 
 | struct Nfs3Wcc { | 
 | 	u1int haveWccAttr; | 
 | 	Nfs3WccAttr wccAttr; | 
 | 	u1int haveAttr; | 
 | 	Nfs3Attr attr; | 
 | }; | 
 |  | 
 | struct Nfs3SetAttr { | 
 | 	u1int setMode; | 
 | 	u32int mode; | 
 | 	u1int setUid; | 
 | 	u32int uid; | 
 | 	u1int setGid; | 
 | 	u32int gid; | 
 | 	u1int setSize; | 
 | 	u64int size; | 
 | 	Nfs3SetTime setAtime; | 
 | 	Nfs3Time atime; | 
 | 	Nfs3SetTime setMtime; | 
 | 	Nfs3Time mtime; | 
 | }; | 
 |  | 
 | struct Nfs3TNull { | 
 | 	SunCall call; | 
 | }; | 
 |  | 
 | struct Nfs3RNull { | 
 | 	SunCall call; | 
 | }; | 
 |  | 
 | struct Nfs3TGetattr { | 
 | 	SunCall call; | 
 | 	Nfs3Handle handle; | 
 | }; | 
 |  | 
 | struct Nfs3RGetattr { | 
 | 	SunCall call; | 
 | 	Nfs3Status status; | 
 | 	Nfs3Attr attr; | 
 | }; | 
 |  | 
 | struct Nfs3TSetattr { | 
 | 	SunCall call; | 
 | 	Nfs3Handle handle; | 
 | 	Nfs3SetAttr attr; | 
 | 	u1int checkCtime; | 
 | 	Nfs3Time ctime; | 
 | }; | 
 |  | 
 | struct Nfs3RSetattr { | 
 | 	SunCall call; | 
 | 	Nfs3Status status; | 
 | 	Nfs3Wcc wcc; | 
 | }; | 
 |  | 
 | struct Nfs3TLookup { | 
 | 	SunCall call; | 
 | 	Nfs3Handle handle; | 
 | 	char *name; | 
 | }; | 
 |  | 
 | struct Nfs3RLookup { | 
 | 	SunCall call; | 
 | 	Nfs3Status status; | 
 | 	Nfs3Handle handle; | 
 | 	u1int haveAttr; | 
 | 	Nfs3Attr attr; | 
 | 	u1int haveDirAttr; | 
 | 	Nfs3Attr dirAttr; | 
 | }; | 
 |  | 
 | struct Nfs3TAccess { | 
 | 	SunCall call; | 
 | 	Nfs3Handle handle; | 
 | 	u32int access; | 
 | }; | 
 |  | 
 | struct Nfs3RAccess { | 
 | 	SunCall call; | 
 | 	Nfs3Status status; | 
 | 	u1int haveAttr; | 
 | 	Nfs3Attr attr; | 
 | 	u32int access; | 
 | }; | 
 |  | 
 | struct Nfs3TReadlink { | 
 | 	SunCall call; | 
 | 	Nfs3Handle handle; | 
 | }; | 
 |  | 
 | struct Nfs3RReadlink { | 
 | 	SunCall call; | 
 | 	Nfs3Status status; | 
 | 	u1int haveAttr; | 
 | 	Nfs3Attr attr; | 
 | 	char *data; | 
 | }; | 
 |  | 
 | struct Nfs3TRead { | 
 | 	SunCall call; | 
 | 	Nfs3Handle handle; | 
 | 	u64int offset; | 
 | 	u32int count; | 
 | }; | 
 |  | 
 | struct Nfs3RRead { | 
 | 	SunCall call; | 
 | 	Nfs3Status status; | 
 | 	u1int haveAttr; | 
 | 	Nfs3Attr attr; | 
 | 	u32int count; | 
 | 	u1int eof; | 
 | 	uchar *data; | 
 | 	u32int ndata; | 
 | }; | 
 |  | 
 | struct Nfs3TWrite { | 
 | 	SunCall call; | 
 | 	Nfs3Handle handle; | 
 | 	u64int offset; | 
 | 	u32int count; | 
 | 	Nfs3Sync stable; | 
 | 	uchar *data; | 
 | 	u32int ndata; | 
 | }; | 
 |  | 
 | struct Nfs3RWrite { | 
 | 	SunCall call; | 
 | 	Nfs3Status status; | 
 | 	Nfs3Wcc wcc; | 
 | 	u32int count; | 
 | 	Nfs3Sync committed; | 
 | 	uchar verf[Nfs3WriteVerfSize]; | 
 | }; | 
 |  | 
 | struct Nfs3TCreate { | 
 | 	SunCall call; | 
 | 	Nfs3Handle handle; | 
 | 	char *name; | 
 | 	Nfs3Create mode; | 
 | 	Nfs3SetAttr attr; | 
 | 	uchar verf[Nfs3CreateVerfSize]; | 
 | }; | 
 |  | 
 | struct Nfs3RCreate { | 
 | 	SunCall call; | 
 | 	Nfs3Status status; | 
 | 	u1int haveHandle; | 
 | 	Nfs3Handle handle; | 
 | 	u1int haveAttr; | 
 | 	Nfs3Attr attr; | 
 | 	Nfs3Wcc dirWcc; | 
 | }; | 
 |  | 
 | struct Nfs3TMkdir { | 
 | 	SunCall call; | 
 | 	Nfs3Handle handle; | 
 | 	char *name; | 
 | 	Nfs3SetAttr attr; | 
 | }; | 
 |  | 
 | struct Nfs3RMkdir { | 
 | 	SunCall call; | 
 | 	Nfs3Status status; | 
 | 	u1int haveHandle; | 
 | 	Nfs3Handle handle; | 
 | 	u1int haveAttr; | 
 | 	Nfs3Attr attr; | 
 | 	Nfs3Wcc dirWcc; | 
 | }; | 
 |  | 
 | struct Nfs3TSymlink { | 
 | 	SunCall call; | 
 | 	Nfs3Handle handle; | 
 | 	char *name; | 
 | 	Nfs3SetAttr attr; | 
 | 	char *data; | 
 | }; | 
 |  | 
 | struct Nfs3RSymlink { | 
 | 	SunCall call; | 
 | 	Nfs3Status status; | 
 | 	u1int haveHandle; | 
 | 	Nfs3Handle handle; | 
 | 	u1int haveAttr; | 
 | 	Nfs3Attr attr; | 
 | 	Nfs3Wcc dirWcc; | 
 | }; | 
 |  | 
 | struct Nfs3TMknod { | 
 | 	SunCall call; | 
 | 	Nfs3Handle handle; | 
 | 	char *name; | 
 | 	Nfs3FileType type; | 
 | 	Nfs3SetAttr attr; | 
 | 	u32int major; | 
 | 	u32int minor; | 
 | }; | 
 |  | 
 | struct Nfs3RMknod { | 
 | 	SunCall call; | 
 | 	Nfs3Status status; | 
 | 	u1int haveHandle; | 
 | 	Nfs3Handle handle; | 
 | 	u1int haveAttr; | 
 | 	Nfs3Attr attr; | 
 | 	Nfs3Wcc dirWcc; | 
 | }; | 
 |  | 
 | struct Nfs3TRemove { | 
 | 	SunCall call; | 
 | 	Nfs3Handle handle; | 
 | 	char *name; | 
 | }; | 
 |  | 
 | struct Nfs3RRemove { | 
 | 	SunCall call; | 
 | 	Nfs3Status status; | 
 | 	Nfs3Wcc wcc; | 
 | }; | 
 |  | 
 | struct Nfs3TRmdir { | 
 | 	SunCall call; | 
 | 	Nfs3Handle handle; | 
 | 	char *name; | 
 | }; | 
 |  | 
 | struct Nfs3RRmdir { | 
 | 	SunCall call; | 
 | 	Nfs3Status status; | 
 | 	Nfs3Wcc wcc; | 
 | }; | 
 |  | 
 | struct Nfs3TRename { | 
 | 	SunCall call; | 
 | 	struct { | 
 | 		Nfs3Handle handle; | 
 | 		char *name; | 
 | 	} from; | 
 | 	struct { | 
 | 		Nfs3Handle handle; | 
 | 		char *name; | 
 | 	} to; | 
 | }; | 
 |  | 
 | struct Nfs3RRename { | 
 | 	SunCall call; | 
 | 	Nfs3Status status; | 
 | 	Nfs3Wcc fromWcc; | 
 | 	Nfs3Wcc toWcc; | 
 | }; | 
 |  | 
 | struct Nfs3TLink { | 
 | 	SunCall call; | 
 | 	Nfs3Handle handle; | 
 | 	struct { | 
 | 		Nfs3Handle handle; | 
 | 		char *name; | 
 | 	} link; | 
 | }; | 
 |  | 
 | struct Nfs3RLink { | 
 | 	SunCall call; | 
 | 	Nfs3Status status; | 
 | 	u1int haveAttr; | 
 | 	Nfs3Attr attr; | 
 | 	Nfs3Wcc dirWcc; | 
 | }; | 
 |  | 
 | struct Nfs3TReadDir { | 
 | 	SunCall call; | 
 | 	Nfs3Handle handle; | 
 | 	u64int cookie; | 
 | 	uchar verf[Nfs3CookieVerfSize]; | 
 | 	u32int count; | 
 | }; | 
 |  | 
 | struct Nfs3RReadDir { | 
 | 	SunCall call; | 
 | 	Nfs3Status status; | 
 | 	u1int haveAttr; | 
 | 	Nfs3Attr attr; | 
 | 	uchar verf[Nfs3CookieVerfSize]; | 
 | 	uchar *data; | 
 | 	u32int count; | 
 | 	u1int eof; | 
 | }; | 
 |  | 
 | struct Nfs3TReadDirPlus { | 
 | 	SunCall call; | 
 | 	Nfs3Handle handle; | 
 | 	u64int cookie; | 
 | 	uchar verf[Nfs3CookieVerfSize]; | 
 | 	u32int dirCount; | 
 | 	u32int maxCount; | 
 | }; | 
 |  | 
 | struct Nfs3Entry { | 
 | 	u64int fileid; | 
 | 	char *name; | 
 | 	uint namelen; | 
 | 	u64int cookie; | 
 | 	u1int haveAttr; | 
 | 	Nfs3Attr attr; | 
 | 	u1int haveHandle; | 
 | 	Nfs3Handle handle; | 
 | }; | 
 |  | 
 | struct Nfs3RReadDirPlus { | 
 | 	SunCall call; | 
 | 	Nfs3Status status; | 
 | 	u1int haveAttr; | 
 | 	Nfs3Attr attr; | 
 | 	uchar verf[Nfs3CookieVerfSize]; | 
 | 	uchar *data; | 
 | 	u32int count; | 
 | 	u1int eof; | 
 | }; | 
 |  | 
 | struct Nfs3TFsStat { | 
 | 	SunCall call; | 
 | 	Nfs3Handle handle; | 
 | }; | 
 |  | 
 | struct Nfs3RFsStat { | 
 | 	SunCall call; | 
 | 	Nfs3Status status; | 
 | 	u1int haveAttr; | 
 | 	Nfs3Attr attr; | 
 | 	u64int totalBytes; | 
 | 	u64int freeBytes; | 
 | 	u64int availBytes; | 
 | 	u64int totalFiles; | 
 | 	u64int freeFiles; | 
 | 	u64int availFiles; | 
 | 	u32int invarSec; | 
 | }; | 
 |  | 
 | struct Nfs3TFsInfo { | 
 | 	SunCall call; | 
 | 	Nfs3Handle handle; | 
 | }; | 
 |  | 
 | struct Nfs3RFsInfo { | 
 | 	SunCall call; | 
 | 	Nfs3Status status; | 
 | 	u1int haveAttr; | 
 | 	Nfs3Attr attr; | 
 | 	u32int readMax; | 
 | 	u32int readPref; | 
 | 	u32int readMult; | 
 | 	u32int writeMax; | 
 | 	u32int writePref; | 
 | 	u32int writeMult; | 
 | 	u32int readDirPref; | 
 | 	u64int maxFileSize; | 
 | 	Nfs3Time timePrec; | 
 | 	u32int flags; | 
 | }; | 
 |  | 
 | struct Nfs3TPathconf { | 
 | 	SunCall call; | 
 | 	Nfs3Handle handle; | 
 | }; | 
 |  | 
 | struct Nfs3RPathconf { | 
 | 	SunCall call; | 
 | 	Nfs3Status status; | 
 | 	u1int haveAttr; | 
 | 	Nfs3Attr attr; | 
 | 	u32int maxLink; | 
 | 	u32int maxName; | 
 | 	u1int noTrunc; | 
 | 	u1int chownRestricted; | 
 | 	u1int caseInsensitive; | 
 | 	u1int casePreserving; | 
 | }; | 
 |  | 
 | struct Nfs3TCommit { | 
 | 	SunCall call; | 
 | 	Nfs3Handle handle; | 
 | 	u64int offset; | 
 | 	u32int count; | 
 | }; | 
 |  | 
 | struct Nfs3RCommit { | 
 | 	SunCall call; | 
 | 	Nfs3Status status; | 
 | 	Nfs3Wcc wcc; | 
 | 	uchar verf[Nfs3WriteVerfSize]; | 
 | }; | 
 |  | 
 | char *nfs3statusstr(Nfs3Status); | 
 | char *nfs3typestr(SunCallType); | 
 | char *nfs3settimestr(Nfs3SetTime); | 
 | char *nfs3syncstr(Nfs3Sync); | 
 |  | 
 | void nfs3handleprint(Fmt*, Nfs3Handle*); | 
 | u32int nfs3handlesize(Nfs3Handle*); | 
 | int nfs3handlepack(uchar*, uchar*, uchar**, Nfs3Handle*); | 
 | int nfs3handleunpack(uchar*, uchar*, uchar**, Nfs3Handle*); | 
 |  | 
 | void nfs3timeprint(Fmt*, Nfs3Time*); | 
 | u32int nfs3timesize(Nfs3Time*); | 
 | int nfs3timepack(uchar*, uchar*, uchar**, Nfs3Time*); | 
 | int nfs3timeunpack(uchar*, uchar*, uchar**, Nfs3Time*); | 
 |  | 
 | void nfs3attrprint(Fmt*, Nfs3Attr*); | 
 | u32int nfs3attrsize(Nfs3Attr*); | 
 | int nfs3attrpack(uchar*, uchar*, uchar**, Nfs3Attr*); | 
 | int nfs3attrunpack(uchar*, uchar*, uchar**, Nfs3Attr*); | 
 |  | 
 | void nfs3wccattrprint(Fmt*, Nfs3WccAttr*); | 
 | u32int nfs3wccattrsize(Nfs3WccAttr*); | 
 | int nfs3wccattrpack(uchar*, uchar*, uchar**, Nfs3WccAttr*); | 
 | int nfs3wccattrunpack(uchar*, uchar*, uchar**, Nfs3WccAttr*); | 
 |  | 
 | void nfs3wccprint(Fmt*, Nfs3Wcc*); | 
 | u32int nfs3wccsize(Nfs3Wcc*); | 
 | int nfs3wccpack(uchar*, uchar*, uchar**, Nfs3Wcc*); | 
 | int nfs3wccunpack(uchar*, uchar*, uchar**, Nfs3Wcc*); | 
 |  | 
 | void nfs3setattrprint(Fmt*, Nfs3SetAttr*); | 
 | u32int nfs3setattrsize(Nfs3SetAttr*); | 
 | int nfs3setattrpack(uchar*, uchar*, uchar**, Nfs3SetAttr*); | 
 | int nfs3setattrunpack(uchar*, uchar*, uchar**, Nfs3SetAttr*); | 
 |  | 
 | extern SunProg nfs3prog; | 
 |  | 
 | void nfs3entryprint(Fmt*, Nfs3Entry*); | 
 | u32int nfs3entrysize(Nfs3Entry*); | 
 | int nfs3entrypack(uchar*, uchar*, uchar**, Nfs3Entry*); | 
 | int nfs3entryunpack(uchar*, uchar*, uchar**, Nfs3Entry*); | 
 |  | 
 | void nfs3entryplusprint(Fmt*, Nfs3Entry*); | 
 | u32int nfs3entryplussize(Nfs3Entry*); | 
 | int nfs3entrypluspack(uchar*, uchar*, uchar**, Nfs3Entry*); | 
 | int nfs3entryplusunpack(uchar*, uchar*, uchar**, Nfs3Entry*); | 
 |  |