Date: Mon, 1 Oct 2001 13:28:44 -0700 (PDT) From: Matthew Jacob <mjacob@feral.com> To: Julian Elischer <julian@elischer.org>, Garrett Wollman <wollman@khavrinen.lcs.mit.edu> Cc: freebsd-net@freebsd.org Subject: Re: review of minor clarifying comments Message-ID: <Pine.BSF.4.21.0110011323270.99893-100000@beppo> In-Reply-To: <Pine.BSF.4.21.0110011410510.87441-100000@InterJet.elischer.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Yes- this may have been true for a long time - but quite a number of Unix
variants don't require it, so I forgot :-).. For example, neither OpenBSD nor
NetBSD seem to require it.
It turns out that this is only stumbled on rarely- but if it's all the same to
you, a comment would help a lot.
-matt
On Mon, 1 Oct 2001, Julian Elischer wrote:
> Not only that but the ifnet structure must be the first part of the arpcom
> struct so that arpcm, ifnet and softc often need to be the same.. I've
> been gradually trying to remove this requirement over the last 10 years
> but it's still there.. :-/
>
> Comments can't hurt though..
>
>
> On Mon, 1 Oct 2001, Matthew Jacob wrote:
>
> >
> > This bit me in the butt yet again about FreeBSD and some assumptions about how
> > a NIC's softc is laid out- I don't really it stated elsewhere, so a couple
> > source file comments seem in order.. Frankly, this kind of assumption is
> > dangerous and unnecessary with methods, but at the very least it ought to be
> > commented, no?
> >
> > -matt
> >
> >
> > Index: net/if_var.h
> > ===================================================================
> > RCS file: /home/ncvs/src/sys/net/if_var.h,v
> > retrieving revision 1.37
> > diff -u -r1.37 if_var.h
> > --- net/if_var.h 2001/09/18 17:41:42 1.37
> > +++ net/if_var.h 2001/10/01 20:00:08
> > @@ -105,6 +105,11 @@
> > *
> > * (Would like to call this struct ``if'', but C isn't PL/1.)
> > */
> > +
> > +/*
> > + * NB: For FreeBSD, it is assumed that each NIC driver's softc starts with
> > + * one of these structures, typically held within an arpcom structure.
> > + */
> > struct ifnet {
> > void *if_softc; /* pointer to driver state */
> > char *if_name; /* name, e.g. ``en'' or ``lo'' */
> > Index: dev/mii/mii.c
> > ===================================================================
> > RCS file: /home/ncvs/src/sys/dev/mii/mii.c,v
> > retrieving revision 1.9
> > diff -u -r1.9 mii.c
> > --- dev/mii/mii.c 2001/09/29 18:40:06 1.9
> > +++ dev/mii/mii.c 2001/10/01 20:00:09
> > @@ -167,6 +167,9 @@
> > struct mii_data *mii;
> >
> > mii = device_get_softc(dev);
> > + /*
> > + * Note that each NIC's softc must start with an ifnet structure.
> > + */
> > mii->mii_ifp = device_get_softc(device_get_parent(dev));
> > v = device_get_ivars(dev);
> > ifmedia_upd = v[0];
> > @@ -233,6 +236,9 @@
> > MIIBUS_LINKCHG(parent);
> >
> > mii = device_get_softc(dev);
> > + /*
> > + * Note that each NIC's softc must start with an ifnet structure.
> > + */
> > ifp = device_get_softc(parent);
> >
> > if (mii->mii_media_status & IFM_AVALID) {
> >
> >
> > To Unsubscribe: send mail to majordomo@FreeBSD.org
> > with "unsubscribe freebsd-net" in the body of the message
> >
>
>
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-net" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0110011323270.99893-100000>
