1*34e04225SDavid du Colombier /* 2*34e04225SDavid du Colombier * NFS mounter V3; see RFC 1813 3*34e04225SDavid du Colombier */ 4*34e04225SDavid du Colombier 5*34e04225SDavid du Colombier #pragma lib "libsunrpc.a" 6*34e04225SDavid du Colombier #pragma src "/sys/src/libsunrpc" 7*34e04225SDavid du Colombier 8*34e04225SDavid du Colombier enum { 9*34e04225SDavid du Colombier NfsMount1HandleSize = 32, 10*34e04225SDavid du Colombier NfsMount3MaxPathSize = 1024, 11*34e04225SDavid du Colombier NfsMount3MaxNameSize = 255, 12*34e04225SDavid du Colombier NfsMount3MaxHandleSize = 64, 13*34e04225SDavid du Colombier NfsMount3Program = 100005, 14*34e04225SDavid du Colombier NfsMount3Version = 3, 15*34e04225SDavid du Colombier NfsMount1Program = 100005, 16*34e04225SDavid du Colombier NfsMount1Version = 1 17*34e04225SDavid du Colombier }; 18*34e04225SDavid du Colombier typedef struct NfsMount3TNull NfsMount3TNull; 19*34e04225SDavid du Colombier typedef struct NfsMount3RNull NfsMount3RNull; 20*34e04225SDavid du Colombier typedef struct NfsMount3TMnt NfsMount3TMnt; 21*34e04225SDavid du Colombier typedef struct NfsMount3RMnt NfsMount3RMnt; 22*34e04225SDavid du Colombier typedef struct NfsMount3TDump NfsMount3TDump; 23*34e04225SDavid du Colombier typedef struct NfsMount3Entry NfsMount3Entry; 24*34e04225SDavid du Colombier typedef struct NfsMount3RDump NfsMount3RDump; 25*34e04225SDavid du Colombier typedef struct NfsMount3TUmnt NfsMount3TUmnt; 26*34e04225SDavid du Colombier typedef struct NfsMount3RUmnt NfsMount3RUmnt; 27*34e04225SDavid du Colombier typedef struct NfsMount3Export NfsMount3Export; 28*34e04225SDavid du Colombier typedef struct NfsMount3TUmntall NfsMount3TUmntall; 29*34e04225SDavid du Colombier typedef struct NfsMount3RUmntall NfsMount3RUmntall; 30*34e04225SDavid du Colombier typedef struct NfsMount3TExport NfsMount3TExport; 31*34e04225SDavid du Colombier typedef struct NfsMount3RExport NfsMount3RExport; 32*34e04225SDavid du Colombier 33*34e04225SDavid du Colombier typedef enum 34*34e04225SDavid du Colombier { 35*34e04225SDavid du Colombier NfsMount3CallTNull, 36*34e04225SDavid du Colombier NfsMount3CallRNull, 37*34e04225SDavid du Colombier NfsMount3CallTMnt, 38*34e04225SDavid du Colombier NfsMount3CallRMnt, 39*34e04225SDavid du Colombier NfsMount3CallTDump, 40*34e04225SDavid du Colombier NfsMount3CallRDump, 41*34e04225SDavid du Colombier NfsMount3CallTUmnt, 42*34e04225SDavid du Colombier NfsMount3CallRUmnt, 43*34e04225SDavid du Colombier NfsMount3CallTUmntall, 44*34e04225SDavid du Colombier NfsMount3CallRUmntall, 45*34e04225SDavid du Colombier NfsMount3CallTExport, 46*34e04225SDavid du Colombier NfsMount3CallRExport 47*34e04225SDavid du Colombier } NfsMount3CallType; 48*34e04225SDavid du Colombier 49*34e04225SDavid du Colombier typedef struct NfsMount3Call NfsMount3Call; 50*34e04225SDavid du Colombier struct NfsMount3Call { 51*34e04225SDavid du Colombier SunRpc rpc; 52*34e04225SDavid du Colombier NfsMount3CallType type; 53*34e04225SDavid du Colombier }; 54*34e04225SDavid du Colombier 55*34e04225SDavid du Colombier struct NfsMount3TNull { 56*34e04225SDavid du Colombier NfsMount3Call call; 57*34e04225SDavid du Colombier }; 58*34e04225SDavid du Colombier 59*34e04225SDavid du Colombier struct NfsMount3RNull { 60*34e04225SDavid du Colombier NfsMount3Call call; 61*34e04225SDavid du Colombier }; 62*34e04225SDavid du Colombier 63*34e04225SDavid du Colombier struct NfsMount3TMnt { 64*34e04225SDavid du Colombier NfsMount3Call call; 65*34e04225SDavid du Colombier char *path; 66*34e04225SDavid du Colombier }; 67*34e04225SDavid du Colombier 68*34e04225SDavid du Colombier struct NfsMount3RMnt { 69*34e04225SDavid du Colombier NfsMount3Call call; 70*34e04225SDavid du Colombier uint status; 71*34e04225SDavid du Colombier uchar *handle; 72*34e04225SDavid du Colombier uint len; 73*34e04225SDavid du Colombier u32int *auth; 74*34e04225SDavid du Colombier u32int nauth; 75*34e04225SDavid du Colombier }; 76*34e04225SDavid du Colombier 77*34e04225SDavid du Colombier struct NfsMount3TDump { 78*34e04225SDavid du Colombier NfsMount3Call call; 79*34e04225SDavid du Colombier }; 80*34e04225SDavid du Colombier 81*34e04225SDavid du Colombier struct NfsMount3Entry { 82*34e04225SDavid du Colombier char *host; 83*34e04225SDavid du Colombier char *path; 84*34e04225SDavid du Colombier }; 85*34e04225SDavid du Colombier 86*34e04225SDavid du Colombier struct NfsMount3RDump { 87*34e04225SDavid du Colombier NfsMount3Call call; 88*34e04225SDavid du Colombier uchar *data; 89*34e04225SDavid du Colombier u32int count; 90*34e04225SDavid du Colombier }; 91*34e04225SDavid du Colombier 92*34e04225SDavid du Colombier struct NfsMount3TUmnt { 93*34e04225SDavid du Colombier NfsMount3Call call; 94*34e04225SDavid du Colombier char *path; 95*34e04225SDavid du Colombier }; 96*34e04225SDavid du Colombier 97*34e04225SDavid du Colombier struct NfsMount3RUmnt { 98*34e04225SDavid du Colombier NfsMount3Call call; 99*34e04225SDavid du Colombier }; 100*34e04225SDavid du Colombier 101*34e04225SDavid du Colombier struct NfsMount3Export { 102*34e04225SDavid du Colombier char *path; 103*34e04225SDavid du Colombier char **g; 104*34e04225SDavid du Colombier u32int ng; 105*34e04225SDavid du Colombier }; 106*34e04225SDavid du Colombier 107*34e04225SDavid du Colombier struct NfsMount3TUmntall { 108*34e04225SDavid du Colombier NfsMount3Call call; 109*34e04225SDavid du Colombier }; 110*34e04225SDavid du Colombier 111*34e04225SDavid du Colombier struct NfsMount3RUmntall { 112*34e04225SDavid du Colombier NfsMount3Call call; 113*34e04225SDavid du Colombier }; 114*34e04225SDavid du Colombier 115*34e04225SDavid du Colombier struct NfsMount3TExport { 116*34e04225SDavid du Colombier NfsMount3Call call; 117*34e04225SDavid du Colombier }; 118*34e04225SDavid du Colombier 119*34e04225SDavid du Colombier struct NfsMount3RExport { 120*34e04225SDavid du Colombier NfsMount3Call call; 121*34e04225SDavid du Colombier uchar *data; 122*34e04225SDavid du Colombier u32int count; 123*34e04225SDavid du Colombier }; 124*34e04225SDavid du Colombier 125*34e04225SDavid du Colombier uint nfsMount3ExportGroupSize(uchar*); 126*34e04225SDavid du Colombier uint nfsMount3ExportSize(NfsMount3Export*); 127*34e04225SDavid du Colombier int nfsMount3ExportPack(uchar*, uchar*, uchar**, NfsMount3Export*); 128*34e04225SDavid du Colombier int nfsMount3ExportUnpack(uchar*, uchar*, uchar**, char**, char***, NfsMount3Export*); 129*34e04225SDavid du Colombier int nfsMount3EntryPack(uchar*, uchar*, uchar**, NfsMount3Entry*); 130*34e04225SDavid du Colombier int nfsMount3EntryUnpack(uchar*, uchar*, uchar**, NfsMount3Entry*); 131*34e04225SDavid du Colombier uint nfsMount3EntrySize(NfsMount3Entry*); 132*34e04225SDavid du Colombier 133*34e04225SDavid du Colombier extern SunProg nfsMount3Prog; 134*34e04225SDavid du Colombier 135*34e04225SDavid du Colombier /* 136*34e04225SDavid du Colombier * NFS V3; see RFC 1813 137*34e04225SDavid du Colombier */ 138*34e04225SDavid du Colombier enum { 139*34e04225SDavid du Colombier Nfs3MaxHandleSize = 64, 140*34e04225SDavid du Colombier Nfs3CookieVerfSize = 8, 141*34e04225SDavid du Colombier Nfs3CreateVerfSize = 8, 142*34e04225SDavid du Colombier Nfs3WriteVerfSize = 8, 143*34e04225SDavid du Colombier Nfs3AccessRead = 1, 144*34e04225SDavid du Colombier Nfs3AccessLookup = 2, 145*34e04225SDavid du Colombier Nfs3AccessModify = 4, 146*34e04225SDavid du Colombier Nfs3AccessExtend = 8, 147*34e04225SDavid du Colombier Nfs3AccessDelete = 16, 148*34e04225SDavid du Colombier Nfs3AccessExecute = 32, 149*34e04225SDavid du Colombier Nfs3FsHasLinks = 1, 150*34e04225SDavid du Colombier Nfs3FsHasSymlinks = 2, 151*34e04225SDavid du Colombier Nfs3FsHomogeneous = 8, 152*34e04225SDavid du Colombier Nfs3FsCanSetTime = 16, 153*34e04225SDavid du Colombier 154*34e04225SDavid du Colombier Nfs3Version = 3, 155*34e04225SDavid du Colombier Nfs3Program = 100003, 156*34e04225SDavid du Colombier }; 157*34e04225SDavid du Colombier typedef enum 158*34e04225SDavid du Colombier { 159*34e04225SDavid du Colombier Nfs3Ok = 0, 160*34e04225SDavid du Colombier Nfs3ErrNotOwner = 1, 161*34e04225SDavid du Colombier Nfs3ErrNoEnt = 2, 162*34e04225SDavid du Colombier Nfs3ErrIo = 5, 163*34e04225SDavid du Colombier Nfs3ErrNxio = 6, 164*34e04225SDavid du Colombier Nfs3ErrNoMem = 12, 165*34e04225SDavid du Colombier Nfs3ErrAcces = 13, 166*34e04225SDavid du Colombier Nfs3ErrExist = 17, 167*34e04225SDavid du Colombier Nfs3ErrXDev = 18, 168*34e04225SDavid du Colombier Nfs3ErrNoDev = 19, 169*34e04225SDavid du Colombier Nfs3ErrNotDir = 20, 170*34e04225SDavid du Colombier Nfs3ErrIsDir = 21, 171*34e04225SDavid du Colombier Nfs3ErrInval = 22, 172*34e04225SDavid du Colombier Nfs3ErrFbig = 27, 173*34e04225SDavid du Colombier Nfs3ErrNoSpc = 28, 174*34e04225SDavid du Colombier Nfs3ErrRoFs = 30, 175*34e04225SDavid du Colombier Nfs3ErrMLink = 31, 176*34e04225SDavid du Colombier Nfs3ErrNameTooLong = 63, 177*34e04225SDavid du Colombier Nfs3ErrNotEmpty = 66, 178*34e04225SDavid du Colombier Nfs3ErrDQuot = 69, 179*34e04225SDavid du Colombier Nfs3ErrStale = 70, 180*34e04225SDavid du Colombier Nfs3ErrRemote = 71, 181*34e04225SDavid du Colombier Nfs3ErrBadHandle = 10001, 182*34e04225SDavid du Colombier Nfs3ErrNotSync = 10002, 183*34e04225SDavid du Colombier Nfs3ErrBadCookie = 10003, 184*34e04225SDavid du Colombier Nfs3ErrNotSupp = 10004, 185*34e04225SDavid du Colombier Nfs3ErrTooSmall = 10005, 186*34e04225SDavid du Colombier Nfs3ErrServerFault = 10006, 187*34e04225SDavid du Colombier Nfs3ErrBadType = 10007, 188*34e04225SDavid du Colombier Nfs3ErrJukebox = 10008, 189*34e04225SDavid du Colombier Nfs3ErrFprintNotFound = 10009, 190*34e04225SDavid du Colombier Nfs3ErrAborted = 10010, 191*34e04225SDavid du Colombier } Nfs3Status; 192*34e04225SDavid du Colombier 193*34e04225SDavid du Colombier void nfs3Errstr(Nfs3Status); 194*34e04225SDavid du Colombier 195*34e04225SDavid du Colombier typedef enum 196*34e04225SDavid du Colombier { 197*34e04225SDavid du Colombier Nfs3FileReg = 1, 198*34e04225SDavid du Colombier Nfs3FileDir = 2, 199*34e04225SDavid du Colombier Nfs3FileBlock = 3, 200*34e04225SDavid du Colombier Nfs3FileChar = 4, 201*34e04225SDavid du Colombier Nfs3FileSymlink = 5, 202*34e04225SDavid du Colombier Nfs3FileSocket = 6, 203*34e04225SDavid du Colombier Nfs3FileFifo = 7, 204*34e04225SDavid du Colombier } Nfs3FileType; 205*34e04225SDavid du Colombier 206*34e04225SDavid du Colombier enum 207*34e04225SDavid du Colombier { 208*34e04225SDavid du Colombier Nfs3ModeSetUid = 0x800, 209*34e04225SDavid du Colombier Nfs3ModeSetGid = 0x400, 210*34e04225SDavid du Colombier Nfs3ModeSticky = 0x200, 211*34e04225SDavid du Colombier }; 212*34e04225SDavid du Colombier 213*34e04225SDavid du Colombier typedef enum 214*34e04225SDavid du Colombier { 215*34e04225SDavid du Colombier Nfs3CallTNull, 216*34e04225SDavid du Colombier Nfs3CallRNull, 217*34e04225SDavid du Colombier Nfs3CallTGetattr, 218*34e04225SDavid du Colombier Nfs3CallRGetattr, 219*34e04225SDavid du Colombier Nfs3CallTSetattr, 220*34e04225SDavid du Colombier Nfs3CallRSetattr, 221*34e04225SDavid du Colombier Nfs3CallTLookup, 222*34e04225SDavid du Colombier Nfs3CallRLookup, 223*34e04225SDavid du Colombier Nfs3CallTAccess, 224*34e04225SDavid du Colombier Nfs3CallRAccess, 225*34e04225SDavid du Colombier Nfs3CallTReadlink, 226*34e04225SDavid du Colombier Nfs3CallRReadlink, 227*34e04225SDavid du Colombier Nfs3CallTRead, 228*34e04225SDavid du Colombier Nfs3CallRRead, 229*34e04225SDavid du Colombier Nfs3CallTWrite, 230*34e04225SDavid du Colombier Nfs3CallRWrite, 231*34e04225SDavid du Colombier Nfs3CallTCreate, 232*34e04225SDavid du Colombier Nfs3CallRCreate, 233*34e04225SDavid du Colombier Nfs3CallTMkdir, 234*34e04225SDavid du Colombier Nfs3CallRMkdir, 235*34e04225SDavid du Colombier Nfs3CallTSymlink, 236*34e04225SDavid du Colombier Nfs3CallRSymlink, 237*34e04225SDavid du Colombier Nfs3CallTMknod, 238*34e04225SDavid du Colombier Nfs3CallRMknod, 239*34e04225SDavid du Colombier Nfs3CallTRemove, 240*34e04225SDavid du Colombier Nfs3CallRRemove, 241*34e04225SDavid du Colombier Nfs3CallTRmdir, 242*34e04225SDavid du Colombier Nfs3CallRRmdir, 243*34e04225SDavid du Colombier Nfs3CallTRename, 244*34e04225SDavid du Colombier Nfs3CallRRename, 245*34e04225SDavid du Colombier Nfs3CallTLink, 246*34e04225SDavid du Colombier Nfs3CallRLink, 247*34e04225SDavid du Colombier Nfs3CallTReadDir, 248*34e04225SDavid du Colombier Nfs3CallRReadDir, 249*34e04225SDavid du Colombier Nfs3CallTReadDirPlus, 250*34e04225SDavid du Colombier Nfs3CallRReadDirPlus, 251*34e04225SDavid du Colombier Nfs3CallTFsStat, 252*34e04225SDavid du Colombier Nfs3CallRFsStat, 253*34e04225SDavid du Colombier Nfs3CallTFsInfo, 254*34e04225SDavid du Colombier Nfs3CallRFsInfo, 255*34e04225SDavid du Colombier Nfs3CallTPathconf, 256*34e04225SDavid du Colombier Nfs3CallRPathconf, 257*34e04225SDavid du Colombier Nfs3CallTCommit, 258*34e04225SDavid du Colombier Nfs3CallRCommit, 259*34e04225SDavid du Colombier } Nfs3CallType; 260*34e04225SDavid du Colombier 261*34e04225SDavid du Colombier typedef struct Nfs3Call Nfs3Call; 262*34e04225SDavid du Colombier typedef struct Nfs3Handle Nfs3Handle; 263*34e04225SDavid du Colombier typedef struct Nfs3Time Nfs3Time; 264*34e04225SDavid du Colombier typedef struct Nfs3Attr Nfs3Attr; 265*34e04225SDavid du Colombier typedef struct Nfs3WccAttr Nfs3WccAttr; 266*34e04225SDavid du Colombier typedef struct Nfs3Wcc Nfs3Wcc; 267*34e04225SDavid du Colombier typedef enum 268*34e04225SDavid du Colombier { 269*34e04225SDavid du Colombier Nfs3SetTimeDont = 0, 270*34e04225SDavid du Colombier Nfs3SetTimeServer = 1, 271*34e04225SDavid du Colombier Nfs3SetTimeClient = 2, 272*34e04225SDavid du Colombier } Nfs3SetTime; 273*34e04225SDavid du Colombier 274*34e04225SDavid du Colombier typedef struct Nfs3SetAttr Nfs3SetAttr; 275*34e04225SDavid du Colombier typedef struct Nfs3TNull Nfs3TNull; 276*34e04225SDavid du Colombier typedef struct Nfs3RNull Nfs3RNull; 277*34e04225SDavid du Colombier typedef struct Nfs3TGetattr Nfs3TGetattr; 278*34e04225SDavid du Colombier typedef struct Nfs3RGetattr Nfs3RGetattr; 279*34e04225SDavid du Colombier typedef struct Nfs3TSetattr Nfs3TSetattr; 280*34e04225SDavid du Colombier typedef struct Nfs3RSetattr Nfs3RSetattr; 281*34e04225SDavid du Colombier typedef struct Nfs3TLookup Nfs3TLookup; 282*34e04225SDavid du Colombier typedef struct Nfs3RLookup Nfs3RLookup; 283*34e04225SDavid du Colombier typedef struct Nfs3TAccess Nfs3TAccess; 284*34e04225SDavid du Colombier typedef struct Nfs3RAccess Nfs3RAccess; 285*34e04225SDavid du Colombier typedef struct Nfs3TReadlink Nfs3TReadlink; 286*34e04225SDavid du Colombier typedef struct Nfs3RReadlink Nfs3RReadlink; 287*34e04225SDavid du Colombier typedef struct Nfs3TRead Nfs3TRead; 288*34e04225SDavid du Colombier typedef struct Nfs3RRead Nfs3RRead; 289*34e04225SDavid du Colombier typedef enum 290*34e04225SDavid du Colombier { 291*34e04225SDavid du Colombier Nfs3SyncNone = 0, 292*34e04225SDavid du Colombier Nfs3SyncData = 1, 293*34e04225SDavid du Colombier Nfs3SyncFile = 2, 294*34e04225SDavid du Colombier } Nfs3Sync; 295*34e04225SDavid du Colombier 296*34e04225SDavid du Colombier typedef struct Nfs3TWrite Nfs3TWrite; 297*34e04225SDavid du Colombier typedef struct Nfs3RWrite Nfs3RWrite; 298*34e04225SDavid du Colombier typedef enum 299*34e04225SDavid du Colombier { 300*34e04225SDavid du Colombier Nfs3CreateUnchecked = 0, 301*34e04225SDavid du Colombier Nfs3CreateGuarded = 1, 302*34e04225SDavid du Colombier Nfs3CreateExclusive = 2, 303*34e04225SDavid du Colombier } Nfs3Create; 304*34e04225SDavid du Colombier 305*34e04225SDavid du Colombier typedef struct Nfs3TCreate Nfs3TCreate; 306*34e04225SDavid du Colombier typedef struct Nfs3RCreate Nfs3RCreate; 307*34e04225SDavid du Colombier typedef struct Nfs3TMkdir Nfs3TMkdir; 308*34e04225SDavid du Colombier typedef struct Nfs3RMkdir Nfs3RMkdir; 309*34e04225SDavid du Colombier typedef struct Nfs3TSymlink Nfs3TSymlink; 310*34e04225SDavid du Colombier typedef struct Nfs3RSymlink Nfs3RSymlink; 311*34e04225SDavid du Colombier typedef struct Nfs3TMknod Nfs3TMknod; 312*34e04225SDavid du Colombier typedef struct Nfs3RMknod Nfs3RMknod; 313*34e04225SDavid du Colombier typedef struct Nfs3TRemove Nfs3TRemove; 314*34e04225SDavid du Colombier typedef struct Nfs3RRemove Nfs3RRemove; 315*34e04225SDavid du Colombier typedef struct Nfs3TRmdir Nfs3TRmdir; 316*34e04225SDavid du Colombier typedef struct Nfs3RRmdir Nfs3RRmdir; 317*34e04225SDavid du Colombier typedef struct Nfs3TRename Nfs3TRename; 318*34e04225SDavid du Colombier typedef struct Nfs3RRename Nfs3RRename; 319*34e04225SDavid du Colombier typedef struct Nfs3TLink Nfs3TLink; 320*34e04225SDavid du Colombier typedef struct Nfs3RLink Nfs3RLink; 321*34e04225SDavid du Colombier typedef struct Nfs3TReadDir Nfs3TReadDir; 322*34e04225SDavid du Colombier typedef struct Nfs3Entry Nfs3Entry; 323*34e04225SDavid du Colombier typedef struct Nfs3RReadDir Nfs3RReadDir; 324*34e04225SDavid du Colombier typedef struct Nfs3TReadDirPlus Nfs3TReadDirPlus; 325*34e04225SDavid du Colombier typedef struct Nfs3EntryPlus Nfs3EntryPlus; 326*34e04225SDavid du Colombier typedef struct Nfs3RReadDirPlus Nfs3RReadDirPlus; 327*34e04225SDavid du Colombier typedef struct Nfs3TFsStat Nfs3TFsStat; 328*34e04225SDavid du Colombier typedef struct Nfs3RFsStat Nfs3RFsStat; 329*34e04225SDavid du Colombier typedef struct Nfs3TFsInfo Nfs3TFsInfo; 330*34e04225SDavid du Colombier typedef struct Nfs3RFsInfo Nfs3RFsInfo; 331*34e04225SDavid du Colombier typedef struct Nfs3TPathconf Nfs3TPathconf; 332*34e04225SDavid du Colombier typedef struct Nfs3RPathconf Nfs3RPathconf; 333*34e04225SDavid du Colombier typedef struct Nfs3TCommit Nfs3TCommit; 334*34e04225SDavid du Colombier typedef struct Nfs3RCommit Nfs3RCommit; 335*34e04225SDavid du Colombier 336*34e04225SDavid du Colombier struct Nfs3Call { 337*34e04225SDavid du Colombier SunRpc rpc; 338*34e04225SDavid du Colombier Nfs3CallType type; 339*34e04225SDavid du Colombier }; 340*34e04225SDavid du Colombier 341*34e04225SDavid du Colombier struct Nfs3Handle { 342*34e04225SDavid du Colombier uchar h[Nfs3MaxHandleSize]; 343*34e04225SDavid du Colombier u32int len; 344*34e04225SDavid du Colombier }; 345*34e04225SDavid du Colombier 346*34e04225SDavid du Colombier struct Nfs3Time { 347*34e04225SDavid du Colombier u32int sec; 348*34e04225SDavid du Colombier u32int nsec; 349*34e04225SDavid du Colombier }; 350*34e04225SDavid du Colombier 351*34e04225SDavid du Colombier struct Nfs3Attr { 352*34e04225SDavid du Colombier Nfs3FileType type; 353*34e04225SDavid du Colombier u32int mode; 354*34e04225SDavid du Colombier u32int nlink; 355*34e04225SDavid du Colombier u32int uid; 356*34e04225SDavid du Colombier u32int gid; 357*34e04225SDavid du Colombier u64int size; 358*34e04225SDavid du Colombier u64int used; 359*34e04225SDavid du Colombier u32int major; 360*34e04225SDavid du Colombier u32int minor; 361*34e04225SDavid du Colombier u64int fsid; 362*34e04225SDavid du Colombier u64int fileid; 363*34e04225SDavid du Colombier Nfs3Time atime; 364*34e04225SDavid du Colombier Nfs3Time mtime; 365*34e04225SDavid du Colombier Nfs3Time ctime; 366*34e04225SDavid du Colombier }; 367*34e04225SDavid du Colombier 368*34e04225SDavid du Colombier struct Nfs3WccAttr { 369*34e04225SDavid du Colombier u64int size; 370*34e04225SDavid du Colombier Nfs3Time mtime; 371*34e04225SDavid du Colombier Nfs3Time ctime; 372*34e04225SDavid du Colombier }; 373*34e04225SDavid du Colombier 374*34e04225SDavid du Colombier struct Nfs3Wcc { 375*34e04225SDavid du Colombier u1int haveWccAttr; 376*34e04225SDavid du Colombier Nfs3WccAttr wccAttr; 377*34e04225SDavid du Colombier u1int haveAttr; 378*34e04225SDavid du Colombier Nfs3Attr attr; 379*34e04225SDavid du Colombier }; 380*34e04225SDavid du Colombier 381*34e04225SDavid du Colombier struct Nfs3SetAttr { 382*34e04225SDavid du Colombier u1int setMode; 383*34e04225SDavid du Colombier u32int mode; 384*34e04225SDavid du Colombier u1int setUid; 385*34e04225SDavid du Colombier u32int uid; 386*34e04225SDavid du Colombier u1int setGid; 387*34e04225SDavid du Colombier u32int gid; 388*34e04225SDavid du Colombier u1int setSize; 389*34e04225SDavid du Colombier u64int size; 390*34e04225SDavid du Colombier Nfs3SetTime setAtime; 391*34e04225SDavid du Colombier Nfs3Time atime; 392*34e04225SDavid du Colombier Nfs3SetTime setMtime; 393*34e04225SDavid du Colombier Nfs3Time mtime; 394*34e04225SDavid du Colombier }; 395*34e04225SDavid du Colombier 396*34e04225SDavid du Colombier struct Nfs3TNull { 397*34e04225SDavid du Colombier Nfs3Call call; 398*34e04225SDavid du Colombier }; 399*34e04225SDavid du Colombier 400*34e04225SDavid du Colombier struct Nfs3RNull { 401*34e04225SDavid du Colombier Nfs3Call call; 402*34e04225SDavid du Colombier }; 403*34e04225SDavid du Colombier 404*34e04225SDavid du Colombier struct Nfs3TGetattr { 405*34e04225SDavid du Colombier Nfs3Call call; 406*34e04225SDavid du Colombier Nfs3Handle handle; 407*34e04225SDavid du Colombier }; 408*34e04225SDavid du Colombier 409*34e04225SDavid du Colombier struct Nfs3RGetattr { 410*34e04225SDavid du Colombier Nfs3Call call; 411*34e04225SDavid du Colombier Nfs3Status status; 412*34e04225SDavid du Colombier Nfs3Attr attr; 413*34e04225SDavid du Colombier }; 414*34e04225SDavid du Colombier 415*34e04225SDavid du Colombier struct Nfs3TSetattr { 416*34e04225SDavid du Colombier Nfs3Call call; 417*34e04225SDavid du Colombier Nfs3Handle handle; 418*34e04225SDavid du Colombier Nfs3SetAttr attr; 419*34e04225SDavid du Colombier u1int checkCtime; 420*34e04225SDavid du Colombier Nfs3Time ctime; 421*34e04225SDavid du Colombier }; 422*34e04225SDavid du Colombier 423*34e04225SDavid du Colombier struct Nfs3RSetattr { 424*34e04225SDavid du Colombier Nfs3Call call; 425*34e04225SDavid du Colombier Nfs3Status status; 426*34e04225SDavid du Colombier Nfs3Wcc wcc; 427*34e04225SDavid du Colombier }; 428*34e04225SDavid du Colombier 429*34e04225SDavid du Colombier struct Nfs3TLookup { 430*34e04225SDavid du Colombier Nfs3Call call; 431*34e04225SDavid du Colombier Nfs3Handle handle; 432*34e04225SDavid du Colombier char *name; 433*34e04225SDavid du Colombier }; 434*34e04225SDavid du Colombier 435*34e04225SDavid du Colombier struct Nfs3RLookup { 436*34e04225SDavid du Colombier Nfs3Call call; 437*34e04225SDavid du Colombier Nfs3Status status; 438*34e04225SDavid du Colombier Nfs3Handle handle; 439*34e04225SDavid du Colombier u1int haveAttr; 440*34e04225SDavid du Colombier Nfs3Attr attr; 441*34e04225SDavid du Colombier u1int haveDirAttr; 442*34e04225SDavid du Colombier Nfs3Attr dirAttr; 443*34e04225SDavid du Colombier }; 444*34e04225SDavid du Colombier 445*34e04225SDavid du Colombier struct Nfs3TAccess { 446*34e04225SDavid du Colombier Nfs3Call call; 447*34e04225SDavid du Colombier Nfs3Handle handle; 448*34e04225SDavid du Colombier u32int access; 449*34e04225SDavid du Colombier }; 450*34e04225SDavid du Colombier 451*34e04225SDavid du Colombier struct Nfs3RAccess { 452*34e04225SDavid du Colombier Nfs3Call call; 453*34e04225SDavid du Colombier Nfs3Status status; 454*34e04225SDavid du Colombier u1int haveAttr; 455*34e04225SDavid du Colombier Nfs3Attr attr; 456*34e04225SDavid du Colombier u32int access; 457*34e04225SDavid du Colombier }; 458*34e04225SDavid du Colombier 459*34e04225SDavid du Colombier struct Nfs3TReadlink { 460*34e04225SDavid du Colombier Nfs3Call call; 461*34e04225SDavid du Colombier Nfs3Handle handle; 462*34e04225SDavid du Colombier }; 463*34e04225SDavid du Colombier 464*34e04225SDavid du Colombier struct Nfs3RReadlink { 465*34e04225SDavid du Colombier Nfs3Call call; 466*34e04225SDavid du Colombier Nfs3Status status; 467*34e04225SDavid du Colombier u1int haveAttr; 468*34e04225SDavid du Colombier Nfs3Attr attr; 469*34e04225SDavid du Colombier char *data; 470*34e04225SDavid du Colombier }; 471*34e04225SDavid du Colombier 472*34e04225SDavid du Colombier struct Nfs3TRead { 473*34e04225SDavid du Colombier Nfs3Call call; 474*34e04225SDavid du Colombier Nfs3Handle handle; 475*34e04225SDavid du Colombier u64int offset; 476*34e04225SDavid du Colombier u32int count; 477*34e04225SDavid du Colombier }; 478*34e04225SDavid du Colombier 479*34e04225SDavid du Colombier struct Nfs3RRead { 480*34e04225SDavid du Colombier Nfs3Call call; 481*34e04225SDavid du Colombier Nfs3Status status; 482*34e04225SDavid du Colombier u1int haveAttr; 483*34e04225SDavid du Colombier Nfs3Attr attr; 484*34e04225SDavid du Colombier u32int count; 485*34e04225SDavid du Colombier u1int eof; 486*34e04225SDavid du Colombier uchar *data; 487*34e04225SDavid du Colombier u32int ndata; 488*34e04225SDavid du Colombier }; 489*34e04225SDavid du Colombier 490*34e04225SDavid du Colombier struct Nfs3TWrite { 491*34e04225SDavid du Colombier Nfs3Call call; 492*34e04225SDavid du Colombier Nfs3Handle handle; 493*34e04225SDavid du Colombier u64int offset; 494*34e04225SDavid du Colombier u32int count; 495*34e04225SDavid du Colombier Nfs3Sync stable; 496*34e04225SDavid du Colombier uchar *data; 497*34e04225SDavid du Colombier u32int ndata; 498*34e04225SDavid du Colombier }; 499*34e04225SDavid du Colombier 500*34e04225SDavid du Colombier struct Nfs3RWrite { 501*34e04225SDavid du Colombier Nfs3Call call; 502*34e04225SDavid du Colombier Nfs3Status status; 503*34e04225SDavid du Colombier Nfs3Wcc wcc; 504*34e04225SDavid du Colombier u32int count; 505*34e04225SDavid du Colombier Nfs3Sync committed; 506*34e04225SDavid du Colombier uchar verf[Nfs3WriteVerfSize]; 507*34e04225SDavid du Colombier }; 508*34e04225SDavid du Colombier 509*34e04225SDavid du Colombier struct Nfs3TCreate { 510*34e04225SDavid du Colombier Nfs3Call call; 511*34e04225SDavid du Colombier Nfs3Handle handle; 512*34e04225SDavid du Colombier char *name; 513*34e04225SDavid du Colombier Nfs3Create mode; 514*34e04225SDavid du Colombier Nfs3SetAttr attr; 515*34e04225SDavid du Colombier uchar verf[Nfs3CreateVerfSize]; 516*34e04225SDavid du Colombier }; 517*34e04225SDavid du Colombier 518*34e04225SDavid du Colombier struct Nfs3RCreate { 519*34e04225SDavid du Colombier Nfs3Call call; 520*34e04225SDavid du Colombier Nfs3Status status; 521*34e04225SDavid du Colombier u1int haveHandle; 522*34e04225SDavid du Colombier Nfs3Handle handle; 523*34e04225SDavid du Colombier u1int haveAttr; 524*34e04225SDavid du Colombier Nfs3Attr attr; 525*34e04225SDavid du Colombier Nfs3Wcc dirWcc; 526*34e04225SDavid du Colombier }; 527*34e04225SDavid du Colombier 528*34e04225SDavid du Colombier struct Nfs3TMkdir { 529*34e04225SDavid du Colombier Nfs3Call call; 530*34e04225SDavid du Colombier Nfs3Handle handle; 531*34e04225SDavid du Colombier char *name; 532*34e04225SDavid du Colombier Nfs3SetAttr attr; 533*34e04225SDavid du Colombier }; 534*34e04225SDavid du Colombier 535*34e04225SDavid du Colombier struct Nfs3RMkdir { 536*34e04225SDavid du Colombier Nfs3Call call; 537*34e04225SDavid du Colombier Nfs3Status status; 538*34e04225SDavid du Colombier u1int haveHandle; 539*34e04225SDavid du Colombier Nfs3Handle handle; 540*34e04225SDavid du Colombier u1int haveAttr; 541*34e04225SDavid du Colombier Nfs3Attr attr; 542*34e04225SDavid du Colombier Nfs3Wcc dirWcc; 543*34e04225SDavid du Colombier }; 544*34e04225SDavid du Colombier 545*34e04225SDavid du Colombier struct Nfs3TSymlink { 546*34e04225SDavid du Colombier Nfs3Call call; 547*34e04225SDavid du Colombier Nfs3Handle handle; 548*34e04225SDavid du Colombier char *name; 549*34e04225SDavid du Colombier Nfs3SetAttr attr; 550*34e04225SDavid du Colombier char *data; 551*34e04225SDavid du Colombier }; 552*34e04225SDavid du Colombier 553*34e04225SDavid du Colombier struct Nfs3RSymlink { 554*34e04225SDavid du Colombier Nfs3Call call; 555*34e04225SDavid du Colombier Nfs3Status status; 556*34e04225SDavid du Colombier u1int haveHandle; 557*34e04225SDavid du Colombier Nfs3Handle handle; 558*34e04225SDavid du Colombier u1int haveAttr; 559*34e04225SDavid du Colombier Nfs3Attr attr; 560*34e04225SDavid du Colombier Nfs3Wcc dirWcc; 561*34e04225SDavid du Colombier }; 562*34e04225SDavid du Colombier 563*34e04225SDavid du Colombier struct Nfs3TMknod { 564*34e04225SDavid du Colombier Nfs3Call call; 565*34e04225SDavid du Colombier Nfs3Handle handle; 566*34e04225SDavid du Colombier char *name; 567*34e04225SDavid du Colombier Nfs3FileType type; 568*34e04225SDavid du Colombier Nfs3SetAttr attr; 569*34e04225SDavid du Colombier u32int major; 570*34e04225SDavid du Colombier u32int minor; 571*34e04225SDavid du Colombier }; 572*34e04225SDavid du Colombier 573*34e04225SDavid du Colombier struct Nfs3RMknod { 574*34e04225SDavid du Colombier Nfs3Call call; 575*34e04225SDavid du Colombier Nfs3Status status; 576*34e04225SDavid du Colombier u1int haveHandle; 577*34e04225SDavid du Colombier Nfs3Handle handle; 578*34e04225SDavid du Colombier u1int haveAttr; 579*34e04225SDavid du Colombier Nfs3Attr attr; 580*34e04225SDavid du Colombier Nfs3Wcc dirWcc; 581*34e04225SDavid du Colombier }; 582*34e04225SDavid du Colombier 583*34e04225SDavid du Colombier struct Nfs3TRemove { 584*34e04225SDavid du Colombier Nfs3Call call; 585*34e04225SDavid du Colombier Nfs3Handle handle; 586*34e04225SDavid du Colombier char *name; 587*34e04225SDavid du Colombier }; 588*34e04225SDavid du Colombier 589*34e04225SDavid du Colombier struct Nfs3RRemove { 590*34e04225SDavid du Colombier Nfs3Call call; 591*34e04225SDavid du Colombier Nfs3Status status; 592*34e04225SDavid du Colombier Nfs3Wcc wcc; 593*34e04225SDavid du Colombier }; 594*34e04225SDavid du Colombier 595*34e04225SDavid du Colombier struct Nfs3TRmdir { 596*34e04225SDavid du Colombier Nfs3Call call; 597*34e04225SDavid du Colombier Nfs3Handle handle; 598*34e04225SDavid du Colombier char *name; 599*34e04225SDavid du Colombier }; 600*34e04225SDavid du Colombier 601*34e04225SDavid du Colombier struct Nfs3RRmdir { 602*34e04225SDavid du Colombier Nfs3Call call; 603*34e04225SDavid du Colombier Nfs3Status status; 604*34e04225SDavid du Colombier Nfs3Wcc wcc; 605*34e04225SDavid du Colombier }; 606*34e04225SDavid du Colombier 607*34e04225SDavid du Colombier struct Nfs3TRename { 608*34e04225SDavid du Colombier Nfs3Call call; 609*34e04225SDavid du Colombier struct { 610*34e04225SDavid du Colombier Nfs3Handle handle; 611*34e04225SDavid du Colombier char *name; 612*34e04225SDavid du Colombier } from; 613*34e04225SDavid du Colombier struct { 614*34e04225SDavid du Colombier Nfs3Handle handle; 615*34e04225SDavid du Colombier char *name; 616*34e04225SDavid du Colombier } to; 617*34e04225SDavid du Colombier }; 618*34e04225SDavid du Colombier 619*34e04225SDavid du Colombier struct Nfs3RRename { 620*34e04225SDavid du Colombier Nfs3Call call; 621*34e04225SDavid du Colombier Nfs3Status status; 622*34e04225SDavid du Colombier Nfs3Wcc fromWcc; 623*34e04225SDavid du Colombier Nfs3Wcc toWcc; 624*34e04225SDavid du Colombier }; 625*34e04225SDavid du Colombier 626*34e04225SDavid du Colombier struct Nfs3TLink { 627*34e04225SDavid du Colombier Nfs3Call call; 628*34e04225SDavid du Colombier Nfs3Handle handle; 629*34e04225SDavid du Colombier struct { 630*34e04225SDavid du Colombier Nfs3Handle handle; 631*34e04225SDavid du Colombier char *name; 632*34e04225SDavid du Colombier } link; 633*34e04225SDavid du Colombier }; 634*34e04225SDavid du Colombier 635*34e04225SDavid du Colombier struct Nfs3RLink { 636*34e04225SDavid du Colombier Nfs3Call call; 637*34e04225SDavid du Colombier Nfs3Status status; 638*34e04225SDavid du Colombier u1int haveAttr; 639*34e04225SDavid du Colombier Nfs3Attr attr; 640*34e04225SDavid du Colombier Nfs3Wcc dirWcc; 641*34e04225SDavid du Colombier }; 642*34e04225SDavid du Colombier 643*34e04225SDavid du Colombier struct Nfs3TReadDir { 644*34e04225SDavid du Colombier Nfs3Call call; 645*34e04225SDavid du Colombier Nfs3Handle handle; 646*34e04225SDavid du Colombier u64int cookie; 647*34e04225SDavid du Colombier uchar verf[Nfs3CookieVerfSize]; 648*34e04225SDavid du Colombier u32int count; 649*34e04225SDavid du Colombier }; 650*34e04225SDavid du Colombier 651*34e04225SDavid du Colombier struct Nfs3RReadDir { 652*34e04225SDavid du Colombier Nfs3Call call; 653*34e04225SDavid du Colombier Nfs3Status status; 654*34e04225SDavid du Colombier u1int haveAttr; 655*34e04225SDavid du Colombier Nfs3Attr attr; 656*34e04225SDavid du Colombier uchar verf[Nfs3CookieVerfSize]; 657*34e04225SDavid du Colombier uchar *data; 658*34e04225SDavid du Colombier u32int count; 659*34e04225SDavid du Colombier u1int eof; 660*34e04225SDavid du Colombier }; 661*34e04225SDavid du Colombier 662*34e04225SDavid du Colombier struct Nfs3TReadDirPlus { 663*34e04225SDavid du Colombier Nfs3Call call; 664*34e04225SDavid du Colombier Nfs3Handle handle; 665*34e04225SDavid du Colombier u64int cookie; 666*34e04225SDavid du Colombier uchar verf[Nfs3CookieVerfSize]; 667*34e04225SDavid du Colombier u32int dirCount; 668*34e04225SDavid du Colombier u32int maxCount; 669*34e04225SDavid du Colombier }; 670*34e04225SDavid du Colombier 671*34e04225SDavid du Colombier struct Nfs3Entry { 672*34e04225SDavid du Colombier u64int fileid; 673*34e04225SDavid du Colombier char *name; 674*34e04225SDavid du Colombier u64int cookie; 675*34e04225SDavid du Colombier u1int haveAttr; 676*34e04225SDavid du Colombier Nfs3Attr attr; 677*34e04225SDavid du Colombier u1int haveHandle; 678*34e04225SDavid du Colombier Nfs3Handle handle; 679*34e04225SDavid du Colombier }; 680*34e04225SDavid du Colombier 681*34e04225SDavid du Colombier struct Nfs3RReadDirPlus { 682*34e04225SDavid du Colombier Nfs3Call call; 683*34e04225SDavid du Colombier Nfs3Status status; 684*34e04225SDavid du Colombier u1int haveAttr; 685*34e04225SDavid du Colombier Nfs3Attr attr; 686*34e04225SDavid du Colombier uchar verf[Nfs3CookieVerfSize]; 687*34e04225SDavid du Colombier uchar *data; 688*34e04225SDavid du Colombier u32int count; 689*34e04225SDavid du Colombier u1int eof; 690*34e04225SDavid du Colombier }; 691*34e04225SDavid du Colombier 692*34e04225SDavid du Colombier struct Nfs3TFsStat { 693*34e04225SDavid du Colombier Nfs3Call call; 694*34e04225SDavid du Colombier Nfs3Handle handle; 695*34e04225SDavid du Colombier }; 696*34e04225SDavid du Colombier 697*34e04225SDavid du Colombier struct Nfs3RFsStat { 698*34e04225SDavid du Colombier Nfs3Call call; 699*34e04225SDavid du Colombier Nfs3Status status; 700*34e04225SDavid du Colombier u1int haveAttr; 701*34e04225SDavid du Colombier Nfs3Attr attr; 702*34e04225SDavid du Colombier u64int totalBytes; 703*34e04225SDavid du Colombier u64int freeBytes; 704*34e04225SDavid du Colombier u64int availBytes; 705*34e04225SDavid du Colombier u64int totalFiles; 706*34e04225SDavid du Colombier u64int freeFiles; 707*34e04225SDavid du Colombier u64int availFiles; 708*34e04225SDavid du Colombier u32int invarSec; 709*34e04225SDavid du Colombier }; 710*34e04225SDavid du Colombier 711*34e04225SDavid du Colombier struct Nfs3TFsInfo { 712*34e04225SDavid du Colombier Nfs3Call call; 713*34e04225SDavid du Colombier Nfs3Handle handle; 714*34e04225SDavid du Colombier }; 715*34e04225SDavid du Colombier 716*34e04225SDavid du Colombier struct Nfs3RFsInfo { 717*34e04225SDavid du Colombier Nfs3Call call; 718*34e04225SDavid du Colombier Nfs3Status status; 719*34e04225SDavid du Colombier u1int haveAttr; 720*34e04225SDavid du Colombier Nfs3Attr attr; 721*34e04225SDavid du Colombier u32int readMax; 722*34e04225SDavid du Colombier u32int readPref; 723*34e04225SDavid du Colombier u32int readMult; 724*34e04225SDavid du Colombier u32int writeMax; 725*34e04225SDavid du Colombier u32int writePref; 726*34e04225SDavid du Colombier u32int writeMult; 727*34e04225SDavid du Colombier u32int readDirPref; 728*34e04225SDavid du Colombier u64int maxFileSize; 729*34e04225SDavid du Colombier Nfs3Time timePrec; 730*34e04225SDavid du Colombier u32int flags; 731*34e04225SDavid du Colombier }; 732*34e04225SDavid du Colombier 733*34e04225SDavid du Colombier struct Nfs3TPathconf { 734*34e04225SDavid du Colombier Nfs3Call call; 735*34e04225SDavid du Colombier Nfs3Handle handle; 736*34e04225SDavid du Colombier }; 737*34e04225SDavid du Colombier 738*34e04225SDavid du Colombier struct Nfs3RPathconf { 739*34e04225SDavid du Colombier Nfs3Call call; 740*34e04225SDavid du Colombier Nfs3Status status; 741*34e04225SDavid du Colombier u1int haveAttr; 742*34e04225SDavid du Colombier Nfs3Attr attr; 743*34e04225SDavid du Colombier u32int maxLink; 744*34e04225SDavid du Colombier u32int maxName; 745*34e04225SDavid du Colombier u1int noTrunc; 746*34e04225SDavid du Colombier u1int chownRestricted; 747*34e04225SDavid du Colombier u1int caseInsensitive; 748*34e04225SDavid du Colombier u1int casePreserving; 749*34e04225SDavid du Colombier }; 750*34e04225SDavid du Colombier 751*34e04225SDavid du Colombier struct Nfs3TCommit { 752*34e04225SDavid du Colombier Nfs3Call call; 753*34e04225SDavid du Colombier Nfs3Handle handle; 754*34e04225SDavid du Colombier u64int offset; 755*34e04225SDavid du Colombier u32int count; 756*34e04225SDavid du Colombier }; 757*34e04225SDavid du Colombier 758*34e04225SDavid du Colombier struct Nfs3RCommit { 759*34e04225SDavid du Colombier Nfs3Call call; 760*34e04225SDavid du Colombier Nfs3Status status; 761*34e04225SDavid du Colombier Nfs3Wcc wcc; 762*34e04225SDavid du Colombier uchar verf[Nfs3WriteVerfSize]; 763*34e04225SDavid du Colombier }; 764*34e04225SDavid du Colombier 765*34e04225SDavid du Colombier char *nfs3StatusStr(Nfs3Status); 766*34e04225SDavid du Colombier char *nfs3TypeStr(Nfs3CallType); 767*34e04225SDavid du Colombier char *nfs3SetTimeStr(Nfs3SetTime); 768*34e04225SDavid du Colombier char *nfs3SyncStr(Nfs3Sync); 769*34e04225SDavid du Colombier 770*34e04225SDavid du Colombier void nfs3HandlePrint(Fmt*, Nfs3Handle*); 771*34e04225SDavid du Colombier u32int nfs3HandleSize(Nfs3Handle*); 772*34e04225SDavid du Colombier int nfs3HandlePack(uchar*, uchar*, uchar**, Nfs3Handle*); 773*34e04225SDavid du Colombier int nfs3HandleUnpack(uchar*, uchar*, uchar**, Nfs3Handle*); 774*34e04225SDavid du Colombier 775*34e04225SDavid du Colombier void nfs3TimePrint(Fmt*, Nfs3Time*); 776*34e04225SDavid du Colombier u32int nfs3TimeSize(Nfs3Time*); 777*34e04225SDavid du Colombier int nfs3TimePack(uchar*, uchar*, uchar**, Nfs3Time*); 778*34e04225SDavid du Colombier int nfs3TimeUnpack(uchar*, uchar*, uchar**, Nfs3Time*); 779*34e04225SDavid du Colombier 780*34e04225SDavid du Colombier void nfs3AttrPrint(Fmt*, Nfs3Attr*); 781*34e04225SDavid du Colombier u32int nfs3AttrSize(Nfs3Attr*); 782*34e04225SDavid du Colombier int nfs3AttrPack(uchar*, uchar*, uchar**, Nfs3Attr*); 783*34e04225SDavid du Colombier int nfs3AttrUnpack(uchar*, uchar*, uchar**, Nfs3Attr*); 784*34e04225SDavid du Colombier 785*34e04225SDavid du Colombier void nfs3WccAttrPrint(Fmt*, Nfs3WccAttr*); 786*34e04225SDavid du Colombier u32int nfs3WccAttrSize(Nfs3WccAttr*); 787*34e04225SDavid du Colombier int nfs3WccAttrPack(uchar*, uchar*, uchar**, Nfs3WccAttr*); 788*34e04225SDavid du Colombier int nfs3WccAttrUnpack(uchar*, uchar*, uchar**, Nfs3WccAttr*); 789*34e04225SDavid du Colombier 790*34e04225SDavid du Colombier void nfs3WccPrint(Fmt*, Nfs3Wcc*); 791*34e04225SDavid du Colombier u32int nfs3WccSize(Nfs3Wcc*); 792*34e04225SDavid du Colombier int nfs3WccPack(uchar*, uchar*, uchar**, Nfs3Wcc*); 793*34e04225SDavid du Colombier int nfs3WccUnpack(uchar*, uchar*, uchar**, Nfs3Wcc*); 794*34e04225SDavid du Colombier 795*34e04225SDavid du Colombier void nfs3SetAttrPrint(Fmt*, Nfs3SetAttr*); 796*34e04225SDavid du Colombier u32int nfs3SetAttrSize(Nfs3SetAttr*); 797*34e04225SDavid du Colombier int nfs3SetAttrPack(uchar*, uchar*, uchar**, Nfs3SetAttr*); 798*34e04225SDavid du Colombier int nfs3SetAttrUnpack(uchar*, uchar*, uchar**, Nfs3SetAttr*); 799*34e04225SDavid du Colombier 800*34e04225SDavid du Colombier extern SunProg nfs3Prog; 801*34e04225SDavid du Colombier 802*34e04225SDavid du Colombier void nfs3EntryPrint(Fmt*, Nfs3Entry*); 803*34e04225SDavid du Colombier u32int nfs3EntrySize(Nfs3Entry*); 804*34e04225SDavid du Colombier int nfs3EntryPack(uchar*, uchar*, uchar**, Nfs3Entry*); 805*34e04225SDavid du Colombier int nfs3EntryUnpack(uchar*, uchar*, uchar**, Nfs3Entry*); 806*34e04225SDavid du Colombier 807*34e04225SDavid du Colombier void nfs3EntryPlusPrint(Fmt*, Nfs3Entry*); 808*34e04225SDavid du Colombier u32int nfs3EntryPlusSize(Nfs3Entry*); 809*34e04225SDavid du Colombier int nfs3EntryPlusPack(uchar*, uchar*, uchar**, Nfs3Entry*); 810*34e04225SDavid du Colombier int nfs3EntryPlusUnpack(uchar*, uchar*, uchar**, Nfs3Entry*); 811*34e04225SDavid du Colombier 812