libnfs - User space library implementing a basic NFSv3 client for testing
-------------------------------------------------------------------------

libnfs is a user space library that allows the easy (!) writing of
applications that can interface with NFS servers, excercising functionality,
etc.  The API looks something like the following:

struct nfsmount		Describes a particular mount point.
struct nfsnode		Describes a particular file node in the NFS file
			system.
struct nfsattr		Describes the attributes of an NFS node.

The following interfaces are defined:

int	nfs_mount(struct nfsmount **nfsm, const char *server,
	    const char *path);
int	nfs_mount_fh(struct nfsmount **nfsm, const char *server,
	    const char *fhandle);
void	nfs_unmount(struct nfsmount *nfsm);

void	nfs_derefnode(struct nfsnode *node);

int	nfs_null(struct nfsmount *nfsm);
int	nfs_getattr(struct nfsmount *nfsm, struct nfsnode *node,
	    struct nfsattr *attr);
int	nfs_getattr_cached(struct nfsmount *nfsm, struct nfsnode *node,
	    struct nfsattr *attr);
int	nfs_setattr(struct nfsmount *nfsm, struct nfsnode *node,
	    struct nfsattr *attr);
int	nfs_lookup(struct nfsmount *nfsm, struct nfsnode *dirnode,
	    const char *name, struct nfsnode **node);
int	nfs_access(struct nfsmount *nfsm, struct nfsnode *node,
	    u_int32_t access);

int	nfs_readlink(struct nfsmount *nfsm);
int	nfs_read(struct nfsmount *nfsm);
int	nfs_write(struct nfsmount *nfsm);
int	nfs_create(struct nfsmount *nfsm);
int	nfs_mkdir(struct nfsmount *nfsm);
int	nfs_symlink(struct nfsmount *nfsm);
int	nfs_mknod(struct nfsmount *nfsm);
int	nfs_remove(struct nfsmount *nfsm);
int	nfs_rmdir(struct nfsmount *nfsm);
int	nfs_rename(struct nfsmount *nfsm);
int	nfs_link(struct nfsmount *nfsm);
int	nfs_readdir(struct nfsmount *nfsm);,
int	nfs_fsstat(struct nfsmount *nfsm);
int	nfs_fsinfo(struct nfsmount *nfsm);
int	nfs_pathconf(struct nfsmount *nfsm);
int	nfs_commit(struct nfsmount *nfsm);
int	nfs_setcred(struct nfsmount *nfsm, uid_t uid, gid_t gid);
