From patchwork Fri May 6 08:58:25 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Andreas Pape X-Patchwork-Id: 16096 X-Patchwork-Delegate: mareklindner@neomailbox.ch 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 2528682724; Fri, 6 May 2016 11:09:30 +0200 (CEST) Authentication-Results: open-mesh.org; dmarc=none header.from=phoenixcontact.com Received-SPF: None (no SPF record) identity=mailfrom; client-ip=62.157.123.121; helo=mail2.phoenixcontact.com; envelope-from=apape@phoenixcontact.com; receiver=b.a.t.m.a.n@lists.open-mesh.org Authentication-Results: open-mesh.org; dmarc=none header.from=phoenixcontact.com Received: from mail2.phoenixcontact.com (mail2.phoenixcontact.com [62.157.123.121]) by open-mesh.org (Postfix) with ESMTPS id 49BCD81A64 for ; Fri, 6 May 2016 11:08:47 +0200 (CEST) Received: from localhost.localdomain ([149.208.237.127]) by de-nice01.de.phoenixcontact.com with ESMTP id 2016050610584423-87323 ; Fri, 6 May 2016 10:58:44 +0200 From: Andreas Pape To: b.a.t.m.a.n@lists.open-mesh.org X-Mailer: git-send-email 1.7.0.4 In-Reply-To: <1462525107-19750-1-git-send-email-apape@phoenixcontact.com> References: <1462525107-19750-1-git-send-email-apape@phoenixcontact.com> X-MIMETrack: Itemize by SMTP Server on DE-NICE01/Hub/SRV/DE/Phoenix Contact at 06.05.2016 10:58:44, Serialize by ntm_grab.EXE on nemex02/spoke/SRV/DE/Phoenix Contact at 06.05.2016 10:58:37, Serialize complete at 06.05.2016 10:58:37, Itemize by ntm_grab.EXE on nemex02/spoke/SRV/DE/Phoenix Contact at 06.05.2016 10:58:37, Serialize by Router on nemex02/spoke/SRV/DE/Phoenix Contact at 06.05.2016 11:08:39, Serialize complete at 06.05.2016 11:08:39 X-TNEFEvaluated: 1 Message-ID: <1462525107-19750-5-git-send-email-apape@phoenixcontact.com> Date: Fri, 6 May 2016 10:58:25 +0200 content-transfer-encoding: quoted-printable content-type: text/plain; charset="utf-8" Subject: [B.A.T.M.A.N.] [PATCHv3 4/6] batman-adv: drop unicast packets from other backbone gw X-BeenThere: b.a.t.m.a.n@lists.open-mesh.org X-Mailman-Version: 2.1.18 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" Additional dropping of unicast packets received from another backbone gw of the same backbone network before being forwarded to the same backbone again is necessary. It was observed in a test setup that in rare cases these frames lead to looping unicast traffic backbone->mesh->backbone. Acked-by: Simon Wunderlich Signed-off-by: Andreas Pape --- net/batman-adv/routing.c | 16 ++++++++++++++++ 1 files changed, 16 insertions(+), 0 deletions(-) -- 1.7.0.4 .................................................................. PHOENIX CONTACT ELECTRONICS GmbH Sitz der Gesellschaft / registered office of the company: 31812 Bad Pyrmont USt-Id-Nr.: DE811742156 Amtsgericht Hannover HRB 100528 / district court Hannover HRB 100528 Geschäftsführer / Executive Board: Roland Bent, Dr. Martin Heubeck diff --git a/net/batman-adv/routing.c b/net/batman-adv/routing.c index ae850f2..1ef0735 100644 --- a/net/batman-adv/routing.c +++ b/net/batman-adv/routing.c @@ -864,9 +864,11 @@ int batadv_recv_unicast_packet(struct sk_buff *skb, int check, hdr_size = sizeof(*unicast_packet); enum batadv_subtype subtype; bool is4addr; + struct ethhdr *ethhdr; unicast_packet = (struct batadv_unicast_packet *)skb->data; unicast_4addr_packet = (struct batadv_unicast_4addr_packet *)skb->data; + ethhdr = eth_hdr(skb); is4addr = unicast_packet->packet_type == BATADV_UNICAST_4ADDR; /* the caller function should have already pulled 2 bytes */ @@ -906,6 +908,20 @@ int batadv_recv_unicast_packet(struct sk_buff *skb, } } + /* If this is a unicast packet from another backgone gw, + * drop it. + */ + orig_addr = ethhdr->h_source; + orig_node = batadv_orig_hash_find(bat_priv, orig_addr); + if (orig_node && + batadv_bla_is_backbone_gw(skb, orig_node, hdr_size)) { + batadv_dbg(BATADV_DBG_BLA, bat_priv, + "Dropped unicast pkt received from another backbone gw %pM.\n", + orig_addr); + batadv_orig_node_put(orig_node); + return NET_RX_DROP; + } + if (batadv_dat_snoop_incoming_arp_request(bat_priv, skb, hdr_size)) goto rx_success;