Example network protocol implementation
Özkan KIRIK
ozkan at mersin.edu.tr
Sat Dec 9 23:52:18 PST 2006
I think netgraph subsystem provides this infrastructure for implementing
new protocols.
according to netgraph (4) man page:
The aim of *netgraph* is to supplement rather than replace the existing
kernel networking infrastructure. It provides:
*·* A flexible way of combining protocol and link level drivers.
*·* A modular way to implement new protocols.
*·* A common framework for kernel entities to inter-communicate.
*·* A reasonably fast, kernel-based implementation.
There are many examples and applications at this address:
http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/netgraph/
you implementation may be "ng_iscsi" :)
I hope this helps,
Özkan KIRIK
EnderUNIX SDT @ Turkey
Software Developer
M. Warner Losh yazmış:
> In message: <eb7c8e2e0612091218r61bb72b4q49faee99d85c509d at mail.gmail.com>
> "Vishal Patil" <bsd.devil at gmail.com> writes:
> : Could someone point me to an example that shows a SIMPLE network protocol
> : implemented over TCP/IP inside the FreeBSD kernel. I think I could look at
> : the NFS client driver but is there an example simpler than that. Also is
> : there a guide explaining how to go about developing TCP/IP based network
> : protocols for FreeBSD.
>
> [ to implement iSCSI in the kernel ]
>
> I'm unsure which side you wish to be on.
>
> There's accept filters that you can write, but I doubt that's what you
> want to do. This would be good if you are implementing an iSCSI
> target on FreeBSD, maybe (then again, maybe not).
>
> If you want to be an iSCSI initiator (I think that's the right term),
> then you'll need to do things similar to what
> sys/nfsclient/nfs_socket.c does. I could do a quick code walkthrough,
> but you'd likely be better off studying the nfs code since it will
> give you a better understanding than I can in a few lines. In
> addition, because locking has changed over time, the exact version
> matters. Careful study will show differences in what locks are
> needed, if any.
>
> But in a nutshell, you call socreate to get a socket. You setup the
> various fields in the socket data structures. You call sosetopt to do
> the latter. sobind will set this host's endpoint, and soconnect will
> connect the socket to the remote side. You'll need to setup send and
> receive buffers and manage them with soreceive and sosend. there's
> some callbacks that also need to be established as well. And some
> socket layer locking that may be exposed to your code because there
> are so few in-kernel protocol implementations that aren't peers to
> TCP, UDP or IP.
>
> I hope this helps.
>
> Warner
>
>
> _______________________________________________
> freebsd-hackers at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"
>
>
More information about the freebsd-hackers
mailing list