summaryrefslogtreecommitdiffstats
path: root/usr.bin/netstat
diff options
context:
space:
mode:
authorhrs <hrs@FreeBSD.org>2012-11-17 20:19:00 +0000
committerhrs <hrs@FreeBSD.org>2012-11-17 20:19:00 +0000
commit456b7a93418939408dbedc100658b7b995c87a8b (patch)
tree326b0fd08a208cf214b04ab6ac6f069d7ca658c2 /usr.bin/netstat
parent9a8531105a4561079ee099a51460bb789ef9cfd1 (diff)
downloadFreeBSD-src-456b7a93418939408dbedc100658b7b995c87a8b.zip
FreeBSD-src-456b7a93418939408dbedc100658b7b995c87a8b.tar.gz
Fill sin6_scope_id in sockaddr_in6 before passing it from the kernel to
userland via routing socket or sysctl. This eliminates the following KAME-specific sin6_scope_id handling routine from each userland utility: sin6.sin6_scope_id = ntohs(*(u_int16_t *)&sin6.sin6_addr.s6_addr[2]); This behavior can be controlled by net.inet6.ip6.deembed_scopeid. This is set to 1 by default (sin6_scope_id will be filled in the kernel). Reviewed by: bz
Diffstat (limited to 'usr.bin/netstat')
-rw-r--r--usr.bin/netstat/route.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/usr.bin/netstat/route.c b/usr.bin/netstat/route.c
index 270f6bd..dd91330 100644
--- a/usr.bin/netstat/route.c
+++ b/usr.bin/netstat/route.c
@@ -637,6 +637,12 @@ fmt_sockaddr(struct sockaddr *sa, struct sockaddr *mask, int flags)
{
struct sockaddr_in6 *sa6 = (struct sockaddr_in6 *)sa;
+ /*
+ * The sa6->sin6_scope_id must be filled here because
+ * this sockaddr is extracted from kmem(4) directly
+ * and has KAME-specific embedded scope id in
+ * sa6->sin6_addr.s6_addr[2].
+ */
in6_fillscopeid(sa6);
if (flags & RTF_HOST)
OpenPOWER on IntegriCloud