diff mbox

[OpenWrt-Devel,1/2,netifd] multicast flag control

Message ID B4EFE0128BCDD542A8E7DC55F7D7FCF629EBEF34@bb-corp-mbx02.corp.cubic.cub
State Rejected
Headers show

Commit Message

Podolak, Nicholas Oct. 20, 2015, 2:31 p.m. UTC
From: Nick Podolak <nicholas.podolak@dtechlabs.com>

This patch set allows for interfaces defined in UCI to enable and disable multicast support on their underlying device.  This has particular use on GRE tunnels which previously did NOT enable multicast by default.  Since GRE is commonly used to create router to router links that support multicast for use by routing protocols (e.g. OSPF, EIGRP, etc), or specifically for multicast applications, this modification seemed necessary.

This first patch adds the multicast capability to all interfaces/devices.


Signed-off-by: Nick Podolak <nicholas.podolak@dtechlabs.com>

Comments

Steven Barth Nov. 4, 2015, 12:10 a.m. UTC | #1
I'm sorry but this patch doesn't apply:

Applying patch #532998 using 'git am'
Description: [OpenWrt-Devel,1/2,netifd] multicast flag control
Applying: multicast flag control
error: patch failed: device.c:40
error: device.c: patch does not apply
error: patch failed: system-linux.c:1091
error: system-linux.c: patch does not apply
error: patch failed: device.h:34
error: device.h: patch does not apply
Patch failed at 0001 multicast flag control
The copy of the patch that failed is found in: .git/rebase-apply/patch
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
'git am' failed with exit status 128
diff mbox

Patch

Index: netifd-2015-09-27/device.c
===================================================================
--- netifd-2015-09-27.orig/device.c    2015-10-13 15:21:54.358124119 -0400
+++ netifd-2015-09-27/device.c    2015-10-13 15:21:54.346124119 -0400
@@ -40,6 +40,7 @@ 
     [DEV_ATTR_ENABLED] = { .name = "enabled", .type = BLOBMSG_TYPE_BOOL },
     [DEV_ATTR_IPV6] = { .name = "ipv6", .type = BLOBMSG_TYPE_BOOL },
     [DEV_ATTR_PROMISC] = { .name = "promisc", .type = BLOBMSG_TYPE_BOOL },
+    [DEV_ATTR_MULTICAST] = { .name = "multicast", .type = BLOBMSG_TYPE_BOOL },
     [DEV_ATTR_RPFILTER] = { .name = "rpfilter", .type = BLOBMSG_TYPE_STRING },
     [DEV_ATTR_ACCEPTLOCAL] = { .name = "acceptlocal", .type = BLOBMSG_TYPE_BOOL },
     [DEV_ATTR_IGMPVERSION] = { .name = "igmpversion", .type = BLOBMSG_TYPE_INT32 },
@@ -162,6 +163,7 @@ 
         sizeof(n->macaddr));
     n->ipv6 = s->flags & DEV_OPT_IPV6 ? s->ipv6 : os->ipv6;
     n->promisc = s->flags & DEV_OPT_PROMISC ? s->promisc : os->promisc;
+    n->multicast = s->flags & DEV_OPT_MULTICAST ? s->multicast : os->multicast;
     n->rpfilter = s->flags & DEV_OPT_RPFILTER ? s->rpfilter : os->rpfilter;
     n->acceptlocal = s->flags & DEV_OPT_ACCEPTLOCAL ? s->acceptlocal : os->acceptlocal;
     n->igmpversion = s->flags & DEV_OPT_IGMPVERSION ? s->igmpversion : os->igmpversion;
@@ -222,6 +224,11 @@ 
         s->flags |= DEV_OPT_PROMISC;
     }

+    if ((cur = tb[DEV_ATTR_MULTICAST])) {
+        s->multicast = blobmsg_get_bool(cur);
+        s->flags |= DEV_OPT_MULTICAST;
+    }
+
     if ((cur = tb[DEV_ATTR_RPFILTER])) {
         if (system_resolve_rpfilter(blobmsg_data(cur), &s->rpfilter))
             s->flags |= DEV_OPT_RPFILTER;
@@ -899,6 +906,8 @@ 
             blobmsg_add_u8(b, "ipv6", st.ipv6);
         if (st.flags & DEV_OPT_PROMISC)
             blobmsg_add_u8(b, "promisc", st.promisc);
+        if (st.flags & DEV_OPT_MULTICAST)
+            blobmsg_add_u8(b, "multicast", st.multicast);
         if (st.flags & DEV_OPT_RPFILTER)
             blobmsg_add_u32(b, "rpfilter", st.rpfilter);
         if (st.flags & DEV_OPT_ACCEPTLOCAL)
Index: netifd-2015-09-27/system-linux.c
===================================================================
--- netifd-2015-09-27.orig/system-linux.c    2015-10-13 15:21:54.358124119 -0400
+++ netifd-2015-09-27/system-linux.c    2015-10-13 15:21:54.350124119 -0400
@@ -1091,6 +1091,11 @@ 
         s->flags |= DEV_OPT_PROMISC;
     }

+    if (ioctl(sock_ioctl, SIOCGIFFLAGS, &ifr) == 0) {
+        s->multicast = ifr.ifr_flags & IFF_MULTICAST;
+        s->flags |= DEV_OPT_MULTICAST;
+    }
+
     if (!system_get_rpfilter(dev, buf, sizeof(buf))) {
         s->rpfilter = strtoul(buf, NULL, 0);
         s->flags |= DEV_OPT_RPFILTER;
@@ -1193,6 +1198,11 @@ 
                     !s->promisc ? IFF_PROMISC : 0) < 0)
             s->flags &= ~DEV_OPT_PROMISC;
     }
+    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;
+    }
     if (s->flags & DEV_OPT_RPFILTER & apply_mask) {
         snprintf(buf, sizeof(buf), "%d", s->rpfilter);
         system_set_rpfilter(dev, buf);
Index: netifd-2015-09-27/device.h
===================================================================
--- netifd-2015-09-27.orig/device.h    2015-10-13 15:21:54.358124119 -0400
+++ netifd-2015-09-27/device.h    2015-10-13 15:21:54.350124119 -0400
@@ -34,6 +34,7 @@ 
     DEV_ATTR_ENABLED,
     DEV_ATTR_IPV6,
     DEV_ATTR_PROMISC,
+    DEV_ATTR_MULTICAST,
     DEV_ATTR_RPFILTER,
     DEV_ATTR_ACCEPTLOCAL,
     DEV_ATTR_IGMPVERSION,
@@ -88,6 +89,7 @@ 
     DEV_OPT_DADTRANSMITS        = (1 << 13),
     DEV_OPT_MULTICAST_TO_UNICAST    = (1 << 14),
     DEV_OPT_MULTICAST_ROUTER    = (1 << 15),
+    DEV_OPT_MULTICAST        = (1 << 16),
 };

 /* events broadcasted to all users of a device */
@@ -136,6 +138,7 @@ 
     uint8_t macaddr[6];
     bool ipv6;
     bool promisc;
+    bool multicast;
     unsigned int rpfilter;
     bool acceptlocal;
     unsigned int igmpversion;