Skip site navigation (1)Skip section navigation (2)
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>