Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 26 Jul 2002 21:10:50 -0700
From:      Brooks Davis <brooks@one-eyed-alien.net>
To:        net@freebsd.org
Subject:   switching to if_xname from if_name and if_unit
Message-ID:  <20020726211050.A30598@Odin.AC.HMC.Edu>

next in thread | raw e-mail | index | archive | help

--Qxx1br4bt0+wmkIi
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

[Bcc to -arch for interested people not on -net]

NetBSD and OpenBSD have replaced the "char *if_name" and "int if_unit"
members of struct ifnet with "char if_xname[IFNAMESIZ]".  I propose that
we follow suit.

Pros:
 - Better source compatibility with NetBSD and OpenBSD.
 - The ability to handle free-form device names.  This could allow
   things like and advanced cloning interface for vlans that let you
   configure vlan X on interface nameY with "ifconfig nameY.X create".
 - Most uses of if_name and if_unit together really just want the full
   name of the device and the same with the majority of if_unit
   entries.  The remaining if_unit usages are usually the result of
   sloppy code with hard wired limits on the number of devices that
   should be fixed.
 - We can implement the if_name() function without the current gross
   hacks.
 - Well defined maximum name size simplifies code.

Cons:
 - Lost of source compatibility between 5.x and previous versions.
   [We've already lost it with the spls and in most drivers it's
   a two line change that you could handle with __FreeBSD_version if
   you wanted to.]
 - A few devices do have a legitimate use for use for the unit.  [They
   can use the softc to store it.  That's what NetBSD did.]
 - Well defined maximum name size limits length of name.  [It's 16
   bytes with is more then I'd want to type in to ifconfig.]
 - It touches 140-150 files.  [Most of the changes are minor in nature
   and I'm about halfway through with 2-3hrs of work.]
 - Slight bloating of struct ifnet (8 bytes on normal 32-bit
   architectures).  [None on 64-bit arches.]
 - We've resisted for 8 years, we can't stop now. :-)

What do other people think?

-- Brooks

PS.  Here the diff for a typical interface (around half have only the
initialization change and most others have more, but similar debugging
output changes):

RCS file: /usr/cvs/src/sys/dev/ep/if_ep.c,v
retrieving revision 1.109
diff -u -p -r1.109 if_ep.c
--- ep/if_ep.c  20 Mar 2002 02:07:19 -0000      1.109
+++ ep/if_ep.c  26 Jul 2002 06:55:58 -0000
@@ -280,8 +280,7 @@ ep_attach(sc)
        attached =3D (ifp->if_softc !=3D 0);
=20
        ifp->if_softc =3D sc;
-       ifp->if_unit =3D sc->unit;
-       ifp->if_name =3D "ep";
+       sprintf(ifp->if_xname, "ep%d", sc->unit);
        ifp->if_mtu =3D ETHERMTU;
        ifp->if_flags =3D IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
        ifp->if_output =3D ether_output;
@@ -917,7 +916,7 @@ ep_if_watchdog(ifp)
     /*
     printf("ep: watchdog\n");
=20
-    log(LOG_ERR, "ep%d: watchdog\n", ifp->if_unit);
+    log(LOG_ERR, "%s: watchdog\n", ifp->if_xname);
     ifp->if_oerrors++;
     */
=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

--Qxx1br4bt0+wmkIi
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iD8DBQE9Qh1IXY6L6fI4GtQRAquDAJ9jKQf6WETQotJOtNc+nNeA6Lc4NgCfa16L
WgNyRmierxeARLWN+JMPkpQ=
=QQr1
-----END PGP SIGNATURE-----

--Qxx1br4bt0+wmkIi--

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




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