From patchwork Wed Apr 24 01:19:17 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Linus_L=C3=BCssing?= X-Patchwork-Id: 17893 X-Patchwork-Delegate: sw@simonwunderlich.de Return-Path: X-Original-To: patchwork@open-mesh.org Delivered-To: patchwork@open-mesh.org Received: from open-mesh.org (localhost [IPv6:::1]) by open-mesh.org (Postfix) with ESMTP id 2698E82698; Wed, 24 Apr 2019 03:19:38 +0200 (CEST) Authentication-Results: open-mesh.org; dkim=fail reason="key not found in DNS" (0-bit key; unprotected) header.d=c0d3.blue header.i=@c0d3.blue header.b="mwDvhtWC"; dkim-atps=neutral Received-SPF: None (mailfrom) identity=mailfrom; client-ip=138.201.29.205; helo=mail.aperture-lab.de; envelope-from=linus.luessing@c0d3.blue; receiver= Received: from mail.aperture-lab.de (mail.aperture-lab.de [138.201.29.205]) by open-mesh.org (Postfix) with ESMTPS id 0EE528254A for ; Wed, 24 Apr 2019 03:19:29 +0200 (CEST) From: =?utf-8?q?Linus_L=C3=BCssing?= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=c0d3.blue; s=2018; t=1556068769; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=f951N+7v1Ido+HUXmdlQL3BPGrOiEcrVjeTXDPEkNqs=; b=mwDvhtWCLXh879lwlMEY+3r88FrUQyToTtnlaNgh4dlQ3d/5HTKbKOM4XvqJ1OAi70o+mZ Jb9+WUXxLlbkEVDzYETEEuKoZwQD5qWFQY4fMsoxLywKuym59DolKBgfvxfI8WFXUOCbm5 46DXa81ZJt7mWL4/qpa3TjJdgRD22g96ORHiR/aglXHMY4YeoCU8IxIx4v5Ua6hp5Y44ME 9WZ9RXuNH+KEKRQNyIR82ctV/HfCuArFUVEJwQBGYduXOYTICWqoUR4phKelah6oahGLwW MpjfR2jPELf4NY46rjjIITaE2KXQdr3q6C2Oglo3PLXU7VGm2ijFUqXoPr6X6w== To: b.a.t.m.a.n@lists.open-mesh.org Date: Wed, 24 Apr 2019 03:19:17 +0200 Message-Id: <20190424011919.9821-5-linus.luessing@c0d3.blue> In-Reply-To: <20190424011919.9821-1-linus.luessing@c0d3.blue> References: <20190424011919.9821-1-linus.luessing@c0d3.blue> MIME-Version: 1.0 ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=c0d3.blue; s=2018; t=1556068769; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=f951N+7v1Ido+HUXmdlQL3BPGrOiEcrVjeTXDPEkNqs=; b=Hx1Mv81+ba8GNuuCIqjQmzLqAToDoybzmHluXR4cgLvQt+bQMMkE+cu6Qi6TJ0v3yOVE3d K45QXl78Pxke4DykT8049BcS8f3nsZbGtauckIkVDgrNb2gp8rrjN3Mse4kenMwmzGoRhv l+3rbgbpPs7fQle/fGm+gOStP48gNji+cPf0jr5JRIMotmxMaPQl6BkSvEZcRyGGJjhc2O x+kZSaJb+CQkcB/wiFhMonZ7kq46Q6n10B36spfHqaqhN4bpbEUVmPbp+SvEhlQ5SrwLd+ w99TEFsxrOoTmsRReVYK3o4qWYImAHni3XO0krFxTj8/9UfF1wHDXz+loIzbeQ== ARC-Seal: i=1; s=2018; d=c0d3.blue; t=1556068769; a=rsa-sha256; cv=none; b=MbSixNVpszjp85qwCiR7KxfxMDPCRTEJ/H+BJuC1icAJk65KZv4y5da13BVoatj1b063BN /C0rYtb3CIAVhwhpWvrrZfPLLWsubQu9UvS4cBwjMW9Nx7GlMjqyzO1xfLinfTIrnCUWnP pjMoqtIi5Wnu9rPYkPM1Urk95kGNxiDXrgDLWtLb5ITuKLzFh5nWpJQSWyZgPd67+bdmnp UgkYM5mNbO5syKa1V9DESCEHyY2ihflPvWfdfBQB3rodd8pQXs5t3UcSpqe+2nG+O69LpP 30d/ep8Pnz6fTUEcMoOV1m5RaHyyt6TGqaHLaUE8JBk5q5z/0z4mZBUllINYuA== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=linus.luessing@c0d3.blue smtp.mailfrom=linus.luessing@c0d3.blue Authentication-Results: ORIGINATING; auth=pass smtp.auth=linus.luessing@c0d3.blue smtp.mailfrom=linus.luessing@c0d3.blue Subject: [B.A.T.M.A.N.] [PATCH 4/6] batman-adv: mcast: avoid redundant multicast TT entries with bridges X-BeenThere: b.a.t.m.a.n@lists.open-mesh.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: The list for a Better Approach To Mobile Ad-hoc Networking List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: The list for a Better Approach To Mobile Ad-hoc Networking Errors-To: b.a.t.m.a.n-bounces@lists.open-mesh.org Sender: "B.A.T.M.A.N" When a bridge is added on top of bat0 we set the WANT_ALL_UNSNOOPABLES flag. Which means we sign up for all traffic for ff02::1/128 and 224.0.0.0/24. When the node itself had IPv6 enabled or joined a group in 224.0.0.0/24 itself then so far this would result in a multicast TT entry which is redundant to the WANT_ALL_UNSNOOPABLES. With this patch such redundant TT entries are avoided. Signed-off-by: Linus Lüssing --- net/batman-adv/multicast.c | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/net/batman-adv/multicast.c b/net/batman-adv/multicast.c index d38f3808..a3d3b71f 100644 --- a/net/batman-adv/multicast.c +++ b/net/batman-adv/multicast.c @@ -227,6 +227,10 @@ batadv_mcast_mla_softif_get_ipv4(struct net_device *dev, rcu_read_lock(); for (pmc = rcu_dereference(in_dev->mc_list); pmc; pmc = rcu_dereference(pmc->next_rcu)) { + if (flags->tvlv_flags & BATADV_MCAST_WANT_ALL_UNSNOOPABLES && + ipv4_is_local_multicast(pmc->multiaddr)) + continue; + ip_eth_mc_map(pmc->multiaddr, mcast_addr); if (batadv_mcast_mla_is_duplicate(mcast_addr, mcast_list)) @@ -287,6 +291,10 @@ batadv_mcast_mla_softif_get_ipv6(struct net_device *dev, IPV6_ADDR_SCOPE_LINKLOCAL) continue; + if (flags->tvlv_flags & BATADV_MCAST_WANT_ALL_UNSNOOPABLES && + ipv6_addr_is_ll_all_nodes(&pmc6->mca_addr)) + continue; + ipv6_eth_mc_map(&pmc6->mca_addr, mcast_addr); if (batadv_mcast_mla_is_duplicate(mcast_addr, mcast_list)) @@ -407,9 +415,8 @@ static int batadv_mcast_mla_bridge_get(struct net_device *dev, struct batadv_mcast_mla_flags *flags) { struct list_head bridge_mcast_list = LIST_HEAD_INIT(bridge_mcast_list); - bool all_ipv4 = flags->tvlv_flags & BATADV_MCAST_WANT_ALL_IPV4; - bool all_ipv6 = flags->tvlv_flags & BATADV_MCAST_WANT_ALL_IPV6; struct br_ip_list *br_ip_entry, *tmp; + u8 tvlv_flags = flags->tvlv_flags; struct batadv_hw_addr *new; u8 mcast_addr[ETH_ALEN]; int ret; @@ -422,11 +429,23 @@ static int batadv_mcast_mla_bridge_get(struct net_device *dev, goto out; list_for_each_entry(br_ip_entry, &bridge_mcast_list, list) { - if (all_ipv4 && br_ip_entry->addr.proto == htons(ETH_P_IP)) - continue; + if (br_ip_entry->addr.proto == htons(ETH_P_IP)) { + if (tvlv_flags & BATADV_MCAST_WANT_ALL_IPV4) + continue; - if (all_ipv6 && br_ip_entry->addr.proto == htons(ETH_P_IPV6)) - continue; + if (tvlv_flags & BATADV_MCAST_WANT_ALL_UNSNOOPABLES && + ipv4_is_local_multicast(br_ip_entry->addr.u.ip4)) + continue; + } + + if (br_ip_entry->addr.proto == htons(ETH_P_IPV6)) { + if (tvlv_flags & BATADV_MCAST_WANT_ALL_IPV6) + continue; + + if (tvlv_flags & BATADV_MCAST_WANT_ALL_UNSNOOPABLES && + ipv6_addr_is_ll_all_nodes(&br_ip_entry->addr.u.ip6)) + continue; + } batadv_mcast_mla_br_addr_cpy(mcast_addr, &br_ip_entry->addr); if (batadv_mcast_mla_is_duplicate(mcast_addr, mcast_list))