How sahlberg/libnfs works
libnfs is a network NFS client library with raw asynchronous RPC, high-level asynchronous VFS operations, and synchronous VFS operations. The main workflow is an application issuing a filesystem request, libnfs translating it to NFSv3 or NFSv4 operations, then RPC transport sending it to an NFS server and returning a result. The README also documents NFSv4.2 sparse-file operations, optional TLS, and RPC server support. The excerpts do not establish every internal call path, so uncertain wiring is omitted.
Main entry points: pdu.c RPC requests · libnfs.c Client context · socket.c RPC socket · libnfs.h VFS API
Components 18
Client APIs
- VFS API
include/nfsc/libnfs.h - Raw RPC API
include/nfsc/libnfs-raw.h - Sync wrappers
lib/libnfs-sync.c - Client context
lib/libnfs.c
NFS Protocols
- NFSv3 operations
lib/nfs_v3.c - NFSv4 operations
lib/nfs_v4.c - Mount protocol
mount/mount.c - Portmapper
portmap/portmap.c
RPC Transport
- ZDR encoding
lib/libnfs-zdr.c - RPC requests
lib/pdu.c - RPC socket
lib/socket.c - TLS transport
tls/handshake.c
RPC Servers
- NFS server
servers/nfsd/nfsd.c - Mount server
servers/nfsd/mountd.c - RPC bind server
servers/rpcbind/rpcbind.c
Other components
- Application
- NFS server
- Network
Connections 19
- Application → VFS API: issues VFS calls
- Application → Raw RPC API: issues RPC tasks
- Sync wrappers → VFS API: offers sync calls
- VFS API → Client context: uses context
- Client context → NFSv3 operations: dispatches NFSv3
- Client context → NFSv4 operations: dispatches NFSv4
- NFSv3 operations → RPC requests: queues RPCs
- NFSv4 operations → RPC requests: queues RPCs
- Raw RPC API → RPC requests: queues RPC tasks
- RPC requests → ZDR encoding: encodes messages
- RPC requests → RPC socket: transmits RPCs
- RPC socket → Network: sends and receives
- Network → NFS server: carries RPC traffic
- RPC socket → TLS transport: secures connection
- NFS server → NFS server: serves NFS
- Mount server → NFS server: serves mounts
- RPC bind server → NFS server: registers services
- Mount protocol → RPC requests: queues mount RPCs
- Portmapper → RPC requests: queues portmap RPCs