summaryrefslogtreecommitdiffstats
path: root/sys/net
diff options
context:
space:
mode:
authoritojun <itojun@FreeBSD.org>2000-07-09 11:17:17 +0000
committeritojun <itojun@FreeBSD.org>2000-07-09 11:17:17 +0000
commitfec7b00bf40aa283a346e30f7a6e7d7b663ea808 (patch)
tree5a40860174410399a8449d217597f36123a46d90 /sys/net
parent7613572c34a3408c2a2d41b1adadc420daa015d6 (diff)
downloadFreeBSD-src-fec7b00bf40aa283a346e30f7a6e7d7b663ea808.zip
FreeBSD-src-fec7b00bf40aa283a346e30f7a6e7d7b663ea808.tar.gz
repair IPV6_JOIN_GROUP to IPv6 all multi.
From: ume
Diffstat (limited to 'sys/net')
-rw-r--r--sys/net/if_ethersubr.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/sys/net/if_ethersubr.c b/sys/net/if_ethersubr.c
index b229612..7ae976e 100644
--- a/sys/net/if_ethersubr.c
+++ b/sys/net/if_ethersubr.c
@@ -824,6 +824,16 @@ ether_resolvemulti(ifp, llsa, sa)
#ifdef INET6
case AF_INET6:
sin6 = (struct sockaddr_in6 *)sa;
+ if (IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr)) {
+ /*
+ * An IP6 address of 0 means listen to all
+ * of the Ethernet multicast address used for IP6.
+ * (This is used for multicast routers.)
+ */
+ ifp->if_flags |= IFF_ALLMULTI;
+ *llsa = 0;
+ return 0;
+ }
if (!IN6_IS_ADDR_MULTICAST(&sin6->sin6_addr))
return EADDRNOTAVAIL;
MALLOC(sdl, struct sockaddr_dl *, sizeof *sdl, M_IFMADDR,
OpenPOWER on IntegriCloud