Allow NFS lookup requests to better proceed in parallel.
[bluesky.git] / nfs3 / nfs3_prot.h
1 #ifndef _NFS3_PROT_H_RPCGEN
2 #define _NFS3_PROT_H_RPCGEN
3
4 #include <rpc/rpc.h>
5
6 #include <glib.h>
7
8
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12
13 typedef u_quad_t uint64;
14
15 typedef quad_t int64;
16
17 typedef u_int uint32;
18
19 typedef int int32;
20 #define NFS3_FHSIZE 64
21 #define NFS3_COOKIEVERFSIZE 8
22 #define NFS3_CREATEVERFSIZE 8
23 #define NFS3_WRITEVERFSIZE 8
24
25 typedef char *filename3;
26
27 typedef char *nfspath3;
28
29 typedef char cookieverf3[NFS3_COOKIEVERFSIZE];
30
31 typedef char createverf3[NFS3_CREATEVERFSIZE];
32
33 typedef char writeverf3[NFS3_WRITEVERFSIZE];
34
35 enum nfsstat3 {
36         NFS3_OK = 0,
37         NFS3ERR_PERM = 1,
38         NFS3ERR_NOENT = 2,
39         NFS3ERR_IO = 5,
40         NFS3ERR_NXIO = 6,
41         NFS3ERR_ACCES = 13,
42         NFS3ERR_EXIST = 17,
43         NFS3ERR_XDEV = 18,
44         NFS3ERR_NODEV = 19,
45         NFS3ERR_NOTDIR = 20,
46         NFS3ERR_ISDIR = 21,
47         NFS3ERR_INVAL = 22,
48         NFS3ERR_FBIG = 27,
49         NFS3ERR_NOSPC = 28,
50         NFS3ERR_ROFS = 30,
51         NFS3ERR_MLINK = 31,
52         NFS3ERR_NAMETOOLONG = 63,
53         NFS3ERR_NOTEMPTY = 66,
54         NFS3ERR_DQUOT = 69,
55         NFS3ERR_STALE = 70,
56         NFS3ERR_REMOTE = 71,
57         NFS3ERR_BADHANDLE = 10001,
58         NFS3ERR_NOT_SYNC = 10002,
59         NFS3ERR_BAD_COOKIE = 10003,
60         NFS3ERR_NOTSUPP = 10004,
61         NFS3ERR_TOOSMALL = 10005,
62         NFS3ERR_SERVERFAULT = 10006,
63         NFS3ERR_BADTYPE = 10007,
64         NFS3ERR_JUKEBOX = 10008,
65         NFS3ERR_FPRINTNOTFOUND = 10009,
66         NFS3ERR_ABORTED = 10010,
67 };
68 typedef enum nfsstat3 nfsstat3;
69
70 enum ftype3 {
71         NF3REG = 1,
72         NF3DIR = 2,
73         NF3BLK = 3,
74         NF3CHR = 4,
75         NF3LNK = 5,
76         NF3SOCK = 6,
77         NF3FIFO = 7,
78 };
79 typedef enum ftype3 ftype3;
80
81 struct specdata3 {
82         uint32 major;
83         uint32 minor;
84 };
85 typedef struct specdata3 specdata3;
86
87 struct nfs_fh3 {
88         struct {
89                 u_int data_len;
90                 char *data_val;
91         } data;
92 };
93 typedef struct nfs_fh3 nfs_fh3;
94
95 struct nfstime3 {
96         uint32 seconds;
97         uint32 nseconds;
98 };
99 typedef struct nfstime3 nfstime3;
100
101 struct fattr3 {
102         ftype3 type;
103         uint32 mode;
104         uint32 nlink;
105         uint32 uid;
106         uint32 gid;
107         uint64 size;
108         uint64 used;
109         specdata3 rdev;
110         uint64 fsid;
111         uint64 fileid;
112         nfstime3 atime;
113         nfstime3 mtime;
114         nfstime3 ctime;
115 };
116 typedef struct fattr3 fattr3;
117
118 struct post_op_attr {
119         bool_t present;
120         union {
121                 fattr3 attributes;
122         } post_op_attr_u;
123 };
124 typedef struct post_op_attr post_op_attr;
125
126 struct wcc_attr {
127         uint64 size;
128         nfstime3 mtime;
129         nfstime3 ctime;
130 };
131 typedef struct wcc_attr wcc_attr;
132
133 struct pre_op_attr {
134         bool_t present;
135         union {
136                 wcc_attr attributes;
137         } pre_op_attr_u;
138 };
139 typedef struct pre_op_attr pre_op_attr;
140
141 struct wcc_data {
142         pre_op_attr before;
143         post_op_attr after;
144 };
145 typedef struct wcc_data wcc_data;
146
147 struct post_op_fh3 {
148         bool_t present;
149         union {
150                 nfs_fh3 handle;
151         } post_op_fh3_u;
152 };
153 typedef struct post_op_fh3 post_op_fh3;
154
155 struct set_uint32 {
156         bool_t set;
157         union {
158                 uint32 val;
159         } set_uint32_u;
160 };
161 typedef struct set_uint32 set_uint32;
162
163 struct set_uint64 {
164         bool_t set;
165         union {
166                 uint64 val;
167         } set_uint64_u;
168 };
169 typedef struct set_uint64 set_uint64;
170
171 enum time_how {
172         DONT_CHANGE = 0,
173         SET_TO_SERVER_TIME = 1,
174         SET_TO_CLIENT_TIME = 2,
175 };
176 typedef enum time_how time_how;
177
178 struct set_time {
179         time_how set;
180         union {
181                 nfstime3 time;
182         } set_time_u;
183 };
184 typedef struct set_time set_time;
185
186 struct sattr3 {
187         set_uint32 mode;
188         set_uint32 uid;
189         set_uint32 gid;
190         set_uint64 size;
191         set_time atime;
192         set_time mtime;
193 };
194 typedef struct sattr3 sattr3;
195
196 struct diropargs3 {
197         nfs_fh3 dir;
198         filename3 name;
199 };
200 typedef struct diropargs3 diropargs3;
201
202 struct diropres3ok {
203         post_op_fh3 obj;
204         post_op_attr obj_attributes;
205         wcc_data dir_wcc;
206 };
207 typedef struct diropres3ok diropres3ok;
208
209 struct diropres3 {
210         nfsstat3 status;
211         union {
212                 diropres3ok resok;
213                 wcc_data resfail;
214         } diropres3_u;
215 };
216 typedef struct diropres3 diropres3;
217
218 struct wccstat3 {
219         nfsstat3 status;
220         union {
221                 wcc_data wcc;
222         } wccstat3_u;
223 };
224 typedef struct wccstat3 wccstat3;
225
226 struct getattr3res {
227         nfsstat3 status;
228         union {
229                 fattr3 attributes;
230         } getattr3res_u;
231 };
232 typedef struct getattr3res getattr3res;
233
234 struct sattrguard3 {
235         bool_t check;
236         union {
237                 nfstime3 ctime;
238         } sattrguard3_u;
239 };
240 typedef struct sattrguard3 sattrguard3;
241
242 struct setattr3args {
243         nfs_fh3 object;
244         sattr3 new_attributes;
245         sattrguard3 guard;
246 };
247 typedef struct setattr3args setattr3args;
248
249 struct lookup3resok {
250         nfs_fh3 object;
251         post_op_attr obj_attributes;
252         post_op_attr dir_attributes;
253 };
254 typedef struct lookup3resok lookup3resok;
255
256 struct lookup3res {
257         nfsstat3 status;
258         union {
259                 lookup3resok resok;
260                 post_op_attr resfail;
261         } lookup3res_u;
262 };
263 typedef struct lookup3res lookup3res;
264 #define ACCESS3_READ 0x0001
265 #define ACCESS3_LOOKUP 0x0002
266 #define ACCESS3_MODIFY 0x0004
267 #define ACCESS3_EXTEND 0x0008
268 #define ACCESS3_DELETE 0x0010
269 #define ACCESS3_EXECUTE 0x0020
270
271 struct access3args {
272         nfs_fh3 object;
273         uint32 access;
274 };
275 typedef struct access3args access3args;
276
277 struct access3resok {
278         post_op_attr obj_attributes;
279         uint32 access;
280 };
281 typedef struct access3resok access3resok;
282
283 struct access3res {
284         nfsstat3 status;
285         union {
286                 access3resok resok;
287                 post_op_attr resfail;
288         } access3res_u;
289 };
290 typedef struct access3res access3res;
291
292 struct readlink3resok {
293         post_op_attr symlink_attributes;
294         nfspath3 data;
295 };
296 typedef struct readlink3resok readlink3resok;
297
298 struct readlink3res {
299         nfsstat3 status;
300         union {
301                 readlink3resok resok;
302                 post_op_attr resfail;
303         } readlink3res_u;
304 };
305 typedef struct readlink3res readlink3res;
306
307 struct read3args {
308         nfs_fh3 file;
309         uint64 offset;
310         uint32 count;
311 };
312 typedef struct read3args read3args;
313
314 struct read3resok {
315         post_op_attr file_attributes;
316         uint32 count;
317         bool_t eof;
318         struct {
319                 u_int data_len;
320                 char *data_val;
321         } data;
322 };
323 typedef struct read3resok read3resok;
324
325 struct read3res {
326         nfsstat3 status;
327         union {
328                 read3resok resok;
329                 post_op_attr resfail;
330         } read3res_u;
331 };
332 typedef struct read3res read3res;
333
334 enum stable_how {
335         UNSTABLE = 0,
336         DATA_SYNC = 1,
337         FILE_SYNC = 2,
338 };
339 typedef enum stable_how stable_how;
340
341 struct write3args {
342         nfs_fh3 file;
343         uint64 offset;
344         uint32 count;
345         stable_how stable;
346         struct {
347                 u_int data_len;
348                 char *data_val;
349         } data;
350 };
351 typedef struct write3args write3args;
352
353 struct write3resok {
354         wcc_data file_wcc;
355         uint32 count;
356         stable_how committed;
357         writeverf3 verf;
358 };
359 typedef struct write3resok write3resok;
360
361 struct write3res {
362         nfsstat3 status;
363         union {
364                 write3resok resok;
365                 wcc_data resfail;
366         } write3res_u;
367 };
368 typedef struct write3res write3res;
369
370 enum createmode3 {
371         UNCHECKED = 0,
372         GUARDED = 1,
373         EXCLUSIVE = 2,
374 };
375 typedef enum createmode3 createmode3;
376
377 struct createhow3 {
378         createmode3 mode;
379         union {
380                 sattr3 obj_attributes;
381                 createverf3 verf;
382         } createhow3_u;
383 };
384 typedef struct createhow3 createhow3;
385
386 struct create3args {
387         diropargs3 where;
388         createhow3 how;
389 };
390 typedef struct create3args create3args;
391
392 struct mkdir3args {
393         diropargs3 where;
394         sattr3 attributes;
395 };
396 typedef struct mkdir3args mkdir3args;
397
398 struct symlinkdata3 {
399         sattr3 symlink_attributes;
400         nfspath3 symlink_data;
401 };
402 typedef struct symlinkdata3 symlinkdata3;
403
404 struct symlink3args {
405         diropargs3 where;
406         symlinkdata3 symlink;
407 };
408 typedef struct symlink3args symlink3args;
409
410 struct devicedata3 {
411         sattr3 dev_attributes;
412         specdata3 spec;
413 };
414 typedef struct devicedata3 devicedata3;
415
416 struct mknoddata3 {
417         ftype3 type;
418         union {
419                 devicedata3 device;
420                 sattr3 pipe_attributes;
421         } mknoddata3_u;
422 };
423 typedef struct mknoddata3 mknoddata3;
424
425 struct mknod3args {
426         diropargs3 where;
427         mknoddata3 what;
428 };
429 typedef struct mknod3args mknod3args;
430
431 struct rename3args {
432         diropargs3 from;
433         diropargs3 to;
434 };
435 typedef struct rename3args rename3args;
436
437 struct rename3wcc {
438         wcc_data fromdir_wcc;
439         wcc_data todir_wcc;
440 };
441 typedef struct rename3wcc rename3wcc;
442
443 struct rename3res {
444         nfsstat3 status;
445         union {
446                 rename3wcc res;
447         } rename3res_u;
448 };
449 typedef struct rename3res rename3res;
450
451 struct link3args {
452         nfs_fh3 file;
453         diropargs3 link;
454 };
455 typedef struct link3args link3args;
456
457 struct link3wcc {
458         post_op_attr file_attributes;
459         wcc_data linkdir_wcc;
460 };
461 typedef struct link3wcc link3wcc;
462
463 struct link3res {
464         nfsstat3 status;
465         union {
466                 link3wcc res;
467         } link3res_u;
468 };
469 typedef struct link3res link3res;
470
471 struct readdir3args {
472         nfs_fh3 dir;
473         uint64 cookie;
474         cookieverf3 cookieverf;
475         uint32 count;
476 };
477 typedef struct readdir3args readdir3args;
478
479 struct entry3 {
480         uint64 fileid;
481         filename3 name;
482         uint64 cookie;
483         struct entry3 *nextentry;
484 };
485 typedef struct entry3 entry3;
486
487 struct dirlist3 {
488         entry3 *entries;
489         bool_t eof;
490 };
491 typedef struct dirlist3 dirlist3;
492
493 struct readdir3resok {
494         post_op_attr dir_attributes;
495         cookieverf3 cookieverf;
496         dirlist3 reply;
497 };
498 typedef struct readdir3resok readdir3resok;
499
500 struct readdir3res {
501         nfsstat3 status;
502         union {
503                 readdir3resok resok;
504                 post_op_attr resfail;
505         } readdir3res_u;
506 };
507 typedef struct readdir3res readdir3res;
508
509 struct readdirplus3args {
510         nfs_fh3 dir;
511         uint64 cookie;
512         cookieverf3 cookieverf;
513         uint32 dircount;
514         uint32 maxcount;
515 };
516 typedef struct readdirplus3args readdirplus3args;
517
518 struct entryplus3 {
519         uint64 fileid;
520         filename3 name;
521         uint64 cookie;
522         post_op_attr name_attributes;
523         post_op_fh3 name_handle;
524         struct entryplus3 *nextentry;
525 };
526 typedef struct entryplus3 entryplus3;
527
528 struct dirlistplus3 {
529         entryplus3 *entries;
530         bool_t eof;
531 };
532 typedef struct dirlistplus3 dirlistplus3;
533
534 struct readdirplus3resok {
535         post_op_attr dir_attributes;
536         cookieverf3 cookieverf;
537         dirlistplus3 reply;
538 };
539 typedef struct readdirplus3resok readdirplus3resok;
540
541 struct readdirplus3res {
542         nfsstat3 status;
543         union {
544                 readdirplus3resok resok;
545                 post_op_attr resfail;
546         } readdirplus3res_u;
547 };
548 typedef struct readdirplus3res readdirplus3res;
549
550 struct fsstat3resok {
551         post_op_attr obj_attributes;
552         uint64 tbytes;
553         uint64 fbytes;
554         uint64 abytes;
555         uint64 tfiles;
556         uint64 ffiles;
557         uint64 afiles;
558         uint32 invarsec;
559 };
560 typedef struct fsstat3resok fsstat3resok;
561
562 struct fsstat3res {
563         nfsstat3 status;
564         union {
565                 fsstat3resok resok;
566                 post_op_attr resfail;
567         } fsstat3res_u;
568 };
569 typedef struct fsstat3res fsstat3res;
570 #define FSF3_LINK 0x0001
571 #define FSF3_SYMLINK 0x0002
572 #define FSF3_HOMOGENEOUS 0x0008
573 #define FSF3_CANSETTIME 0x0010
574
575 struct fsinfo3resok {
576         post_op_attr obj_attributes;
577         uint32 rtmax;
578         uint32 rtpref;
579         uint32 rtmult;
580         uint32 wtmax;
581         uint32 wtpref;
582         uint32 wtmult;
583         uint32 dtpref;
584         uint64 maxfilesize;
585         nfstime3 time_delta;
586         uint32 properties;
587 };
588 typedef struct fsinfo3resok fsinfo3resok;
589
590 struct fsinfo3res {
591         nfsstat3 status;
592         union {
593                 fsinfo3resok resok;
594                 post_op_attr resfail;
595         } fsinfo3res_u;
596 };
597 typedef struct fsinfo3res fsinfo3res;
598
599 struct pathconf3resok {
600         post_op_attr obj_attributes;
601         uint32 linkmax;
602         uint32 name_max;
603         bool_t no_trunc;
604         bool_t chown_restricted;
605         bool_t case_insensitive;
606         bool_t case_preserving;
607 };
608 typedef struct pathconf3resok pathconf3resok;
609
610 struct pathconf3res {
611         nfsstat3 status;
612         union {
613                 pathconf3resok resok;
614                 post_op_attr resfail;
615         } pathconf3res_u;
616 };
617 typedef struct pathconf3res pathconf3res;
618
619 struct commit3args {
620         nfs_fh3 file;
621         uint64 offset;
622         uint32 count;
623 };
624 typedef struct commit3args commit3args;
625
626 struct commit3resok {
627         wcc_data file_wcc;
628         writeverf3 verf;
629 };
630 typedef struct commit3resok commit3resok;
631
632 struct commit3res {
633         nfsstat3 status;
634         union {
635                 commit3resok resok;
636                 wcc_data resfail;
637         } commit3res_u;
638 };
639 typedef struct commit3res commit3res;
640
641 /* Structure for tracking a single incoming TCP connection for RPCs.  For now,
642  * used for NFS only. */
643 typedef struct {
644     GIOChannel *channel;
645
646     /* The reassembled message, thus far. */
647     GString *msgbuf;
648
649     /* Remaining number of bytes in this message fragment; 0 if we next expect
650      * another fragment header. */
651     uint32_t frag_len;
652
653     /* If frag_len is zero: the number of bytes of the fragment header that
654      * have been read so far. */
655     int frag_hdr_bytes;
656
657     /* Mutex protecting send operations on the socket (to ensure that replies
658      * are not accidentally interleaved). */
659     GMutex *send_lock;
660 } RPCConnection;
661
662 /* Linked list of cleanup functions to call when a request is completed. */
663 struct cleanup_list {
664     void (*func)(void *arg);
665     void *arg;
666     struct cleanup_list *next;
667 };
668
669 /* Used to track a single outstanding RPC request.  Not all of the fields are
670  * initially filled in, but more are filled in as the request is processed. */
671 typedef struct {
672     /* The corresponding connection on which the request was made. */
673     RPCConnection *connection;
674
675     /* Timining information for generating statistics about response times. */
676     int64_t time_start;
677
678     /* Transaction ID of the request, in host byte order. */
679     uint32_t xid;
680
681     /* Raw XDR arguments for the call, including headers (everything except the
682      * fragment headers).  Also, the offset to the actual arguments (number of
683      * bytes making up the headers). */
684     GString *raw_args;
685     size_t raw_args_header_bytes;
686
687     /* Decoded header information. */
688     int req_proc;
689
690     /* The XDR-decoded argument of the call, and the procedure to use for
691      * freeing these arguments.  The actual freeing is done automatically when
692      * the response is sent. */
693     void *args;
694     xdrproc_t xdr_args_free;
695
696     /* Procedure to be used for encoding the eventual return value into XDR. */
697     xdrproc_t xdr_result;
698
699     /* Functions to be called when the response is sent to clean up any
700      * resources. */
701     struct cleanup_list *cleanup;
702 } RPCRequest;
703
704 extern void async_rpc_send_reply(RPCRequest *req, void *result);
705
706 #define NFS_PROGRAM 100003
707 #define NFS_V3 3
708
709 #define NFSPROC3_NULL 0
710 extern void nfsproc3_null_3_svc(void *, RPCRequest *);
711 #define NFSPROC3_GETATTR 1
712 extern void nfsproc3_getattr_3_svc(nfs_fh3 *, RPCRequest *);
713 #define NFSPROC3_SETATTR 2
714 extern void nfsproc3_setattr_3_svc(setattr3args *, RPCRequest *);
715 #define NFSPROC3_LOOKUP 3
716 extern void nfsproc3_lookup_3_svc(diropargs3 *, RPCRequest *);
717 #define NFSPROC3_ACCESS 4
718 extern void nfsproc3_access_3_svc(access3args *, RPCRequest *);
719 #define NFSPROC3_READLINK 5
720 extern void nfsproc3_readlink_3_svc(nfs_fh3 *, RPCRequest *);
721 #define NFSPROC3_READ 6
722 extern void nfsproc3_read_3_svc(read3args *, RPCRequest *);
723 #define NFSPROC3_WRITE 7
724 extern void nfsproc3_write_3_svc(write3args *, RPCRequest *);
725 #define NFSPROC3_CREATE 8
726 extern void nfsproc3_create_3_svc(create3args *, RPCRequest *);
727 #define NFSPROC3_MKDIR 9
728 extern void nfsproc3_mkdir_3_svc(mkdir3args *, RPCRequest *);
729 #define NFSPROC3_SYMLINK 10
730 extern void nfsproc3_symlink_3_svc(symlink3args *, RPCRequest *);
731 #define NFSPROC3_MKNOD 11
732 extern void nfsproc3_mknod_3_svc(mknod3args *, RPCRequest *);
733 #define NFSPROC3_REMOVE 12
734 extern void nfsproc3_remove_3_svc(diropargs3 *, RPCRequest *);
735 #define NFSPROC3_RMDIR 13
736 extern void nfsproc3_rmdir_3_svc(diropargs3 *, RPCRequest *);
737 #define NFSPROC3_RENAME 14
738 extern void nfsproc3_rename_3_svc(rename3args *, RPCRequest *);
739 #define NFSPROC3_LINK 15
740 extern void nfsproc3_link_3_svc(link3args *, RPCRequest *);
741 #define NFSPROC3_READDIR 16
742 extern void nfsproc3_readdir_3_svc(readdir3args *, RPCRequest *);
743 #define NFSPROC3_READDIRPLUS 17
744 extern void nfsproc3_readdirplus_3_svc(readdirplus3args *, RPCRequest *);
745 #define NFSPROC3_FSSTAT 18
746 extern void nfsproc3_fsstat_3_svc(nfs_fh3 *, RPCRequest *);
747 #define NFSPROC3_FSINFO 19
748 extern void nfsproc3_fsinfo_3_svc(nfs_fh3 *, RPCRequest *);
749 #define NFSPROC3_PATHCONF 20
750 extern void nfsproc3_pathconf_3_svc(nfs_fh3 *, RPCRequest *);
751 #define NFSPROC3_COMMIT 21
752 extern void nfsproc3_commit_3_svc(commit3args *, RPCRequest *);
753
754 /* the xdr functions */
755
756 extern  bool_t xdr_uint64 (XDR *, uint64*);
757 extern  bool_t xdr_int64 (XDR *, int64*);
758 extern  bool_t xdr_uint32 (XDR *, uint32*);
759 extern  bool_t xdr_int32 (XDR *, int32*);
760 extern  bool_t xdr_filename3 (XDR *, filename3*);
761 extern  bool_t xdr_nfspath3 (XDR *, nfspath3*);
762 extern  bool_t xdr_cookieverf3 (XDR *, cookieverf3);
763 extern  bool_t xdr_createverf3 (XDR *, createverf3);
764 extern  bool_t xdr_writeverf3 (XDR *, writeverf3);
765 extern  bool_t xdr_nfsstat3 (XDR *, nfsstat3*);
766 extern  bool_t xdr_ftype3 (XDR *, ftype3*);
767 extern  bool_t xdr_specdata3 (XDR *, specdata3*);
768 extern  bool_t xdr_nfs_fh3 (XDR *, nfs_fh3*);
769 extern  bool_t xdr_nfstime3 (XDR *, nfstime3*);
770 extern  bool_t xdr_fattr3 (XDR *, fattr3*);
771 extern  bool_t xdr_post_op_attr (XDR *, post_op_attr*);
772 extern  bool_t xdr_wcc_attr (XDR *, wcc_attr*);
773 extern  bool_t xdr_pre_op_attr (XDR *, pre_op_attr*);
774 extern  bool_t xdr_wcc_data (XDR *, wcc_data*);
775 extern  bool_t xdr_post_op_fh3 (XDR *, post_op_fh3*);
776 extern  bool_t xdr_set_uint32 (XDR *, set_uint32*);
777 extern  bool_t xdr_set_uint64 (XDR *, set_uint64*);
778 extern  bool_t xdr_time_how (XDR *, time_how*);
779 extern  bool_t xdr_set_time (XDR *, set_time*);
780 extern  bool_t xdr_sattr3 (XDR *, sattr3*);
781 extern  bool_t xdr_diropargs3 (XDR *, diropargs3*);
782 extern  bool_t xdr_diropres3ok (XDR *, diropres3ok*);
783 extern  bool_t xdr_diropres3 (XDR *, diropres3*);
784 extern  bool_t xdr_wccstat3 (XDR *, wccstat3*);
785 extern  bool_t xdr_getattr3res (XDR *, getattr3res*);
786 extern  bool_t xdr_sattrguard3 (XDR *, sattrguard3*);
787 extern  bool_t xdr_setattr3args (XDR *, setattr3args*);
788 extern  bool_t xdr_lookup3resok (XDR *, lookup3resok*);
789 extern  bool_t xdr_lookup3res (XDR *, lookup3res*);
790 extern  bool_t xdr_access3args (XDR *, access3args*);
791 extern  bool_t xdr_access3resok (XDR *, access3resok*);
792 extern  bool_t xdr_access3res (XDR *, access3res*);
793 extern  bool_t xdr_readlink3resok (XDR *, readlink3resok*);
794 extern  bool_t xdr_readlink3res (XDR *, readlink3res*);
795 extern  bool_t xdr_read3args (XDR *, read3args*);
796 extern  bool_t xdr_read3resok (XDR *, read3resok*);
797 extern  bool_t xdr_read3res (XDR *, read3res*);
798 extern  bool_t xdr_stable_how (XDR *, stable_how*);
799 extern  bool_t xdr_write3args (XDR *, write3args*);
800 extern  bool_t xdr_write3resok (XDR *, write3resok*);
801 extern  bool_t xdr_write3res (XDR *, write3res*);
802 extern  bool_t xdr_createmode3 (XDR *, createmode3*);
803 extern  bool_t xdr_createhow3 (XDR *, createhow3*);
804 extern  bool_t xdr_create3args (XDR *, create3args*);
805 extern  bool_t xdr_mkdir3args (XDR *, mkdir3args*);
806 extern  bool_t xdr_symlinkdata3 (XDR *, symlinkdata3*);
807 extern  bool_t xdr_symlink3args (XDR *, symlink3args*);
808 extern  bool_t xdr_devicedata3 (XDR *, devicedata3*);
809 extern  bool_t xdr_mknoddata3 (XDR *, mknoddata3*);
810 extern  bool_t xdr_mknod3args (XDR *, mknod3args*);
811 extern  bool_t xdr_rename3args (XDR *, rename3args*);
812 extern  bool_t xdr_rename3wcc (XDR *, rename3wcc*);
813 extern  bool_t xdr_rename3res (XDR *, rename3res*);
814 extern  bool_t xdr_link3args (XDR *, link3args*);
815 extern  bool_t xdr_link3wcc (XDR *, link3wcc*);
816 extern  bool_t xdr_link3res (XDR *, link3res*);
817 extern  bool_t xdr_readdir3args (XDR *, readdir3args*);
818 extern  bool_t xdr_entry3 (XDR *, entry3*);
819 extern  bool_t xdr_dirlist3 (XDR *, dirlist3*);
820 extern  bool_t xdr_readdir3resok (XDR *, readdir3resok*);
821 extern  bool_t xdr_readdir3res (XDR *, readdir3res*);
822 extern  bool_t xdr_readdirplus3args (XDR *, readdirplus3args*);
823 extern  bool_t xdr_entryplus3 (XDR *, entryplus3*);
824 extern  bool_t xdr_dirlistplus3 (XDR *, dirlistplus3*);
825 extern  bool_t xdr_readdirplus3resok (XDR *, readdirplus3resok*);
826 extern  bool_t xdr_readdirplus3res (XDR *, readdirplus3res*);
827 extern  bool_t xdr_fsstat3resok (XDR *, fsstat3resok*);
828 extern  bool_t xdr_fsstat3res (XDR *, fsstat3res*);
829 extern  bool_t xdr_fsinfo3resok (XDR *, fsinfo3resok*);
830 extern  bool_t xdr_fsinfo3res (XDR *, fsinfo3res*);
831 extern  bool_t xdr_pathconf3resok (XDR *, pathconf3resok*);
832 extern  bool_t xdr_pathconf3res (XDR *, pathconf3res*);
833 extern  bool_t xdr_commit3args (XDR *, commit3args*);
834 extern  bool_t xdr_commit3resok (XDR *, commit3resok*);
835 extern  bool_t xdr_commit3res (XDR *, commit3res*);
836
837 extern void xdr_string_create(XDR *xdrs, GString *string, enum xdr_op op);
838
839 #ifdef __cplusplus
840 }
841 #endif
842
843 #endif /* !_NFS3_PROT_H_RPCGEN */