Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. =================================================================== RCS file: /ftp/cvs/cvsroot/src/sys/netinet6/in6_ifattach.c,v rcsdiff: /ftp/cvs/cvsroot/src/sys/netinet6/in6_ifattach.c,v: warning: Unknown phrases like `commitid ...;' are present. retrieving revision 1.74.2.1 retrieving revision 1.74.2.2 diff -u -p -r1.74.2.1 -r1.74.2.2 --- src/sys/netinet6/in6_ifattach.c 2007/11/19 00:49:12 1.74.2.1 +++ src/sys/netinet6/in6_ifattach.c 2007/12/08 18:21:15 1.74.2.2 @@ -1,4 +1,4 @@ -/* $NetBSD: in6_ifattach.c,v 1.74.2.1 2007/11/19 00:49:12 mjf Exp $ */ +/* $NetBSD: in6_ifattach.c,v 1.74.2.2 2007/12/08 18:21:15 mjf Exp $ */ /* $KAME: in6_ifattach.c,v 1.124 2001/07/18 08:32:51 jinmei Exp $ */ /* @@ -31,7 +31,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: in6_ifattach.c,v 1.74.2.1 2007/11/19 00:49:12 mjf Exp $"); +__KERNEL_RCSID(0, "$NetBSD: in6_ifattach.c,v 1.74.2.2 2007/12/08 18:21:15 mjf Exp $"); #include #include @@ -331,7 +331,7 @@ in6_get_hw_ifid(struct ifnet *ifp, struc static u_int8_t allone[8] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; - TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list) { + IFADDR_FOREACH(ifa, ifp) { if (ifa->ifa_addr->sa_family != AF_LINK) continue; sdl = satocsdl(ifa->ifa_addr); @@ -854,17 +854,15 @@ in6_ifdetach(struct ifnet *ifp) /* remove neighbor management table */ nd6_purge(ifp); + /* XXX this code is duplicated in in6_purgeif() --dyoung */ /* nuke any of IPv6 addresses we have */ - for (ifa = TAILQ_FIRST(&ifp->if_addrlist); ifa; ifa = next) { - next = TAILQ_NEXT(ifa, ifa_list); - if (ifa->ifa_addr->sa_family != AF_INET6) - continue; - in6_purgeaddr(ifa); - } + if_purgeaddrs(ifp, AF_INET6, in6_purgeaddr); + /* XXX isn't this code is redundant, given the above? --dyoung */ + /* XXX doesn't this code replicate code in in6_purgeaddr() ? --dyoung */ /* undo everything done by in6_ifattach(), just in case */ - for (ifa = TAILQ_FIRST(&ifp->if_addrlist); ifa; ifa = next) { - next = TAILQ_NEXT(ifa, ifa_list); + for (ifa = IFADDR_FIRST(ifp); ifa != NULL; ifa = next) { + next = IFADDR_NEXT(ifa); if (ifa->ifa_addr->sa_family != AF_INET6 || !IN6_IS_ADDR_LINKLOCAL(&satosin6(&ifa->ifa_addr)->sin6_addr)) { @@ -893,8 +891,7 @@ in6_ifdetach(struct ifnet *ifp) } /* remove from the linked list */ - TAILQ_REMOVE(&ifp->if_addrlist, &ia->ia_ifa, ifa_list); - IFAFREE(&ia->ia_ifa); + ifa_remove(ifp, &ia->ia_ifa); /* also remove from the IPv6 address chain(itojun&jinmei) */ oia = ia;