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))) {
snprintf(val_buf, sizeof(val_buf), "%x", val);
for (i = 0; i < gl.gl_pathc; i++)
system_set_sysctl(gl.gl_pathv[i], val_buf);
+
+ globfree(&gl);
}
static void
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);
}