58 lines
2.2 KiB
Diff
58 lines
2.2 KiB
Diff
From: Linus Lüssing <linus.luessing@c0d3.blue>
|
|
Date: Fri, 31 Jul 2020 00:22:55 +0200
|
|
Subject: batman-adv: Fix own OGM check in aggregated OGMs
|
|
|
|
The own OGM check is currently misplaced and can lead to the following
|
|
issues:
|
|
|
|
For one thing we might receive an aggregated OGM from a neighbor node
|
|
which has our own OGM in the first place. We would then not only skip
|
|
our own OGM but erroneously also any other, following OGM in the
|
|
aggregate.
|
|
|
|
For another, we might receive an OGM aggregate which has our own OGM in
|
|
a place other then the first one. Then we would wrongly not skip this
|
|
OGM, leading to populating the orginator and gateway table with ourself.
|
|
|
|
The latter seems to not only be a cosmetic issue, but there were reports
|
|
that this causes issues with various subsystems of batman-adv, too. For
|
|
instance there were reports about issues with DAT and either disabling
|
|
DAT or aggregation seemed to solve it.
|
|
|
|
Fixing these issues by applying the own OGM check not on the first OGM
|
|
in an aggregate but for each OGM in an aggregate instead.
|
|
|
|
Fixes: 667996ebeab ("batman-adv: OGMv2 - implement originators logic")
|
|
Signed-off-by: Linus Lüssing <linus.luessing@c0d3.blue>
|
|
Signed-off-by: Sven Eckelmann <sven@narfation.org>
|
|
|
|
Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/d41cc7cb62c184b2fb8ab97fda45815918200001
|
|
|
|
--- a/net/batman-adv/bat_v_ogm.c
|
|
+++ b/net/batman-adv/bat_v_ogm.c
|
|
@@ -704,6 +704,12 @@ static void batadv_v_ogm_process(const s
|
|
ntohl(ogm_packet->seqno), ogm_throughput, ogm_packet->ttl,
|
|
ogm_packet->version, ntohs(ogm_packet->tvlv_len));
|
|
|
|
+ if (batadv_is_my_mac(bat_priv, ogm_packet->orig)) {
|
|
+ batadv_dbg(BATADV_DBG_BATMAN, bat_priv,
|
|
+ "Drop packet: originator packet from ourself\n");
|
|
+ return;
|
|
+ }
|
|
+
|
|
/* If the throughput metric is 0, immediately drop the packet. No need
|
|
* to create orig_node / neigh_node for an unusable route.
|
|
*/
|
|
@@ -831,11 +837,6 @@ int batadv_v_ogm_packet_recv(struct sk_b
|
|
if (batadv_is_my_mac(bat_priv, ethhdr->h_source))
|
|
goto free_skb;
|
|
|
|
- ogm_packet = (struct batadv_ogm2_packet *)skb->data;
|
|
-
|
|
- if (batadv_is_my_mac(bat_priv, ogm_packet->orig))
|
|
- goto free_skb;
|
|
-
|
|
batadv_inc_counter(bat_priv, BATADV_CNT_MGMT_RX);
|
|
batadv_add_counter(bat_priv, BATADV_CNT_MGMT_RX_BYTES,
|
|
skb->len + ETH_HLEN);
|