summaryrefslogtreecommitdiffstats
path: root/sys/net
diff options
context:
space:
mode:
authorwollman <wollman@FreeBSD.org>1996-12-11 20:38:25 +0000
committerwollman <wollman@FreeBSD.org>1996-12-11 20:38:25 +0000
commit9b9067caec777892be0e223bef825ffc72c90754 (patch)
tree12bcc692487d0eb28f370c9d9190da112b407d03 /sys/net
parent46eb306a07907d347c52578792989c6c127df0d5 (diff)
downloadFreeBSD-src-9b9067caec777892be0e223bef825ffc72c90754.zip
FreeBSD-src-9b9067caec777892be0e223bef825ffc72c90754.tar.gz
Use queue macros for the list of interfaces. Next stop: ifaddrs!
Diffstat (limited to 'sys/net')
-rw-r--r--sys/net/if.c30
-rw-r--r--sys/net/if.h25
-rw-r--r--sys/net/if_loop.c5
-rw-r--r--sys/net/if_sl.c3
-rw-r--r--sys/net/rtsock.c4
5 files changed, 38 insertions, 29 deletions
diff --git a/sys/net/if.c b/sys/net/if.c
index 26d37f7..78a98d8 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.35 1996/07/30 19:16:58 wollman Exp $
+ * $Id: if.c,v 1.36 1996/08/07 04:09:05 julian Exp $
*/
#include <sys/param.h>
@@ -67,7 +67,7 @@ SYSINIT(interfaces, SI_SUB_PROTO_IF, SI_ORDER_FIRST, ifinit, NULL)
int ifqmaxlen = IFQ_MAXLEN;
-struct ifnet *ifnet;
+struct ifnethead ifnet; /* depend on static init XXX */
/*
* Network interface utility routines.
@@ -84,7 +84,7 @@ ifinit(dummy)
{
register struct ifnet *ifp;
- for (ifp = ifnet; ifp; ifp = ifp->if_next)
+ for (ifp = ifnet.tqh_first; ifp; ifp = ifp->if_link.tqe_next)
if (ifp->if_snd.ifq_maxlen == 0)
ifp->if_snd.ifq_maxlen = ifqmaxlen;
if_slowtimo(0);
@@ -105,15 +105,17 @@ if_attach(ifp)
unsigned socksize, ifasize;
int namelen, masklen;
char workbuf[64];
- register struct ifnet **p = &ifnet;
register struct sockaddr_dl *sdl;
register struct ifaddr *ifa;
static int if_indexlim = 8;
+ static int inited;
+ if (!inited) {
+ TAILQ_INIT(&ifnet);
+ inited = 1;
+ }
- while (*p)
- p = &((*p)->if_next);
- *p = ifp;
+ TAILQ_INSERT_TAIL(&ifnet, ifp, if_link);
ifp->if_index = ++if_index;
microtime(&ifp->if_lastchange);
if (ifnet_addrs == 0 || if_index >= if_indexlim) {
@@ -176,7 +178,7 @@ ifa_ifwithaddr(addr)
#define equal(a1, a2) \
(bcmp((caddr_t)(a1), (caddr_t)(a2), ((struct sockaddr *)(a1))->sa_len) == 0)
- for (ifp = ifnet; ifp; ifp = ifp->if_next)
+ for (ifp = ifnet.tqh_first; ifp; ifp = ifp->if_link.tqe_next)
for (ifa = ifp->if_addrlist; ifa; ifa = ifa->ifa_next) {
if (ifa->ifa_addr->sa_family != addr->sa_family)
continue;
@@ -199,7 +201,7 @@ ifa_ifwithdstaddr(addr)
register struct ifnet *ifp;
register struct ifaddr *ifa;
- for (ifp = ifnet; ifp; ifp = ifp->if_next)
+ for (ifp = ifnet.tqh_first; ifp; ifp = ifp->if_link.tqe_next)
if (ifp->if_flags & IFF_POINTOPOINT)
for (ifa = ifp->if_addrlist; ifa; ifa = ifa->ifa_next) {
if (ifa->ifa_addr->sa_family != addr->sa_family)
@@ -229,7 +231,7 @@ ifa_ifwithnet(addr)
if (sdl->sdl_index && sdl->sdl_index <= if_index)
return (ifnet_addrs[sdl->sdl_index - 1]);
}
- for (ifp = ifnet; ifp; ifp = ifp->if_next) {
+ for (ifp = ifnet.tqh_first; ifp; ifp = ifp->if_link.tqe_next) {
for (ifa = ifp->if_addrlist; ifa; ifa = ifa->ifa_next) {
register char *cp, *cp2, *cp3;
@@ -406,7 +408,7 @@ if_slowtimo(arg)
register struct ifnet *ifp;
int s = splimp();
- for (ifp = ifnet; ifp; ifp = ifp->if_next) {
+ for (ifp = ifnet.tqh_first; ifp; ifp = ifp->if_link.tqe_next) {
if (ifp->if_timer == 0 || --ifp->if_timer)
continue;
if (ifp->if_watchdog)
@@ -448,7 +450,7 @@ ifunit(name)
if (*cp != '\0')
return 0; /* no trailing garbage allowed */
*ep = 0;
- for (ifp = ifnet; ifp; ifp = ifp->if_next) {
+ for (ifp = ifnet.tqh_first; ifp; ifp = ifp->if_link.tqe_next) {
if (bcmp(ifp->if_name, name, len))
continue;
if (unit == ifp->if_unit)
@@ -680,13 +682,13 @@ ifconf(cmd, data)
caddr_t data;
{
register struct ifconf *ifc = (struct ifconf *)data;
- register struct ifnet *ifp = ifnet;
+ register struct ifnet *ifp = ifnet.tqh_first;
register struct ifaddr *ifa;
struct ifreq ifr, *ifrp;
int space = ifc->ifc_len, error = 0;
ifrp = ifc->ifc_req;
- for (; space > sizeof (ifr) && ifp; ifp = ifp->if_next) {
+ for (; space > sizeof (ifr) && ifp; ifp = ifp->if_link.tqe_next) {
char workbuf[64];
int ifnlen;
diff --git a/sys/net/if.h b/sys/net/if.h
index 7ee1ae7..267c5b0 100644
--- a/sys/net/if.h
+++ b/sys/net/if.h
@@ -73,6 +73,8 @@ struct socket;
struct ether_header;
#endif
+#include <sys/queue.h> /* get LIST macros */
+
/*
* Structure describing information about an interface
* which may be of interest to management entities.
@@ -124,8 +126,12 @@ struct ifqueue {
struct ifnet {
void *if_softc; /* pointer to driver state */
char *if_name; /* name, e.g. ``en'' or ``lo'' */
- struct ifnet *if_next; /* all struct ifnets are chained */
+ TAILQ_ENTRY(ifnet) if_link; /* all struct ifnets are chained */
+#if 0
+ LIST_HEAD(, ifaddr) if_addrlist;
+#else
struct ifaddr *if_addrlist; /* linked list of addresses per if */
+#endif
int if_pcount; /* number of promiscuous listeners */
struct bpf_if *if_bpf; /* packet filter structure */
u_short if_index; /* numeric abbreviation for this if */
@@ -161,7 +167,8 @@ struct ifnet {
struct ifqueue if_snd; /* output queue */
struct ifqueue *if_poll_slowq; /* input queue for slow devices */
};
-typedef void if_init_f_t __P((void *));
+typedef void if_init_f_t __P((void *));
+TAILQ_HEAD(ifnethead, ifnet);
#define if_mtu if_data.ifi_mtu
#define if_type if_data.ifi_type
@@ -303,7 +310,11 @@ struct ifaddr {
#define ifa_broadaddr ifa_dstaddr /* broadcast address interface */
struct sockaddr *ifa_netmask; /* used to determine subnet */
struct ifnet *ifa_ifp; /* back-pointer to interface */
+#if 0
+ LIST_ENTRY(ifaddr) ifa_link;
+#else
struct ifaddr *ifa_next; /* next address for interface */
+#endif
void (*ifa_rtrequest) /* check or clean routes (+ or -)'d */
__P((int, struct rtentry *, struct sockaddr *));
u_short ifa_flags; /* mostly rt_flags for cloning */
@@ -402,11 +413,11 @@ struct ifconf {
else \
(ifa)->ifa_refcnt--;
-extern struct ifnet *ifnet;
-extern int ifqmaxlen;
-extern struct ifnet loif[];
-extern int if_index;
-extern struct ifaddr **ifnet_addrs;
+extern struct ifnethead ifnet;
+extern int ifqmaxlen;
+extern struct ifnet loif[];
+extern int if_index;
+extern struct ifaddr **ifnet_addrs;
void ether_ifattach __P((struct ifnet *));
void ether_input __P((struct ifnet *, struct ether_header *, struct mbuf *));
diff --git a/sys/net/if_loop.c b/sys/net/if_loop.c
index 847912e..3356df1 100644
--- a/sys/net/if_loop.c
+++ b/sys/net/if_loop.c
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* @(#)if_loop.c 8.1 (Berkeley) 6/10/93
- * $Id: if_loop.c,v 1.21 1996/06/10 23:07:31 gpalmer Exp $
+ * $Id: if_loop.c,v 1.22 1996/06/19 16:24:10 wollman Exp $
*/
/*
@@ -109,15 +109,12 @@ loopattach(dummy)
for (ifp = loif; i < NLOOP; ifp++) {
ifp->if_name = "lo";
- ifp->if_next = NULL;
ifp->if_unit = i++;
ifp->if_mtu = LOMTU;
ifp->if_flags = IFF_LOOPBACK | IFF_MULTICAST;
ifp->if_ioctl = loioctl;
ifp->if_output = looutput;
ifp->if_type = IFT_LOOP;
- ifp->if_hdrlen = 0;
- ifp->if_addrlen = 0;
if_attach(ifp);
#if NBPFILTER > 0
bpfattach(ifp, DLT_NULL, sizeof(u_int));
diff --git a/sys/net/if_sl.c b/sys/net/if_sl.c
index 28cd048..ffcdca8 100644
--- a/sys/net/if_sl.c
+++ b/sys/net/if_sl.c
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* @(#)if_sl.c 8.6 (Berkeley) 2/1/94
- * $Id: if_sl.c,v 1.44 1996/06/24 21:56:39 gpalmer Exp $
+ * $Id: if_sl.c,v 1.45 1996/10/11 18:40:48 wollman Exp $
*/
/*
@@ -214,7 +214,6 @@ slattach(dummy)
for (sc = sl_softc; i < NSL; sc++) {
sc->sc_if.if_name = "sl";
- sc->sc_if.if_next = NULL;
sc->sc_if.if_unit = i++;
sc->sc_if.if_mtu = SLMTU;
sc->sc_if.if_flags =
diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c
index c0491e5..582ff7c 100644
--- a/sys/net/rtsock.c
+++ b/sys/net/rtsock.c
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* @(#)rtsock.c 8.5 (Berkeley) 11/2/94
- * $Id: rtsock.c,v 1.19 1996/05/08 04:28:54 gpalmer Exp $
+ * $Id: rtsock.c,v 1.20 1996/07/10 01:34:36 fenner Exp $
*/
#include <sys/param.h>
@@ -685,7 +685,7 @@ sysctl_iflist(af, w)
int len, error = 0;
bzero((caddr_t)&info, sizeof(info));
- for (ifp = ifnet; ifp; ifp = ifp->if_next) {
+ for (ifp = ifnet.tqh_first; ifp; ifp = ifp->if_link.tqe_next) {
if (w->w_arg && w->w_arg != ifp->if_index)
continue;
ifa = ifp->if_addrlist;
OpenPOWER on IntegriCloud