diff options
author | wollman <wollman@FreeBSD.org> | 1996-12-13 21:29:07 +0000 |
---|---|---|
committer | wollman <wollman@FreeBSD.org> | 1996-12-13 21:29:07 +0000 |
commit | 3417f9411098d1cd19c5db539c0768e778b83a1c (patch) | |
tree | 782c07e423375f5e3235e7a677261301a91e59c6 /sys/net | |
parent | 4ad813db29ba756a35db6540961c86a4c1f5592b (diff) | |
download | FreeBSD-src-3417f9411098d1cd19c5db539c0768e778b83a1c.zip FreeBSD-src-3417f9411098d1cd19c5db539c0768e778b83a1c.tar.gz |
Convert the interface address and IP interface address structures
to TAILQs. Fix places which referenced these for no good reason
that I can see (the references remain, but were fixed to compile
again; they are still questionable).
Diffstat (limited to 'sys/net')
-rw-r--r-- | sys/net/if.c | 34 | ||||
-rw-r--r-- | sys/net/if.h | 20 | ||||
-rw-r--r-- | sys/net/if_ethersubr.c | 22 | ||||
-rw-r--r-- | sys/net/if_fddisubr.c | 16 | ||||
-rw-r--r-- | sys/net/if_spppsubr.c | 5 | ||||
-rw-r--r-- | sys/net/if_tun.c | 6 | ||||
-rw-r--r-- | sys/net/rtsock.c | 10 |
7 files changed, 59 insertions, 54 deletions
diff --git a/sys/net/if.c b/sys/net/if.c index 78a98d8..65ec137 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.36 1996/08/07 04:09:05 julian Exp $ + * $Id: if.c,v 1.37 1996/12/11 20:38:14 wollman Exp $ */ #include <sys/param.h> @@ -117,6 +117,14 @@ if_attach(ifp) TAILQ_INSERT_TAIL(&ifnet, ifp, if_link); ifp->if_index = ++if_index; + /* + * XXX - + * The old code would work if the interface passed a pre-existing + * chain of ifaddrs to this code. We don't trust our callers to + * properly initialize the tailq, however, so we no longer allow + * this unlikely case. + */ + TAILQ_INIT(&ifp->if_addrhead); microtime(&ifp->if_lastchange); if (ifnet_addrs == 0 || if_index >= if_indexlim) { unsigned n = (if_indexlim <<= 1) * sizeof(ifa); @@ -153,16 +161,14 @@ if_attach(ifp) sdl->sdl_type = ifp->if_type; ifnet_addrs[if_index - 1] = ifa; ifa->ifa_ifp = ifp; - ifa->ifa_next = ifp->if_addrlist; ifa->ifa_rtrequest = link_rtrequest; - ifp->if_addrlist = ifa; ifa->ifa_addr = (struct sockaddr *)sdl; - sdl = (struct sockaddr_dl *)(socksize + (caddr_t)sdl); ifa->ifa_netmask = (struct sockaddr *)sdl; sdl->sdl_len = masklen; while (namelen != 0) sdl->sdl_data[--namelen] = 0xff; + TAILQ_INSERT_HEAD(&ifp->if_addrhead, ifa, ifa_link); } } /* @@ -179,7 +185,8 @@ ifa_ifwithaddr(addr) #define equal(a1, a2) \ (bcmp((caddr_t)(a1), (caddr_t)(a2), ((struct sockaddr *)(a1))->sa_len) == 0) for (ifp = ifnet.tqh_first; ifp; ifp = ifp->if_link.tqe_next) - for (ifa = ifp->if_addrlist; ifa; ifa = ifa->ifa_next) { + for (ifa = ifp->if_addrhead.tqh_first; ifa; + ifa = ifa->ifa_link.tqe_next) { if (ifa->ifa_addr->sa_family != addr->sa_family) continue; if (equal(addr, ifa->ifa_addr)) @@ -203,7 +210,8 @@ ifa_ifwithdstaddr(addr) 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) { + for (ifa = ifp->if_addrhead.tqh_first; ifa; + ifa = ifa->ifa_link.tqe_next) { if (ifa->ifa_addr->sa_family != addr->sa_family) continue; if (ifa->ifa_dstaddr && equal(addr, ifa->ifa_dstaddr)) @@ -232,7 +240,8 @@ ifa_ifwithnet(addr) return (ifnet_addrs[sdl->sdl_index - 1]); } for (ifp = ifnet.tqh_first; ifp; ifp = ifp->if_link.tqe_next) { - for (ifa = ifp->if_addrlist; ifa; ifa = ifa->ifa_next) { + for (ifa = ifp->if_addrhead.tqh_first; ifa; + ifa = ifa->ifa_link.tqe_next) { register char *cp, *cp2, *cp3; if (ifa->ifa_addr->sa_family != af) @@ -278,7 +287,8 @@ ifaof_ifpforaddr(addr, ifp) if (af >= AF_MAX) return (0); - for (ifa = ifp->if_addrlist; ifa; ifa = ifa->ifa_next) { + for (ifa = ifp->if_addrhead.tqh_first; ifa; + ifa = ifa->ifa_link.tqe_next) { if (ifa->ifa_addr->sa_family != af) continue; if (ifa_maybe == 0) @@ -350,7 +360,8 @@ if_down(ifp) ifp->if_flags &= ~IFF_UP; microtime(&ifp->if_lastchange); - for (ifa = ifp->if_addrlist; ifa; ifa = ifa->ifa_next) + for (ifa = ifp->if_addrhead.tqh_first; ifa; + ifa = ifa->ifa_link.tqe_next) pfctlinput(PRC_IFDOWN, ifa->ifa_addr); if_qflush(&ifp->if_snd); rt_ifmsg(ifp); @@ -699,7 +710,7 @@ ifconf(cmd, data) strcpy(ifr.ifr_name, workbuf); } - if ((ifa = ifp->if_addrlist) == 0) { + if ((ifa = ifp->if_addrhead.tqh_first) == 0) { bzero((caddr_t)&ifr.ifr_addr, sizeof(ifr.ifr_addr)); error = copyout((caddr_t)&ifr, (caddr_t)ifrp, sizeof (ifr)); @@ -707,7 +718,8 @@ ifconf(cmd, data) break; space -= sizeof (ifr), ifrp++; } else - for ( ; space > sizeof (ifr) && ifa; ifa = ifa->ifa_next) { + for ( ; space > sizeof (ifr) && ifa; + ifa = ifa->ifa_link.tqe_next) { register struct sockaddr *sa = ifa->ifa_addr; #ifdef COMPAT_43 if (cmd == OSIOCGIFCONF) { diff --git a/sys/net/if.h b/sys/net/if.h index 267c5b0..09b6bc9 100644 --- a/sys/net/if.h +++ b/sys/net/if.h @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)if.h 8.1 (Berkeley) 6/10/93 - * $Id: if.h,v 1.38 1996/12/10 18:03:51 wollman Exp $ + * $Id: if.h,v 1.40 1996/12/11 20:38:14 wollman Exp $ */ #ifndef _NET_IF_H_ @@ -73,7 +73,10 @@ struct socket; struct ether_header; #endif -#include <sys/queue.h> /* get LIST macros */ +#include <sys/queue.h> /* get TAILQ macros */ + +TAILQ_HEAD(ifnethead, ifnet); /* we use TAILQs so that the order of */ +TAILQ_HEAD(ifaddrhead, ifaddr); /* instantiation is preserved in the list */ /* * Structure describing information about an interface @@ -127,11 +130,7 @@ struct ifnet { void *if_softc; /* pointer to driver state */ char *if_name; /* name, e.g. ``en'' or ``lo'' */ 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 + struct ifaddrhead if_addrhead; /* linked list of addresses per if */ int if_pcount; /* number of promiscuous listeners */ struct bpf_if *if_bpf; /* packet filter structure */ u_short if_index; /* numeric abbreviation for this if */ @@ -168,7 +167,6 @@ struct ifnet { struct ifqueue *if_poll_slowq; /* input queue for slow devices */ }; 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 @@ -310,11 +308,7 @@ 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 + TAILQ_ENTRY(ifaddr) ifa_link; /* queue macro glue */ void (*ifa_rtrequest) /* check or clean routes (+ or -)'d */ __P((int, struct rtentry *, struct sockaddr *)); u_short ifa_flags; /* mostly rt_flags for cloning */ diff --git a/sys/net/if_ethersubr.c b/sys/net/if_ethersubr.c index bdcdde7..3aefabe 100644 --- a/sys/net/if_ethersubr.c +++ b/sys/net/if_ethersubr.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)if_ethersubr.c 8.1 (Berkeley) 6/10/93 - * $Id: if_ethersubr.c,v 1.27 1996/11/18 04:55:44 davidg Exp $ + * $Id: if_ethersubr.c,v 1.28 1996/12/10 07:29:48 davidg Exp $ */ #include <sys/param.h> @@ -197,7 +197,7 @@ ether_output(ifp, m0, dst, rt0) * ifaddr is the first thing in at_ifaddr */ if ((aa = (struct at_ifaddr *)at_ifawithnet( - (struct sockaddr_at *)dst, ifp->if_addrlist)) + (struct sockaddr_at *)dst, &ifp->if_addrhead)) == 0) goto bad; @@ -653,15 +653,15 @@ ether_ifattach(ifp) ifp->if_mtu = ETHERMTU; if (ifp->if_baudrate == 0) ifp->if_baudrate = 10000000; - for (ifa = ifp->if_addrlist; ifa; ifa = ifa->ifa_next) - if ((sdl = (struct sockaddr_dl *)ifa->ifa_addr) && - sdl->sdl_family == AF_LINK) { - sdl->sdl_type = IFT_ETHER; - sdl->sdl_alen = ifp->if_addrlen; - bcopy((caddr_t)((struct arpcom *)ifp)->ac_enaddr, - LLADDR(sdl), ifp->if_addrlen); - break; - } + ifa = ifnet_addrs[ifp->if_index - 1]; + if (ifa == 0) { + printf("ether_ifattach: no lladdr!\n"); + return; + } + sdl = (struct sockaddr_dl *)ifa->ifa_addr; + sdl->sdl_type = IFT_ETHER; + sdl->sdl_alen = ifp->if_addrlen; + bcopy(((struct arpcom *)ifp)->ac_enaddr, LLADDR(sdl), ifp->if_addrlen); } static u_char ether_ipmulticast_min[6] = diff --git a/sys/net/if_fddisubr.c b/sys/net/if_fddisubr.c index 1d13de2..f910e56 100644 --- a/sys/net/if_fddisubr.c +++ b/sys/net/if_fddisubr.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * from: if_ethersubr.c,v 1.5 1994/12/13 22:31:45 wollman Exp - * $Id: if_fddisubr.c,v 1.9 1996/06/10 23:07:31 gpalmer Exp $ + * $Id: if_fddisubr.c,v 1.10 1996/11/12 08:43:32 davidg Exp $ */ #include <sys/param.h> @@ -567,13 +567,9 @@ fddi_ifattach(ifp) ifp->if_hdrlen = 21; ifp->if_mtu = FDDIMTU; ifp->if_baudrate = 100000000; - for (ifa = ifp->if_addrlist; ifa; ifa = ifa->ifa_next) - if ((sdl = (struct sockaddr_dl *)ifa->ifa_addr) && - sdl->sdl_family == AF_LINK) { - sdl->sdl_type = IFT_FDDI; - sdl->sdl_alen = ifp->if_addrlen; - bcopy((caddr_t)((struct arpcom *)ifp)->ac_enaddr, - LLADDR(sdl), ifp->if_addrlen); - break; - } + ifa = ifnet_addrs[ifp->if_index - 1]; + sdl = (struct sockaddr_dl *)ifa->ifa_addr; + sdl->sdl_type = IFT_FDDI; + sdl->sdl_alen = ifp->if_addrlen; + bcopy(((struct arpcom *)ifp)->ac_enaddr, LLADDR(sdl), ifp->if_addrlen); } diff --git a/sys/net/if_spppsubr.c b/sys/net/if_spppsubr.c index e295cbd..88208009 100644 --- a/sys/net/if_spppsubr.c +++ b/sys/net/if_spppsubr.c @@ -14,7 +14,7 @@ * * Version 1.9, Wed Oct 4 18:58:15 MSK 1995 * - * $Id: if_spppsubr.c,v 1.12 1996/06/10 23:17:45 gpalmer Exp $ + * $Id: if_spppsubr.c,v 1.13 1996/08/30 16:44:36 jhay Exp $ */ #undef DEBUG @@ -898,7 +898,8 @@ sppp_cisco_input (struct sppp *sp, struct mbuf *m) } break; case CISCO_ADDR_REQ: - for (ifa=ifp->if_addrlist; ifa; ifa=ifa->ifa_next) + for (ifa=ifp->if_addrhead.tqh_first; ifa; + ifa=ifa->ifa_link.tqe_next) if (ifa->ifa_addr->sa_family == AF_INET) break; if (! ifa) { diff --git a/sys/net/if_tun.c b/sys/net/if_tun.c index 9518c31..0b740e5 100644 --- a/sys/net/if_tun.c +++ b/sys/net/if_tun.c @@ -197,7 +197,8 @@ tunclose(dev_t dev, int foo, int bar, struct proc *p) if (ifp->if_flags & IFF_RUNNING) { /* find internet addresses and delete routes */ register struct ifaddr *ifa; - for (ifa = ifp->if_addrlist; ifa; ifa = ifa->ifa_next) { + for (ifa = ifp->if_addrhead.tqh_first; ifa; + ifa = ifa->ifa_link.tqe_next) { if (ifa->ifa_addr->sa_family == AF_INET) { rtinit(ifa, (int)RTM_DELETE, tp->tun_flags & TUN_DSTADDR ? RTF_HOST : 0); @@ -226,7 +227,8 @@ tuninit(unit) ifp->if_flags |= IFF_UP | IFF_RUNNING; microtime(&ifp->if_lastchange); - for (ifa = ifp->if_addrlist; ifa; ifa = ifa->ifa_next) + for (ifa = ifp->if_addrhead.tqh_first; ifa; + ifa = ifa->ifa_link.tqe_next) if (ifa->ifa_addr->sa_family == AF_INET) { struct sockaddr_in *si; diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c index 582ff7c..eb786fa 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.20 1996/07/10 01:34:36 fenner Exp $ + * $Id: rtsock.c,v 1.21 1996/12/11 20:38:16 wollman Exp $ */ #include <sys/param.h> @@ -235,7 +235,7 @@ route_output(m, so) if (rtm->rtm_addrs & (RTA_IFP | RTA_IFA)) { ifp = rt->rt_ifp; if (ifp) { - ifpaddr = ifp->if_addrlist->ifa_addr; + ifpaddr = ifp->if_addrhead.tqh_first->ifa_addr; ifaaddr = rt->rt_ifa->ifa_addr; rtm->rtm_index = ifp->if_index; } else { @@ -604,7 +604,7 @@ rt_newaddrmsg(cmd, ifa, error, rt) int ncmd = cmd == RTM_ADD ? RTM_NEWADDR : RTM_DELADDR; ifaaddr = sa = ifa->ifa_addr; - ifpaddr = ifp->if_addrlist->ifa_addr; + ifpaddr = ifp->if_addrhead.tqh_first->ifa_addr; netmask = ifa->ifa_netmask; brdaddr = ifa->ifa_dstaddr; if ((m = rt_msg1(ncmd, &info)) == NULL) @@ -688,7 +688,7 @@ sysctl_iflist(af, w) 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; + ifa = ifp->if_addrhead.tqh_first; ifpaddr = ifa->ifa_addr; len = rt_msg2(RTM_IFINFO, &info, (caddr_t)0, w); ifpaddr = 0; @@ -704,7 +704,7 @@ sysctl_iflist(af, w) if (error) return (error); } - while ((ifa = ifa->ifa_next) != 0) { + while ((ifa = ifa->ifa_link.tqe_next) != 0) { if (af && af != ifa->ifa_addr->sa_family) continue; ifaaddr = ifa->ifa_addr; |