projects
/
project
/
netifd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
device: Support multicast config option
[project/netifd.git]
/
system-linux.c
diff --git
a/system-linux.c
b/system-linux.c
index 9978ade5046da28dd78ec261bfda97d8a923288f..86e373c06efd3de46e09662101b4e0bf60fe028d 100644
(file)
--- 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;
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))) {
}
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);
}
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);
}
system_if_apply_rps_xps(dev, s);
}