Module Name: src Committed By: ozaki-r Date: Thu Jul 7 09:32:03 UTC 2016
Modified Files: src/sys/arch/x86/x86: vmt.c src/sys/compat/common: uipc_syscalls_40.c src/sys/compat/linux/common: linux_socket.c src/sys/compat/linux32/common: linux32_socket.c src/sys/compat/svr4: svr4_sockio.c src/sys/dev/qbus: if_dmc.c src/sys/dist/pf/net: pf_if.c src/sys/external/bsd/ipf/netinet: ip_fil_netbsd.c src/sys/net: if.c if.h if_spppsubr.c if_stf.c if_tun.c link_proto.c rtsock.c src/sys/net/agr: if_agr.c src/sys/netatalk: aarp.c at_control.c src/sys/netinet: in.c in_selsrc.c ip_carp.c ip_icmp.c ip_input.c sctp_asconf.c sctp_output.c sctp_pcb.c sctp_usrreq.c sctputil.c src/sys/netinet6: icmp6.c in6.c in6_ifattach.c ip6_input.c mld6.c nd6.c nd6_rtr.c sctp6_usrreq.c src/sys/netipsec: xform_ipip.c Log Message: Switch the address list of intefaces to pslist(9) As usual, we leave the old list to avoid breaking kvm(3) users. To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.13 src/sys/arch/x86/x86/vmt.c cvs rdiff -u -r1.10 -r1.11 src/sys/compat/common/uipc_syscalls_40.c cvs rdiff -u -r1.130 -r1.131 src/sys/compat/linux/common/linux_socket.c cvs rdiff -u -r1.24 -r1.25 src/sys/compat/linux32/common/linux32_socket.c cvs rdiff -u -r1.37 -r1.38 src/sys/compat/svr4/svr4_sockio.c cvs rdiff -u -r1.24 -r1.25 src/sys/dev/qbus/if_dmc.c cvs rdiff -u -r1.29 -r1.30 src/sys/dist/pf/net/pf_if.c cvs rdiff -u -r1.15 -r1.16 src/sys/external/bsd/ipf/netinet/ip_fil_netbsd.c cvs rdiff -u -r1.353 -r1.354 src/sys/net/if.c cvs rdiff -u -r1.219 -r1.220 src/sys/net/if.h cvs rdiff -u -r1.145 -r1.146 src/sys/net/if_spppsubr.c cvs rdiff -u -r1.94 -r1.95 src/sys/net/if_stf.c cvs rdiff -u -r1.126 -r1.127 src/sys/net/if_tun.c cvs rdiff -u -r1.30 -r1.31 src/sys/net/link_proto.c cvs rdiff -u -r1.190 -r1.191 src/sys/net/rtsock.c cvs rdiff -u -r1.36 -r1.37 src/sys/net/agr/if_agr.c cvs rdiff -u -r1.37 -r1.38 src/sys/netatalk/aarp.c \ src/sys/netatalk/at_control.c cvs rdiff -u -r1.171 -r1.172 src/sys/netinet/in.c cvs rdiff -u -r1.16 -r1.17 src/sys/netinet/in_selsrc.c cvs rdiff -u -r1.73 -r1.74 src/sys/netinet/ip_carp.c cvs rdiff -u -r1.148 -r1.149 src/sys/netinet/ip_icmp.c cvs rdiff -u -r1.335 -r1.336 src/sys/netinet/ip_input.c cvs rdiff -u -r1.4 -r1.5 src/sys/netinet/sctp_asconf.c cvs rdiff -u -r1.6 -r1.7 src/sys/netinet/sctp_output.c \ src/sys/netinet/sctp_pcb.c cvs rdiff -u -r1.5 -r1.6 src/sys/netinet/sctp_usrreq.c cvs rdiff -u -r1.9 -r1.10 src/sys/netinet/sctputil.c cvs rdiff -u -r1.191 -r1.192 src/sys/netinet6/icmp6.c cvs rdiff -u -r1.206 -r1.207 src/sys/netinet6/in6.c cvs rdiff -u -r1.100 -r1.101 src/sys/netinet6/in6_ifattach.c cvs rdiff -u -r1.163 -r1.164 src/sys/netinet6/ip6_input.c cvs rdiff -u -r1.70 -r1.71 src/sys/netinet6/mld6.c cvs rdiff -u -r1.201 -r1.202 src/sys/netinet6/nd6.c cvs rdiff -u -r1.114 -r1.115 src/sys/netinet6/nd6_rtr.c cvs rdiff -u -r1.5 -r1.6 src/sys/netinet6/sctp6_usrreq.c cvs rdiff -u -r1.41 -r1.42 src/sys/netipsec/xform_ipip.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/x86/x86/vmt.c diff -u src/sys/arch/x86/x86/vmt.c:1.12 src/sys/arch/x86/x86/vmt.c:1.13 --- src/sys/arch/x86/x86/vmt.c:1.12 Thu May 12 02:24:16 2016 +++ src/sys/arch/x86/x86/vmt.c Thu Jul 7 09:32:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: vmt.c,v 1.12 2016/05/12 02:24:16 ozaki-r Exp $ */ +/* $NetBSD: vmt.c,v 1.13 2016/07/07 09:32:01 ozaki-r Exp $ */ /* $OpenBSD: vmt.c,v 1.11 2011/01/27 21:29:25 dtucker Exp $ */ /* @@ -817,7 +817,7 @@ vmt_tclo_tick(void *xarg) continue; } - IFADDR_FOREACH(iface_addr, iface) { + IFADDR_READER_FOREACH(iface_addr, iface) { if (iface_addr->ifa_addr->sa_family != AF_INET) { continue; } Index: src/sys/compat/common/uipc_syscalls_40.c diff -u src/sys/compat/common/uipc_syscalls_40.c:1.10 src/sys/compat/common/uipc_syscalls_40.c:1.11 --- src/sys/compat/common/uipc_syscalls_40.c:1.10 Thu Jun 16 02:38:40 2016 +++ src/sys/compat/common/uipc_syscalls_40.c Thu Jul 7 09:32:02 2016 @@ -1,9 +1,9 @@ -/* $NetBSD: uipc_syscalls_40.c,v 1.10 2016/06/16 02:38:40 ozaki-r Exp $ */ +/* $NetBSD: uipc_syscalls_40.c,v 1.11 2016/07/07 09:32:02 ozaki-r Exp $ */ /* written by Pavel Cahyna, 2006. Public domain. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uipc_syscalls_40.c,v 1.10 2016/06/16 02:38:40 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uipc_syscalls_40.c,v 1.11 2016/07/07 09:32:02 ozaki-r Exp $"); /* * System call interface to the socket abstraction. @@ -60,7 +60,7 @@ compat_ifconf(u_long cmd, void *data) error = ENAMETOOLONG; goto release_exit; } - if (IFADDR_EMPTY(ifp)) { + if (IFADDR_READER_EMPTY(ifp)) { memset(&ifr.ifr_addr, 0, sizeof(ifr.ifr_addr)); if (space >= sz) { error = copyout(&ifr, ifrp, sz); @@ -72,7 +72,7 @@ compat_ifconf(u_long cmd, void *data) continue; } - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { struct sockaddr *sa = ifa->ifa_addr; #ifdef COMPAT_OSOCK if (cmd == OOSIOCGIFCONF) { Index: src/sys/compat/linux/common/linux_socket.c diff -u src/sys/compat/linux/common/linux_socket.c:1.130 src/sys/compat/linux/common/linux_socket.c:1.131 --- src/sys/compat/linux/common/linux_socket.c:1.130 Tue Jul 5 07:55:08 2016 +++ src/sys/compat/linux/common/linux_socket.c Thu Jul 7 09:32:02 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: linux_socket.c,v 1.130 2016/07/05 07:55:08 ozaki-r Exp $ */ +/* $NetBSD: linux_socket.c,v 1.131 2016/07/07 09:32:02 ozaki-r Exp $ */ /*- * Copyright (c) 1995, 1998, 2008 The NetBSD Foundation, Inc. @@ -35,7 +35,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: linux_socket.c,v 1.130 2016/07/05 07:55:08 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: linux_socket.c,v 1.131 2016/07/07 09:32:02 ozaki-r Exp $"); #if defined(_KERNEL_OPT) #include "opt_inet.h" @@ -1150,7 +1150,7 @@ linux_getifconf(struct lwp *l, register_ goto release_exit; } - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { sa = ifa->ifa_addr; if (sa->sa_family != AF_INET || sa->sa_len > sizeof(*osa)) @@ -1239,12 +1239,12 @@ linux_getifhwaddr(struct lwp *l, registe continue; found=1; - if (IFADDR_EMPTY(ifp)) { + if (IFADDR_READER_EMPTY(ifp)) { pserialize_read_exit(s); error = ENODEV; goto out; } - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { sadl = satosdl(ifa->ifa_addr); /* only return ethernet addresses */ /* XXX what about FDDI, etc. ? */ @@ -1282,7 +1282,7 @@ linux_getifhwaddr(struct lwp *l, registe IFNET_READER_FOREACH(ifp) { memcpy(lreq.ifr_name, ifp->if_xname, MIN(LINUX_IFNAMSIZ, IFNAMSIZ)); - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { sadl = satosdl(ifa->ifa_addr); /* only return ethernet addresses */ /* XXX what about FDDI, etc. ? */ Index: src/sys/compat/linux32/common/linux32_socket.c diff -u src/sys/compat/linux32/common/linux32_socket.c:1.24 src/sys/compat/linux32/common/linux32_socket.c:1.25 --- src/sys/compat/linux32/common/linux32_socket.c:1.24 Tue Jul 5 08:48:51 2016 +++ src/sys/compat/linux32/common/linux32_socket.c Thu Jul 7 09:32:02 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: linux32_socket.c,v 1.24 2016/07/05 08:48:51 ozaki-r Exp $ */ +/* $NetBSD: linux32_socket.c,v 1.25 2016/07/07 09:32:02 ozaki-r Exp $ */ /*- * Copyright (c) 2006 Emmanuel Dreyfus, all rights reserved. @@ -33,7 +33,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: linux32_socket.c,v 1.24 2016/07/05 08:48:51 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: linux32_socket.c,v 1.25 2016/07/07 09:32:02 ozaki-r Exp $"); #include <sys/types.h> #include <sys/param.h> @@ -451,7 +451,7 @@ linux32_getifconf(struct lwp *l, registe goto release_exit; } - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { sa = ifa->ifa_addr; if (sa->sa_family != AF_INET || sa->sa_len > sizeof(*osa)) @@ -538,11 +538,11 @@ linux32_getifhwaddr(struct lwp *l, regis /* not this interface */ continue; found=1; - if (IFADDR_EMPTY(ifp)) { + if (IFADDR_READER_EMPTY(ifp)) { error = ENODEV; goto out; } - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { sadl = satosdl(ifa->ifa_addr); /* only return ethernet addresses */ /* XXX what about FDDI, etc. ? */ @@ -575,7 +575,7 @@ linux32_getifhwaddr(struct lwp *l, regis IFNET_READER_FOREACH(ifp) { memcpy(lreq.ifr_name, ifp->if_xname, MIN(LINUX32_IFNAMSIZ, IFNAMSIZ)); - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { sadl = satosdl(ifa->ifa_addr); /* only return ethernet addresses */ /* XXX what about FDDI, etc. ? */ Index: src/sys/compat/svr4/svr4_sockio.c diff -u src/sys/compat/svr4/svr4_sockio.c:1.37 src/sys/compat/svr4/svr4_sockio.c:1.38 --- src/sys/compat/svr4/svr4_sockio.c:1.37 Thu May 12 02:24:16 2016 +++ src/sys/compat/svr4/svr4_sockio.c Thu Jul 7 09:32:02 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: svr4_sockio.c,v 1.37 2016/05/12 02:24:16 ozaki-r Exp $ */ +/* $NetBSD: svr4_sockio.c,v 1.38 2016/07/07 09:32:02 ozaki-r Exp $ */ /*- * Copyright (c) 1995, 2008 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: svr4_sockio.c,v 1.37 2016/05/12 02:24:16 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: svr4_sockio.c,v 1.38 2016/07/07 09:32:02 ozaki-r Exp $"); #include <sys/param.h> #include <sys/proc.h> @@ -88,7 +88,7 @@ svr4_count_ifnum(struct ifnet *ifp) struct ifaddr *ifa; int ifnum = 0; - IFADDR_FOREACH(ifa, ifp) + IFADDR_READER_FOREACH(ifa, ifp) ifnum++; return MAX(1, ifnum); Index: src/sys/dev/qbus/if_dmc.c diff -u src/sys/dev/qbus/if_dmc.c:1.24 src/sys/dev/qbus/if_dmc.c:1.25 --- src/sys/dev/qbus/if_dmc.c:1.24 Wed Apr 20 09:01:04 2016 +++ src/sys/dev/qbus/if_dmc.c Thu Jul 7 09:32:02 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_dmc.c,v 1.24 2016/04/20 09:01:04 knakahara Exp $ */ +/* $NetBSD: if_dmc.c,v 1.25 2016/07/07 09:32:02 ozaki-r Exp $ */ /* * Copyright (c) 1982, 1986 Regents of the University of California. * All rights reserved. @@ -41,7 +41,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_dmc.c,v 1.24 2016/04/20 09:01:04 knakahara Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_dmc.c,v 1.25 2016/07/07 09:32:02 ozaki-r Exp $"); #undef DMCDEBUG /* for base table dump on fatal error */ @@ -313,10 +313,10 @@ dmcinit(struct ifnet *ifp) * Check to see that an address has been set * (both local and destination for an address family). */ - IFADDR_FOREACH(ifa, ifp) + IFADDR_READER_FOREACH(ifa, ifp) if (ifa->ifa_addr->sa_family && ifa->ifa_dstaddr->sa_family) break; - if (ifa == (struct ifaddr *) 0) + if (ifa == NULL) return 0; if ((DMC_RBYTE(DMC_BSEL1) & DMC_RUN) == 0) { Index: src/sys/dist/pf/net/pf_if.c diff -u src/sys/dist/pf/net/pf_if.c:1.29 src/sys/dist/pf/net/pf_if.c:1.30 --- src/sys/dist/pf/net/pf_if.c:1.29 Wed Jun 22 07:48:17 2016 +++ src/sys/dist/pf/net/pf_if.c Thu Jul 7 09:32:02 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: pf_if.c,v 1.29 2016/06/22 07:48:17 ozaki-r Exp $ */ +/* $NetBSD: pf_if.c,v 1.30 2016/07/07 09:32:02 ozaki-r Exp $ */ /* $OpenBSD: pf_if.c,v 1.47 2007/07/13 09:17:48 markus Exp $ */ /* @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pf_if.c,v 1.29 2016/06/22 07:48:17 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pf_if.c,v 1.30 2016/07/07 09:32:02 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -559,7 +559,7 @@ pfi_instance_add(struct ifnet *ifp, int if (ifp == NULL) return; - IFADDR_FOREACH(ia, ifp) { + IFADDR_READER_FOREACH(ia, ifp) { af = ia->ifa_addr->sa_family; if (af != AF_INET && af != AF_INET6) continue; Index: src/sys/external/bsd/ipf/netinet/ip_fil_netbsd.c diff -u src/sys/external/bsd/ipf/netinet/ip_fil_netbsd.c:1.15 src/sys/external/bsd/ipf/netinet/ip_fil_netbsd.c:1.16 --- src/sys/external/bsd/ipf/netinet/ip_fil_netbsd.c:1.15 Mon Jun 20 06:46:37 2016 +++ src/sys/external/bsd/ipf/netinet/ip_fil_netbsd.c Thu Jul 7 09:32:02 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: ip_fil_netbsd.c,v 1.15 2016/06/20 06:46:37 knakahara Exp $ */ +/* $NetBSD: ip_fil_netbsd.c,v 1.16 2016/07/07 09:32:02 ozaki-r Exp $ */ /* * Copyright (C) 2012 by Darren Reed. @@ -8,7 +8,7 @@ #if !defined(lint) #if defined(__NetBSD__) #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ip_fil_netbsd.c,v 1.15 2016/06/20 06:46:37 knakahara Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ip_fil_netbsd.c,v 1.16 2016/07/07 09:32:02 ozaki-r Exp $"); #else static const char sccsid[] = "@(#)ip_fil.c 2.41 6/5/96 (C) 1993-2000 Darren Reed"; static const char rcsid[] = "@(#)Id: ip_fil_netbsd.c,v 1.1.1.2 2012/07/22 13:45:17 darrenr Exp"; @@ -1545,7 +1545,7 @@ ipf_ifpaddr(ipf_main_softc_t *softc, int bzero((char *)inp, sizeof(*inp)); #endif - ifa = IFADDR_FIRST(ifp); + ifa = IFADDR_READER_FIRST(ifp); sock = ifa ? ifa->ifa_addr : NULL; while (sock != NULL && ifa != NULL) { sin = (struct sockaddr_in *)sock; @@ -1559,7 +1559,7 @@ ipf_ifpaddr(ipf_main_softc_t *softc, int break; } #endif - ifa = IFADDR_NEXT(ifa); + ifa = IFADDR_READER_NEXT(ifa); if (ifa != NULL) sock = ifa->ifa_addr; } Index: src/sys/net/if.c diff -u src/sys/net/if.c:1.353 src/sys/net/if.c:1.354 --- src/sys/net/if.c:1.353 Tue Jul 5 07:42:51 2016 +++ src/sys/net/if.c Thu Jul 7 09:32:02 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if.c,v 1.353 2016/07/05 07:42:51 knakahara Exp $ */ +/* $NetBSD: if.c,v 1.354 2016/07/07 09:32:02 ozaki-r Exp $ */ /*- * Copyright (c) 1999, 2000, 2001, 2008 The NetBSD Foundation, Inc. @@ -90,7 +90,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if.c,v 1.353 2016/07/05 07:42:51 knakahara Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if.c,v 1.354 2016/07/07 09:32:02 ozaki-r Exp $"); #if defined(_KERNEL_OPT) #include "opt_inet.h" @@ -496,8 +496,9 @@ if_activate_sadl(struct ifnet *ifp, stru if_deactivate_sadl(ifp); if_sadl_setrefs(ifp, ifa); - IFADDR_FOREACH(ifa, ifp) + IFADDR_READER_FOREACH(ifa, ifp) rtinit(ifa, RTM_LLINFO_UPD, 0); + splx(s); } @@ -656,6 +657,7 @@ if_initialize(ifnet_t *ifp) } PSLIST_ENTRY_INIT(ifp, if_pslist_entry); + PSLIST_INIT(&ifp->if_addr_pslist); psref_target_init(&ifp->if_psref, ifnet_psref_class); ifp->if_ioctl_lock = mutex_obj_alloc(MUTEX_DEFAULT, IPL_NONE); @@ -1026,7 +1028,8 @@ if_purgeaddrs(struct ifnet *ifp, int fam { struct ifaddr *ifa, *nifa; - IFADDR_FOREACH_SAFE(ifa, ifp, nifa) { + for (ifa = IFADDR_READER_FIRST(ifp); ifa; ifa = nifa) { + nifa = IFADDR_READER_NEXT(ifa); if (ifa->ifa_addr->sa_family != family) continue; (*purgeaddr)(ifa); @@ -1047,7 +1050,7 @@ if_build_ifa_list(struct ifnet *ifp) KASSERT(ifa_list == NULL); KASSERT(ifa_list_size == 0); - IFADDR_FOREACH(ifa, ifp) + IFADDR_READER_FOREACH(ifa, ifp) ifa_list_size++; ifa_list = kmem_alloc(sizeof(*ifa) * ifa_list_size, KM_SLEEP); @@ -1055,7 +1058,7 @@ if_build_ifa_list(struct ifnet *ifp) return; i = 0; - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { ifa_list[i++] = ifa; ifaref(ifa); } @@ -1180,7 +1183,7 @@ if_detach(struct ifnet *ifp) * least one ifaddr. */ again: - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { family = ifa->ifa_addr->sa_family; #ifdef IFAREF_DEBUG printf("if_detach: ifaddr %p, family %d, refcnt %d\n", @@ -1566,6 +1569,8 @@ ifa_insert(struct ifnet *ifp, struct ifa { ifa->ifa_ifp = ifp; TAILQ_INSERT_TAIL(&ifp->if_addrlist, ifa, ifa_list); + IFADDR_ENTRY_INIT(ifa); + IFADDR_WRITER_INSERT_TAIL(ifp, ifa); ifaref(ifa); } @@ -1574,6 +1579,9 @@ ifa_remove(struct ifnet *ifp, struct ifa { KASSERT(ifa->ifa_ifp == ifp); TAILQ_REMOVE(&ifp->if_addrlist, ifa, ifa_list); + IFADDR_WRITER_REMOVE(ifa); + /* TODO psref_target_destroy */ + IFADDR_ENTRY_DESTROY(ifa); ifafree(ifa); } @@ -1598,7 +1606,7 @@ ifa_ifwithaddr(const struct sockaddr *ad IFNET_READER_FOREACH(ifp) { if (if_is_deactivated(ifp)) continue; - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family != addr->sa_family) continue; if (equal(addr, ifa->ifa_addr)) @@ -1632,7 +1640,7 @@ ifa_ifwithdstaddr(const struct sockaddr continue; if ((ifp->if_flags & IFF_POINTOPOINT) == 0) continue; - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family != addr->sa_family || ifa->ifa_dstaddr == NULL) continue; @@ -1694,7 +1702,7 @@ ifa_ifwithnet(const struct sockaddr *add IFNET_READER_FOREACH(ifp) { if (if_is_deactivated(ifp)) continue; - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { const char *cp, *cp2, *cp3; if (ifa->ifa_addr->sa_family != af || @@ -1749,7 +1757,7 @@ ifa_ifwithaf(int af) IFNET_READER_FOREACH(ifp) { if (if_is_deactivated(ifp)) continue; - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family == af) goto out; } @@ -1778,7 +1786,7 @@ ifaof_ifpforaddr(const struct sockaddr * if (af >= AF_MAX) return NULL; - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family != af) continue; ifa_maybe = ifa; @@ -2031,7 +2039,7 @@ p2p_rtrequest(int req, struct rtentry *r rt->rt_ifp = lo0ifp; - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (equal(rt_getkey(rt), ifa->ifa_addr)) break; } @@ -2041,7 +2049,7 @@ p2p_rtrequest(int req, struct rtentry *r /* * Ensure lo0 has an address of the same family. */ - IFADDR_FOREACH(lo0ifa, lo0ifp) { + IFADDR_READER_FOREACH(lo0ifa, lo0ifp) { if (lo0ifa->ifa_addr->sa_family == ifa->ifa_addr->sa_family) break; @@ -2076,7 +2084,7 @@ if_down(struct ifnet *ifp) ifp->if_flags &= ~IFF_UP; nanotime(&ifp->if_lastchange); - IFADDR_FOREACH(ifa, ifp) + IFADDR_READER_FOREACH(ifa, ifp) pfctlinput(PRC_IFDOWN, ifa->ifa_addr); IFQ_PURGE(&ifp->if_snd); #if NCARP > 0 @@ -2107,7 +2115,7 @@ if_up(struct ifnet *ifp) nanotime(&ifp->if_lastchange); #ifdef notyet /* this has no effect on IP, and will kill all ISO connections XXX */ - IFADDR_FOREACH(ifa, ifp) + IFADDR_READER_FOREACH(ifa, ifp) pfctlinput(PRC_IFUP, ifa->ifa_addr); #endif #if NCARP > 0 @@ -2528,7 +2536,7 @@ ifaddrpref_ioctl(struct socket *so, u_lo sockaddr_externalize(&v.sa, sizeof(v.ss), sa); - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family != sa->sa_family) continue; sockaddr_externalize(&u.sa, sizeof(u.ss), ifa->ifa_addr); @@ -2775,7 +2783,7 @@ ifconf(u_long cmd, void *data) error = ENAMETOOLONG; goto release_exit; } - if (IFADDR_EMPTY(ifp)) { + if (IFADDR_READER_EMPTY(ifp)) { /* Interface with no addresses - send zero sockaddr. */ memset(&ifr.ifr_addr, 0, sizeof(ifr.ifr_addr)); if (!docopy) { @@ -2791,7 +2799,7 @@ ifconf(u_long cmd, void *data) } } - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { struct sockaddr *sa = ifa->ifa_addr; /* all sockaddrs must fit in sockaddr_storage */ KASSERT(sa->sa_len <= sizeof(ifr.ifr_ifru)); Index: src/sys/net/if.h diff -u src/sys/net/if.h:1.219 src/sys/net/if.h:1.220 --- src/sys/net/if.h:1.219 Thu Jun 30 09:44:58 2016 +++ src/sys/net/if.h Thu Jul 7 09:32:02 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if.h,v 1.219 2016/06/30 09:44:58 ozaki-r Exp $ */ +/* $NetBSD: if.h,v 1.220 2016/07/07 09:32:02 ozaki-r Exp $ */ /*- * Copyright (c) 1999, 2000, 2001 The NetBSD Foundation, Inc. @@ -341,6 +341,7 @@ typedef struct ifnet { uint16_t if_link_queue; /* masked link state change queue */ struct pslist_entry if_pslist_entry; struct psref_target if_psref; + struct pslist_head if_addr_pslist; #endif } ifnet_t; @@ -598,6 +599,9 @@ struct ifaddr { const struct sockaddr *); uint32_t *ifa_seqno; int16_t ifa_preference; /* preference level for this address */ +#ifdef _KERNEL + struct pslist_entry ifa_pslist_entry; +#endif }; #define IFA_ROUTE RTF_UP /* (0x01) route installed */ @@ -1052,6 +1056,52 @@ __END_DECLS &(__ifp)->if_addrlist, ifa_list, __nifa) #define IFADDR_EMPTY(__ifp) TAILQ_EMPTY(&(__ifp)->if_addrlist) +#define IFADDR_ENTRY_INIT(__ifa) \ + PSLIST_ENTRY_INIT((__ifa), ifa_pslist_entry) +#define IFADDR_ENTRY_DESTROY(__ifa) \ + PSLIST_ENTRY_DESTROY((__ifa), ifa_pslist_entry) +#define IFADDR_READER_EMPTY(__ifp) \ + (PSLIST_READER_FIRST(&(__ifp)->if_addr_pslist, struct ifaddr, \ + ifa_pslist_entry) == NULL) +#define IFADDR_READER_FIRST(__ifp) \ + PSLIST_READER_FIRST(&(__ifp)->if_addr_pslist, struct ifaddr, \ + ifa_pslist_entry) +#define IFADDR_READER_NEXT(__ifa) \ + PSLIST_READER_NEXT((__ifa), struct ifaddr, ifa_pslist_entry) +#define IFADDR_READER_FOREACH(__ifa, __ifp) \ + PSLIST_READER_FOREACH((__ifa), &(__ifp)->if_addr_pslist, struct ifaddr,\ + ifa_pslist_entry) +#define IFADDR_WRITER_INSERT_HEAD(__ifp, __ifa) \ + PSLIST_WRITER_INSERT_HEAD(&(__ifp)->if_addr_pslist, (__ifa), \ + ifa_pslist_entry) +#define IFADDR_WRITER_REMOVE(__ifa) \ + PSLIST_WRITER_REMOVE((__ifa), ifa_pslist_entry) +#define IFADDR_WRITER_FOREACH(__ifa, __ifp) \ + PSLIST_WRITER_FOREACH((__ifa), &(__ifp)->if_addr_pslist, struct ifaddr,\ + ifa_pslist_entry) +#define IFADDR_WRITER_NEXT(__ifp) \ + PSLIST_WRITER_NEXT((__ifp), struct ifaddr, ifa_pslist_entry) +#define IFADDR_WRITER_INSERT_AFTER(__ifp, __new) \ + PSLIST_WRITER_INSERT_AFTER((__ifp), (__new), ifa_pslist_entry) +#define IFADDR_WRITER_EMPTY(__ifp) \ + (PSLIST_WRITER_FIRST(&(__ifp)->if_addr_pslist, struct ifaddr, \ + ifa_pslist_entry) == NULL) +#define IFADDR_WRITER_INSERT_TAIL(__ifp, __new) \ + do { \ + if (IFADDR_WRITER_EMPTY((__ifp))) { \ + IFADDR_WRITER_INSERT_HEAD((__ifp), (__new)); \ + } else { \ + struct ifaddr *__ifa; \ + IFADDR_WRITER_FOREACH(__ifa, (__ifp)) { \ + if (IFADDR_WRITER_NEXT(__ifa) == NULL) {\ + IFADDR_WRITER_INSERT_AFTER(__ifa,\ + (__new)); \ + break; \ + } \ + } \ + } \ + } while (0) + #define IFNET_LOCK() mutex_enter(&ifnet_mtx) #define IFNET_UNLOCK() mutex_exit(&ifnet_mtx) #define IFNET_LOCKED() mutex_owned(&ifnet_mtx) Index: src/sys/net/if_spppsubr.c diff -u src/sys/net/if_spppsubr.c:1.145 src/sys/net/if_spppsubr.c:1.146 --- src/sys/net/if_spppsubr.c:1.145 Wed Jul 6 05:27:52 2016 +++ src/sys/net/if_spppsubr.c Thu Jul 7 09:32:02 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_spppsubr.c,v 1.145 2016/07/06 05:27:52 ozaki-r Exp $ */ +/* $NetBSD: if_spppsubr.c,v 1.146 2016/07/07 09:32:02 ozaki-r Exp $ */ /* * Synchronous PPP/Cisco link level subroutines. @@ -41,7 +41,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_spppsubr.c,v 1.145 2016/07/06 05:27:52 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_spppsubr.c,v 1.146 2016/07/07 09:32:02 ozaki-r Exp $"); #if defined(_KERNEL_OPT) #include "opt_inet.h" @@ -4821,7 +4821,7 @@ sppp_get_ip_addrs(struct sppp *sp, uint3 * aliases don't make any sense on a p2p link anyway. */ si = 0; - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family == AF_INET) { si = (struct sockaddr_in *)ifa->ifa_addr; sm = (struct sockaddr_in *)ifa->ifa_netmask; @@ -4861,7 +4861,7 @@ sppp_set_ip_addrs(struct sppp *sp, uint3 * aliases don't make any sense on a p2p link anyway. */ - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family == AF_INET) { si = (struct sockaddr_in *)ifa->ifa_addr; dest = (struct sockaddr_in *)ifa->ifa_dstaddr; @@ -4940,7 +4940,7 @@ sppp_clear_ip_addrs(struct sppp *sp) * aliases don't make any sense on a p2p link anyway. */ - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family == AF_INET) { si = (struct sockaddr_in *)ifa->ifa_addr; dest = (struct sockaddr_in *)ifa->ifa_dstaddr; @@ -4996,7 +4996,7 @@ sppp_get_ip6_addrs(struct sppp *sp, stru * aliases don't make any sense on a p2p link anyway. */ si = 0; - IFADDR_FOREACH(ifa, ifp) + IFADDR_READER_FOREACH(ifa, ifp) if (ifa->ifa_addr->sa_family == AF_INET6) { si = (struct sockaddr_in6 *)ifa->ifa_addr; sm = (struct sockaddr_in6 *)ifa->ifa_netmask; @@ -5049,7 +5049,7 @@ sppp_set_ip6_addr(struct sppp *sp, const */ sin6 = NULL; - IFADDR_FOREACH(ifa, ifp) + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family == AF_INET6) { Index: src/sys/net/if_stf.c diff -u src/sys/net/if_stf.c:1.94 src/sys/net/if_stf.c:1.95 --- src/sys/net/if_stf.c:1.94 Wed Jul 6 08:42:34 2016 +++ src/sys/net/if_stf.c Thu Jul 7 09:32:02 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_stf.c,v 1.94 2016/07/06 08:42:34 ozaki-r Exp $ */ +/* $NetBSD: if_stf.c,v 1.95 2016/07/07 09:32:02 ozaki-r Exp $ */ /* $KAME: if_stf.c,v 1.62 2001/06/07 22:32:16 itojun Exp $ */ /* @@ -75,7 +75,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_stf.c,v 1.94 2016/07/06 08:42:34 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_stf.c,v 1.95 2016/07/07 09:32:02 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -313,7 +313,7 @@ stf_getsrcifa6(struct ifnet *ifp) struct sockaddr_in6 *sin6; struct in_addr in; - IFADDR_FOREACH(ifa, ifp) + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family != AF_INET6) continue; Index: src/sys/net/if_tun.c diff -u src/sys/net/if_tun.c:1.126 src/sys/net/if_tun.c:1.127 --- src/sys/net/if_tun.c:1.126 Fri Jun 10 13:27:16 2016 +++ src/sys/net/if_tun.c Thu Jul 7 09:32:02 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_tun.c,v 1.126 2016/06/10 13:27:16 ozaki-r Exp $ */ +/* $NetBSD: if_tun.c,v 1.127 2016/07/07 09:32:02 ozaki-r Exp $ */ /* * Copyright (c) 1988, Julian Onions <j...@cs.nott.ac.uk> @@ -15,7 +15,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_tun.c,v 1.126 2016/06/10 13:27:16 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_tun.c,v 1.127 2016/07/07 09:32:02 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -361,7 +361,7 @@ tunclose(dev_t dev, int flag, int mode, if (ifp->if_flags & IFF_RUNNING) { /* find internet addresses and delete routes */ struct ifaddr *ifa; - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { #if defined(INET) || defined(INET6) if (ifa->ifa_addr->sa_family == AF_INET || ifa->ifa_addr->sa_family == AF_INET6) { @@ -393,7 +393,7 @@ tuninit(struct tun_softc *tp) ifp->if_flags |= IFF_UP | IFF_RUNNING; tp->tun_flags &= ~(TUN_IASET|TUN_DSTADDR); - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { #ifdef INET if (ifa->ifa_addr->sa_family == AF_INET) { struct sockaddr_in *sin; Index: src/sys/net/link_proto.c diff -u src/sys/net/link_proto.c:1.30 src/sys/net/link_proto.c:1.31 --- src/sys/net/link_proto.c:1.30 Thu Jan 21 15:41:29 2016 +++ src/sys/net/link_proto.c Thu Jul 7 09:32:02 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: link_proto.c,v 1.30 2016/01/21 15:41:29 riastradh Exp $ */ +/* $NetBSD: link_proto.c,v 1.31 2016/07/07 09:32:02 ozaki-r Exp $ */ /*- * Copyright (c) 1982, 1986, 1993 @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: link_proto.c,v 1.30 2016/01/21 15:41:29 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: link_proto.c,v 1.31 2016/07/07 09:32:02 ozaki-r Exp $"); #include <sys/param.h> #include <sys/socket.h> @@ -170,7 +170,7 @@ link_control(struct socket *so, unsigned s = splnet(); - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (sockaddr_cmp(&u.sa, ifa->ifa_addr) == 0) break; } @@ -178,7 +178,7 @@ link_control(struct socket *so, unsigned switch (cmd) { case SIOCGLIFADDR: if ((iflr->flags & IFLR_PREFIX) == 0) { - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family == AF_LINK) break; } Index: src/sys/net/rtsock.c diff -u src/sys/net/rtsock.c:1.190 src/sys/net/rtsock.c:1.191 --- src/sys/net/rtsock.c:1.190 Thu Jun 16 02:38:40 2016 +++ src/sys/net/rtsock.c Thu Jul 7 09:32:02 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: rtsock.c,v 1.190 2016/06/16 02:38:40 ozaki-r Exp $ */ +/* $NetBSD: rtsock.c,v 1.191 2016/07/07 09:32:02 ozaki-r Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -61,7 +61,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.190 2016/06/16 02:38:40 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.191 2016/07/07 09:32:02 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -1468,7 +1468,7 @@ sysctl_iflist(int af, struct rt_walkarg IFNET_READER_FOREACH(ifp) { if (w->w_arg && w->w_arg != ifp->if_index) continue; - if (IFADDR_EMPTY(ifp)) + if (IFADDR_READER_EMPTY(ifp)) continue; psref_acquire(&psref, &ifp->if_psref, ifnet_psref_class); @@ -1530,7 +1530,7 @@ sysctl_iflist(int af, struct rt_walkarg panic("sysctl_iflist(2)"); } } - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (af && af != ifa->ifa_addr->sa_family) continue; info.rti_info[RTAX_IFA] = ifa->ifa_addr; Index: src/sys/net/agr/if_agr.c diff -u src/sys/net/agr/if_agr.c:1.36 src/sys/net/agr/if_agr.c:1.37 --- src/sys/net/agr/if_agr.c:1.36 Mon Jun 20 06:46:37 2016 +++ src/sys/net/agr/if_agr.c Thu Jul 7 09:32:02 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_agr.c,v 1.36 2016/06/20 06:46:37 knakahara Exp $ */ +/* $NetBSD: if_agr.c,v 1.37 2016/07/07 09:32:02 ozaki-r Exp $ */ /*- * Copyright (c)2005 YAMAMOTO Takashi, @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_agr.c,v 1.36 2016/06/20 06:46:37 knakahara Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_agr.c,v 1.37 2016/07/07 09:32:02 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -591,7 +591,7 @@ agr_addport(struct ifnet *ifp, struct if } port->port_flags = AGRPORT_LARVAL; - IFADDR_FOREACH(ifa, ifp_port) { + IFADDR_READER_FOREACH(ifa, ifp_port) { if (ifa->ifa_addr->sa_family != AF_LINK) { error = EBUSY; goto out; Index: src/sys/netatalk/aarp.c diff -u src/sys/netatalk/aarp.c:1.37 src/sys/netatalk/aarp.c:1.38 --- src/sys/netatalk/aarp.c:1.37 Mon Jun 20 06:46:38 2016 +++ src/sys/netatalk/aarp.c Thu Jul 7 09:32:02 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: aarp.c,v 1.37 2016/06/20 06:46:38 knakahara Exp $ */ +/* $NetBSD: aarp.c,v 1.38 2016/07/07 09:32:02 ozaki-r Exp $ */ /* * Copyright (c) 1990,1991 Regents of The University of Michigan. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: aarp.c,v 1.37 2016/06/20 06:46:38 knakahara Exp $"); +__KERNEL_RCSID(0, "$NetBSD: aarp.c,v 1.38 2016/07/07 09:32:02 ozaki-r Exp $"); #include "opt_mbuftrace.h" @@ -135,7 +135,7 @@ at_ifawithnet(const struct sockaddr_at * struct sockaddr_at *sat2; struct netrange *nr; - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family != AF_APPLETALK) continue; @@ -367,7 +367,7 @@ at_aarpinput(struct ifnet *ifp, struct m * Since we don't know the net, we just look for the first * phase 1 address on the interface. */ - IFADDR_FOREACH(ia, ifp) { + IFADDR_READER_FOREACH(ia, ifp) { aa = (struct at_ifaddr *)ia; if (AA_SAT(aa)->sat_family == AF_APPLETALK && (aa->aa_flags & AFA_PHASE2) == 0) @@ -560,7 +560,7 @@ aarpprobe(void *arp) * interface with the same address as we're looking for. If the * net is phase 2, generate an 802.2 and SNAP header. */ - IFADDR_FOREACH(ia, ifp) { + IFADDR_READER_FOREACH(ia, ifp) { aa = (struct at_ifaddr *)ia; if (AA_SAT(aa)->sat_family == AF_APPLETALK && (aa->aa_flags & AFA_PROBING)) Index: src/sys/netatalk/at_control.c diff -u src/sys/netatalk/at_control.c:1.37 src/sys/netatalk/at_control.c:1.38 --- src/sys/netatalk/at_control.c:1.37 Sat Oct 18 08:33:29 2014 +++ src/sys/netatalk/at_control.c Thu Jul 7 09:32:02 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: at_control.c,v 1.37 2014/10/18 08:33:29 snj Exp $ */ +/* $NetBSD: at_control.c,v 1.38 2016/07/07 09:32:02 ozaki-r Exp $ */ /* * Copyright (c) 1990,1994 Regents of The University of Michigan. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: at_control.c,v 1.37 2014/10/18 08:33:29 snj Exp $"); +__KERNEL_RCSID(0, "$NetBSD: at_control.c,v 1.38 2016/07/07 09:32:02 ozaki-r Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -830,7 +830,7 @@ aa_clean(void) TAILQ_REMOVE(&at_ifaddr, aa, aa_list); ifp = aa->aa_ifp; at_scrub(ifp, aa); - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa == &aa->aa_ifa) break; } Index: src/sys/netinet/in.c diff -u src/sys/netinet/in.c:1.171 src/sys/netinet/in.c:1.172 --- src/sys/netinet/in.c:1.171 Wed Jul 6 08:42:34 2016 +++ src/sys/netinet/in.c Thu Jul 7 09:32:02 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: in.c,v 1.171 2016/07/06 08:42:34 ozaki-r Exp $ */ +/* $NetBSD: in.c,v 1.172 2016/07/07 09:32:02 ozaki-r Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -91,7 +91,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: in.c,v 1.171 2016/07/06 08:42:34 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: in.c,v 1.172 2016/07/07 09:32:02 ozaki-r Exp $"); #include "arp.h" @@ -874,7 +874,7 @@ in_lifaddr_ioctl(struct socket *so, u_lo } } - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family != AF_INET) continue; if (cmp == 0) @@ -1191,7 +1191,7 @@ in_broadcast(struct in_addr in, struct i * with a broadcast address. */ #define ia (ifatoia(ifa)) - IFADDR_FOREACH(ifa, ifp) + IFADDR_READER_FOREACH(ifa, ifp) if (ifa->ifa_addr->sa_family == AF_INET && !in_hosteq(in, ia->ia_addr.sin_addr) && (in_hosteq(in, ia->ia_broadaddr.sin_addr) || @@ -1222,7 +1222,7 @@ in_if_link_up(struct ifnet *ifp) if ((ifp->if_flags & (IFF_UP|IFF_RUNNING)) != (IFF_UP|IFF_RUNNING)) return; - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family != AF_INET) continue; ia = (struct in_ifaddr *)ifa; @@ -1261,7 +1261,7 @@ in_if_link_down(struct ifnet *ifp) struct ifaddr *ifa; struct in_ifaddr *ia; - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family != AF_INET) continue; ia = (struct in_ifaddr *)ifa; Index: src/sys/netinet/in_selsrc.c diff -u src/sys/netinet/in_selsrc.c:1.16 src/sys/netinet/in_selsrc.c:1.17 --- src/sys/netinet/in_selsrc.c:1.16 Mon Sep 21 13:32:26 2015 +++ src/sys/netinet/in_selsrc.c Thu Jul 7 09:32:02 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: in_selsrc.c,v 1.16 2015/09/21 13:32:26 skrll Exp $ */ +/* $NetBSD: in_selsrc.c,v 1.17 2016/07/07 09:32:02 ozaki-r Exp $ */ /*- * Copyright (c) 2005 David Young. All rights reserved. @@ -29,7 +29,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: in_selsrc.c,v 1.16 2015/09/21 13:32:26 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: in_selsrc.c,v 1.17 2016/07/07 09:32:02 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -326,7 +326,7 @@ in_getifa(struct ifaddr *ifa, const stru /* Find out the index of this ifaddr. */ idx = 0; - IFADDR_FOREACH(alt_ifa, ifa->ifa_ifp) { + IFADDR_READER_FOREACH(alt_ifa, ifa->ifa_ifp) { if (alt_ifa == best_ifa) break; idx++; @@ -344,7 +344,7 @@ in_getifa(struct ifaddr *ifa, const stru #endif /* GETIFA_DEBUG */ idx = -1; - IFADDR_FOREACH(alt_ifa, ifa->ifa_ifp) { + IFADDR_READER_FOREACH(alt_ifa, ifa->ifa_ifp) { ++idx; src = IA_SIN(alt_ifa); Index: src/sys/netinet/ip_carp.c diff -u src/sys/netinet/ip_carp.c:1.73 src/sys/netinet/ip_carp.c:1.74 --- src/sys/netinet/ip_carp.c:1.73 Wed Jul 6 08:42:34 2016 +++ src/sys/netinet/ip_carp.c Thu Jul 7 09:32:02 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: ip_carp.c,v 1.73 2016/07/06 08:42:34 ozaki-r Exp $ */ +/* $NetBSD: ip_carp.c,v 1.74 2016/07/07 09:32:02 ozaki-r Exp $ */ /* $OpenBSD: ip_carp.c,v 1.113 2005/11/04 08:11:54 mcbride Exp $ */ /* @@ -33,7 +33,7 @@ #endif #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ip_carp.c,v 1.73 2016/07/06 08:42:34 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ip_carp.c,v 1.74 2016/07/07 09:32:02 ozaki-r Exp $"); /* * TODO: @@ -284,7 +284,7 @@ carp_hmac_prepare(struct carp_softc *sc) found = 0; last = cur; cur.s_addr = 0xffffffff; - IFADDR_FOREACH(ifa, &sc->sc_if) { + IFADDR_READER_FOREACH(ifa, &sc->sc_if) { in.s_addr = ifatoia(ifa)->ia_addr.sin_addr.s_addr; if (ifa->ifa_addr->sa_family == AF_INET && ntohl(in.s_addr) > ntohl(last.s_addr) && @@ -304,7 +304,7 @@ carp_hmac_prepare(struct carp_softc *sc) found = 0; last6 = cur6; memset(&cur6, 0xff, sizeof(cur6)); - IFADDR_FOREACH(ifa, &sc->sc_if) { + IFADDR_READER_FOREACH(ifa, &sc->sc_if) { in6 = ifatoia6(ifa)->ia_addr.sin6_addr; if (IN6_IS_ADDR_LINKLOCAL(&in6)) in6.s6_addr16[1] = 0; @@ -363,7 +363,7 @@ carp_setroute(struct carp_softc *sc, int KERNEL_LOCK(1, NULL); s = splsoftnet(); - IFADDR_FOREACH(ifa, &sc->sc_if) { + IFADDR_READER_FOREACH(ifa, &sc->sc_if) { switch (ifa->ifa_addr->sa_family) { case AF_INET: { int count = 0; @@ -1193,7 +1193,7 @@ carp_send_arp(struct carp_softc *sc) KERNEL_LOCK(1, NULL); s = splsoftnet(); - IFADDR_FOREACH(ifa, &sc->sc_if) { + IFADDR_READER_FOREACH(ifa, &sc->sc_if) { if (ifa->ifa_addr->sa_family != AF_INET) continue; @@ -1217,7 +1217,7 @@ carp_send_na(struct carp_softc *sc) KERNEL_LOCK(1, NULL); s = splsoftnet(); - IFADDR_FOREACH(ifa, &sc->sc_if) { + IFADDR_READER_FOREACH(ifa, &sc->sc_if) { if (ifa->ifa_addr->sa_family != AF_INET6) continue; @@ -1279,7 +1279,7 @@ carp_addrcount(struct carp_if *cif, stru (vh->sc_if.if_flags & (IFF_UP|IFF_RUNNING)) == (IFF_UP|IFF_RUNNING)) || (type == CARP_COUNT_MASTER && vh->sc_state == MASTER)) { - IFADDR_FOREACH(ifa, &vh->sc_if) { + IFADDR_READER_FOREACH(ifa, &vh->sc_if) { if (ifa->ifa_addr->sa_family == AF_INET && ia->ia_addr.sin_addr.s_addr == ifatoia(ifa)->ia_addr.sin_addr.s_addr) @@ -1335,7 +1335,7 @@ carp_iamatch6(void *v, struct in6_addr * struct ifaddr *ifa; TAILQ_FOREACH(vh, &cif->vhif_vrs, sc_list) { - IFADDR_FOREACH(ifa, &vh->sc_if) { + IFADDR_READER_FOREACH(ifa, &vh->sc_if) { if (IN6_ARE_ADDR_EQUAL(taddr, &ifatoia6(ifa)->ia_addr.sin6_addr) && ((vh->sc_if.if_flags & (IFF_UP|IFF_RUNNING)) == @@ -1683,7 +1683,7 @@ carp_addr_updated(void *v) struct ifaddr *ifa; int new_naddrs = 0, new_naddrs6 = 0; - IFADDR_FOREACH(ifa, &sc->sc_if) { + IFADDR_READER_FOREACH(ifa, &sc->sc_if) { if (ifa->ifa_addr->sa_family == AF_INET) new_naddrs++; else if (ifa->ifa_addr->sa_family == AF_INET6) Index: src/sys/netinet/ip_icmp.c diff -u src/sys/netinet/ip_icmp.c:1.148 src/sys/netinet/ip_icmp.c:1.149 --- src/sys/netinet/ip_icmp.c:1.148 Wed Jul 6 08:42:34 2016 +++ src/sys/netinet/ip_icmp.c Thu Jul 7 09:32:02 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: ip_icmp.c,v 1.148 2016/07/06 08:42:34 ozaki-r Exp $ */ +/* $NetBSD: ip_icmp.c,v 1.149 2016/07/07 09:32:02 ozaki-r Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -94,7 +94,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ip_icmp.c,v 1.148 2016/07/06 08:42:34 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ip_icmp.c,v 1.149 2016/07/07 09:32:02 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_ipsec.h" @@ -721,7 +721,7 @@ icmp_reflect(struct mbuf *m) /* look for packet sent to broadcast address */ if (ia == NULL && rcvif && (rcvif->if_flags & IFF_BROADCAST)) { - IFADDR_FOREACH(ifa, rcvif) { + IFADDR_READER_FOREACH(ifa, rcvif) { if (ifa->ifa_addr->sa_family != AF_INET) continue; if (in_hosteq(t,ifatoia(ifa)->ia_broadaddr.sin_addr)) { @@ -776,7 +776,7 @@ icmp_reflect(struct mbuf *m) * when the incoming packet was encapsulated */ if (sin == NULL && rcvif) { - IFADDR_FOREACH(ifa, rcvif) { + IFADDR_READER_FOREACH(ifa, rcvif) { if (ifa->ifa_addr->sa_family != AF_INET) continue; sin = &(ifatoia(ifa)->ia_addr); Index: src/sys/netinet/ip_input.c diff -u src/sys/netinet/ip_input.c:1.335 src/sys/netinet/ip_input.c:1.336 --- src/sys/netinet/ip_input.c:1.335 Wed Jul 6 08:42:34 2016 +++ src/sys/netinet/ip_input.c Thu Jul 7 09:32:02 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: ip_input.c,v 1.335 2016/07/06 08:42:34 ozaki-r Exp $ */ +/* $NetBSD: ip_input.c,v 1.336 2016/07/07 09:32:02 ozaki-r Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -91,7 +91,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ip_input.c,v 1.335 2016/07/06 08:42:34 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ip_input.c,v 1.336 2016/07/07 09:32:02 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -394,7 +394,7 @@ ip_match_our_address_broadcast(struct if struct in_ifaddr *ia = NULL; struct ifaddr *ifa; - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family != AF_INET) continue; ia = ifatoia(ifa); Index: src/sys/netinet/sctp_asconf.c diff -u src/sys/netinet/sctp_asconf.c:1.4 src/sys/netinet/sctp_asconf.c:1.5 --- src/sys/netinet/sctp_asconf.c:1.4 Thu Jul 7 06:54:26 2016 +++ src/sys/netinet/sctp_asconf.c Thu Jul 7 09:32:02 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: sctp_asconf.c,v 1.4 2016/07/07 06:54:26 ozaki-r Exp $ */ +/* $NetBSD: sctp_asconf.c,v 1.5 2016/07/07 09:32:02 ozaki-r Exp $ */ /* $KAME: sctp_asconf.c,v 1.25 2005/06/16 20:44:24 jinmei Exp $ */ /* @@ -30,7 +30,7 @@ * SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sctp_asconf.c,v 1.4 2016/07/07 06:54:26 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sctp_asconf.c,v 1.5 2016/07/07 09:32:02 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_ipsec.h" @@ -2123,7 +2123,7 @@ sctp_find_valid_localaddr(struct sctp_tc /* Skip if loopback_scope not set */ continue; } - IFADDR_FOREACH(ifa, ifn) { + IFADDR_READER_FOREACH(ifa, ifn) { if (ifa->ifa_addr->sa_family == AF_INET && stcb->asoc.ipv4_addr_legal) { struct sockaddr_in *sin; @@ -2790,7 +2790,7 @@ sctp_check_address_list_all(struct sctp_ } /* go through each interface address */ - IFADDR_FOREACH(ifa, ifn) { + IFADDR_READER_FOREACH(ifa, ifn) { /* do i have it implicitly? */ if (sctp_cmpaddr(ifa->ifa_addr, init_addr)) { #ifdef SCTP_DEBUG Index: src/sys/netinet/sctp_output.c diff -u src/sys/netinet/sctp_output.c:1.6 src/sys/netinet/sctp_output.c:1.7 --- src/sys/netinet/sctp_output.c:1.6 Fri Jun 10 13:31:44 2016 +++ src/sys/netinet/sctp_output.c Thu Jul 7 09:32:02 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: sctp_output.c,v 1.6 2016/06/10 13:31:44 ozaki-r Exp $ */ +/* $NetBSD: sctp_output.c,v 1.7 2016/07/07 09:32:02 ozaki-r Exp $ */ /* $KAME: sctp_output.c,v 1.48 2005/06/16 18:29:24 jinmei Exp $ */ /* @@ -30,7 +30,7 @@ * SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sctp_output.c,v 1.6 2016/06/10 13:31:44 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sctp_output.c,v 1.7 2016/07/07 09:32:02 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_ipsec.h" @@ -546,7 +546,7 @@ sctp_choose_v4_boundspecific_inp(struct ifn = rt->rt_ifp; if (ifn) { /* is a prefered one on the interface we route out? */ - IFADDR_FOREACH(ifa, ifn) { + IFADDR_READER_FOREACH(ifa, ifn) { sin = sctp_is_v4_ifa_addr_prefered (ifa, loopscope, ipv4_scope, &sin_loop, &sin_local); if (sin == NULL) continue; @@ -555,7 +555,7 @@ sctp_choose_v4_boundspecific_inp(struct } } /* is an acceptable one on the interface we route out? */ - IFADDR_FOREACH(ifa, ifn) { + IFADDR_READER_FOREACH(ifa, ifn) { sin = sctp_is_v4_ifa_addr_acceptable (ifa, loopscope, ipv4_scope, &sin_loop, &sin_local); if (sin == NULL) continue; @@ -648,7 +648,7 @@ sctp_choose_v4_boundspecific_stcb(struct */ if (ifn) { /* first try for an prefered address on the ep */ - IFADDR_FOREACH(ifa, ifn) { + IFADDR_READER_FOREACH(ifa, ifn) { if (sctp_is_addr_in_ep(inp, ifa)) { sin = sctp_is_v4_ifa_addr_prefered (ifa, loopscope, ipv4_scope, &sin_loop, &sin_local); if (sin == NULL) @@ -662,7 +662,7 @@ sctp_choose_v4_boundspecific_stcb(struct } } /* next try for an acceptable address on the ep */ - IFADDR_FOREACH(ifa, ifn) { + IFADDR_READER_FOREACH(ifa, ifn) { if (sctp_is_addr_in_ep(inp, ifa)) { sin = sctp_is_v4_ifa_addr_acceptable (ifa, loopscope, ipv4_scope, &sin_loop, &sin_local); if (sin == NULL) @@ -762,7 +762,7 @@ sctp_choose_v4_boundspecific_stcb(struct continue; /* first question, is laddr->ifa an address associated with the emit interface */ if (ifn) { - IFADDR_FOREACH(ifa, ifn) { + IFADDR_READER_FOREACH(ifa, ifn) { if (laddr->ifa == ifa) { sin = (struct sockaddr_in *)laddr->ifa->ifa_addr; return (sin->sin_addr); @@ -786,7 +786,7 @@ sctp_choose_v4_boundspecific_stcb(struct continue; /* first question, is laddr->ifa an address associated with the emit interface */ if (ifn) { - IFADDR_FOREACH(ifa, ifn) { + IFADDR_READER_FOREACH(ifa, ifn) { if (laddr->ifa == ifa) { sin = (struct sockaddr_in *)laddr->ifa->ifa_addr; return (sin->sin_addr); @@ -836,7 +836,7 @@ sctp_select_v4_nth_prefered_addr_from_if struct sockaddr_in *sin; uint8_t sin_loop, sin_local; int num_eligible_addr = 0; - IFADDR_FOREACH(ifa, ifn) { + IFADDR_READER_FOREACH(ifa, ifn) { sin = sctp_is_v4_ifa_addr_prefered (ifa, loopscope, ipv4_scope, &sin_loop, &sin_local); if (sin == NULL) continue; @@ -864,7 +864,7 @@ sctp_count_v4_num_prefered_boundall (str struct sockaddr_in *sin; int num_eligible_addr = 0; - IFADDR_FOREACH(ifa, ifn) { + IFADDR_READER_FOREACH(ifa, ifn) { sin = sctp_is_v4_ifa_addr_prefered (ifa, loopscope, ipv4_scope, sin_loop, sin_local); if (sin == NULL) continue; @@ -957,7 +957,7 @@ sctp_choose_v4_boundall(struct sctp_inpc * and see if we can find an acceptable address. */ bound_all_v4_plan_b: - IFADDR_FOREACH(ifa, ifn) { + IFADDR_READER_FOREACH(ifa, ifn) { sin = sctp_is_v4_ifa_addr_acceptable (ifa, loopscope, ipv4_scope, &sin_loop, &sin_local); if (sin == NULL) continue; @@ -1037,7 +1037,7 @@ sctp_choose_v4_boundall(struct sctp_inpc /* already looked at this guy */ continue; - IFADDR_FOREACH(ifa, ifn) { + IFADDR_READER_FOREACH(ifa, ifn) { sin = sctp_is_v4_ifa_addr_acceptable (ifa, loopscope, ipv4_scope, &sin_loop, &sin_local); if (sin == NULL) continue; @@ -1304,7 +1304,7 @@ sctp_choose_v6_boundspecific_stcb(struct * in our list, if so, we want that one. */ if (ifn) { - IFADDR_FOREACH(ifa, ifn) { + IFADDR_READER_FOREACH(ifa, ifn) { if (sctp_is_addr_in_ep(inp, ifa)) { sin6 = sctp_is_v6_ifa_addr_acceptable (ifa, loopscope, loc_scope, &sin_loop, &sin_local); if (sin6 == NULL) @@ -1405,7 +1405,7 @@ sctp_choose_v6_boundspecific_stcb(struct continue; /* first question, is laddr->ifa an address associated with the emit interface */ if (ifn) { - IFADDR_FOREACH(ifa, ifn) { + IFADDR_READER_FOREACH(ifa, ifn) { if (laddr->ifa == ifa) { sin6 = (struct sockaddr_in6 *)laddr->ifa->ifa_addr; return (sin6); @@ -1484,7 +1484,7 @@ sctp_choose_v6_boundspecific_inp(struct ifn = rt->rt_ifp; if (ifn) { - IFADDR_FOREACH(ifa, ifn) { + IFADDR_READER_FOREACH(ifa, ifn) { sin6 = sctp_is_v6_ifa_addr_acceptable (ifa, loopscope, loc_scope, &sin_loop, &sin_local); if (sin6 == NULL) continue; @@ -1554,7 +1554,7 @@ sctp_select_v6_nth_addr_from_ifn_boundal int sin_loop, sin_local; int num_eligible_addr = 0; - IFADDR_FOREACH(ifa, ifn) { + IFADDR_READER_FOREACH(ifa, ifn) { sin6 = sctp_is_v6_ifa_addr_acceptable (ifa, loopscope, loc_scope, &sin_loop, &sin_local); if (sin6 == NULL) continue; @@ -1602,7 +1602,7 @@ sctp_count_v6_num_eligible_boundall (str int num_eligible_addr = 0; int sin_loop, sin_local; - IFADDR_FOREACH(ifa, ifn) { + IFADDR_READER_FOREACH(ifa, ifn) { sin6 = sctp_is_v6_ifa_addr_acceptable (ifa, loopscope, loc_scope, &sin_loop, &sin_local); if (sin6 == NULL) continue; @@ -2737,7 +2737,7 @@ sctp_send_initiate(struct sctp_inpcb *in */ continue; } - IFADDR_FOREACH(ifa, ifn) { + IFADDR_READER_FOREACH(ifa, ifn) { if (sctp_is_address_in_scope(ifa, stcb->asoc.ipv4_addr_legal, stcb->asoc.ipv6_addr_legal, @@ -2763,7 +2763,7 @@ sctp_send_initiate(struct sctp_inpcb *in */ continue; } - IFADDR_FOREACH(ifa, ifn) { + IFADDR_READER_FOREACH(ifa, ifn) { if (sctp_is_address_in_scope(ifa, stcb->asoc.ipv4_addr_legal, stcb->asoc.ipv6_addr_legal, @@ -3688,7 +3688,7 @@ sctp_send_initiate_ack(struct sctp_inpcb */ continue; } - IFADDR_FOREACH(ifa, ifn) { + IFADDR_READER_FOREACH(ifa, ifn) { if (sctp_is_address_in_scope(ifa, stc.ipv4_addr_legal, stc.ipv6_addr_legal, stc.loopback_scope, stc.ipv4_scope, @@ -3711,7 +3711,7 @@ sctp_send_initiate_ack(struct sctp_inpcb */ continue; } - IFADDR_FOREACH(ifa, ifn) { + IFADDR_READER_FOREACH(ifa, ifn) { if (sctp_is_address_in_scope(ifa, stc.ipv4_addr_legal, stc.ipv6_addr_legal, Index: src/sys/netinet/sctp_pcb.c diff -u src/sys/netinet/sctp_pcb.c:1.6 src/sys/netinet/sctp_pcb.c:1.7 --- src/sys/netinet/sctp_pcb.c:1.6 Sun May 22 22:18:41 2016 +++ src/sys/netinet/sctp_pcb.c Thu Jul 7 09:32:02 2016 @@ -1,5 +1,5 @@ /* $KAME: sctp_pcb.c,v 1.39 2005/06/16 18:29:25 jinmei Exp $ */ -/* $NetBSD: sctp_pcb.c,v 1.6 2016/05/22 22:18:41 rjs Exp $ */ +/* $NetBSD: sctp_pcb.c,v 1.7 2016/07/07 09:32:02 ozaki-r Exp $ */ /* * Copyright (c) 2001, 2002, 2003, 2004 Cisco Systems, Inc. @@ -33,7 +33,7 @@ * SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sctp_pcb.c,v 1.6 2016/05/22 22:18:41 rjs Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sctp_pcb.c,v 1.7 2016/07/07 09:32:02 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -2342,7 +2342,7 @@ sctp_is_address_on_local_host(struct soc s = pserialize_read_enter(); IFNET_READER_FOREACH(ifn) { - IFADDR_FOREACH(ifa, ifn) { + IFADDR_READER_FOREACH(ifa, ifn) { if (addr->sa_family == ifa->ifa_addr->sa_family) { /* same family */ if (addr->sa_family == AF_INET) { Index: src/sys/netinet/sctp_usrreq.c diff -u src/sys/netinet/sctp_usrreq.c:1.5 src/sys/netinet/sctp_usrreq.c:1.6 --- src/sys/netinet/sctp_usrreq.c:1.5 Thu May 12 02:24:17 2016 +++ src/sys/netinet/sctp_usrreq.c Thu Jul 7 09:32:02 2016 @@ -1,5 +1,5 @@ /* $KAME: sctp_usrreq.c,v 1.50 2005/06/16 20:45:29 jinmei Exp $ */ -/* $NetBSD: sctp_usrreq.c,v 1.5 2016/05/12 02:24:17 ozaki-r Exp $ */ +/* $NetBSD: sctp_usrreq.c,v 1.6 2016/07/07 09:32:02 ozaki-r Exp $ */ /* * Copyright (c) 2001, 2002, 2003, 2004 Cisco Systems, Inc. @@ -33,7 +33,7 @@ * SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sctp_usrreq.c,v 1.5 2016/05/12 02:24:17 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sctp_usrreq.c,v 1.6 2016/07/07 09:32:02 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -950,7 +950,7 @@ sctp_fill_up_addresses(struct sctp_inpcb /* Skip loopback if loopback_scope not set */ continue; } - IFADDR_FOREACH(ifa, ifn) { + IFADDR_READER_FOREACH(ifa, ifn) { if (stcb) { /* * For the BOUND-ALL case, the list @@ -1103,7 +1103,7 @@ sctp_count_max_addresses(struct sctp_inp s = pserialize_read_enter(); IFNET_READER_FOREACH(ifn) { - IFADDR_FOREACH(ifa, ifn) { + IFADDR_READER_FOREACH(ifa, ifn) { /* Count them if they are the right type */ if (ifa->ifa_addr->sa_family == AF_INET) { if (inp->sctp_flags & SCTP_PCB_FLAGS_NEEDS_MAPPED_V4) @@ -3850,7 +3850,7 @@ static int sctp_purgeif(struct socket *so, struct ifnet *ifp) { struct ifaddr *ifa; - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family == PF_INET) { sctp_delete_ip_address(ifa); } Index: src/sys/netinet/sctputil.c diff -u src/sys/netinet/sctputil.c:1.9 src/sys/netinet/sctputil.c:1.10 --- src/sys/netinet/sctputil.c:1.9 Fri Jun 10 13:27:16 2016 +++ src/sys/netinet/sctputil.c Thu Jul 7 09:32:02 2016 @@ -1,5 +1,5 @@ /* $KAME: sctputil.c,v 1.39 2005/06/16 20:54:06 jinmei Exp $ */ -/* $NetBSD: sctputil.c,v 1.9 2016/06/10 13:27:16 ozaki-r Exp $ */ +/* $NetBSD: sctputil.c,v 1.10 2016/07/07 09:32:02 ozaki-r Exp $ */ /* * Copyright (c) 2001, 2002, 2003, 2004 Cisco Systems, Inc. @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sctputil.c,v 1.9 2016/06/10 13:27:16 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sctputil.c,v 1.10 2016/07/07 09:32:02 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -3613,7 +3613,7 @@ sctp_find_ifa_by_addr(struct sockaddr *s s = pserialize_read_enter(); IFNET_READER_FOREACH(ifn) { /* go through each interface addresses */ - IFADDR_FOREACH(ifa, ifn) { + IFADDR_READER_FOREACH(ifa, ifn) { /* correct family? */ if (ifa->ifa_addr->sa_family != sa->sa_family) continue; Index: src/sys/netinet6/icmp6.c diff -u src/sys/netinet6/icmp6.c:1.191 src/sys/netinet6/icmp6.c:1.192 --- src/sys/netinet6/icmp6.c:1.191 Tue Jul 5 03:40:52 2016 +++ src/sys/netinet6/icmp6.c Thu Jul 7 09:32:03 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: icmp6.c,v 1.191 2016/07/05 03:40:52 ozaki-r Exp $ */ +/* $NetBSD: icmp6.c,v 1.192 2016/07/07 09:32:03 ozaki-r Exp $ */ /* $KAME: icmp6.c,v 1.217 2001/06/20 15:03:29 jinmei Exp $ */ /* @@ -62,7 +62,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: icmp6.c,v 1.191 2016/07/05 03:40:52 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: icmp6.c,v 1.192 2016/07/07 09:32:03 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -1684,7 +1684,7 @@ ni6_addrs(struct icmp6_nodeinfo *ni6, st IFNET_READER_FOREACH(ifp) { addrsofif = 0; - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family != AF_INET6) continue; ia6 = (struct in6_ifaddr *)ifa; @@ -1764,7 +1764,7 @@ ni6_store_addrs(struct icmp6_nodeinfo *n for (; ifp; ifp = IFNET_READER_NEXT(ifp)) { - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family != AF_INET6) continue; ia6 = (struct in6_ifaddr *)ifa; Index: src/sys/netinet6/in6.c diff -u src/sys/netinet6/in6.c:1.206 src/sys/netinet6/in6.c:1.207 --- src/sys/netinet6/in6.c:1.206 Wed Jul 6 10:49:49 2016 +++ src/sys/netinet6/in6.c Thu Jul 7 09:32:03 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: in6.c,v 1.206 2016/07/06 10:49:49 ozaki-r Exp $ */ +/* $NetBSD: in6.c,v 1.207 2016/07/07 09:32:03 ozaki-r Exp $ */ /* $KAME: in6.c,v 1.198 2001/07/18 09:12:38 itojun Exp $ */ /* @@ -62,7 +62,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: in6.c,v 1.206 2016/07/06 10:49:49 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: in6.c,v 1.207 2016/07/07 09:32:03 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -1593,7 +1593,7 @@ in6_lifaddr_ioctl(struct socket *so, u_l } } - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family != AF_INET6) continue; if (!cmp) @@ -1689,7 +1689,7 @@ in6_ifinit(struct ifnet *ifp, struct in6 * if this is its first address, * and to validate the address if necessary. */ - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family != AF_INET6) continue; ifacount++; @@ -1757,7 +1757,7 @@ in6ifa_ifpforlinklocal(const struct ifne { struct ifaddr *best_ifa = NULL, *ifa; - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family != AF_INET6) continue; if (!IN6_IS_ADDR_LINKLOCAL(IFA_IN6(ifa))) @@ -1807,7 +1807,7 @@ in6ifa_ifpwithaddr(const struct ifnet *i { struct ifaddr *best_ifa = NULL, *ifa; - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family != AF_INET6) continue; if (!IN6_ARE_ADDR_EQUAL(addr, IFA_IN6(ifa))) @@ -1972,7 +1972,7 @@ in6_ifawithifp(struct ifnet *ifp, struct * If two or more, return one which matches the dst longest. * If none, return one of global addresses assigned other ifs. */ - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family != AF_INET6) continue; ia = (struct in6_ifaddr *)ifa; @@ -2009,7 +2009,7 @@ in6_ifawithifp(struct ifnet *ifp, struct if (best_ia != NULL) return best_ia; - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family != AF_INET6) continue; ia = (struct in6_ifaddr *)ifa; @@ -2054,7 +2054,7 @@ in6_if_link_up(struct ifnet *ifp) if ((ifp->if_flags & (IFF_UP|IFF_RUNNING)) != (IFF_UP|IFF_RUNNING)) return; - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family != AF_INET6) continue; ia = (struct in6_ifaddr *)ifa; @@ -2118,7 +2118,7 @@ in6_if_link_down(struct ifnet *ifp) /* Any prefixes on this interface should be detached as well */ pfxlist_onlink_check(); - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family != AF_INET6) continue; ia = (struct in6_ifaddr *)ifa; Index: src/sys/netinet6/in6_ifattach.c diff -u src/sys/netinet6/in6_ifattach.c:1.100 src/sys/netinet6/in6_ifattach.c:1.101 --- src/sys/netinet6/in6_ifattach.c:1.100 Mon Jul 4 06:48:14 2016 +++ src/sys/netinet6/in6_ifattach.c Thu Jul 7 09:32:03 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: in6_ifattach.c,v 1.100 2016/07/04 06:48:14 ozaki-r Exp $ */ +/* $NetBSD: in6_ifattach.c,v 1.101 2016/07/07 09:32:03 ozaki-r Exp $ */ /* $KAME: in6_ifattach.c,v 1.124 2001/07/18 08:32:51 jinmei Exp $ */ /* @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: in6_ifattach.c,v 1.100 2016/07/04 06:48:14 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: in6_ifattach.c,v 1.101 2016/07/07 09:32:03 ozaki-r Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -325,7 +325,7 @@ in6_get_hw_ifid(struct ifnet *ifp, struc static u_int8_t allone[8] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family != AF_LINK) continue; tsdl = satocsdl(ifa->ifa_addr); Index: src/sys/netinet6/ip6_input.c diff -u src/sys/netinet6/ip6_input.c:1.163 src/sys/netinet6/ip6_input.c:1.164 --- src/sys/netinet6/ip6_input.c:1.163 Wed Jul 6 10:49:49 2016 +++ src/sys/netinet6/ip6_input.c Thu Jul 7 09:32:03 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: ip6_input.c,v 1.163 2016/07/06 10:49:49 ozaki-r Exp $ */ +/* $NetBSD: ip6_input.c,v 1.164 2016/07/07 09:32:03 ozaki-r Exp $ */ /* $KAME: ip6_input.c,v 1.188 2001/03/29 05:34:31 itojun Exp $ */ /* @@ -62,7 +62,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ip6_input.c,v 1.163 2016/07/06 10:49:49 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ip6_input.c,v 1.164 2016/07/07 09:32:03 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_gateway.h" @@ -534,7 +534,7 @@ ip6_input(struct mbuf *m, struct ifnet * * working right. */ struct ifaddr *ifa; - IFADDR_FOREACH(ifa, rcvif) { + IFADDR_READER_FOREACH(ifa, rcvif) { if (ifa->ifa_addr->sa_family != AF_INET6) continue; if (IN6_ARE_ADDR_EQUAL(IFA_IN6(ifa), &ip6->ip6_dst)) { Index: src/sys/netinet6/mld6.c diff -u src/sys/netinet6/mld6.c:1.70 src/sys/netinet6/mld6.c:1.71 --- src/sys/netinet6/mld6.c:1.70 Mon Jul 4 06:48:14 2016 +++ src/sys/netinet6/mld6.c Thu Jul 7 09:32:03 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: mld6.c,v 1.70 2016/07/04 06:48:14 ozaki-r Exp $ */ +/* $NetBSD: mld6.c,v 1.71 2016/07/07 09:32:03 ozaki-r Exp $ */ /* $KAME: mld6.c,v 1.25 2001/01/16 14:14:18 itojun Exp $ */ /* @@ -102,7 +102,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: mld6.c,v 1.70 2016/07/04 06:48:14 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: mld6.c,v 1.71 2016/07/07 09:32:03 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -997,7 +997,7 @@ in6_multicast_sysctl(SYSCTLFN_ARGS) if (oldp == NULL) { *oldlenp = 0; - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family != AF_INET6) continue; ifa6 = (struct in6_ifaddr *)ifa; @@ -1013,7 +1013,7 @@ in6_multicast_sysctl(SYSCTLFN_ARGS) error = 0; written = 0; - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family != AF_INET6) continue; ifa6 = (struct in6_ifaddr *)ifa; Index: src/sys/netinet6/nd6.c diff -u src/sys/netinet6/nd6.c:1.201 src/sys/netinet6/nd6.c:1.202 --- src/sys/netinet6/nd6.c:1.201 Tue Jul 5 06:32:18 2016 +++ src/sys/netinet6/nd6.c Thu Jul 7 09:32:03 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: nd6.c,v 1.201 2016/07/05 06:32:18 ozaki-r Exp $ */ +/* $NetBSD: nd6.c,v 1.202 2016/07/07 09:32:03 ozaki-r Exp $ */ /* $KAME: nd6.c,v 1.279 2002/06/08 11:16:51 itojun Exp $ */ /* @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nd6.c,v 1.201 2016/07/05 06:32:18 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nd6.c,v 1.202 2016/07/07 09:32:03 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_net_mpsafe.h" @@ -687,7 +687,7 @@ regen_tmpaddr(const struct in6_ifaddr *i struct in6_ifaddr *public_ifa6 = NULL; ifp = ia6->ia_ifa.ifa_ifp; - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { struct in6_ifaddr *it6; if (ifa->ifa_addr->sa_family != AF_INET6) @@ -1692,7 +1692,7 @@ nd6_ioctl(u_long cmd, void *data, struct */ int duplicated_linklocal = 0; - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family != AF_INET6) continue; ia = (struct in6_ifaddr *)ifa; @@ -1720,7 +1720,7 @@ nd6_ioctl(u_long cmd, void *data, struct /* Mark all IPv6 addresses as tentative. */ ND_IFINFO(ifp)->flags |= ND6_IFF_IFDISABLED; - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family != AF_INET6) continue; nd6_dad_stop(ifa); @@ -1746,7 +1746,7 @@ nd6_ioctl(u_long cmd, void *data, struct */ int haslinklocal = 0; - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family !=AF_INET6) continue; ia = (struct in6_ifaddr *)ifa; Index: src/sys/netinet6/nd6_rtr.c diff -u src/sys/netinet6/nd6_rtr.c:1.114 src/sys/netinet6/nd6_rtr.c:1.115 --- src/sys/netinet6/nd6_rtr.c:1.114 Tue Jul 5 03:40:52 2016 +++ src/sys/netinet6/nd6_rtr.c Thu Jul 7 09:32:03 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: nd6_rtr.c,v 1.114 2016/07/05 03:40:52 ozaki-r Exp $ */ +/* $NetBSD: nd6_rtr.c,v 1.115 2016/07/07 09:32:03 ozaki-r Exp $ */ /* $KAME: nd6_rtr.c,v 1.95 2001/02/07 08:09:47 itojun Exp $ */ /* @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nd6_rtr.c,v 1.114 2016/07/05 03:40:52 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nd6_rtr.c,v 1.115 2016/07/07 09:32:03 ozaki-r Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -913,7 +913,8 @@ purge_detached(struct ifnet *ifp) !LIST_EMPTY(&pr->ndpr_advrtrs))) continue; - IFADDR_FOREACH_SAFE(ifa, ifp, ifa_next) { + for (ifa = IFADDR_READER_FIRST(ifp); ifa; ifa = ifa_next) { + ifa_next = IFADDR_READER_NEXT(ifa); if (ifa->ifa_addr->sa_family != AF_INET6) continue; ia = (struct in6_ifaddr *)ifa; @@ -1186,7 +1187,7 @@ prelist_update(struct nd_prefixctl *newp * consider autoconfigured addresses while RFC2462 simply said * "address". */ - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { struct in6_ifaddr *ia6; u_int32_t remaininglifetime; @@ -1643,7 +1644,7 @@ nd6_prefix_onlink(struct nd_prefix *pr) IN6_IFF_NOTREADY | IN6_IFF_ANYCAST); if (ifa == NULL) { /* XXX: freebsd does not have ifa_ifwithaf */ - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family == AF_INET6) break; } Index: src/sys/netinet6/sctp6_usrreq.c diff -u src/sys/netinet6/sctp6_usrreq.c:1.5 src/sys/netinet6/sctp6_usrreq.c:1.6 --- src/sys/netinet6/sctp6_usrreq.c:1.5 Fri Jun 10 13:31:44 2016 +++ src/sys/netinet6/sctp6_usrreq.c Thu Jul 7 09:32:03 2016 @@ -1,5 +1,5 @@ /* $KAME: sctp6_usrreq.c,v 1.38 2005/08/24 08:08:56 suz Exp $ */ -/* $NetBSD: sctp6_usrreq.c,v 1.5 2016/06/10 13:31:44 ozaki-r Exp $ */ +/* $NetBSD: sctp6_usrreq.c,v 1.6 2016/07/07 09:32:03 ozaki-r Exp $ */ /* * Copyright (c) 2001, 2002, 2003, 2004 Cisco Systems, Inc. @@ -33,7 +33,7 @@ * SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sctp6_usrreq.c,v 1.5 2016/06/10 13:31:44 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sctp6_usrreq.c,v 1.6 2016/07/07 09:32:03 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -1295,7 +1295,7 @@ static int sctp6_purgeif(struct socket *so, struct ifnet *ifp) { struct ifaddr *ifa; - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family == PF_INET6) { sctp_delete_ip_address(ifa); } Index: src/sys/netipsec/xform_ipip.c diff -u src/sys/netipsec/xform_ipip.c:1.41 src/sys/netipsec/xform_ipip.c:1.42 --- src/sys/netipsec/xform_ipip.c:1.41 Mon Jul 4 04:35:09 2016 +++ src/sys/netipsec/xform_ipip.c Thu Jul 7 09:32:03 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: xform_ipip.c,v 1.41 2016/07/04 04:35:09 knakahara Exp $ */ +/* $NetBSD: xform_ipip.c,v 1.42 2016/07/07 09:32:03 ozaki-r Exp $ */ /* $FreeBSD: src/sys/netipsec/xform_ipip.c,v 1.3.2.1 2003/01/24 05:11:36 sam Exp $ */ /* $OpenBSD: ip_ipip.c,v 1.25 2002/06/10 18:04:55 itojun Exp $ */ @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: xform_ipip.c,v 1.41 2016/07/04 04:35:09 knakahara Exp $"); +__KERNEL_RCSID(0, "$NetBSD: xform_ipip.c,v 1.42 2016/07/07 09:32:03 ozaki-r Exp $"); /* * IP-inside-IP processing @@ -335,7 +335,7 @@ _ipip_input(struct mbuf *m, int iphlen, ipip_allow != 2) { int s = pserialize_read_enter(); IFNET_READER_FOREACH(ifp) { - IFADDR_FOREACH(ifa, ifp) { + IFADDR_READER_FOREACH(ifa, ifp) { #ifdef INET if (ipo) { if (ifa->ifa_addr->sa_family !=