diff options
author | itojun <itojun@FreeBSD.org> | 2000-07-09 11:17:17 +0000 |
---|---|---|
committer | itojun <itojun@FreeBSD.org> | 2000-07-09 11:17:17 +0000 |
commit | fec7b00bf40aa283a346e30f7a6e7d7b663ea808 (patch) | |
tree | 5a40860174410399a8449d217597f36123a46d90 /sys/net | |
parent | 7613572c34a3408c2a2d41b1adadc420daa015d6 (diff) | |
download | FreeBSD-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.c | 10 |
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, |