aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sbin/ping6/ping6.c6
-rw-r--r--sys/netinet6/icmp6.c8
-rw-r--r--sys/netinet6/icmp6.h34
3 files changed, 30 insertions, 18 deletions
diff --git a/sbin/ping6/ping6.c b/sbin/ping6/ping6.c
index 00f06e378a46..da6bd38dfdf0 100644
--- a/sbin/ping6/ping6.c
+++ b/sbin/ping6/ping6.c
@@ -296,6 +296,10 @@ main(argc, argv)
case 'a':
naflags |= NI_NODEADDR_FLAG_ALL;
break;
+ case 'c':
+ case 'C':
+ naflags |= NI_NODEADDR_FLAG_COMPAT;
+ break;
case 'l':
case 'L':
naflags |= NI_NODEADDR_FLAG_LINKLOCAL;
@@ -1553,7 +1557,7 @@ usage()
"AE"
#endif
#endif
- "] [-a [alsg]] [-b sockbufsiz] [-c count] [-I interface]\n\
+ "] [-a [aclsg]] [-b sockbufsiz] [-c count] [-I interface]\n\
[-i wait] [-l preload] [-p pattern] [-s packetsize]\n\
[-h hoplimit] host [hosts...]\n");
exit(1);
diff --git a/sys/netinet6/icmp6.c b/sys/netinet6/icmp6.c
index 02c221961ad3..47202965bf4d 100644
--- a/sys/netinet6/icmp6.c
+++ b/sys/netinet6/icmp6.c
@@ -915,8 +915,12 @@ ni6_addrs(ni6, m, ifpp)
&ifa6->ia_addr.sin6_addr))
iffound = 1;
- if (ifa6->ia6_flags & IN6_IFF_ANYCAST)
+ if (ifa6->ia6_flags & IN6_IFF_ANYCAST) {
+ if ((ni6->ni_flags & NI_NODEADDR_FLAG_ANYCAST)
+ != 0)
+ addrsofif++;
continue; /* we need only unicast addresses */
+ }
if ((ni6->ni_flags & (NI_NODEADDR_FLAG_LINKLOCAL |
NI_NODEADDR_FLAG_SITELOCAL |
@@ -986,8 +990,6 @@ ni6_store_addrs(ni6, nni6, ifp0, resid)
} else { /* unicast address */
if (ni6->ni_flags & NI_NODEADDR_FLAG_ANYCAST)
continue;
- else
- docopy = 1;
}
/* What do we have to do about ::1? */
diff --git a/sys/netinet6/icmp6.h b/sys/netinet6/icmp6.h
index feb664e619ae..495297f86601 100644
--- a/sys/netinet6/icmp6.h
+++ b/sys/netinet6/icmp6.h
@@ -320,21 +320,27 @@ struct icmp6_nodeinfo {
#if BYTE_ORDER == BIG_ENDIAN
#define NI_SUPTYPE_FLAG_COMPRESS 0x1
#define NI_FQDN_FLAG_VALIDTTL 0x1
-#define NI_NODEADDR_FLAG_LINKLOCAL 0x1
-#define NI_NODEADDR_FLAG_SITELOCAL 0x2
-#define NI_NODEADDR_FLAG_GLOBAL 0x4
-#define NI_NODEADDR_FLAG_ALL 0x8
-#define NI_NODEADDR_FLAG_TRUNCATE 0x10
-#define NI_NODEADDR_FLAG_ANYCAST 0x20 /* just experimental. not in spec */
#elif BYTE_ORDER == LITTLE_ENDIAN
-#define NI_SUPTYPE_FLAG_COMPRESS 0x0100
-#define NI_FQDN_FLAG_VALIDTTL 0x0100
-#define NI_NODEADDR_FLAG_LINKLOCAL 0x0100
-#define NI_NODEADDR_FLAG_SITELOCAL 0x0200
-#define NI_NODEADDR_FLAG_GLOBAL 0x0400
-#define NI_NODEADDR_FLAG_ALL 0x0800
-#define NI_NODEADDR_FLAG_TRUNCATE 0x1000
-#define NI_NODEADDR_FLAG_ANYCAST 0x2000 /* just experimental. not in spec */
+#define NI_SUPTYPE_FLAG_COMPRESS 0x0100
+#define NI_FQDN_FLAG_VALIDTTL 0x0100
+#endif
+
+#if BYTE_ORDER == BIG_ENDIAN
+#define NI_NODEADDR_FLAG_TRUNCATE 0x1
+#define NI_NODEADDR_FLAG_ALL 0x2
+#define NI_NODEADDR_FLAG_COMPAT 0x4
+#define NI_NODEADDR_FLAG_LINKLOCAL 0x8
+#define NI_NODEADDR_FLAG_SITELOCAL 0x10
+#define NI_NODEADDR_FLAG_GLOBAL 0x20
+#define NI_NODEADDR_FLAG_ANYCAST 0x40 /* just experimental. not in spec */
+#elif BYTE_ORDER == LITTLE_ENDIAN
+#define NI_NODEADDR_FLAG_TRUNCATE 0x0100
+#define NI_NODEADDR_FLAG_ALL 0x0200
+#define NI_NODEADDR_FLAG_COMPAT 0x0400
+#define NI_NODEADDR_FLAG_LINKLOCAL 0x0800
+#define NI_NODEADDR_FLAG_SITELOCAL 0x1000
+#define NI_NODEADDR_FLAG_GLOBAL 0x2000
+#define NI_NODEADDR_FLAG_ANYCAST 0x4000 /* just experimental. not in spec */
#endif
struct ni_reply_fqdn {