]> git.ozlabs.org Git - ccan/blob - ccan/nfs/libnfs-raw.h
various: add LICENSE comments.
[ccan] / ccan / nfs / libnfs-raw.h
1 #ifndef CCAN_NFS_LIBNFS_RAW_H
2 #define CCAN_NFS_LIBNFS_RAW_H
3 /*
4    Copyright (C) by Ronnie Sahlberg <ronniesahlberg@gmail.com> 2010
5    
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10    
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15    
16    You should have received a copy of the GNU General Public License
17    along with this program; if not, see <http://www.gnu.org/licenses/>.
18 */
19 /*
20  * This is the lowlevel interface to access NFS resources.
21  * Through this interface you have access to the full gamut of nfs and nfs related
22  * protocol as well as the XDR encoded/decoded structures.
23  */
24 #include <stdint.h>
25
26 struct rpc_data {
27        int size;
28        unsigned char *data;
29 };
30
31 struct rpc_context;
32 struct rpc_context *rpc_init_context(void);
33 void rpc_destroy_context(struct rpc_context *rpc);
34
35 struct AUTH;
36 void rpc_set_auth(struct rpc_context *rpc, struct AUTH *auth);
37
38 int rpc_get_fd(struct rpc_context *rpc);
39 int rpc_which_events(struct rpc_context *rpc);
40 int rpc_service(struct rpc_context *rpc, int revents);
41 char *rpc_get_error(struct rpc_context *rpc);
42
43
44 #define RPC_STATUS_SUCCESS              0
45 #define RPC_STATUS_ERROR                1
46 #define RPC_STATUS_CANCEL               2
47
48 typedef void (*rpc_cb)(struct rpc_context *rpc, int status, void *data, void *private_data);
49
50 /*
51  * Async connection to the tcp port at server:port.
52  * Function returns
53  *  0 : The connection was initiated. Once the connection establish finishes, the callback will be invoked.
54  * <0 : An error occurred when trying to set up the connection. The callback will not be invoked.
55  *
56  * When the callback is invoked, status indicates the result:
57  * RPC_STATUS_SUCCESS : The tcp connection was successfully established.
58  *                      data is NULL.
59  * RPC_STATUS_ERROR   : The connection failed to establish.
60  *                      data is the erro string.
61  * RPC_STATUS_CANCEL  : The connection attempt was aborted before it could complete.
62  *                    : data is NULL.
63  */
64 int rpc_connect_async(struct rpc_context *rpc, const char *server, int port, int use_privileged_port, rpc_cb cb, void *private_data);
65 /*
66  * When disconnecting a connection in flight. All commands in flight will be called with the callback
67  * and status RPC_STATUS_ERROR. Data will be the error string for the disconnection.
68  */
69 int rpc_disconnect(struct rpc_context *rpc, char *error);
70
71 void rpc_set_error(struct rpc_context *rpc, char *error_string, ...);
72
73
74 /*
75  * PORTMAP FUNCTIONS
76  */
77
78 /*
79  * Call PORTMAPPER/NULL
80  * Function returns
81  *  0 : The connection was initiated. Once the connection establish finishes, the callback will be invoked.
82  * <0 : An error occurred when trying to set up the connection. The callback will not be invoked.
83  *
84  * When the callback is invoked, status indicates the result:
85  * RPC_STATUS_SUCCESS : We got a successful response from the portmapper daemon.
86  *                      data is NULL.
87  * RPC_STATUS_ERROR   : An error occurred when trying to contact the portmapper.
88  *                      data is the error string.
89  * RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
90  *                     data is NULL.
91  */
92 int rpc_pmap_null_async(struct rpc_context *rpc, rpc_cb cb, void *private_data);
93
94
95 /*
96  * Call PORTMAPPER/GETPORT.
97  * Function returns
98  *  0 : The connection was initiated. Once the connection establish finishes, the callback will be invoked.
99  * <0 : An error occurred when trying to set up the connection. The callback will not be invoked.
100  *
101  * When the callback is invoked, status indicates the result:
102  * RPC_STATUS_SUCCESS : We got a successful response from the portmapper daemon.
103  *                      data is a (uint32_t *), containing the port returned.
104  * RPC_STATUS_ERROR   : An error occurred when trying to contact the portmapper.
105  *                      data is the error string.
106  * RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
107  *                     data is NULL.
108  */
109 int rpc_pmap_getport_async(struct rpc_context *rpc, int program, int version, rpc_cb cb, void *private_data);
110
111
112
113 /*
114  * MOUNT FUNCTIONS
115  */
116 char *mountstat3_to_str(int stat);
117 int mountstat3_to_errno(int error);
118
119 /*
120  * Call MOUNT/NULL
121  * Function returns
122  *  0 : The call was initiated. The callback will be invoked when the call completes.
123  * <0 : An error occurred when trying to set up the call. The callback will not be invoked.
124  *
125  * When the callback is invoked, status indicates the result:
126  * RPC_STATUS_SUCCESS : We got a successful response from the mount daemon.
127  *                      data is NULL.
128  * RPC_STATUS_ERROR   : An error occurred when trying to contact the mount daemon.
129  *                      data is the error string.
130  * RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
131  *                     data is NULL.
132  */
133 int rpc_mount_null_async(struct rpc_context *rpc, rpc_cb cb, void *private_data);
134
135 /*
136  * Call MOUNT/MNT
137  * Function returns
138  *  0 : The call was initiated. The callback will be invoked when the call completes.
139  * <0 : An error occurred when trying to set up the call. The callback will not be invoked.
140  *
141  * When the callback is invoked, status indicates the result:
142  * RPC_STATUS_SUCCESS : We got a successful response from the mount daemon.
143  *                      data is  mountres3 *.
144  * RPC_STATUS_ERROR   : An error occurred when trying to contact the mount daemon.
145  *                      data is the error string.
146  * RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
147  *                     data is NULL.
148  */
149 int rpc_mount_mnt_async(struct rpc_context *rpc, rpc_cb cb, char *export, void *private_data);
150
151 /*
152  * Call MOUNT/DUMP
153  * Function returns
154  *  0 : The call was initiated. The callback will be invoked when the call completes.
155  * <0 : An error occurred when trying to set up the call. The callback will not be invoked.
156  *
157  * When the callback is invoked, status indicates the result:
158  * RPC_STATUS_SUCCESS : We got a successful response from the mount daemon.
159  *                      data is a mountlist.
160  * RPC_STATUS_ERROR   : An error occurred when trying to contact the mount daemon.
161  *                      data is the error string.
162  * RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
163  *                     data is NULL.
164  */
165 int rpc_mount_dump_async(struct rpc_context *rpc, rpc_cb cb, void *private_data);
166
167 /*
168  * Call MOUNT/UMNT
169  * Function returns
170  *  0 : The call was initiated. The callback will be invoked when the call completes.
171  * <0 : An error occurred when trying to set up the call. The callback will not be invoked.
172  *
173  * When the callback is invoked, status indicates the result:
174  * RPC_STATUS_SUCCESS : We got a successful response from the mount daemon.
175  *                      data NULL.
176  * RPC_STATUS_ERROR   : An error occurred when trying to contact the mount daemon.
177  *                      data is the error string.
178  * RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
179  *                     data is NULL.
180  */
181 int rpc_mount_umnt_async(struct rpc_context *rpc, rpc_cb cb, char *export, void *private_data);
182
183 /*
184  * Call MOUNT/UMNTALL
185  * Function returns
186  *  0 : The call was initiated. The callback will be invoked when the call completes.
187  * <0 : An error occurred when trying to set up the call. The callback will not be invoked.
188  *
189  * When the callback is invoked, status indicates the result:
190  * RPC_STATUS_SUCCESS : We got a successful response from the mount daemon.
191  *                      data NULL.
192  * RPC_STATUS_ERROR   : An error occurred when trying to contact the mount daemon.
193  *                      data is the error string.
194  * RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
195  *                     data is NULL.
196  */
197 int rpc_mount_umntall_async(struct rpc_context *rpc, rpc_cb cb, void *private_data);
198
199 /*
200  * Call MOUNT/EXPORT
201  * Function returns
202  *  0 : The call was initiated. The callback will be invoked when the call completes.
203  * <0 : An error occurred when trying to set up the call. The callback will not be invoked.
204  *
205  * When the callback is invoked, status indicates the result:
206  * RPC_STATUS_SUCCESS : We got a successful response from the mount daemon.
207  *                      data is an exports.
208  * RPC_STATUS_ERROR   : An error occurred when trying to contact the mount daemon.
209  *                      data is the error string.
210  * RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
211  *                     data is NULL.
212  */
213 int rpc_mount_export_async(struct rpc_context *rpc, rpc_cb cb, void *private_data);
214
215
216
217
218 /*
219  * NFS FUNCTIONS
220  */
221 struct nfs_fh3;
222 char *nfsstat3_to_str(int error);
223 int nfsstat3_to_errno(int error);
224
225 /*
226  * Call NFS/NULL
227  * Function returns
228  *  0 : The call was initiated. The callback will be invoked when the call completes.
229  * <0 : An error occurred when trying to set up the call. The callback will not be invoked.
230  *
231  * When the callback is invoked, status indicates the result:
232  * RPC_STATUS_SUCCESS : We got a successful response from the nfs daemon.
233  *                      data is NULL.
234  * RPC_STATUS_ERROR   : An error occurred when trying to contact the nfs daemon.
235  *                      data is the error string.
236  * RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
237  *                     data is NULL.
238  */
239 int rpc_nfs_null_async(struct rpc_context *rpc, rpc_cb cb, void *private_data);
240
241 /*
242  * Call NFS/GETATTR
243  * Function returns
244  *  0 : The call was initiated. The callback will be invoked when the call completes.
245  * <0 : An error occurred when trying to set up the call. The callback will not be invoked.
246  *
247  * When the callback is invoked, status indicates the result:
248  * RPC_STATUS_SUCCESS : We got a successful response from the nfs daemon.
249  *                      data is GETATTR3res
250  * RPC_STATUS_ERROR   : An error occurred when trying to contact the nfs daemon.
251  *                      data is the error string.
252  * RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
253  *                     data is NULL.
254  */
255 int rpc_nfs_getattr_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, void *private_data);
256
257 /*
258  * Call NFS/LOOKUP
259  * Function returns
260  *  0 : The call was initiated. The callback will be invoked when the call completes.
261  * <0 : An error occurred when trying to set up the call. The callback will not be invoked.
262  *
263  * When the callback is invoked, status indicates the result:
264  * RPC_STATUS_SUCCESS : We got a successful response from the nfs daemon.
265  *                      data is LOOKUP3res
266  * RPC_STATUS_ERROR   : An error occurred when trying to contact the nfs daemon.
267  *                      data is the error string.
268  * RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
269  *                     data is NULL.
270  */
271 int rpc_nfs_lookup_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, char *name, void *private_data);
272
273 /*
274  * Call NFS/ACCESS
275  * Function returns
276  *  0 : The call was initiated. The callback will be invoked when the call completes.
277  * <0 : An error occurred when trying to set up the call. The callback will not be invoked.
278  *
279  * When the callback is invoked, status indicates the result:
280  * RPC_STATUS_SUCCESS : We got a successful response from the nfs daemon.
281  *                      data is ACCESS3res
282  * RPC_STATUS_ERROR   : An error occurred when trying to contact the nfs daemon.
283  *                      data is the error string.
284  * RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
285  *                     data is NULL.
286  */
287 int rpc_nfs_access_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, int access, void *private_data);
288
289 /*
290  * Call NFS/READ
291  * Function returns
292  *  0 : The call was initiated. The callback will be invoked when the call completes.
293  * <0 : An error occurred when trying to set up the call. The callback will not be invoked.
294  *
295  * When the callback is invoked, status indicates the result:
296  * RPC_STATUS_SUCCESS : We got a successful response from the nfs daemon.
297  *                      data is ACCESS3res
298  * RPC_STATUS_ERROR   : An error occurred when trying to contact the nfs daemon.
299  *                      data is the error string.
300  * RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
301  *                     data is NULL.
302  */
303 int rpc_nfs_read_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, nfs_off_t offset, size_t count, void *private_data);
304
305 /*
306  * Call NFS/WRITE
307  * Function returns
308  *  0 : The call was initiated. The callback will be invoked when the call completes.
309  * <0 : An error occurred when trying to set up the call. The callback will not be invoked.
310  *
311  * When the callback is invoked, status indicates the result:
312  * RPC_STATUS_SUCCESS : We got a successful response from the nfs daemon.
313  *                      data is WRITE3res *
314  * RPC_STATUS_ERROR   : An error occurred when trying to contact the nfs daemon.
315  *                      data is the error string.
316  * RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
317  *                     data is NULL.
318  */
319 int rpc_nfs_write_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, char *buf, nfs_off_t offset, size_t count, int stable_how, void *private_data);
320
321 /*
322  * Call NFS/COMMIT
323  * Function returns
324  *  0 : The call was initiated. The callback will be invoked when the call completes.
325  * <0 : An error occurred when trying to set up the call. The callback will not be invoked.
326  *
327  * When the callback is invoked, status indicates the result:
328  * RPC_STATUS_SUCCESS : We got a successful response from the nfs daemon.
329  *                      data is COMMIT3res *
330  * RPC_STATUS_ERROR   : An error occurred when trying to contact the nfs daemon.
331  *                      data is the error string.
332  * RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
333  *                     data is NULL.
334  */
335 int rpc_nfs_commit_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, void *private_data);
336
337
338 /*
339  * Call NFS/SETATTR
340  * Function returns
341  *  0 : The call was initiated. The callback will be invoked when the call completes.
342  * <0 : An error occurred when trying to set up the call. The callback will not be invoked.
343  *
344  * When the callback is invoked, status indicates the result:
345  * RPC_STATUS_SUCCESS : We got a successful response from the nfs daemon.
346  *                      data is SETATTR3res *
347  * RPC_STATUS_ERROR   : An error occurred when trying to contact the nfs daemon.
348  *                      data is the error string.
349  * RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
350  *                     data is NULL.
351  */
352 struct SETATTR3args;
353 int rpc_nfs_setattr_async(struct rpc_context *rpc, rpc_cb cb, struct SETATTR3args *args, void *private_data);
354
355
356
357 /*
358  * Call NFS/MKDIR
359  * Function returns
360  *  0 : The call was initiated. The callback will be invoked when the call completes.
361  * <0 : An error occurred when trying to set up the call. The callback will not be invoked.
362  *
363  * When the callback is invoked, status indicates the result:
364  * RPC_STATUS_SUCCESS : We got a successful response from the nfs daemon.
365  *                      data is MKDIR3res *
366  * RPC_STATUS_ERROR   : An error occurred when trying to contact the nfs daemon.
367  *                      data is the error string.
368  * RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
369  *                     data is NULL.
370  */
371 int rpc_nfs_mkdir_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, char *dir, void *private_data);
372
373
374
375
376
377 /*
378  * Call NFS/RMDIR
379  * Function returns
380  *  0 : The call was initiated. The callback will be invoked when the call completes.
381  * <0 : An error occurred when trying to set up the call. The callback will not be invoked.
382  *
383  * When the callback is invoked, status indicates the result:
384  * RPC_STATUS_SUCCESS : We got a successful response from the nfs daemon.
385  *                      data is RMDIR3res *
386  * RPC_STATUS_ERROR   : An error occurred when trying to contact the nfs daemon.
387  *                      data is the error string.
388  * RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
389  *                     data is NULL.
390  */
391 int rpc_nfs_rmdir_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, char *dir, void *private_data);
392
393
394
395
396 /*
397  * Call NFS/CREATE
398  * Function returns
399  *  0 : The call was initiated. The callback will be invoked when the call completes.
400  * <0 : An error occurred when trying to set up the call. The callback will not be invoked.
401  *
402  * When the callback is invoked, status indicates the result:
403  * RPC_STATUS_SUCCESS : We got a successful response from the nfs daemon.
404  *                      data is CREATE3res *
405  * RPC_STATUS_ERROR   : An error occurred when trying to contact the nfs daemon.
406  *                      data is the error string.
407  * RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
408  *                     data is NULL.
409  */
410 int rpc_nfs_create_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, char *name, int mode, void *private_data);
411
412
413
414
415 /*
416  * Call NFS/REMOVE
417  * Function returns
418  *  0 : The call was initiated. The callback will be invoked when the call completes.
419  * <0 : An error occurred when trying to set up the call. The callback will not be invoked.
420  *
421  * When the callback is invoked, status indicates the result:
422  * RPC_STATUS_SUCCESS : We got a successful response from the nfs daemon.
423  *                      data is REMOVE3res *
424  * RPC_STATUS_ERROR   : An error occurred when trying to contact the nfs daemon.
425  *                      data is the error string.
426  * RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
427  *                     data is NULL.
428  */
429 int rpc_nfs_remove_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, char *name, void *private_data);
430
431
432
433 /*
434  * Call NFS/REMOVE
435  * Function returns
436  *  0 : The call was initiated. The callback will be invoked when the call completes.
437  * <0 : An error occurred when trying to set up the call. The callback will not be invoked.
438  *
439  * When the callback is invoked, status indicates the result:
440  * RPC_STATUS_SUCCESS : We got a successful response from the nfs daemon.
441  *                      data is READDIR3res *
442  * RPC_STATUS_ERROR   : An error occurred when trying to contact the nfs daemon.
443  *                      data is the error string.
444  * RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
445  *                     data is NULL.
446  */
447 int rpc_nfs_readdir_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, uint64_t cookie, char *cookieverf, int count, void *private_data);
448
449 /*
450  * Call NFS/FSSTAT
451  * Function returns
452  *  0 : The call was initiated. The callback will be invoked when the call completes.
453  * <0 : An error occurred when trying to set up the call. The callback will not be invoked.
454  *
455  * When the callback is invoked, status indicates the result:
456  * RPC_STATUS_SUCCESS : We got a successful response from the nfs daemon.
457  *                      data is FSSTAT3res
458  * RPC_STATUS_ERROR   : An error occurred when trying to contact the nfs daemon.
459  *                      data is the error string.
460  * RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
461  *                     data is NULL.
462  */
463 int rpc_nfs_fsstat_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, void *private_data);
464
465
466
467
468 /*
469  * Call NFS/READLINK
470  * Function returns
471  *  0 : The call was initiated. The callback will be invoked when the call completes.
472  * <0 : An error occurred when trying to set up the call. The callback will not be invoked.
473  *
474  * When the callback is invoked, status indicates the result:
475  * RPC_STATUS_SUCCESS : We got a successful response from the nfs daemon.
476  *                      data is READLINK3res *
477  * RPC_STATUS_ERROR   : An error occurred when trying to contact the nfs daemon.
478  *                      data is the error string.
479  * RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
480  *                     data is NULL.
481  */
482 int rpc_nfs_readlink_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, void *private_data);
483
484
485
486 /*
487  * Call NFS/SYMLINK
488  * Function returns
489  *  0 : The call was initiated. The callback will be invoked when the call completes.
490  * <0 : An error occurred when trying to set up the call. The callback will not be invoked.
491  *
492  * When the callback is invoked, status indicates the result:
493  * RPC_STATUS_SUCCESS : We got a successful response from the nfs daemon.
494  *                      data is SYMLINK3res *
495  * RPC_STATUS_ERROR   : An error occurred when trying to contact the nfs daemon.
496  *                      data is the error string.
497  * RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
498  *                     data is NULL.
499  */
500 int rpc_nfs_symlink_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, char *newname, char *oldpath, void *private_data);
501
502
503 /*
504  * Call NFS/RENAME
505  * Function returns
506  *  0 : The call was initiated. The callback will be invoked when the call completes.
507  * <0 : An error occurred when trying to set up the call. The callback will not be invoked.
508  *
509  * When the callback is invoked, status indicates the result:
510  * RPC_STATUS_SUCCESS : We got a successful response from the nfs daemon.
511  *                      data is RENAME3res *
512  * RPC_STATUS_ERROR   : An error occurred when trying to contact the nfs daemon.
513  *                      data is the error string.
514  * RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
515  *                     data is NULL.
516  */
517 int rpc_nfs_rename_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *olddir, char *oldname, struct nfs_fh3 *newdir, char *newname, void *private_data);
518
519
520
521 /*
522  * Call NFS/LINK
523  * Function returns
524  *  0 : The call was initiated. The callback will be invoked when the call completes.
525  * <0 : An error occurred when trying to set up the call. The callback will not be invoked.
526  *
527  * When the callback is invoked, status indicates the result:
528  * RPC_STATUS_SUCCESS : We got a successful response from the nfs daemon.
529  *                      data is LINK3res *
530  * RPC_STATUS_ERROR   : An error occurred when trying to contact the nfs daemon.
531  *                      data is the error string.
532  * RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
533  *                     data is NULL.
534  */
535 int rpc_nfs_link_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *file, struct nfs_fh3 *newdir, char *newname, void *private_data);
536
537
538
539
540
541
542
543 /*
544  * NFSACL FUNCTIONS
545  */
546 /*
547  * Call NFSACL/NULL
548  * Function returns
549  *  0 : The call was initiated. The callback will be invoked when the call completes.
550  * <0 : An error occurred when trying to set up the call. The callback will not be invoked.
551  *
552  * When the callback is invoked, status indicates the result:
553  * RPC_STATUS_SUCCESS : We got a successful response from the nfs daemon.
554  *                      data is NULL.
555  * RPC_STATUS_ERROR   : An error occurred when trying to contact the nfs daemon.
556  *                      data is the error string.
557  * RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
558  *                     data is NULL.
559  */
560 int rpc_nfsacl_null_async(struct rpc_context *rpc, rpc_cb cb, void *private_data);
561
562 #endif /* CCAN_NFS_LIBNFS_RAW_H */