X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=system-linux.c;h=86e373c06efd3de46e09662101b4e0bf60fe028d;hb=abbea9ebe8a8b56032e0f85b8572f0671dc094e5;hp=9978ade5046da28dd78ec261bfda97d8a923288f;hpb=fb9beaa4d0d70300ea00b92f246f7edc08e9da5d;p=project%2Fnetifd.git diff --git a/system-linux.c b/system-linux.c index 9978ade..86e373c 100644 --- a/system-linux.c +++ b/system-linux.c @@ -1089,6 +1089,9 @@ system_if_get_settings(struct device *dev, struct device_settings *s) if (ioctl(sock_ioctl, SIOCGIFFLAGS, &ifr) == 0) { s->promisc = ifr.ifr_flags & IFF_PROMISC; s->flags |= DEV_OPT_PROMISC; + + s->multicast = ifr.ifr_flags & IFF_MULTICAST; + s->flags |= DEV_OPT_MULTICAST; } if (!system_get_rpfilter(dev, buf, sizeof(buf))) { @@ -1219,6 +1222,11 @@ system_if_apply_settings(struct device *dev, struct device_settings *s, unsigned snprintf(buf, sizeof(buf), "%d", s->dadtransmits); system_set_dadtransmits(dev, buf); } + if (s->flags & DEV_OPT_MULTICAST & apply_mask) { + if (system_if_flags(dev->ifname, s->multicast ? IFF_MULTICAST : 0, + !s->multicast ? IFF_MULTICAST : 0) < 0) + s->flags &= ~DEV_OPT_MULTICAST; + } system_if_apply_rps_xps(dev, s); }