* [B.A.T.M.A.N.] [PATCHv2 4/7] batman-adv: drop unicast packets from other backbone gw
@ 2016-02-26 13:18 Andreas Pape
2016-02-26 16:07 ` Sven Eckelmann
2016-03-10 15:03 ` Simon Wunderlich
0 siblings, 2 replies; 3+ messages in thread
From: Andreas Pape @ 2016-02-26 13:18 UTC (permalink / raw)
To: 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.
Signed-off-by: Andreas Pape <apape@phoenixcontact.com>
---
net/batman-adv/routing.c | 15 +++++++++++++++
1 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/net/batman-adv/routing.c b/net/batman-adv/routing.c
index 4dd646a..606fd22 100644
--- a/net/batman-adv/routing.c
+++ b/net/batman-adv/routing.c
@@ -854,9 +854,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 */
@@ -896,6 +898,19 @@ 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 (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);
+
+ return NET_RX_DROP;
+ }
+
if (batadv_dat_snoop_incoming_arp_request(bat_priv, skb,
hdr_size))
goto rx_success;
--
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
___________________________________________________________________
Diese E-Mail enthält vertrauliche und/oder rechtlich geschützte Informationen. Wenn Sie nicht der richtige Adressat sind oder diese E-Mail irrtümlich erhalten haben, informieren Sie bitte sofort den Absender und vernichten Sie diese Mail. Das unerlaubte Kopieren, jegliche anderweitige Verwendung sowie die unbefugte Weitergabe dieser Mail ist nicht gestattet.
----------------------------------------------------------------------------------------------------
This e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and destroy this e-mail. Any unauthorized copying, disclosure, distribution or other use of the material or parts thereof is strictly forbidden.
___________________________________________________________________
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [B.A.T.M.A.N.] [PATCHv2 4/7] batman-adv: drop unicast packets from other backbone gw
2016-02-26 13:18 [B.A.T.M.A.N.] [PATCHv2 4/7] batman-adv: drop unicast packets from other backbone gw Andreas Pape
@ 2016-02-26 16:07 ` Sven Eckelmann
2016-03-10 15:03 ` Simon Wunderlich
1 sibling, 0 replies; 3+ messages in thread
From: Sven Eckelmann @ 2016-02-26 16:07 UTC (permalink / raw)
To: b.a.t.m.a.n
[-- Attachment #1: Type: text/plain, Size: 813 bytes --]
On Friday 26 February 2016 14:18:54 Andreas Pape wrote:
> @@ -896,6 +898,19 @@ 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 (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);
> +
> + return NET_RX_DROP;
> + }
> +
The orig_node was previously assigned via batadv_orig_hash_find. But this
batadv_orig_hash_find already increased the reference pointer for orig_node.
So we would now have an imbalance at the end of the function.
Kind regards,
Sven
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [B.A.T.M.A.N.] [PATCHv2 4/7] batman-adv: drop unicast packets from other backbone gw
2016-02-26 13:18 [B.A.T.M.A.N.] [PATCHv2 4/7] batman-adv: drop unicast packets from other backbone gw Andreas Pape
2016-02-26 16:07 ` Sven Eckelmann
@ 2016-03-10 15:03 ` Simon Wunderlich
1 sibling, 0 replies; 3+ messages in thread
From: Simon Wunderlich @ 2016-03-10 15:03 UTC (permalink / raw)
To: b.a.t.m.a.n
[-- Attachment #1: Type: text/plain, Size: 456 bytes --]
On Friday 26 February 2016 14:18:54 Andreas Pape wrote:
> 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.
Yup, this is what we discussed!
Acked-by: Simon Wunderlich <sw@simonwunderlich.de>
Thanks!
Simon
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2016-03-10 15:03 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-02-26 13:18 [B.A.T.M.A.N.] [PATCHv2 4/7] batman-adv: drop unicast packets from other backbone gw Andreas Pape
2016-02-26 16:07 ` Sven Eckelmann
2016-03-10 15:03 ` Simon Wunderlich
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.