Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 1 Oct 2001 14:12:45 -0700 (PDT)
From:      Julian Elischer <julian@elischer.org>
To:        Matthew Jacob <mjacob@feral.com>
Cc:        freebsd-net@freebsd.org
Subject:   Re: review of minor clarifying comments
Message-ID:  <Pine.BSF.4.21.0110011410510.87441-100000@InterJet.elischer.org>
In-Reply-To: <Pine.BSF.4.21.0110011302130.99893-100000@beppo>

next in thread | previous in thread | raw e-mail | index | archive | help
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.0110011410510.87441-100000>