From patchwork Tue Oct 20 14:31:01 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Podolak, Nicholas" X-Patchwork-Id: 532998 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from arrakis.dune.hu (arrakis.dune.hu [78.24.191.176]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id C08041401AF for ; Wed, 21 Oct 2015 01:31:19 +1100 (AEDT) Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id B0CE7280966; Tue, 20 Oct 2015 16:29:30 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on arrakis.dune.hu X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=BAYES_00 autolearn=unavailable version=3.3.2 Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id 0A616280966; Tue, 20 Oct 2015 16:29:18 +0200 (CEST) X-policyd-weight: using cached result; rate: -7.6 X-Greylist: delayed 1016 seconds by postgrey-1.34 at arrakis; Tue, 20 Oct 2015 16:29:18 CEST Received: from mx0a-00172501.pphosted.com (mx0a-00172501.pphosted.com [67.231.148.188]) by arrakis.dune.hu (Postfix) with ESMTPS; Tue, 20 Oct 2015 16:29:17 +0200 (CEST) Received: from pps.filterd (m0045300.ppops.net [127.0.0.1]) by mx0a-00172501.pphosted.com (8.15.0.59/8.15.0.59) with SMTP id t9KERd07001768; Tue, 20 Oct 2015 07:30:53 -0700 Received: from usbalp-mail01.corp.cubic.cub (70-142.cubic.com [149.63.70.142]) by mx0a-00172501.pphosted.com with ESMTP id 1xnkp68fw9-1 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 20 Oct 2015 07:30:53 -0700 Received: from bb-corp-cas03.corp.cubic.cub (bb-corp-cas03.corp.cubic.cub [149.63.2.187]) by usbalp-mail01.corp.cubic.cub (8.14.4/8.14.4) with ESMTP id t9KEUqm5055925 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=FAIL); Tue, 20 Oct 2015 07:30:52 -0700 Received: from BB-CORP-MBX02.corp.cubic.cub ([169.254.2.74]) by bb-corp-cas03.corp.cubic.cub ([149.63.2.187]) with mapi id 14.03.0266.001; Tue, 20 Oct 2015 07:30:50 -0700 From: "Podolak, Nicholas" To: "nbd@openwrt.org" Thread-Topic: [PATCH 1/2] [netifd] multicast flag control Thread-Index: AdELQK/D9+jGwhmyQ3eOd05ve+ZviwAAQXqn Date: Tue, 20 Oct 2015 14:31:01 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [149.63.2.159] MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:5.14.151, 1.0.33, 0.0.0000 definitions=2015-10-20_05:2015-10-20, 2015-10-20, 1970-01-01 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=7.0.1-1508030000 definitions=main-1510200238 Cc: "openwrt-devel@lists.openwrt.org" Subject: [OpenWrt-Devel] [PATCH 1/2] [netifd] multicast flag control X-BeenThere: openwrt-devel@lists.openwrt.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: OpenWrt Development List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: openwrt-devel-bounces@lists.openwrt.org Sender: "openwrt-devel" From: Nick Podolak 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 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;