summaryrefslogtreecommitdiffstats
path: root/sbin
diff options
context:
space:
mode:
authorume <ume@FreeBSD.org>2012-01-07 09:01:19 +0000
committerume <ume@FreeBSD.org>2012-01-07 09:01:19 +0000
commit6ccd11eb82acf6a486f18617bb71ce7a4e6a3a50 (patch)
treeb5b0fac9634d147bab0b77165ecfc1c26c35a0fa /sbin
parent6707636c2f8076f7d1a57ec36c55521062e7ca0a (diff)
downloadFreeBSD-src-6ccd11eb82acf6a486f18617bb71ce7a4e6a3a50.zip
FreeBSD-src-6ccd11eb82acf6a486f18617bb71ce7a4e6a3a50.tar.gz
Handle the internal scope address representation of the KAME IPv6
stack for the node-local multicast address. Spotted by: Rainer Bredehorn <Bredehorn__at__gmx.de> MFC after: 1 week
Diffstat (limited to 'sbin')
-rw-r--r--sbin/route/route.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/sbin/route/route.c b/sbin/route/route.c
index 49d14dd..4b2f16e 100644
--- a/sbin/route/route.c
+++ b/sbin/route/route.c
@@ -375,7 +375,8 @@ routename(struct sockaddr *sa)
#ifdef __KAME__
if (sa->sa_len == sizeof(struct sockaddr_in6) &&
(IN6_IS_ADDR_LINKLOCAL(&sin6.sin6_addr) ||
- IN6_IS_ADDR_MC_LINKLOCAL(&sin6.sin6_addr)) &&
+ IN6_IS_ADDR_MC_LINKLOCAL(&sin6.sin6_addr) ||
+ IN6_IS_ADDR_MC_NODELOCAL(&sin6.sin6_addr)) &&
sin6.sin6_scope_id == 0) {
sin6.sin6_scope_id =
ntohs(*(u_int16_t *)&sin6.sin6_addr.s6_addr[2]);
@@ -500,7 +501,8 @@ netname(struct sockaddr *sa)
#ifdef __KAME__
if (sa->sa_len == sizeof(struct sockaddr_in6) &&
(IN6_IS_ADDR_LINKLOCAL(&sin6.sin6_addr) ||
- IN6_IS_ADDR_MC_LINKLOCAL(&sin6.sin6_addr)) &&
+ IN6_IS_ADDR_MC_LINKLOCAL(&sin6.sin6_addr) ||
+ IN6_IS_ADDR_MC_NODELOCAL(&sin6.sin6_addr)) &&
sin6.sin6_scope_id == 0) {
sin6.sin6_scope_id =
ntohs(*(u_int16_t *)&sin6.sin6_addr.s6_addr[2]);
@@ -1002,7 +1004,8 @@ getaddr(int which, char *str, struct hostent **hpp)
memcpy(&su->sin6, res->ai_addr, sizeof(su->sin6));
#ifdef __KAME__
if ((IN6_IS_ADDR_LINKLOCAL(&su->sin6.sin6_addr) ||
- IN6_IS_ADDR_MC_LINKLOCAL(&su->sin6.sin6_addr)) &&
+ IN6_IS_ADDR_MC_LINKLOCAL(&su->sin6.sin6_addr) ||
+ IN6_IS_ADDR_MC_NODELOCAL(&su->sin6.sin6_addr)) &&
su->sin6.sin6_scope_id) {
*(u_int16_t *)&su->sin6.sin6_addr.s6_addr[2] =
htons(su->sin6.sin6_scope_id);
OpenPOWER on IntegriCloud