[v2] batman-adv: pass a unique flag arg instead of a sequence of bool ones
Commit Message
now tt_local_event() takes a flags argument instead of a sequence of
boolean values which would grow up with the time.
Signed-off-by: Antonio Quartulli <ordex@autistici.org>
---
tt_local_remove() wasn't using the "bool roaming" parameter into account.
translation-table.c | 22 ++++++++++++----------
1 files changed, 12 insertions(+), 10 deletions(-)
Comments
Hi Antonio
> + /* NOPURGE flag has not to go on the wire */
> + flags &= ~TT_CLIENT_NOPURGE;
>
> + tt_change_node->change.flags = flags;
I don't remember the packet format. But i assume flags on the wire is
a u8? How about making TT_CLIENT_NOPURGE 1<<8 or bigger, so it is
automatically not sent on the wire? It will also make it easier
sometime in the future when you want to use the bit on the wire that
TT_CLIENT_NOPURGE is currently taking.
You might also want to change the function parameters flags from int
to uint, so avoiding sign extension problems.
Andrew
Hi Andrew,
On Mon, Jun 27, 2011 at 07:33:19AM +0200, Andrew Lunn wrote:
> Hi Antonio
>
> > + /* NOPURGE flag has not to go on the wire */
> > + flags &= ~TT_CLIENT_NOPURGE;
> >
> > + tt_change_node->change.flags = flags;
>
> I don't remember the packet format. But i assume flags on the wire is
> a u8? How about making TT_CLIENT_NOPURGE 1<<8 or bigger, so it is
> automatically not sent on the wire? It will also make it easier
> sometime in the future when you want to use the bit on the wire that
> TT_CLIENT_NOPURGE is currently taking.
>
Even if we want to add other flags that don't need to be sent on the
wire. I like this idea.
We can have a uint16_t flags field in the
tt_local/global_entry structure, where the 8 tailing bits only are sent
within the messages. Instead, the 8 leading bits are reserved for local purposes.
> You might also want to change the function parameters flags from int
> to uint, so avoiding sign extension problems.
Yes, thanks!
>
> Andrew
@@ -143,8 +143,8 @@ static void tt_global_entry_free_ref(struct tt_global_entry *tt_global_entry)
kfree_rcu(tt_global_entry, rcu);
}
-static void tt_local_event(struct bat_priv *bat_priv, uint8_t op,
- const uint8_t *addr, bool roaming)
+static void tt_local_event(struct bat_priv *bat_priv, const uint8_t *addr,
+ int flags)
{
struct tt_change_node *tt_change_node;
@@ -153,10 +153,10 @@ static void tt_local_event(struct bat_priv *bat_priv, uint8_t op,
if (!tt_change_node)
return;
- tt_change_node->change.flags = op;
- if (roaming)
- tt_change_node->change.flags |= TT_CLIENT_ROAM;
+ /* NOPURGE flag has not to go on the wire */
+ flags &= ~TT_CLIENT_NOPURGE;
+ tt_change_node->change.flags = flags;
memcpy(tt_change_node->change.addr, addr, ETH_ALEN);
spin_lock_bh(&bat_priv->tt_changes_list_lock);
@@ -203,8 +203,6 @@ void tt_local_add(struct net_device *soft_iface, const uint8_t *addr)
if (!tt_local_entry)
goto out;
- tt_local_event(bat_priv, NO_FLAGS, addr, false);
-
bat_dbg(DBG_TT, bat_priv,
"Creating new local tt entry: %pM (ttvn: %d)\n", addr,
(uint8_t)atomic_read(&bat_priv->ttvn));
@@ -218,6 +216,8 @@ void tt_local_add(struct net_device *soft_iface, const uint8_t *addr)
if (compare_eth(addr, soft_iface->dev_addr))
tt_local_entry->flags |= TT_CLIENT_NOPURGE;
+ tt_local_event(bat_priv, addr, tt_local_entry->flags);
+
hash_add(bat_priv->tt_local_hash, compare_ltt, choose_orig,
tt_local_entry, &tt_local_entry->hash_entry);
@@ -386,7 +386,9 @@ void tt_local_remove(struct bat_priv *bat_priv, const uint8_t *addr,
if (!tt_local_entry)
goto out;
- tt_local_event(bat_priv, TT_CLIENT_DEL, tt_local_entry->addr, roaming);
+ tt_local_event(bat_priv, tt_local_entry->addr,
+ tt_local_entry->flags | TT_CLIENT_DEL |
+ (roaming ? TT_CLIENT_ROAM : NO_FLAGS));
tt_local_del(bat_priv, tt_local_entry, message);
out:
if (tt_local_entry)
@@ -416,8 +418,8 @@ static void tt_local_purge(struct bat_priv *bat_priv)
TT_LOCAL_TIMEOUT * 1000))
continue;
- tt_local_event(bat_priv, TT_CLIENT_DEL,
- tt_local_entry->addr, false);
+ tt_local_event(bat_priv, tt_local_entry->addr,
+ tt_local_entry->flags | TT_CLIENT_DEL);
atomic_dec(&bat_priv->num_local_tt);
bat_dbg(DBG_TT, bat_priv, "Deleting local "
"tt entry (%pM): timed out\n",