Julian Elischer wrote:
Nicolas Cormier wrote:
Hi,
I'm trying to write a little tcp-server kernel module (like tftp).
I didn't find a lot of documents about the kernel network programming,
just one thread which talks about netgraph.
In the freebsd includes I found /usr/include/sys/socketvar.h (so*).
What's the easy way to create a basic tcp server
(create/bind/listen/accept/send/recv) : use netgraph's ksocket or so*
?
Thanks in advance !
PS: the whole job must be done in the kernel.
yes it can (and has been) done..
John Polstra did it many years ago.. using netgraph ksockets.
He had an in-kernel web server.
At least I THINK it was him :-)
Yes, that's right. I started out using netgraph ksockets, but later on
it evolved, mainly for performance reasons. (I needed it to be really,
really fast.) The first change was that I eliminated the ksockets and
worked directly at the link layer, using ng_ether nodes. I implemented
a small, stripped down TCP stack and bypassed the FreeBSD native
TCP/IP/socket layers. This was still done with netgraph, using just the
ng_ether nodes talking to my own ng_webclient / ng_webserver nodes. It
improved the performance immensely.
More recently I restructured it quite a bit to get better MP performance
using FreeBSD 7.x. (The original version was based on 4.x). I found
that the netgraph locking and internode communication mechanism impacted
performance too much under 7.x. So I eliminated the ng_ether nodes and
made the webserver / webclient nodes talk directly to the interfaces via
the if_input / if_output hooks. It still uses netgraph, but really only
as a configuration and management mechanism. No actual network traffic
flows between netgraph nodes. This change also resulted in a big
performance improvement.
Unfortunately, my contract forbids me to release the source code publicly.
John
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"