Date: Tue, 14 Dec 1999 22:50:11 -0500 (EST) From: Andrew Gallatin <gallatin@cs.duke.edu> To: Jonathan Lemon <jlemon@americantv.com> Cc: freebsd-arch@freebsd.org Subject: Re: The if_detach problem Message-ID: <14423.3759.258444.555708@grasshopper.cs.duke.edu> In-Reply-To: <19991214160454.26093@right.PCS> References: <imp@village.org> <199912142145.VAA34161@hak.lan.Awfulhak.org> <19991214160454.26093@right.PCS>
next in thread | previous in thread | raw e-mail | index | archive | help
Jonathan Lemon writes:
> > Is there a lot to be gained by removing interfaces ?
>
> Loadable device drivers. I ran into this last week or so when
> unloading a driver I'm developing; if I don't do an 'ifconfig xxx delete'
> before the kldunoad, I get a panic.
I have the following code in a loadable (IP-only, not ethernet) driver
of mine. It doesn't crash on unload anymore. However, I think
something like this should be standard & available for (un)loadable
drivers to call at unload time:
s = splnet();
/*
* Close down routes etc.
* This needs to be at splnet
*/
TAILQ_FOREACH(ifp, &ifnet, if_link){
if(ifp == &sc->myri_if){
ifp_valid = 1;
break;
}
}
if(ifp_valid){
struct ifaddr *ia = 0;
struct in_ifaddr *in_ia = 0;
ifp = &sc->myri_if;
TAILQ_FOREACH(ia, &ifp->if_addrhead, ifa_link){
if (ia->ifa_addr->sa_family != AF_INET)
continue;
in_ia = (struct in_ifaddr *)ia;
in_ifscrub(ifp, in_ia);
TAILQ_REMOVE(&in_ifaddrhead, in_ia, ia_link);
}
if_detach(&sc->myri_if);
}
splx(s);
Cheers,
Drew
------------------------------------------------------------------------------
Andrew Gallatin, Sr Systems Programmer http://www.cs.duke.edu/~gallatin
Duke University Email: gallatin@cs.duke.edu
Department of Computer Science Phone: (919) 660-6590
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?14423.3759.258444.555708>
