Date: Sun, 10 Dec 2006 09:52:35 +0200 From: =?ISO-8859-9?Q?=D6zkan_KIRIK?= <ozkan@mersin.edu.tr> To: freebsd-hackers@FreeBSD.ORG Subject: Re: Example network protocol implementation Message-ID: <457BBCC3.9040605@mersin.edu.tr> In-Reply-To: <20061209.222526.-816359937.imp@bsdimp.com> References: <eb7c8e2e0612091218r61bb72b4q49faee99d85c509d@mail.gmail.com> <20061209.222526.-816359937.imp@bsdimp.com>
next in thread | previous in thread | raw e-mail | index | archive | help
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@mail.gmail.com> > "Vishal Patil" <bsd.devil@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@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-hackers > To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org" > >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?457BBCC3.9040605>