I need advanced kernel-level multilink PPP (MLPPP) support, including the ability to create bundle links via UDP (and maybe TCP) over IP. We currently don't have a direct need for PPPoE or tunnelling via PPTP, L2TP, or direct use of async and sync devices, but of course such features would likely be needed by others, and some may eventually be needed for the project I'm working on. The only open-source software set that seems to even come close to offering these features today is MPD running on FreeBSD with Netgraph. We use this combination today with great success. (MPD is at http://mpd.sourceforge.net/) However with a future of ever smaller, more diverse, and of course lower cost, embedded devices I'm very much favouring a switch to NetBSD (even though FreeBSD-current has much better support for one of the MIPS-based boards we're initially considering using). For the past week I've been mucking about with the old Netgraph port to NetBSD 1.5V done by Barnim Dzwillo: http://www.2cat.de/ng/ng.html However it is based on a very old version of Netgraph, and of course also a rather old version of NetBSD as well. It's not going to work easily though in a modern NetBSD, and it does not support MP (multi-core embedded SoC designs are already available and will no doubt be ubiquitous in higher-end devices in the future). I thought briefly of merging it with my old 1.6 tree just to get it working and to see what limitations it has in NetBSD, but given the age of the Netgraph sources in the first place I realized this would be a pointless waste of time. Reviewing Julian Elischer's BAFUG talk from November of 2006 shows some of the vast improvements to the Netgraph code since that original post and these will be pretty much mandatory to acquire in NetBSD anyway. Yesterday I briefly looked at the current Netgraph code in FreeBSD, but bringing it over to NetBSD will be an even bigger effort due to the ever wider differences between NetBSD and FreeBSD. So, before I consider further work down this path I wanted to query the wider NetBSD community for ideas. First off, Netgraph and my bias. I've wanted my favourite open-source system (no matter which it ended up being) to have something like Netgraph ever since I turned off my last old AT&T Unix System V machine with its STREAMS-based network stack and device drivers. However Netgraph as it appears in FreeBSD is still very much an optional toy that's bolted on the side of a BSD kernel, not a core piece of technology that everyone loves and uses. Some of the diagrams that Julian has produced to show how it is bolted on show just how ugly this gets, revealing all the warts in how this messes with the desired order of operations in a BSD based network stack and all the many existing hooks and call-outs. In my vision a true Netgraph based system should have all the old network stack ripped right out and removed entirely, to be replaced entirely by Netgraph, which would then require a few new (i.e. as-yet unwritten) ng_* modules, including of course ng_ip, ng_tcp, ng_udp, etc. If Netgraph is to forever remain more of an afterthought than _the_ core networking and device driver technology, is it really worth using? Meanwhile to get the kind of full-featured support for a versatile MLPPP implementation such as what MPD offers, Netgraph provides _huge_ and massive advantages, even if it is still just bolted on the side of a traditional BSD networking stack. In fact I can't even begin to think of any better way to implement the kind of MLPPP support I need. Perhaps I've just been blinded to other mechanisms by my earlier exposure to graph and node based networking stacks. Something conceptually like bridge(4) might work, but given the flexibility I need with many different devices and other hooks into the network stack, the changes to support something like that would be just as extensive as would be needed to add all of Netgraph in the first place, so why not go with Netgraph, even if only for MLPPP? Going with the current Netgraph code also requires making some decisions to deal with some other aspects of FreeBSD. For one there's the "vnet" or virtualized network stacks feature. Current Netgraph code integrates fairly tightly with it and my brief look at the new Netgraph code yesterday suggested it might be easier to bring along vnet than to untangle it from Netgraph. (Conceptually though vnet seems kinda silly compared to a wholly Netgraph-based system which could offer such a feature basically for "free".) I think I have the resources to do a Netgraph to NetBSD port, but the result would be something I would want the community to maintain, i.e. continually improve and re-port as FreeBSD advances the base code. I'm going to talk to Julian and possibly some other FreeBSD (and DragonFly) and developers see if there's room to consider adding and keeping "portability" in mind in the design and implementation of Netgraph too. I encourage anyone who's read this far, but who doesn't yet know so much about Netgraph, to have a look at Archie Cobbs' DaemonNews article and Julian's slides describing what's been worked on in Netgraph more recently: http://people.freebsd.org/~julian/netgraph.html http://people.freebsd.org/~julian/BAFUG/talks/Netgraph/Netgraph.pdf (BTW, Kohler's "Click Modular Router" is another interesting project!) -- Greg A. Woods Planix, Inc. <woods%planix.com@localhost> +1 416 218 0099 http://www.planix.com/
Attachment:
pgpkIBlr6OzkD.pgp
Description: PGP signature