summaryrefslogtreecommitdiffstats
path: root/sys/net/if.c
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>1999-04-16 21:22:55 +0000
committerpeter <peter@FreeBSD.org>1999-04-16 21:22:55 +0000
commit087d4857e56f150a8f549600150404f273efb895 (patch)
treecf4e27432c59d956f4e5784207180115ee8fef9d /sys/net/if.c
parentc5fe612b8411a32a8e6e426fc1a70cba0cca3d31 (diff)
downloadFreeBSD-src-087d4857e56f150a8f549600150404f273efb895.zip
FreeBSD-src-087d4857e56f150a8f549600150404f273efb895.tar.gz
Bring the 'new-bus' to the i386. This extensively changes the way the
i386 platform boots, it is no longer ISA-centric, and is fully dynamic. Most old drivers compile and run without modification via 'compatability shims' to enable a smoother transition. eisa, isapnp and pccard* are not yet using the new resource manager. Once fully converted, all drivers will be loadable, including PCI and ISA. (Some other changes appear to have snuck in, including a port of Soren's ATA driver to the Alpha. Soren, back this out if you need to.) This is a checkpoint of work-in-progress, but is quite functional. The bulk of the work was done over the last few years by Doug Rabson and Garrett Wollman. Approved by: core
Diffstat (limited to 'sys/net/if.c')
-rw-r--r--sys/net/if.c35
1 files changed, 34 insertions, 1 deletions
diff --git a/sys/net/if.c b/sys/net/if.c
index 680bbd4..635be7d 100644
--- a/sys/net/if.c
+++ b/sys/net/if.c
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* @(#)if.c 8.3 (Berkeley) 1/4/94
- * $Id: if.c,v 1.65 1999/02/01 20:03:27 phk Exp $
+ * $Id: if.c,v 1.66 1999/02/19 13:41:35 phk Exp $
*/
#include "opt_compat.h"
@@ -178,6 +178,39 @@ if_attach(ifp)
TAILQ_INSERT_HEAD(&ifp->if_addrhead, ifa, ifa_link);
}
}
+
+/*
+ * Detach an interface, removing it from the
+ * list of "active" interfaces.
+ */
+void
+if_detach(ifp)
+ struct ifnet *ifp;
+{
+ struct ifaddr *ifa;
+
+ /*
+ * Remove routes and flush queues.
+ */
+ if_down(ifp);
+
+ /*
+ * Remove address from ifnet_addrs[] and maybe decrement if_index.
+ * Clean up all addresses.
+ */
+ ifnet_addrs[ifp->if_index] = 0;
+ while (ifnet_addrs[if_index] == 0)
+ if_index--;
+
+ for (ifa = TAILQ_FIRST(&ifp->if_addrhead); ifa;
+ ifa = TAILQ_FIRST(&ifp->if_addrhead)) {
+ TAILQ_REMOVE(&ifp->if_addrhead, ifa, ifa_link);
+ IFAFREE(ifa);
+ }
+
+ TAILQ_REMOVE(&ifnet, ifp, if_link);
+}
+
/*
* Locate an interface based on a complete address.
*/
OpenPOWER on IntegriCloud