diff options
author | ume <ume@FreeBSD.org> | 2001-08-03 19:10:31 +0000 |
---|---|---|
committer | ume <ume@FreeBSD.org> | 2001-08-03 19:10:31 +0000 |
commit | f62663bb069962df0f18083699b88c314bc77bf4 (patch) | |
tree | f06e18c0fbb148c49da7bdaccba295de4240854d /sys/netinet6/in6.c | |
parent | 8c4571a0e7b9f93dbd564c1efd9b96f34776cf79 (diff) | |
download | FreeBSD-src-f62663bb069962df0f18083699b88c314bc77bf4.zip FreeBSD-src-f62663bb069962df0f18083699b88c314bc77bf4.tar.gz |
When global anycast address was assigned to lo0, wrong source
address was selected.
Reported by: Shingo WATANABE <nabe@nabechan.org>
Submitted by: JINMEI Tatuya <jinmei@isl.rdc.toshiba.co.jp>
MFC after: 3 days
Diffstat (limited to 'sys/netinet6/in6.c')
-rw-r--r-- | sys/netinet6/in6.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/netinet6/in6.c b/sys/netinet6/in6.c index 9a5b404..529d122 100644 --- a/sys/netinet6/in6.c +++ b/sys/netinet6/in6.c @@ -1087,16 +1087,18 @@ in6_update_ifa(ifp, ifra, ia) * some interface-boundary restriction. */ if (ifp->if_flags & IFF_LOOPBACK) { + struct in6_ifaddr *ia_loop; + struct in6_addr loop6 = in6addr_loopback; - ia = in6ifa_ifpwithaddr(ifp, &loop6); + ia_loop = in6ifa_ifpwithaddr(ifp, &loop6); mltaddr.sin6_addr = in6addr_nodelocal_allnodes; IN6_LOOKUP_MULTI(mltaddr.sin6_addr, ifp, in6m); - if (in6m == NULL && ia != NULL) { + if (in6m == NULL && ia_loop != NULL) { rtrequest(RTM_ADD, (struct sockaddr *)&mltaddr, - (struct sockaddr *)&ia->ia_addr, + (struct sockaddr *)&ia_loop->ia_addr, (struct sockaddr *)&mltmask, RTF_UP, (struct rtentry **)0); |