[openbeosnetteam] FreeBSD vs. our stack

  • From: "Axel Dörfler" <axeld@xxxxxxxxxxxxxxxx>
  • To: openbeosnetteam@xxxxxxxxxxxxx
  • Date: Fri, 02 Jun 2006 18:59:04 +0200 CEST

Hi there,

Waldemar and I talked a bit and here is what we came up with:

According to Waldemar, our current networking stack is still very close 
to a BSD stack which could ease the effort of porting FreeBSD modules 
into it. Also according to Waldemar, he has little hope that we could 
or should use any of the code in our repository right now. While my 
impression of the code was similar, it has been some years since I 
looked at it (during David's active time).

In any way, what needs to be done first is that someone starts at the 
very ground (ie. packet and memory management, a.k.a. mbufs and their 
handling) of our current stack and works his way up in layers and 
modules. Step by step the existing code can either be replaced with 
FreeBSD code or fixed so that it becomes usable. Everything above the 
current working set doesn't even need to be built.
The only things that we definitely need to keep are the 
net_stack_driver, the ethernet legacy code, and the userland testing 
stuff (BONE only). The ethernet code probably needs most of the work 
and should be better separated from the rest.

We also agreed that it makes sense to liften up the current module 
structure a bit at first, and, if needed, put more stuff into the stack 
directly (though as modularized as possible). Only the interface layer 
must be true modules for VPN and the like. That would be a good 
compromise for R1 if it allows us to reach a stable and robust stack 
earlier.

It would be nice if we have the following in mind when doing the port/
rework:
- use native BeOS kernel API wherever possible, there shouldn't be a 
generic FreeBSD porting layer - the networking modules should be 
integrated as much as possible.
- use our coding style guide

Both will make it much harder to adopt further improvements to the 
FreeBSD stack, but since it's working nicely now, I don't see that this 
would be so important - the maintenance and cleaning changes at least 
shouldn't be necessary anymore, if we do a good job.

So, since we are more than one person working on this, we need to break 
that work down into smaller portions, and we also need to communicate a 
lot to keep us on track.

For a start, we identified the following separate tasks:
* separate the ethernet legacy code from the network core, and move it 
into the ethernet interface, so that it can later be used with no or 
only little changes
* make yourself familiar with the FreeBSD networking stack (in 
comparison with what we have in our tree)
* port demons and other needed networking tools to our stack

Any takers?
Andrew, what have you done so far, and what would you prefer to do? Any 
comments?

The main configuration should work via ioctl(), not via sysctl() - in 
contrast we thought that it would be nicer to have an extra userland 
API for the networking stack configuration and interfaces etc. that 
would hide these details from the programmer.

Networking notifications like "interface (dis)connected" should be done 
via the KMessage service, like node monitoring.
Accessing networking interfaces (via ifconfig, for example) should go 
over the path of the device (if any), or the name of the interface 
module. I like how BONE does it. And I don't like what our current 
stack does (ipro10000, sis9000, etc.).

To suggest some goals that are further down the road:
* a nice and clean preferences application
* a net_server application that takes over the duties of inetd and also 
handles the complete server configuration in a useful way (ie. reads in 
configuration files on startup and configures the stack)
* a Deskbar replicant that manages all available interfaces and shows 
useful info
* have a look at porting WiFi stuff from FreeBSD

I hope that wasn't too confusing :-)

Bye,
   Axel.


Other related posts: