summaryrefslogtreecommitdiff
path: root/usr.sbin/ifmcstat
diff options
context:
space:
mode:
authorHiroki Sato <hrs@FreeBSD.org>2012-11-23 11:21:58 +0000
committerHiroki Sato <hrs@FreeBSD.org>2012-11-23 11:21:58 +0000
commita038519e19f14648ae6fbfe6467bf99ee613b9d0 (patch)
treed3b2a4b73909e883c69c19750d9c2851c07e8e64 /usr.sbin/ifmcstat
parent51fb3b32c478b0524f6a4e7d0a4d161d1dabb388 (diff)
downloadsrc-test2-a038519e19f14648ae6fbfe6467bf99ee613b9d0.tar.gz
src-test2-a038519e19f14648ae6fbfe6467bf99ee613b9d0.zip
Notes
Diffstat (limited to 'usr.sbin/ifmcstat')
-rw-r--r--usr.sbin/ifmcstat/ifmcstat.c28
1 files changed, 11 insertions, 17 deletions
diff --git a/usr.sbin/ifmcstat/ifmcstat.c b/usr.sbin/ifmcstat/ifmcstat.c
index 838c83d50bc5..9f5868036b9d 100644
--- a/usr.sbin/ifmcstat/ifmcstat.c
+++ b/usr.sbin/ifmcstat/ifmcstat.c
@@ -167,7 +167,7 @@ static const char * inm_mode(u_int mode);
#endif
#ifdef INET6
static void in6_ifinfo(struct mld_ifinfo *);
-static const char * inet6_n2a(struct in6_addr *);
+static const char * inet6_n2a(struct in6_addr *, uint32_t);
#endif
int main(int, char **);
@@ -459,7 +459,8 @@ if6_addrlist(struct ifaddr *ifap)
if (sa.sa_family != PF_INET6)
goto nextifap;
KREAD(ifap, &if6a, struct in6_ifaddr);
- printf("\tinet6 %s\n", inet6_n2a(&if6a.ia_addr.sin6_addr));
+ printf("\tinet6 %s\n", inet6_n2a(&if6a.ia_addr.sin6_addr,
+ if6a.ia_addr.sin6_scope_id));
/*
* Print per-link MLD information, if available.
*/
@@ -514,7 +515,7 @@ in6_multientry(struct in6_multi *mc)
struct in6_multi multi;
KREAD(mc, &multi, struct in6_multi);
- printf("\t\tgroup %s", inet6_n2a(&multi.in6m_addr));
+ printf("\t\tgroup %s", inet6_n2a(&multi.in6m_addr, 0));
printf(" refcnt %u\n", multi.in6m_refcount);
return (multi.in6m_entry.le_next);
@@ -751,7 +752,7 @@ in6_ifinfo(struct mld_ifinfo *mli)
printf("mldv?(%d)", mli->mli_version);
break;
}
- printb(" flags", mli->mli_flags, "\020\1SILENT");
+ printb(" flags", mli->mli_flags, "\020\1SILENT\2USEALLOW");
if (mli->mli_version == MLD_VERSION_2) {
printf(" rv %u qi %u qri %u uri %u",
mli->mli_rv, mli->mli_qi, mli->mli_qri, mli->mli_uri);
@@ -764,26 +765,17 @@ in6_ifinfo(struct mld_ifinfo *mli)
}
static const char *
-inet6_n2a(struct in6_addr *p)
+inet6_n2a(struct in6_addr *p, uint32_t scope_id)
{
static char buf[NI_MAXHOST];
struct sockaddr_in6 sin6;
- u_int32_t scopeid;
const int niflags = NI_NUMERICHOST;
memset(&sin6, 0, sizeof(sin6));
sin6.sin6_family = AF_INET6;
sin6.sin6_len = sizeof(struct sockaddr_in6);
sin6.sin6_addr = *p;
- if (IN6_IS_ADDR_LINKLOCAL(p) || IN6_IS_ADDR_MC_LINKLOCAL(p) ||
- IN6_IS_ADDR_MC_NODELOCAL(p)) {
- scopeid = ntohs(*(u_int16_t *)&sin6.sin6_addr.s6_addr[2]);
- if (scopeid) {
- sin6.sin6_scope_id = scopeid;
- sin6.sin6_addr.s6_addr[2] = 0;
- sin6.sin6_addr.s6_addr[3] = 0;
- }
- }
+ sin6.sin6_scope_id = scope_id;
if (getnameinfo((struct sockaddr *)&sin6, sin6.sin6_len,
buf, sizeof(buf), NULL, 0, niflags) == 0) {
return (buf);
@@ -1115,7 +1107,8 @@ ifmcstat_getifmaddrs(void)
#ifdef INET6
{
const char *p =
- inet6_n2a(&pifasa->sin6.sin6_addr);
+ inet6_n2a(&pifasa->sin6.sin6_addr,
+ pifasa->sin6.sin6_scope_id);
strlcpy(addrbuf, p, sizeof(addrbuf));
break;
}
@@ -1196,7 +1189,8 @@ next_ifnet:
/* Print this group address. */
#ifdef INET6
if (pgsa->sa.sa_family == AF_INET6) {
- const char *p = inet6_n2a(&pgsa->sin6.sin6_addr);
+ const char *p = inet6_n2a(&pgsa->sin6.sin6_addr,
+ pgsa->sin6.sin6_scope_id);
strlcpy(addrbuf, p, sizeof(addrbuf));
} else
#endif