summaryrefslogtreecommitdiffstats
path: root/sys/net
diff options
context:
space:
mode:
authorwollman <wollman@FreeBSD.org>1996-12-13 21:29:07 +0000
committerwollman <wollman@FreeBSD.org>1996-12-13 21:29:07 +0000
commit3417f9411098d1cd19c5db539c0768e778b83a1c (patch)
tree782c07e423375f5e3235e7a677261301a91e59c6 /sys/net
parent4ad813db29ba756a35db6540961c86a4c1f5592b (diff)
downloadFreeBSD-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.c34
-rw-r--r--sys/net/if.h20
-rw-r--r--sys/net/if_ethersubr.c22
-rw-r--r--sys/net/if_fddisubr.c16
-rw-r--r--sys/net/if_spppsubr.c5
-rw-r--r--sys/net/if_tun.c6
-rw-r--r--sys/net/rtsock.c10
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;
OpenPOWER on IntegriCloud