Date: Fri, 10 Jun 2005 09:57:24 -0700 From: Brooks Davis <brooks@one-eyed-alien.net> To: Brooks Davis <brooks@one-eyed-alien.net> Cc: current@freebsd.org, net@freebsd.org Subject: Re: HEADSUP: internal network interface changes Message-ID: <20050610165724.GA17120@odin.ac.hmc.edu> In-Reply-To: <20050610162600.GA12928@odin.ac.hmc.edu> References: <20050609064452.GC1595@odin.ac.hmc.edu> <20050610162600.GA12928@odin.ac.hmc.edu>
next in thread | previous in thread | raw e-mail | index | archive | help
--7AUc2qLy4jB3hD7Z Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Fri, Jun 10, 2005 at 09:26:00AM -0700, Brooks Davis wrote: > Look out! :-) >=20 > This change is incoming sortly (pending final cvs updates). I've committed the change bumping __FreeBSD_version. Hopefully the ride won't be too bumpy. If you have any problems, please report them on -current as well as to me directly. Most problems should be fairly simple to fix. I will be checking my e-mail regularly for at least the next 14 hours. -- Brooks > On Wed, Jun 08, 2005 at 11:44:52PM -0700, Brooks Davis wrote: > > I plan to commit a major rework of network interface related storage > > Friday morning PDT. This is a massive change touching every network > > driver in the system. This change was discussed at the BSDCan dev > > summit and derives from discussions at EuroBSDCon on dealing with > > dynamic network devices. You can view the diff at: > >=20 > > http://people.freebsd.org/~brooks/patches/ifnet.diff > >=20 > > I'm not posting the diff to the list as it is nearly 700K. Below, you > > will find the diff to ifnet(9) for a more technical view of the API > > change. > >=20 > > In short, the change removes the embedded struct ifnet and layer 2 comm= on > > structures (struct arpcom, struct ifatm, struct sppp, etc) from driver > > softcs and replaces them with a struct ifnet pointer which is allocated > > with a new function, if_alloc which takes an interface type. For > > certain types, if_alloc also fills in the new struct ifnet member, > > if_l2com with an initialized layer 2 common structure. > >=20 > > The benefits of this change are: > > - The size of struct ifnet and the layer 2 common structures is no > > longer part of the network interface ABI. This means we add > > features to the generic interface code so long as they do not require > > action on the part of the driver without breaking the ABI. > > - Since storage is no longer tied to the softc, we will able to > > reference count struct ifnet more easily which is a prerequisite for > > fixing the panics on removing an interface which is configured with > > dummynet. > > - This patch eliminates many ugly casts and the historically weakly > > documented requirement that softc's be castable to ifnet's and > > arpcom's. > >=20 > > Things to note about this change: > > - External drivers including those in ports will panic if loaded until > > they are converted to the new API. > >=20 > > Things to note about this patch: > > - There are nearly 100 drivers in the tree and I only use a small set > > of them so there are likely to be some small bugs in this patch. The > > changes were mostly mechanical, but varying naming conventions, plus > > the occasional driver written entirely from scratch introduce the > > possibility of errors. Use care when updating, particularly with > > remote systems. > > - In most cases, this patch does not address the issue of keeping > > source compatible with previous releases or other systems. I will > > supply patches to do so in any case where there is a need, but I > > intend to wait until after committing to do so. I hope the set of > > drivers requiring these changes will be small. > >=20 > > -- Brooks > >=20 > > P.S. the posted patch contains a bug in the udav driver. It will be > > fixed before commit. > >=20 > > --- freebsd/share/man/man9/ifnet.9 Sun Jun 5 13:33:05 2005 > > +++ ifnet/share/man/man9/ifnet.9 Sun Jun 5 20:20:03 2005 > > @@ -46,9 +46,17 @@ > > .In net/if_types.h > > .\" > > .Ss "Interface Manipulation Functions" > > +.Ft "struct ifnet *" > > +.Fn if_alloc "u_char type" > > .Ft void > > .Fn if_attach "struct ifnet *ifp" > > .Ft void > > +.Fn if_detach "struct ifnet *ifp" > > +.Ft void > > +.Fn if_free "struct ifnet *ifp" > > +.Ft void > > +.Fn if_free_type "struct ifnet *ifp" "u_char type" > > +.Ft void > > .Fn if_down "struct ifnet *ifp" > > .Ft int > > .Fn ifioctl "struct socket *so" "u_long cmd" "caddr_t data" "struct th= read *td" > > @@ -219,6 +227,11 @@ > > .Pq Vt "void *" > > A pointer to the driver's private state block. > > (Initialized by driver.) > > +.It Va if_l2com > > +.Pq Vt "void *" > > +A pointer to the common data for the interface's layer 2 protocol. > > +(Initialized by > > +.Fn if_alloc .) > > .It Va if_link > > .Pq Fn TAILQ_ENTRY ifnet > > .Xr queue 3 > > @@ -270,6 +283,8 @@ > > to refer to a particular interface by index > > (see > > .Xr link_addr 3 ) . > > +(Initialized by > > +.Fn if_alloc .) > > .It Va if_timer > > .Pq Vt short > > Number of seconds until the watchdog timer > > @@ -988,6 +1003,14 @@ > > .El > > .Ss Interface Manipulation Functions > > .Bl -ohang -offset indent > > +.It Fn if_alloc > > +Allocate and initalize an > > +.Fa ifp . > > +Initalization includes the allocation of an interface index and may > > +include the allocation of a > > +.Fa type > > +specific structure in > > +.Va if_l2com . > > .It Fn if_attach > > Link the specified interface > > .Fa ifp > > @@ -999,6 +1022,29 @@ > > (A pointer to > > this address structure is saved in the global array > > .Va ifnet_addrs . ) > > +The > > +.Fa ifp > > +must have been allocted by > > +.Fn if_alloc . > > +.It Fn if_detach > > +Shutdown and unlink the specified > > +.Fa ifp > > +from the interface list. > > +.It Fn if_free > > +Free the given > > +.Fa ifp > > +back to the system. > > +The interface must have been previously detached if it was ever attach= ed. > > +.It Fn if_free_type > > +Identical to > > +.Fn if_free > > +except that the given > > +.Fa type > > + is used to free=20 > > + .Va if_l2com > > + instead of the type in > > + .Va if_type . > > + This is intended for use with drivers that change their interface typ= e. > > .It Fn if_down > > Mark the interface > > .Fa ifp > >=20 > > --=20 > > Any statement of the form "X is the one, true Y" is FALSE. > > PGP fingerprint 655D 519C 26A7 82E7 2529 9BF0 5D8E 8BE9 F238 1AD4 >=20 >=20 > --=20 > Any statement of the form "X is the one, true Y" is FALSE. > PGP fingerprint 655D 519C 26A7 82E7 2529 9BF0 5D8E 8BE9 F238 1AD4 --=20 Any statement of the form "X is the one, true Y" is FALSE. PGP fingerprint 655D 519C 26A7 82E7 2529 9BF0 5D8E 8BE9 F238 1AD4 --7AUc2qLy4jB3hD7Z Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQFCqcZzXY6L6fI4GtQRAh4/AKCFsF2nC2uqoGgSyyer6jAxCt53YgCeMd6l pmH2ttrG7PdVscM32rpMegY= =j52+ -----END PGP SIGNATURE----- --7AUc2qLy4jB3hD7Z--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050610165724.GA17120>