diff options
author | wollman <wollman@FreeBSD.org> | 1996-12-11 20:38:25 +0000 |
---|---|---|
committer | wollman <wollman@FreeBSD.org> | 1996-12-11 20:38:25 +0000 |
commit | 9b9067caec777892be0e223bef825ffc72c90754 (patch) | |
tree | 12bcc692487d0eb28f370c9d9190da112b407d03 /sys/net | |
parent | 46eb306a07907d347c52578792989c6c127df0d5 (diff) | |
download | FreeBSD-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.c | 30 | ||||
-rw-r--r-- | sys/net/if.h | 25 | ||||
-rw-r--r-- | sys/net/if_loop.c | 5 | ||||
-rw-r--r-- | sys/net/if_sl.c | 3 | ||||
-rw-r--r-- | sys/net/rtsock.c | 4 |
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; |