From: Simon Wunderlich <sw@simonwunderlich.de>
To: netdev@vger.kernel.org
Cc: "David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Simon Horman <horms@kernel.org>,
b.a.t.m.a.n@lists.open-mesh.org,
Sven Eckelmann <sven@narfation.org>,
Simon Wunderlich <sw@simonwunderlich.de>
Subject: [PATCH net-next 07/15] batman-adv: tt: extract merging of flags into existing global entries
Date: Mon, 7 Sep 2026 10:18:16 +0200 [thread overview]
Message-ID: <20260907081824.2474040-8-sw@simonwunderlich.de> (raw)
In-Reply-To: <20260907081824.2474040-1-sw@simonwunderlich.de>
From: Sven Eckelmann <sven@narfation.org>
When an already known global TT entry is announced again, its flags have to
be merged with the announced ones. Two of the merge steps also decide
whether the originator list has to be purged before the announced
originator is added.
Move this to batadv_tt_global_merge_flags() and let it report via its
return value whether the originator list has to be purged.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
---
net/batman-adv/translation-table.c | 87 ++++++++++++++++++------------
1 file changed, 52 insertions(+), 35 deletions(-)
diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c
index d475f8efd44d7..67e4ade5ae997 100644
--- a/net/batman-adv/translation-table.c
+++ b/net/batman-adv/translation-table.c
@@ -1832,6 +1832,57 @@ batadv_tt_global_orig_entry_add(struct batadv_tt_global_entry *tt_global,
spin_unlock_bh(&tt_global->list_lock);
}
+/**
+ * batadv_tt_global_merge_flags() - merge announced flags into a global TT entry
+ * @tt_global_entry: the global TT entry to update
+ * @flags: TT flags announced for this non-mesh client
+ *
+ * Return: true if the originator list of @tt_global_entry has to be purged
+ * before the announced originator is added, false otherwise.
+ */
+static bool
+batadv_tt_global_merge_flags(struct batadv_tt_global_entry *tt_global_entry,
+ u16 flags)
+{
+ struct batadv_tt_common_entry *common = &tt_global_entry->common;
+ bool delete = false;
+
+ scoped_guard(spinlock_bh, &common->flags_lock) {
+ /* if the client was temporary added before receiving the first
+ * OGM announcing it, we have to clear the TEMP flag. Also,
+ * remove the previous temporary orig node and re-add it
+ * if required. If the orig entry changed, the new one which
+ * is a non-temporary entry is preferred.
+ */
+ if (common->flags & BATADV_TT_CLIENT_TEMP) {
+ delete = true;
+ common->flags &= ~BATADV_TT_CLIENT_TEMP;
+ }
+
+ /* the change can carry possible "attribute" flags like the
+ * TT_CLIENT_TEMP, therefore they have to be copied in the
+ * client entry
+ */
+ if (!is_multicast_ether_addr(common->addr))
+ common->flags |= flags & (~BATADV_TT_SYNC_MASK);
+
+ /* If there is the BATADV_TT_CLIENT_ROAM flag set, there is only
+ * one originator left in the list and we previously received a
+ * delete + roaming change for this originator.
+ *
+ * We should first delete the old originator before adding the
+ * new one.
+ */
+ if (common->flags & BATADV_TT_CLIENT_ROAM) {
+ delete = true;
+ tt_global_entry->roam_at = 0;
+ common->flags &= ~BATADV_TT_CLIENT_ROAM;
+ }
+ }
+
+ return delete;
+}
+
/**
* batadv_tt_global_create() - allocate and initialize a global TT entry
* @tt_addr: the mac address of the non-mesh client
@@ -1974,41 +2025,7 @@ static bool batadv_tt_global_add(struct batadv_priv *bat_priv,
goto add_orig_entry;
}
- delete = false;
-
- spin_lock_bh(&common->flags_lock);
- /* if the client was temporary added before receiving the first
- * OGM announcing it, we have to clear the TEMP flag. Also,
- * remove the previous temporary orig node and re-add it
- * if required. If the orig entry changed, the new one which
- * is a non-temporary entry is preferred.
- */
- if (common->flags & BATADV_TT_CLIENT_TEMP) {
- delete = true;
- common->flags &= ~BATADV_TT_CLIENT_TEMP;
- }
-
- /* the change can carry possible "attribute" flags like the
- * TT_CLIENT_TEMP, therefore they have to be copied in the
- * client entry
- */
- if (!is_multicast_ether_addr(common->addr))
- common->flags |= flags & (~BATADV_TT_SYNC_MASK);
-
- /* If there is the BATADV_TT_CLIENT_ROAM flag set, there is only
- * one originator left in the list and we previously received a
- * delete + roaming change for this originator.
- *
- * We should first delete the old originator before adding the
- * new one.
- */
- if (common->flags & BATADV_TT_CLIENT_ROAM) {
- delete = true;
- tt_global_entry->roam_at = 0;
- common->flags &= ~BATADV_TT_CLIENT_ROAM;
- }
- spin_unlock_bh(&common->flags_lock);
-
+ delete = batadv_tt_global_merge_flags(tt_global_entry, flags);
if (delete)
batadv_tt_global_del_orig_list(tt_global_entry);
}
--
2.47.3
next prev parent reply other threads:[~2026-09-07 8:18 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-07 8:18 [PATCH net-next 00/15] pull request for net-next: batman-adv 2026-09-07 Simon Wunderlich
2026-09-07 8:18 ` [PATCH net-next 01/15] batman-adv: tt: look up wifi state of incoming interface in helper Simon Wunderlich
2026-09-11 1:10 ` patchwork-bot+netdevbpf
2026-09-07 8:18 ` [PATCH net-next 02/15] batman-adv: tt: extract allocation of new local entries Simon Wunderlich
2026-09-07 8:18 ` [PATCH net-next 03/15] batman-adv: tt: replace forward gotos in batadv_tt_local_add() Simon Wunderlich
2026-09-07 8:18 ` [PATCH net-next 04/15] batman-adv: tt: extract refresh of existing local entries Simon Wunderlich
2026-09-07 8:18 ` [PATCH net-next 05/15] batman-adv: tt: extract update of dynamic client flags Simon Wunderlich
2026-09-07 8:18 ` [PATCH net-next 06/15] batman-adv: tt: extract allocation of new global entries Simon Wunderlich
2026-09-07 8:18 ` Simon Wunderlich [this message]
2026-09-07 8:18 ` [PATCH net-next 08/15] batman-adv: tt: replace add_orig_entry goto in batadv_tt_global_add() Simon Wunderlich
[not found] ` <20260908082701.B6CCD1F00A3A@smtp.kernel.org>
2026-09-08 9:22 ` Sven Eckelmann
2026-09-07 8:18 ` [PATCH net-next 09/15] batman-adv: tt: extract removal of the superseded local entry Simon Wunderlich
2026-09-08 17:26 ` Sven Eckelmann
2026-09-07 8:18 ` [PATCH net-next 10/15] batman-adv: tt: extract marking of a removed " Simon Wunderlich
2026-09-08 17:26 ` Sven Eckelmann
2026-09-07 8:18 ` [PATCH net-next 11/15] batman-adv: tt: extract immediate purge of a " Simon Wunderlich
2026-09-08 17:26 ` Sven Eckelmann
2026-09-07 8:18 ` [PATCH net-next 12/15] batman-adv: tt: drop the cleanup label from batadv_tt_local_remove() Simon Wunderlich
2026-09-07 8:18 ` [PATCH net-next 13/15] batman-adv: tt: clarify kernel doc for batadv_tt_local_set_pending_event() Simon Wunderlich
2026-09-07 8:18 ` [PATCH net-next 14/15] batman-adv: bat_iv: fix ogm_neigh_is_sob parameters references Simon Wunderlich
2026-09-07 8:18 ` [PATCH net-next 15/15] batman-adv: correct batadv_hash_remove kdoc return type Simon Wunderlich
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260907081824.2474040-8-sw@simonwunderlich.de \
--to=sw@simonwunderlich.de \
--cc=b.a.t.m.a.n@lists.open-mesh.org \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sven@narfation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.