Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 10 Mar 2003 16:19:33 +0000
From:      Mark Murray <mark@grondar.org>
To:        Terry Lambert <tlambert2@mindspring.com>
Cc:        freebsd-chat@FreeBSD.ORG
Subject:   Re: A question about kernel modules 
Message-ID:  <200303101619.h2AGJXIg027470@grimreaper.grondar.org>
In-Reply-To: Your message of "Mon, 10 Mar 2003 07:33:27 PST." <3E6CB047.5D517419@mindspring.com> 

next in thread | previous in thread | raw e-mail | index | archive | help
Terry Lambert writes:
> > That is not the way you would do it. Each Ethernet module would
> > require IP, which in turn would co-require TCP and co-require UDP
> > etc.  If you tried to load IP with no ethernet driver, you'd get
> > the loopback device, and TCP/UDP etc.
> 
> You've sort of got that backward, I think.  I can have all sorts
> of protocols that *aren't* TCP that run on top of IP, and I can
> have all sorts of protocols that aren't IP that run over an
> ethernet interface.

Still, I made the point that some dependancies run "backwards".

> The ethernet interface might just be a promiscuous mode interface,
> with a BPF sitting on top of it, and nothing else (for example),
> or that Novell answer to the lack of a sliding window in SPX,
> TCP/IPX, might be an option, too.

So look at it as a "Provides" vs "needs" thing. Loading an ethernet
card will premptively get you all the modules needed to abstract the
general class of network interfaces.

> The point is that it's all about producer/consumer relationships,
> and consumers need producers, but not the other way around.

Yes, but the production direction meets somewhere in the middle.
Example (where 'A->B' implies 'B needs what A produces'):

NICa -> ethernet.card.driver -> network.abstraction <- IP <- TCP
                                ^ ^                     ^
NICb -> ethernet.card.driver ---+ |                     +----UDP
                                  |
        loopback.device ----------+

and so on. This is at the module dependancy level, so DONT look at this
as a sockets programmer and find layering faults at the ISO layer model
level, it is NOT an ISO network stack diagram.

It means that the network.abstaction is a kind of nexus on which
the loadable modules can attach while creating a complete networking
subsystem in the kernel.

> > Other tweaks would need to be done if you need IPX instead of IP.
> 
> Yes.  The direct calls to ip_output() would need to be indirected
> through the PCB, so it could be properly stacked.  That's just a
> minimal thing, though.

It is not as simple as a stack, for module dependancies. But yes,
it is not hard to provide the dependancy hooks.

> I can demonstrate this one.  The real problem with IPSEC in the
> TCP/IPv4 case is that it was poorly retrofit from the KAME code
> into the IPv4.  This caused a number of problems, one of which
> was your total number of connections supportable shrunk *a lot*
> when you enabled IPSEC, even if none of your connections were
> using it (we had done this for VPN support).

Assertion, not demonstration.

> > Hmm. Maybe its time for a export of certain compile-time options.
> 
> You mean as sysctl's?  Or you mean in an exported options file?

Anything that works.

M
--
Mark Murray
iumop ap!sdn w,I idlaH

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-chat" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200303101619.h2AGJXIg027470>