2 Copyright (C) 2010 by Ronnie Sahlberg <ronniesahlberg@gmail.com>
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU Lesser General Public License as published by
6 the Free Software Foundation; either version 2.1 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU Lesser General Public License for more details.
14 You should have received a copy of the GNU Lesser General Public License
15 along with this program; if not, see <http://www.gnu.org/licenses/>.
18 * This is the highlevel interface to access NFS resources using a posix-like interface
29 #define EXTERN __declspec( dllexport )
58 * Used for interfacing the async version of the api into an external eventsystem
60 EXTERN
int nfs_get_fd(struct nfs_context
*nfs
);
61 EXTERN
int nfs_which_events(struct nfs_context
*nfs
);
62 EXTERN
int nfs_service(struct nfs_context
*nfs
, int revents
);
63 EXTERN
int nfs_queue_length(struct nfs_context
*nfs
);
66 * Used if you need different credentials than the default for the current user.
69 EXTERN
void nfs_set_auth(struct nfs_context
*nfs
, struct AUTH
*auth
);
73 * When an operation failed, this function can extract a detailed error string.
75 EXTERN
char *nfs_get_error(struct nfs_context
*nfs
);
79 * Callback for all ASYNC nfs functions
81 typedef void (*nfs_cb
)(int err
, struct nfs_context
*nfs
, void *data
, void *private_data
);
84 * Callback for all ASYNC rpc functions
86 typedef void (*rpc_cb
)(struct rpc_context
*rpc
, int status
, void *data
, void *private_data
);
94 * Create an NFS c, the context.
96 * NULL : Failed to create a context.
97 * *nfs : A pointer to an nfs context.
99 EXTERN
struct nfs_context
*nfs_init_context(void);
101 * Destroy an nfs context.
103 EXTERN
void nfs_destroy_context(struct nfs_context
*nfs
);
109 * Get the maximum supported READ3 size by the server
111 EXTERN
uint64_t nfs_get_readmax(struct nfs_context
*nfs
);
114 * Get the maximum supported WRITE3 size by the server
116 EXTERN
uint64_t nfs_get_writemax(struct nfs_context
*nfs
);
125 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
126 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
128 * When the callback is invoked, status indicates the result:
131 * -errno : An error occured.
132 * data is the error string.
134 EXTERN
int nfs_mount_async(struct nfs_context
*nfs
, const char *server
, const char *exportname
, nfs_cb cb
, void *private_data
);
138 * 0 : The operation was successfull.
139 * -errno : The command failed.
141 EXTERN
int nfs_mount(struct nfs_context
*nfs
, const char *server
, const char *exportname
);
150 * Async stat(<filename>)
152 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
153 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
155 * When the callback is invoked, status indicates the result:
157 * data is struct stat *
158 * -errno : An error occured.
159 * data is the error string.
162 EXTERN
int nfs_stat_async(struct nfs_context
*nfs
, const char *path
, nfs_cb cb
, void *private_data
);
164 * Sync stat(<filename>)
166 * 0 : The operation was successfull.
167 * -errno : The command failed.
169 EXTERN
int nfs_stat(struct nfs_context
*nfs
, const char *path
, struct stat
*st
);
176 * Async fstat(nfsfh *)
178 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
179 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
181 * When the callback is invoked, status indicates the result:
183 * data is struct stat *
184 * -errno : An error occured.
185 * data is the error string.
187 EXTERN
int nfs_fstat_async(struct nfs_context
*nfs
, struct nfsfh
*nfsfh
, nfs_cb cb
, void *private_data
);
189 * Sync fstat(nfsfh *)
191 * 0 : The operation was successfull.
192 * -errno : The command failed.
194 EXTERN
int nfs_fstat(struct nfs_context
*nfs
, struct nfsfh
*nfsfh
, struct stat
*st
);
202 * Async open(<filename>)
204 * mode is a combination of the flags : O_RDOLNY, O_WRONLY, O_RDWR , O_SYNC
207 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
208 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
210 * When the callback is invoked, status indicates the result:
212 * data is a struct *nfsfh;
213 * The nfsfh is close using nfs_close().
214 * -errno : An error occured.
215 * data is the error string.
217 EXTERN
int nfs_open_async(struct nfs_context
*nfs
, const char *path
, int mode
, nfs_cb cb
, void *private_data
);
219 * Sync stat(<filename>)
221 * 0 : The operation was successfull. *nfsfh is filled in.
222 * -errno : The command failed.
224 EXTERN
int nfs_open(struct nfs_context
*nfs
, const char *path
, int mode
, struct nfsfh
**nfsfh
);
236 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
237 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
239 * When the callback is invoked, status indicates the result:
242 * -errno : An error occured.
243 * data is the error string.
245 EXTERN
int nfs_close_async(struct nfs_context
*nfs
, struct nfsfh
*nfsfh
, nfs_cb cb
, void *private_data
);
249 * 0 : The operation was successfull.
250 * -errno : The command failed.
252 EXTERN
int nfs_close(struct nfs_context
*nfs
, struct nfsfh
*nfsfh
);
262 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
263 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
265 * When the callback is invoked, status indicates the result:
267 * status is numer of bytes read.
268 * data is a pointer to the returned data.
269 * -errno : An error occured.
270 * data is the error string.
272 EXTERN
int nfs_pread_async(struct nfs_context
*nfs
, struct nfsfh
*nfsfh
, uint64_t offset
, uint64_t count
, nfs_cb cb
, void *private_data
);
276 * >=0 : numer of bytes read.
277 * -errno : An error occured.
279 EXTERN
int nfs_pread(struct nfs_context
*nfs
, struct nfsfh
*nfsfh
, uint64_t offset
, uint64_t count
, char *buf
);
290 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
291 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
293 * When the callback is invoked, status indicates the result:
295 * status is numer of bytes read.
296 * data is a pointer to the returned data.
297 * -errno : An error occured.
298 * data is the error string.
300 EXTERN
int nfs_read_async(struct nfs_context
*nfs
, struct nfsfh
*nfsfh
, uint64_t count
, nfs_cb cb
, void *private_data
);
304 * >=0 : numer of bytes read.
305 * -errno : An error occured.
307 EXTERN
int nfs_read(struct nfs_context
*nfs
, struct nfsfh
*nfsfh
, uint64_t count
, char *buf
);
319 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
320 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
322 * When the callback is invoked, status indicates the result:
324 * status is numer of bytes written.
325 * -errno : An error occured.
326 * data is the error string.
328 EXTERN
int nfs_pwrite_async(struct nfs_context
*nfs
, struct nfsfh
*nfsfh
, uint64_t offset
, uint64_t count
, char *buf
, nfs_cb cb
, void *private_data
);
332 * >=0 : numer of bytes written.
333 * -errno : An error occured.
335 EXTERN
int nfs_pwrite(struct nfs_context
*nfs
, struct nfsfh
*nfsfh
, uint64_t offset
, uint64_t count
, char *buf
);
345 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
346 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
348 * When the callback is invoked, status indicates the result:
350 * status is numer of bytes written.
351 * -errno : An error occured.
352 * data is the error string.
354 EXTERN
int nfs_write_async(struct nfs_context
*nfs
, struct nfsfh
*nfsfh
, uint64_t count
, char *buf
, nfs_cb cb
, void *private_data
);
358 * >=0 : numer of bytes written.
359 * -errno : An error occured.
361 EXTERN
int nfs_write(struct nfs_context
*nfs
, struct nfsfh
*nfsfh
, uint64_t count
, char *buf
);
371 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
372 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
374 * When the callback is invoked, status indicates the result:
376 * data is uint64_t * for the current position.
377 * -errno : An error occured.
378 * data is the error string.
380 EXTERN
int nfs_lseek_async(struct nfs_context
*nfs
, struct nfsfh
*nfsfh
, uint64_t offset
, int whence
, nfs_cb cb
, void *private_data
);
384 * >=0 : numer of bytes read.
385 * -errno : An error occured.
387 EXTERN
int nfs_lseek(struct nfs_context
*nfs
, struct nfsfh
*nfsfh
, uint64_t offset
, int whence
, uint64_t *current_offset
);
397 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
398 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
400 * When the callback is invoked, status indicates the result:
402 * -errno : An error occured.
403 * data is the error string.
405 EXTERN
int nfs_fsync_async(struct nfs_context
*nfs
, struct nfsfh
*nfsfh
, nfs_cb cb
, void *private_data
);
410 * -errno : An error occured.
412 EXTERN
int nfs_fsync(struct nfs_context
*nfs
, struct nfsfh
*nfsfh
);
423 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
424 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
426 * When the callback is invoked, status indicates the result:
428 * -errno : An error occured.
429 * data is the error string.
431 EXTERN
int nfs_truncate_async(struct nfs_context
*nfs
, const char *path
, uint64_t length
, nfs_cb cb
, void *private_data
);
436 * -errno : An error occured.
438 EXTERN
int nfs_truncate(struct nfs_context
*nfs
, const char *path
, uint64_t length
);
449 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
450 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
452 * When the callback is invoked, status indicates the result:
454 * -errno : An error occured.
455 * data is the error string.
457 EXTERN
int nfs_ftruncate_async(struct nfs_context
*nfs
, struct nfsfh
*nfsfh
, uint64_t length
, nfs_cb cb
, void *private_data
);
462 * -errno : An error occured.
464 EXTERN
int nfs_ftruncate(struct nfs_context
*nfs
, struct nfsfh
*nfsfh
, uint64_t length
);
478 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
479 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
481 * When the callback is invoked, status indicates the result:
483 * -errno : An error occured.
484 * data is the error string.
486 EXTERN
int nfs_mkdir_async(struct nfs_context
*nfs
, const char *path
, nfs_cb cb
, void *private_data
);
491 * -errno : An error occured.
493 EXTERN
int nfs_mkdir(struct nfs_context
*nfs
, const char *path
);
504 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
505 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
507 * When the callback is invoked, status indicates the result:
509 * -errno : An error occured.
510 * data is the error string.
512 EXTERN
int nfs_rmdir_async(struct nfs_context
*nfs
, const char *path
, nfs_cb cb
, void *private_data
);
517 * -errno : An error occured.
519 EXTERN
int nfs_rmdir(struct nfs_context
*nfs
, const char *path
);
531 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
532 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
534 * When the callback is invoked, status indicates the result:
536 * data is a struct *nfsfh;
537 * -errno : An error occured.
538 * data is the error string.
540 EXTERN
int nfs_creat_async(struct nfs_context
*nfs
, const char *path
, int mode
, nfs_cb cb
, void *private_data
);
545 * -errno : An error occured.
547 EXTERN
int nfs_creat(struct nfs_context
*nfs
, const char *path
, int mode
, struct nfsfh
**nfsfh
);
557 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
558 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
560 * When the callback is invoked, status indicates the result:
562 * -errno : An error occured.
563 * data is the error string.
565 EXTERN
int nfs_mknod_async(struct nfs_context
*nfs
, const char *path
, int mode
, int dev
, nfs_cb cb
, void *private_data
);
570 * -errno : An error occured.
572 EXTERN
int nfs_mknod(struct nfs_context
*nfs
, const char *path
, int mode
, int dev
);
583 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
584 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
586 * When the callback is invoked, status indicates the result:
589 * -errno : An error occured.
590 * data is the error string.
592 EXTERN
int nfs_unlink_async(struct nfs_context
*nfs
, const char *path
, nfs_cb cb
, void *private_data
);
597 * -errno : An error occured.
599 EXTERN
int nfs_unlink(struct nfs_context
*nfs
, const char *path
);
612 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
613 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
615 * When struct nfsdir * is returned, this resource is closed/freed by calling nfs_closedir()
617 * When the callback is invoked, status indicates the result:
619 * data is struct nfsdir *
620 * -errno : An error occured.
621 * data is the error string.
623 EXTERN
int nfs_opendir_async(struct nfs_context
*nfs
, const char *path
, nfs_cb cb
, void *private_data
);
628 * -errno : An error occured.
630 EXTERN
int nfs_opendir(struct nfs_context
*nfs
, const char *path
, struct nfsdir
**nfsdir
);
638 struct nfsdirent
*next
;
642 /* some extra fields we get for free through the READDIRPLUS3 call. You need libnfs-raw-nfs.h for these */
643 uint32_t type
; /* NF3REG, NF3DIR, NF3BLK, ... */
646 struct timeval atime
;
647 struct timeval mtime
;
648 struct timeval ctime
;
651 * nfs_readdir() never blocks, so no special sync/async versions are available
653 EXTERN
struct nfsdirent
*nfs_readdir(struct nfs_context
*nfs
, struct nfsdir
*nfsdir
);
661 * nfs_closedir() never blocks, so no special sync/async versions are available
663 EXTERN
void nfs_closedir(struct nfs_context
*nfs
, struct nfsdir
*nfsdir
);
671 * Async statvfs(<dirname>)
673 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
674 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
676 * When the callback is invoked, status indicates the result:
678 * data is struct statvfs *
679 * -errno : An error occured.
680 * data is the error string.
683 EXTERN
int nfs_statvfs_async(struct nfs_context
*nfs
, const char *path
, nfs_cb cb
, void *private_data
);
685 * Sync statvfs(<dirname>)
687 * 0 : The operation was successfull.
688 * -errno : The command failed.
690 EXTERN
int nfs_statvfs(struct nfs_context
*nfs
, const char *path
, struct statvfs
*svfs
);
697 * Async readlink(<name>)
699 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
700 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
702 * When the callback is invoked, status indicates the result:
705 * data is only valid during the callback and is automatically freed when the callback returns.
706 * -errno : An error occured.
707 * data is the error string.
710 EXTERN
int nfs_readlink_async(struct nfs_context
*nfs
, const char *path
, nfs_cb cb
, void *private_data
);
712 * Sync readlink(<name>)
714 * 0 : The operation was successfull.
715 * -errno : The command failed.
717 EXTERN
int nfs_readlink(struct nfs_context
*nfs
, const char *path
, char *buf
, int bufsize
);
725 * Async chmod(<name>)
727 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
728 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
730 * When the callback is invoked, status indicates the result:
733 * -errno : An error occured.
734 * data is the error string.
736 EXTERN
int nfs_chmod_async(struct nfs_context
*nfs
, const char *path
, int mode
, nfs_cb cb
, void *private_data
);
740 * 0 : The operation was successfull.
741 * -errno : The command failed.
743 EXTERN
int nfs_chmod(struct nfs_context
*nfs
, const char *path
, int mode
);
751 * Async fchmod(<handle>)
753 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
754 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
756 * When the callback is invoked, status indicates the result:
759 * -errno : An error occured.
760 * data is the error string.
762 EXTERN
int nfs_fchmod_async(struct nfs_context
*nfs
, struct nfsfh
*nfsfh
, int mode
, nfs_cb cb
, void *private_data
);
764 * Sync fchmod(<handle>)
766 * 0 : The operation was successfull.
767 * -errno : The command failed.
769 EXTERN
int nfs_fchmod(struct nfs_context
*nfs
, struct nfsfh
*nfsfh
, int mode
);
777 * Async chown(<name>)
779 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
780 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
782 * When the callback is invoked, status indicates the result:
785 * -errno : An error occured.
786 * data is the error string.
788 EXTERN
int nfs_chown_async(struct nfs_context
*nfs
, const char *path
, int uid
, int gid
, nfs_cb cb
, void *private_data
);
792 * 0 : The operation was successfull.
793 * -errno : The command failed.
795 EXTERN
int nfs_chown(struct nfs_context
*nfs
, const char *path
, int uid
, int gid
);
803 * Async fchown(<handle>)
805 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
806 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
808 * When the callback is invoked, status indicates the result:
811 * -errno : An error occured.
812 * data is the error string.
814 EXTERN
int nfs_fchown_async(struct nfs_context
*nfs
, struct nfsfh
*nfsfh
, int uid
, int gid
, nfs_cb cb
, void *private_data
);
816 * Sync fchown(<handle>)
818 * 0 : The operation was successfull.
819 * -errno : The command failed.
821 EXTERN
int nfs_fchown(struct nfs_context
*nfs
, struct nfsfh
*nfsfh
, int uid
, int gid
);
830 * Async utimes(<path>)
832 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
833 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
835 * When the callback is invoked, status indicates the result:
838 * -errno : An error occured.
839 * data is the error string.
841 EXTERN
int nfs_utimes_async(struct nfs_context
*nfs
, const char *path
, struct timeval
*times
, nfs_cb cb
, void *private_data
);
843 * Sync utimes(<path>)
845 * 0 : The operation was successfull.
846 * -errno : The command failed.
848 EXTERN
int nfs_utimes(struct nfs_context
*nfs
, const char *path
, struct timeval
*times
);
855 * Async utime(<path>)
857 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
858 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
860 * When the callback is invoked, status indicates the result:
863 * -errno : An error occured.
864 * data is the error string.
867 EXTERN
int nfs_utime_async(struct nfs_context
*nfs
, const char *path
, struct utimbuf
*times
, nfs_cb cb
, void *private_data
);
871 * 0 : The operation was successfull.
872 * -errno : The command failed.
874 EXTERN
int nfs_utime(struct nfs_context
*nfs
, const char *path
, struct utimbuf
*times
);
883 * Async access(<path>)
885 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
886 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
888 * When the callback is invoked, status indicates the result:
891 * -errno : An error occured.
892 * data is the error string.
894 EXTERN
int nfs_access_async(struct nfs_context
*nfs
, const char *path
, int mode
, nfs_cb cb
, void *private_data
);
896 * Sync access(<path>)
898 * 0 : The operation was successfull.
899 * -errno : The command failed.
901 EXTERN
int nfs_access(struct nfs_context
*nfs
, const char *path
, int mode
);
910 * Async symlink(<path>)
912 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
913 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
915 * When the callback is invoked, status indicates the result:
918 * -errno : An error occured.
919 * data is the error string.
921 EXTERN
int nfs_symlink_async(struct nfs_context
*nfs
, const char *oldpath
, const char *newpath
, nfs_cb cb
, void *private_data
);
923 * Sync symlink(<path>)
925 * 0 : The operation was successfull.
926 * -errno : The command failed.
928 EXTERN
int nfs_symlink(struct nfs_context
*nfs
, const char *oldpath
, const char *newpath
);
935 * Async rename(<oldpath>, <newpath>)
937 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
938 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
940 * When the callback is invoked, status indicates the result:
943 * -errno : An error occured.
944 * data is the error string.
946 EXTERN
int nfs_rename_async(struct nfs_context
*nfs
, const char *oldpath
, const char *newpath
, nfs_cb cb
, void *private_data
);
948 * Sync rename(<oldpath>, <newpath>)
950 * 0 : The operation was successfull.
951 * -errno : The command failed.
953 EXTERN
int nfs_rename(struct nfs_context
*nfs
, const char *oldpath
, const char *newpath
);
961 * Async link(<oldpath>, <newpath>)
963 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
964 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
966 * When the callback is invoked, status indicates the result:
969 * -errno : An error occured.
970 * data is the error string.
972 EXTERN
int nfs_link_async(struct nfs_context
*nfs
, const char *oldpath
, const char *newpath
, nfs_cb cb
, void *private_data
);
974 * Sync link(<oldpath>, <newpath>)
976 * 0 : The operation was successfull.
977 * -errno : The command failed.
979 EXTERN
int nfs_link(struct nfs_context
*nfs
, const char *oldpath
, const char *newpath
);
987 * NOTE: You must include 'libnfs-raw-mount.h' to get the definitions of the
988 * returned structures.
990 * This function will return the list of exports from an NFS server.
993 * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
994 * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
996 * When the callback is invoked, status indicates the result:
998 * data is a pointer to an exports pointer:
999 * exports export = *(exports *)data;
1000 * -errno : An error occured.
1001 * data is the error string.
1003 EXTERN
int mount_getexports_async(struct rpc_context
*rpc
, const char *server
, rpc_cb cb
, void *private_data
);
1005 * Sync getexports(<server>)
1007 * NULL : something failed
1008 * exports export : a linked list of exported directories
1010 * returned data must be freed by calling mount_free_export_list(exportnode);
1012 EXTERN
struct exportnode
*mount_getexports(const char *server
);
1014 EXTERN
void mount_free_export_list(struct exportnode
*exports
);
1017 //qqq replace later with lseek(cur, 0)
1018 uint64_t nfs_get_current_offset(struct nfsfh
*nfsfh
);
1024 struct nfs_server_list
{
1025 struct nfs_server_list
*next
;
1030 * Sync find_local_servers(<server>)
1031 * This function will probe all local networks for NFS server. This function will
1032 * block for one second while awaiting for all nfs servers to respond.
1035 * NULL : something failed
1037 * struct nfs_server_list : a linked list of all discovered servers
1039 * returned data must be freed by nfs_free_srvr_list(srv);
1041 struct nfs_server_list
*nfs_find_local_servers(void);
1042 void free_nfs_srvr_list(struct nfs_server_list
*srv
);