So, what needs to be worked on and decided before we go too much further is
how we add a libnet.so (this I have previously referred to as libsocket.so).
Basically if you look at the file socket.c you'll see that there is a
function socket(). This is the first of the functions that needs to be
moved into a seperate library. A user app that calls socket() does so by
linking against libnet.so and libnet.so contains the code to call into the
running network stack to make ti all happen, via socreate() and friends.
The same is true of socketclose(), recvfrom(), sendto() and so on. Of
course for all this to work we need to be able to move data between teams
which is one of the first problems we need to address. Look at uiomove()
which is specifically there to move data into/out of the stack in a safe
manner. This is where we would make changes when we move into the kernel
for instance.
This change is really needed as a lot of the things that we need to add
need to be added in a way that will work with the architecture we come up
with. While some things are "backroom" only and solely within the stack
others have wide ranging effects. Consider the way we will get data from
the stack. In conventional BSD we'd use ioctl's and sysctl's but of course
these are impleneted at a kernel level, so we may well not have access to
them as per traditional BSD. How do we do this? Well, that's somethign we
need to figure out isn't it? :)
Axel had some ideas but has little time and is off skiing. Phillipe may be
able to come up with some code we can use, but this is really the most
important issue we have t present. If we get this right we'll be a big step
further towards our target. Get it wrong and we'll be in trouble for a long
time. Anyone who has ideas/time please think about this or work on your
ideas. Pseudo code is good as a starting point if that's all you have :)
david