NFS is said to be built on RPC. However, NFS daemons seldom uses RPC
library calls before they enter into the kernel forever (The nfsd daemon
only calls pmap_set(). The nfsiod daemon invokes no RPC call at all! The
mountd daemon uses a lot of RPC calls, but it does not enter the kernel
forever and it is not used during normal reads/writes).
Once inside the kernel, the NFS daemons can not use RPC library any more,
they must create/interprete RPC format messages themselves. My guess this
is for performance reason and because there is no kernel-to-kernel RPC.
Since the kernel part of NFS code does not use RPC library routines, why
FreeBSD still conforms to the RPC format for NFS requests/replies? Is
this for compatibily with other NFS servers/clients that are implemented
entirely as user-level code and with RPC library routines?
One more question is about how to assembly a RPC request from several
mbufs? I notice that there is a check for 0x80000000 in the routine
nfsrv_getstream() for the last fragment. But I assume that all mbufs
linked together via their m_next field should consist of one RPC request.
I also assume that the protocol layer has ripped off any TCP/IP headers
from the mbufs before it pass the mbufs up to the socket layer.
Any help is appreciated.
--------------------------------------------------
Zhihui Zhang. Please visit http://www.freebsd.org
--------------------------------------------------
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message