Date: Thu, 16 Feb 2012 22:42:58 -0800 From: Adrian Chadd <adrian@freebsd.org> To: Marcel Moolenaar <marcel@xcllnt.net> Cc: net@freebsd.org Subject: Re: Abstracting struct ifnet Message-ID: <CAJ-VmomZZkZc4SvfuiKSuL_XC=4mx5BVmCphQrRnZXwbcvL06A@mail.gmail.com> In-Reply-To: <338757D1-6B1E-49CF-983F-5D5851066FD3@xcllnt.net> References: <338757D1-6B1E-49CF-983F-5D5851066FD3@xcllnt.net>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi, I honestly quite like this idea. Adrian On 16 February 2012 20:16, Marcel Moolenaar <marcel@xcllnt.net> wrote: > All, > > Juniper is in the final phases of creating a clean separation > between FreeBSD and Junos, so as to make upgrades of FreeBSD > easier. This also allows Juniper to track -current and be more > active FreeBSD contributors. > > To that end, we have a short-term and hopefully short-lived > problem to solve, which is the ability to use FreeBSD's network > drivers against the Junos network stack. As some may know, the > Junos network stack has split up struct ifnet into a physical > and logical component, called ifdev and iflogical. > > We've tried a few approaches to bridge the gap between ifnet > on the one hand and ifdev and iflogical on the other and found > that abstracting ifnet and using accessor functions is the > best way to allow us to use FreeBSD drivers with the Junos > network stack, while retaining the ability to use them with > the FreeBSD stack. > > FreeBSD is also looking at breaking up ifnet and with that in > mind, I was wondering if there would be any resistance to > changing network drivers to use accessor functions or macros > instead of direct pointer dereferences? > > For example, do something like: > > Index: if_fxp.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- if_fxp.c =A0 =A0(revision 231178) > +++ if_fxp.c =A0 =A0(working copy) > @@ -823,13 +823,14 @@ > =A0 =A0 =A0 =A0} > > =A0 =A0 =A0 =A0if_initname(ifp, device_get_name(dev), device_get_unit(dev= )); > - =A0 =A0 =A0 ifp->if_init =3D fxp_init; > - =A0 =A0 =A0 ifp->if_softc =3D sc; > - =A0 =A0 =A0 ifp->if_flags =3D IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICA= ST; > - =A0 =A0 =A0 ifp->if_ioctl =3D fxp_ioctl; > - =A0 =A0 =A0 ifp->if_start =3D fxp_start; > + =A0 =A0 =A0 if_set_init(ifp, fxp_init); > + =A0 =A0 =A0 if_set_softc(ifp, sc); > + =A0 =A0 =A0 if_set_flags(ifp, IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICA= ST, 0); > + =A0 =A0 =A0 if_set_ioctl(ifp, fxp_ioctl); > + =A0 =A0 =A0 if_set_start(ifp, fxp_start); > > - =A0 =A0 =A0 ifp->if_capabilities =3D ifp->if_capenable =3D 0; > + =A0 =A0 =A0 if_set_capabilities(ifp, 0); > + =A0 =A0 =A0 if_set_capenable(ifp, 0); > > =A0 =A0 =A0 =A0/* Enable checksum offload/TSO for 82550 or better chips *= / > =A0 =A0 =A0 =A0if (sc->flags & FXP_FLAG_EXT_RFA) { > > Such a scheme, while initially touching a lot of driver, > would make it easier to break up ifnet *and* also make it > easier to hide ABI/API changes from driver vendors (esp. > when the accessor functions are non-inlined functions and > not macros or inlines). This is particularly useful for > Juniper, where we have worked towards network stacks as > (pre-)loadable modules so as to help with migration and > validation. > > Thoughts, feedback and suggestion are welcome, > > -- > Marcel Moolenaar > marcel@xcllnt.net > > > _______________________________________________ > freebsd-net@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-net > To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ-VmomZZkZc4SvfuiKSuL_XC=4mx5BVmCphQrRnZXwbcvL06A>