/* BATADV_TT_CLIENT flags.
  * Flags from BIT(0) to BIT(7) are sent on the wire, while flags from BIT(8) to
- * BIT(15) are used for local computation only
+ * BIT(15) are used for local computation only.
+ * Flags from BIT(4) to BIT(7) are kept in sync with the rest of the network.
  */
 enum batadv_tt_client_flags {
        BATADV_TT_CLIENT_DEL     = BIT(0),
        BATADV_TT_CLIENT_ROAM    = BIT(1),
-       BATADV_TT_CLIENT_WIFI    = BIT(2),
+       BATADV_TT_CLIENT_WIFI    = BIT(4),
        BATADV_TT_CLIENT_NOPURGE = BIT(8),
        BATADV_TT_CLIENT_NEW     = BIT(9),
        BATADV_TT_CLIENT_PENDING = BIT(10),
 
        struct batadv_tt_global_entry *tt_global;
        struct hlist_head *head;
        uint32_t i, crc_tmp, crc = 0;
+       uint8_t flags;
 
        for (i = 0; i < hash->size; i++) {
                head = &hash->table[i];
 
                        crc_tmp = crc32c(0, &tt_common->vid,
                                         sizeof(tt_common->vid));
+
+                       /* compute the CRC on flags that have to be kept in sync
+                        * among nodes
+                        */
+                       flags = tt_common->flags & BATADV_TT_SYNC_MASK;
+                       crc_tmp = crc32c(crc_tmp, &flags, sizeof(flags));
+
                        crc ^= crc32c(crc_tmp, tt_common->addr, ETH_ALEN);
                }
                rcu_read_unlock();
        struct batadv_tt_common_entry *tt_common;
        struct hlist_head *head;
        uint32_t i, crc_tmp, crc = 0;
+       uint8_t flags;
 
        for (i = 0; i < hash->size; i++) {
                head = &hash->table[i];
 
                        crc_tmp = crc32c(0, &tt_common->vid,
                                         sizeof(tt_common->vid));
+
+                       /* compute the CRC on flags that have to be kept in sync
+                        * among nodes
+                        */
+                       flags = tt_common->flags & BATADV_TT_SYNC_MASK;
+                       crc_tmp = crc32c(crc_tmp, &flags, sizeof(flags));
+
                        crc ^= crc32c(crc_tmp, tt_common->addr, ETH_ALEN);
                }
                rcu_read_unlock();
 {
        int ret;
 
+       /* synchronized flags must be remote */
+       BUILD_BUG_ON(!(BATADV_TT_SYNC_MASK & BATADV_TT_REMOTE_MASK));
+
        ret = batadv_tt_local_init(bat_priv);
        if (ret < 0)
                return ret;
 
  */
 #define BATADV_TT_REMOTE_MASK  0x00FF
 
+/**
+ * BATADV_TT_SYNC_MASK - bitmask of the flags that need to be kept in sync
+ *  among the nodes. These flags are used to compute the global/local CRC
+ */
+#define BATADV_TT_SYNC_MASK    0x00F0
+
 /**
  * struct batadv_hard_iface_bat_iv - per hard interface B.A.T.M.A.N. IV data
  * @ogm_buff: buffer holding the OGM packet