xref: /plan9/sys/include/nfs3.h (revision 34e0422554c8e8bef66509534d2c44f4660bf678)
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