/* * 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*);