|
@@ -1774,7 +1774,7 @@ void batadv_tt_global_del_orig(struct batadv_priv *bat_priv,
|
|
|
}
|
|
|
spin_unlock_bh(list_lock);
|
|
|
}
|
|
|
- orig_node->tt_initialised = false;
|
|
|
+ orig_node->capa_initialized &= ~BATADV_ORIG_CAPA_HAS_TT;
|
|
|
}
|
|
|
|
|
|
static bool batadv_tt_global_to_purge(struct batadv_tt_global_entry *tt_global,
|
|
@@ -2734,7 +2734,7 @@ static void _batadv_tt_update_changes(struct batadv_priv *bat_priv,
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
- orig_node->tt_initialised = true;
|
|
|
+ orig_node->capa_initialized |= BATADV_ORIG_CAPA_HAS_TT;
|
|
|
}
|
|
|
|
|
|
static void batadv_tt_fill_gtable(struct batadv_priv *bat_priv,
|
|
@@ -3224,13 +3224,15 @@ static void batadv_tt_update_orig(struct batadv_priv *bat_priv,
|
|
|
uint8_t orig_ttvn = (uint8_t)atomic_read(&orig_node->last_ttvn);
|
|
|
struct batadv_tvlv_tt_vlan_data *tt_vlan;
|
|
|
bool full_table = true;
|
|
|
+ bool has_tt_init;
|
|
|
|
|
|
tt_vlan = (struct batadv_tvlv_tt_vlan_data *)tt_buff;
|
|
|
+ has_tt_init = orig_node->capa_initialized & BATADV_ORIG_CAPA_HAS_TT;
|
|
|
+
|
|
|
/* orig table not initialised AND first diff is in the OGM OR the ttvn
|
|
|
* increased by one -> we can apply the attached changes
|
|
|
*/
|
|
|
- if ((!orig_node->tt_initialised && ttvn == 1) ||
|
|
|
- ttvn - orig_ttvn == 1) {
|
|
|
+ if ((!has_tt_init && ttvn == 1) || ttvn - orig_ttvn == 1) {
|
|
|
/* the OGM could not contain the changes due to their size or
|
|
|
* because they have already been sent BATADV_TT_OGM_APPEND_MAX
|
|
|
* times.
|
|
@@ -3270,7 +3272,7 @@ static void batadv_tt_update_orig(struct batadv_priv *bat_priv,
|
|
|
/* if we missed more than one change or our tables are not
|
|
|
* in sync anymore -> request fresh tt data
|
|
|
*/
|
|
|
- if (!orig_node->tt_initialised || ttvn != orig_ttvn ||
|
|
|
+ if (!has_tt_init || ttvn != orig_ttvn ||
|
|
|
!batadv_tt_global_check_crc(orig_node, tt_vlan,
|
|
|
tt_num_vlan)) {
|
|
|
request_table:
|