Date: Fri, 06 Jan 2012 19:41:19 +0900 From: Hajimu UMEMOTO <ume@mahoroba.org> To: "Rainer Bredehorn" <Bredehorn@gmx.de> Cc: freebsd-net@freebsd.org Subject: Re: IPv6 multicast routes with interface local scope Message-ID: <ygesjjtyuy8.wl%ume@mahoroba.org> In-Reply-To: <20120106091320.209360@gmx.net> References: <20120106091320.209360@gmx.net>
next in thread | previous in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
Hi,
>>>>> On Fri, 06 Jan 2012 10:13:20 +0100
>>>>> "Rainer Bredehorn" <Bredehorn@gmx.de> said:
Bredehorn> The output of netstat is fixed but what about the route command?
Bredehorn> I would like to add or delete a route like "ff01::%fxp1/32" manually.
Bredehorn> The route command complains: "hostname nor servname provided, or not known"
Bredehorn> when I use the "%interface" notation.
Okay, please try the attached patch.
Sincerely,
[-- Attachment #2 --]
Index: lib/libc/net/getaddrinfo.c
diff -u -p lib/libc/net/getaddrinfo.c.orig lib/libc/net/getaddrinfo.c
--- lib/libc/net/getaddrinfo.c.orig 2011-12-24 03:27:52.000000000 +0900
+++ lib/libc/net/getaddrinfo.c 2012-01-06 19:30:42.191095539 +0900
@@ -1577,7 +1577,8 @@ ip6_str2scopeid(char *scope, struct sock
if (*scope == '\0')
return -1;
- if (IN6_IS_ADDR_LINKLOCAL(a6) || IN6_IS_ADDR_MC_LINKLOCAL(a6)) {
+ if (IN6_IS_ADDR_LINKLOCAL(a6) || IN6_IS_ADDR_MC_LINKLOCAL(a6) ||
+ IN6_IS_ADDR_MC_NODELOCAL(a6)) {
/*
* We currently assume a one-to-one mapping between links
* and interfaces, so we simply use interface indices for
Index: sbin/route/route.c
diff -u -p sbin/route/route.c.orig sbin/route/route.c
--- sbin/route/route.c.orig 2011-09-23 09:51:37.000000000 +0900
+++ sbin/route/route.c 2012-01-06 19:30:17.819091371 +0900
@@ -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 hos
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);
[-- Attachment #3 --]
--
Hajimu UMEMOTO @ Internet Mutual Aid Society Yokohama, Japan
ume@mahoroba.org ume@{,jp.}FreeBSD.org
http://www.imasy.org/~ume/
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?ygesjjtyuy8.wl%ume>
