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

Reply via email to