X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=include%2Flibnfs.h;h=3a8304a00f9187f782d951d1fa0ae9996d2c9e0e;hb=0804e67d7a512585cebd3c453e5d05986b8ad218;hp=8defc101acf3a7f6a676e2508cfac27cdcc3aa09;hpb=17ef62fad77b6fa5682dbb5a33ff5a608274dce4;p=deb_libnfs.git diff --git a/include/libnfs.h b/include/libnfs.h index 8defc10..3a8304a 100644 --- a/include/libnfs.h +++ b/include/libnfs.h @@ -20,6 +20,7 @@ #include struct nfs_context; +struct rpc_context; /* * Used for interfacing the async version of the api into an external eventsystem @@ -46,6 +47,10 @@ char *nfs_get_error(struct nfs_context *nfs); */ typedef void (*nfs_cb)(int err, struct nfs_context *nfs, void *data, void *private_data); +/* + * Callback for all ASYNC rpc functions + */ +typedef void (*rpc_cb)(struct rpc_context *rpc, int status, void *data, void *private_data); @@ -93,14 +98,14 @@ size_t nfs_get_writemax(struct nfs_context *nfs); * -errno : An error occured. * data is the error string. */ -int nfs_mount_async(struct nfs_context *nfs, const char *server, const char *export, nfs_cb cb, void *private_data); +int nfs_mount_async(struct nfs_context *nfs, const char *server, const char *exportname, nfs_cb cb, void *private_data); /* * Sync nfs mount. * Function returns * 0 : The operation was successfull. * -errno : The command failed. */ -int nfs_mount_sync(struct nfs_context *nfs, const char *server, const char *export); +int nfs_mount(struct nfs_context *nfs, const char *server, const char *exportname); @@ -128,7 +133,7 @@ int nfs_stat_async(struct nfs_context *nfs, const char *path, nfs_cb cb, void *p * 0 : The operation was successfull. * -errno : The command failed. */ -int nfs_stat_sync(struct nfs_context *nfs, const char *path, struct stat *st); +int nfs_stat(struct nfs_context *nfs, const char *path, struct stat *st); /* @@ -153,7 +158,7 @@ int nfs_fstat_async(struct nfs_context *nfs, struct nfsfh *nfsfh, nfs_cb cb, voi * 0 : The operation was successfull. * -errno : The command failed. */ -int nfs_fstat_sync(struct nfs_context *nfs, struct nfsfh *nfsfh, struct stat *st); +int nfs_fstat(struct nfs_context *nfs, struct nfsfh *nfsfh, struct stat *st); @@ -183,7 +188,7 @@ int nfs_open_async(struct nfs_context *nfs, const char *path, int mode, nfs_cb c * 0 : The operation was successfull. *nfsfh is filled in. * -errno : The command failed. */ -int nfs_open_sync(struct nfs_context *nfs, const char *path, int mode, struct nfsfh **nfsfh); +int nfs_open(struct nfs_context *nfs, const char *path, int mode, struct nfsfh **nfsfh); @@ -211,7 +216,7 @@ int nfs_close_async(struct nfs_context *nfs, struct nfsfh *nfsfh, nfs_cb cb, voi * 0 : The operation was successfull. * -errno : The command failed. */ -int nfs_close_sync(struct nfs_context *nfs, struct nfsfh *nfsfh); +int nfs_close(struct nfs_context *nfs, struct nfsfh *nfsfh); /* @@ -238,7 +243,7 @@ int nfs_pread_async(struct nfs_context *nfs, struct nfsfh *nfsfh, off_t offset, * >=0 : numer of bytes read. * -errno : An error occured. */ -int nfs_pread_sync(struct nfs_context *nfs, struct nfsfh *nfsfh, off_t offset, size_t count, char *buf); +int nfs_pread(struct nfs_context *nfs, struct nfsfh *nfsfh, off_t offset, size_t count, char *buf); @@ -266,7 +271,7 @@ int nfs_read_async(struct nfs_context *nfs, struct nfsfh *nfsfh, size_t count, n * >=0 : numer of bytes read. * -errno : An error occured. */ -int nfs_read_sync(struct nfs_context *nfs, struct nfsfh *nfsfh, size_t count, char *buf); +int nfs_read(struct nfs_context *nfs, struct nfsfh *nfsfh, size_t count, char *buf); @@ -294,7 +299,7 @@ int nfs_pwrite_async(struct nfs_context *nfs, struct nfsfh *nfsfh, off_t offset, * >=0 : numer of bytes written. * -errno : An error occured. */ -int nfs_pwrite_sync(struct nfs_context *nfs, struct nfsfh *nfsfh, off_t offset, size_t count, char *buf); +int nfs_pwrite(struct nfs_context *nfs, struct nfsfh *nfsfh, off_t offset, size_t count, char *buf); /* @@ -320,7 +325,7 @@ int nfs_write_async(struct nfs_context *nfs, struct nfsfh *nfsfh, size_t count, * >=0 : numer of bytes written. * -errno : An error occured. */ -int nfs_write_sync(struct nfs_context *nfs, struct nfsfh *nfsfh, size_t count, char *buf); +int nfs_write(struct nfs_context *nfs, struct nfsfh *nfsfh, size_t count, char *buf); /* @@ -346,7 +351,7 @@ int nfs_lseek_async(struct nfs_context *nfs, struct nfsfh *nfsfh, off_t offset, * >=0 : numer of bytes read. * -errno : An error occured. */ -int nfs_lseek_sync(struct nfs_context *nfs, struct nfsfh *nfsfh, off_t offset, int whence, off_t *current_offset); +int nfs_lseek(struct nfs_context *nfs, struct nfsfh *nfsfh, off_t offset, int whence, off_t *current_offset); /* @@ -371,7 +376,7 @@ int nfs_fsync_async(struct nfs_context *nfs, struct nfsfh *nfsfh, nfs_cb cb, voi * 0 : Success * -errno : An error occured. */ -int nfs_fsync_sync(struct nfs_context *nfs, struct nfsfh *nfsfh); +int nfs_fsync(struct nfs_context *nfs, struct nfsfh *nfsfh); @@ -397,7 +402,7 @@ int nfs_truncate_async(struct nfs_context *nfs, const char *path, off_t length, * 0 : Success * -errno : An error occured. */ -int nfs_truncate_sync(struct nfs_context *nfs, const char *path, off_t length); +int nfs_truncate(struct nfs_context *nfs, const char *path, off_t length); @@ -423,7 +428,7 @@ int nfs_ftruncate_async(struct nfs_context *nfs, struct nfsfh *nfsfh, off_t leng * 0 : Success * -errno : An error occured. */ -int nfs_ftruncate_sync(struct nfs_context *nfs, struct nfsfh *nfsfh, off_t length); +int nfs_ftruncate(struct nfs_context *nfs, struct nfsfh *nfsfh, off_t length); @@ -452,7 +457,7 @@ int nfs_mkdir_async(struct nfs_context *nfs, const char *path, nfs_cb cb, void * * 0 : Success * -errno : An error occured. */ -int nfs_mkdir_sync(struct nfs_context *nfs, const char *path); +int nfs_mkdir(struct nfs_context *nfs, const char *path); @@ -478,7 +483,7 @@ int nfs_rmdir_async(struct nfs_context *nfs, const char *path, nfs_cb cb, void * * 0 : Success * -errno : An error occured. */ -int nfs_rmdir_sync(struct nfs_context *nfs, const char *path); +int nfs_rmdir(struct nfs_context *nfs, const char *path); @@ -506,7 +511,7 @@ int nfs_creat_async(struct nfs_context *nfs, const char *path, int mode, nfs_cb * 0 : Success * -errno : An error occured. */ -int nfs_creat_sync(struct nfs_context *nfs, const char *path, int mode, struct nfsfh **nfsfh); +int nfs_creat(struct nfs_context *nfs, const char *path, int mode, struct nfsfh **nfsfh); @@ -535,7 +540,7 @@ int nfs_unlink_async(struct nfs_context *nfs, const char *path, nfs_cb cb, void * 0 : Success * -errno : An error occured. */ -int nfs_unlink_sync(struct nfs_context *nfs, const char *path); +int nfs_unlink(struct nfs_context *nfs, const char *path); @@ -566,7 +571,7 @@ int nfs_opendir_async(struct nfs_context *nfs, const char *path, nfs_cb cb, void * 0 : Success * -errno : An error occured. */ -int nfs_opendir_sync(struct nfs_context *nfs, const char *path, struct nfsdir **nfsdir); +int nfs_opendir(struct nfs_context *nfs, const char *path, struct nfsdir **nfsdir); @@ -577,6 +582,14 @@ struct nfsdirent { struct nfsdirent *next; char *name; uint64_t inode; + + /* some extra fields we get for free through the READDIRPLUS3 call. You need libnfs-raw-nfs.h for these */ + uint32_t type; /* NF3REG, NF3DIR, NF3BLK, ... */ + uint32_t mode; + uint64_t size; + struct timeval atime; + struct timeval mtime; + struct timeval ctime; }; /* * nfs_readdir() never blocks, so no special sync/async versions are available @@ -618,7 +631,7 @@ int nfs_statvfs_async(struct nfs_context *nfs, const char *path, nfs_cb cb, void * 0 : The operation was successfull. * -errno : The command failed. */ -int nfs_statvfs_sync(struct nfs_context *nfs, const char *path, struct statvfs *svfs); +int nfs_statvfs(struct nfs_context *nfs, const char *path, struct statvfs *svfs); /* @@ -645,7 +658,7 @@ int nfs_readlink_async(struct nfs_context *nfs, const char *path, nfs_cb cb, voi * 0 : The operation was successfull. * -errno : The command failed. */ -int nfs_readlink_sync(struct nfs_context *nfs, const char *path, char *buf, int bufsize); +int nfs_readlink(struct nfs_context *nfs, const char *path, char *buf, int bufsize); @@ -671,7 +684,7 @@ int nfs_chmod_async(struct nfs_context *nfs, const char *path, int mode, nfs_cb * 0 : The operation was successfull. * -errno : The command failed. */ -int nfs_chmod_sync(struct nfs_context *nfs, const char *path, int mode); +int nfs_chmod(struct nfs_context *nfs, const char *path, int mode); @@ -697,7 +710,7 @@ int nfs_fchmod_async(struct nfs_context *nfs, struct nfsfh *nfsfh, int mode, nfs * 0 : The operation was successfull. * -errno : The command failed. */ -int nfs_fchmod_sync(struct nfs_context *nfs, struct nfsfh *nfsfh, int mode); +int nfs_fchmod(struct nfs_context *nfs, struct nfsfh *nfsfh, int mode); @@ -723,7 +736,7 @@ int nfs_chown_async(struct nfs_context *nfs, const char *path, int uid, int gid, * 0 : The operation was successfull. * -errno : The command failed. */ -int nfs_chown_sync(struct nfs_context *nfs, const char *path, int uid, int gid); +int nfs_chown(struct nfs_context *nfs, const char *path, int uid, int gid); @@ -749,7 +762,7 @@ int nfs_fchown_async(struct nfs_context *nfs, struct nfsfh *nfsfh, int uid, int * 0 : The operation was successfull. * -errno : The command failed. */ -int nfs_fchown_sync(struct nfs_context *nfs, struct nfsfh *nfsfh, int uid, int gid); +int nfs_fchown(struct nfs_context *nfs, struct nfsfh *nfsfh, int uid, int gid); @@ -776,7 +789,7 @@ int nfs_utimes_async(struct nfs_context *nfs, const char *path, struct timeval * * 0 : The operation was successfull. * -errno : The command failed. */ -int nfs_utimes_sync(struct nfs_context *nfs, const char *path, struct timeval *times); +int nfs_utimes(struct nfs_context *nfs, const char *path, struct timeval *times); /* @@ -802,7 +815,7 @@ int nfs_utime_async(struct nfs_context *nfs, const char *path, struct utimbuf *t * 0 : The operation was successfull. * -errno : The command failed. */ -int nfs_utime_sync(struct nfs_context *nfs, const char *path, struct utimbuf *times); +int nfs_utime(struct nfs_context *nfs, const char *path, struct utimbuf *times); @@ -829,7 +842,7 @@ int nfs_access_async(struct nfs_context *nfs, const char *path, int mode, nfs_cb * 0 : The operation was successfull. * -errno : The command failed. */ -int nfs_access_sync(struct nfs_context *nfs, const char *path, int mode); +int nfs_access(struct nfs_context *nfs, const char *path, int mode); @@ -856,7 +869,7 @@ int nfs_symlink_async(struct nfs_context *nfs, const char *oldpath, const char * * 0 : The operation was successfull. * -errno : The command failed. */ -int nfs_symlink_sync(struct nfs_context *nfs, const char *oldpath, const char *newpath); +int nfs_symlink(struct nfs_context *nfs, const char *oldpath, const char *newpath); /* @@ -881,7 +894,7 @@ int nfs_rename_async(struct nfs_context *nfs, const char *oldpath, const char *n * 0 : The operation was successfull. * -errno : The command failed. */ -int nfs_rename_sync(struct nfs_context *nfs, const char *oldpath, const char *newpath); +int nfs_rename(struct nfs_context *nfs, const char *oldpath, const char *newpath); @@ -907,9 +920,67 @@ int nfs_link_async(struct nfs_context *nfs, const char *oldpath, const char *new * 0 : The operation was successfull. * -errno : The command failed. */ -int nfs_link_sync(struct nfs_context *nfs, const char *oldpath, const char *newpath); +int nfs_link(struct nfs_context *nfs, const char *oldpath, const char *newpath); + + +/* + * GETEXPORTS() + */ +/* + * Async getexports() + * NOTE: You must include 'libnfs-raw-mount.h' to get the definitions of the + * returned structures. + * + * This function will return the list of exports from an NFS server. + * + * Function returns + * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked. + * <0 : An error occured when trying to set up the operation. The callback will not be invoked. + * + * When the callback is invoked, status indicates the result: + * 0 : Success. + * data is a pointer to an exports pointer: + * exports export = *(exports *)data; + * -errno : An error occured. + * data is the error string. + */ +int mount_getexports_async(struct rpc_context *rpc, const char *server, rpc_cb cb, void *private_data); +/* + * Sync getexports() + * Function returns + * NULL : something failed + * exports export : a linked list of exported directories + * + * returned data must be freed by calling mount_free_export_list(exportnode); + */ +struct exportnode *mount_getexports(const char *server); +void mount_free_export_list(struct exportnode *exports); //qqq replace later with lseek(cur, 0) off_t nfs_get_current_offset(struct nfsfh *nfsfh); + + + + + +struct nfs_server_list { + struct nfs_server_list *next; + char *addr; +}; + +/* + * Sync find_local_servers() + * This function will probe all local networks for NFS server. This function will + * block for one second while awaiting for all nfs servers to respond. + * + * Function returns + * NULL : something failed + * + * struct nfs_server_list : a linked list of all discovered servers + * + * returned data must be freed by nfs_free_srvr_list(srv); + */ +struct nfs_server_list *nfs_find_local_servers(void); +void free_nfs_srvr_list(struct nfs_server_list *srv);