From b9b6fcd85fc186e3f7f9cc780272137499a9b3a1 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Tue, 12 Jun 2018 19:36:31 +0200 Subject: [PATCH] ip/dhcp6d: only announce all-dhcp-servers multicast address on interface with link-local address on it --- sys/src/cmd/ip/dhcp6d.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/sys/src/cmd/ip/dhcp6d.c b/sys/src/cmd/ip/dhcp6d.c index a130daed6..0aaf626f8 100644 --- a/sys/src/cmd/ip/dhcp6d.c +++ b/sys/src/cmd/ip/dhcp6d.c @@ -134,6 +134,7 @@ openlisten(char *net) int fd, cfd; char data[128], devdir[40]; Ipifc *ifc; + Iplifc *lifc; sprint(data, "%s/udp!*!dhcp6s", net); cfd = announce(data, devdir); @@ -144,12 +145,14 @@ openlisten(char *net) ipifcs = readipifc(net, ipifcs, -1); for(ifc = ipifcs; ifc != nil; ifc = ifc->next){ - if(ifc->lifc == nil) - continue; if(strcmp(ifc->dev, "/dev/null") == 0) continue; - if(fprint(cfd, "addmulti %I ff02::1:2", ifc->lifc->ip) < 0) - fprint(2, "can't add interface %s: %r", ifc->dev); + for(lifc = ifc->lifc; lifc != nil; lifc = lifc->next){ + if(ISIPV6LINKLOCAL(lifc->ip)) + continue; + if(fprint(cfd, "addmulti %I ff02::1:2", lifc->ip) < 0) + fprint(2, "addmulti: %I: %r\n", lifc->ip); + } } sprint(data, "%s/data", devdir); -- 2.44.0