batman-adv: merge update_transtable() into tt related code
authorMarek Lindner <lindner_marek@yahoo.de>
Sat, 30 Jul 2011 11:10:18 +0000 (13:10 +0200)
committerMarek Lindner <lindner_marek@yahoo.de>
Mon, 22 Aug 2011 13:16:22 +0000 (15:16 +0200)
Signed-off-by: Marek Lindner <lindner_marek@yahoo.de>
net/batman-adv/routing.c
net/batman-adv/translation-table.c
net/batman-adv/translation-table.h

index 91a7860ecadd04095162796b9339cd5c60f4d8ef..19499281b69507c71480b1942429289543b6be6a 100644 (file)
@@ -64,65 +64,6 @@ void slide_own_bcast_window(struct hard_iface *hard_iface)
        }
 }
 
-static void update_transtable(struct bat_priv *bat_priv,
-                             struct orig_node *orig_node,
-                             const unsigned char *tt_buff,
-                             uint8_t tt_num_changes, uint8_t ttvn,
-                             uint16_t tt_crc)
-{
-       uint8_t orig_ttvn = (uint8_t)atomic_read(&orig_node->last_ttvn);
-       bool full_table = true;
-
-       /* the ttvn increased by one -> we can apply the attached changes */
-       if (ttvn - orig_ttvn == 1) {
-               /* the OGM could not contain the changes due to their size or
-                * because they have already been sent TT_OGM_APPEND_MAX times.
-                * In this case send a tt request */
-               if (!tt_num_changes) {
-                       full_table = false;
-                       goto request_table;
-               }
-
-               tt_update_changes(bat_priv, orig_node, tt_num_changes, ttvn,
-                                 (struct tt_change *)tt_buff);
-
-               /* Even if we received the precomputed crc with the OGM, we
-                * prefer to recompute it to spot any possible inconsistency
-                * in the global table */
-               orig_node->tt_crc = tt_global_crc(bat_priv, orig_node);
-
-               /* The ttvn alone is not enough to guarantee consistency
-                * because a single value could represent different states
-                * (due to the wrap around). Thus a node has to check whether
-                * the resulting table (after applying the changes) is still
-                * consistent or not. E.g. a node could disconnect while its
-                * ttvn is X and reconnect on ttvn = X + TTVN_MAX: in this case
-                * checking the CRC value is mandatory to detect the
-                * inconsistency */
-               if (orig_node->tt_crc != tt_crc)
-                       goto request_table;
-
-               /* Roaming phase is over: tables are in sync again. I can
-                * unset the flag */
-               orig_node->tt_poss_change = false;
-       } else {
-               /* if we missed more than one change or our tables are not
-                * in sync anymore -> request fresh tt data */
-               if (ttvn != orig_ttvn || orig_node->tt_crc != tt_crc) {
-request_table:
-                       bat_dbg(DBG_TT, bat_priv, "TT inconsistency for %pM. "
-                               "Need to retrieve the correct information "
-                               "(ttvn: %u last_ttvn: %u crc: %u last_crc: "
-                               "%u num_changes: %u)\n", orig_node->orig, ttvn,
-                               orig_ttvn, tt_crc, orig_node->tt_crc,
-                               tt_num_changes);
-                       send_tt_request(bat_priv, orig_node, ttvn, tt_crc,
-                                       full_table);
-                       return;
-               }
-       }
-}
-
 static void update_route(struct bat_priv *bat_priv,
                         struct orig_node *orig_node,
                         struct neigh_node *neigh_node)
@@ -499,10 +440,9 @@ update_tt:
        if (((batman_packet->orig != ethhdr->h_source) &&
                                (batman_packet->ttl > 2)) ||
                                (batman_packet->flags & PRIMARIES_FIRST_HOP))
-               update_transtable(bat_priv, orig_node, tt_buff,
-                                 batman_packet->tt_num_changes,
-                                 batman_packet->ttvn,
-                                 batman_packet->tt_crc);
+               tt_update_orig(bat_priv, orig_node, tt_buff,
+                              batman_packet->tt_num_changes,
+                              batman_packet->ttvn, batman_packet->tt_crc);
 
        if (orig_node->gw_flags != batman_packet->gw_flags)
                gw_node_update(bat_priv, orig_node, batman_packet->gw_flags);
index e8f849f6b5b7e7322db5773dc74d0e6adc14133e..cc53f78e448ce41de460d09e0782d8250db8ef13 100644 (file)
@@ -1079,8 +1079,9 @@ out:
        return skb;
 }
 
-int send_tt_request(struct bat_priv *bat_priv, struct orig_node *dst_orig_node,
-                   uint8_t ttvn, uint16_t tt_crc, bool full_table)
+static int send_tt_request(struct bat_priv *bat_priv,
+                          struct orig_node *dst_orig_node,
+                          uint8_t ttvn, uint16_t tt_crc, bool full_table)
 {
        struct sk_buff *skb = NULL;
        struct tt_query_packet *tt_request;
@@ -1455,9 +1456,10 @@ out:
                orig_node_free_ref(orig_node);
 }
 
-void tt_update_changes(struct bat_priv *bat_priv, struct orig_node *orig_node,
-                      uint16_t tt_num_changes, uint8_t ttvn,
-                      struct tt_change *tt_change)
+static void tt_update_changes(struct bat_priv *bat_priv,
+                             struct orig_node *orig_node,
+                             uint16_t tt_num_changes, uint8_t ttvn,
+                             struct tt_change *tt_change)
 {
        _tt_update_changes(bat_priv, orig_node, tt_change, tt_num_changes,
                           ttvn);
@@ -1802,3 +1804,60 @@ out:
                tt_local_entry_free_ref(tt_local_entry);
        return ret;
 }
+
+void tt_update_orig(struct bat_priv *bat_priv, struct orig_node *orig_node,
+                   const unsigned char *tt_buff, uint8_t tt_num_changes,
+                   uint8_t ttvn, uint16_t tt_crc)
+{
+       uint8_t orig_ttvn = (uint8_t)atomic_read(&orig_node->last_ttvn);
+       bool full_table = true;
+
+       /* the ttvn increased by one -> we can apply the attached changes */
+       if (ttvn - orig_ttvn == 1) {
+               /* the OGM could not contain the changes due to their size or
+                * because they have already been sent TT_OGM_APPEND_MAX times.
+                * In this case send a tt request */
+               if (!tt_num_changes) {
+                       full_table = false;
+                       goto request_table;
+               }
+
+               tt_update_changes(bat_priv, orig_node, tt_num_changes, ttvn,
+                                 (struct tt_change *)tt_buff);
+
+               /* Even if we received the precomputed crc with the OGM, we
+                * prefer to recompute it to spot any possible inconsistency
+                * in the global table */
+               orig_node->tt_crc = tt_global_crc(bat_priv, orig_node);
+
+               /* The ttvn alone is not enough to guarantee consistency
+                * because a single value could represent different states
+                * (due to the wrap around). Thus a node has to check whether
+                * the resulting table (after applying the changes) is still
+                * consistent or not. E.g. a node could disconnect while its
+                * ttvn is X and reconnect on ttvn = X + TTVN_MAX: in this case
+                * checking the CRC value is mandatory to detect the
+                * inconsistency */
+               if (orig_node->tt_crc != tt_crc)
+                       goto request_table;
+
+               /* Roaming phase is over: tables are in sync again. I can
+                * unset the flag */
+               orig_node->tt_poss_change = false;
+       } else {
+               /* if we missed more than one change or our tables are not
+                * in sync anymore -> request fresh tt data */
+               if (ttvn != orig_ttvn || orig_node->tt_crc != tt_crc) {
+request_table:
+                       bat_dbg(DBG_TT, bat_priv, "TT inconsistency for %pM. "
+                               "Need to retrieve the correct information "
+                               "(ttvn: %u last_ttvn: %u crc: %u last_crc: "
+                               "%u num_changes: %u)\n", orig_node->orig, ttvn,
+                               orig_ttvn, tt_crc, orig_node->tt_crc,
+                               tt_num_changes);
+                       send_tt_request(bat_priv, orig_node, ttvn, tt_crc,
+                                       full_table);
+                       return;
+               }
+       }
+}
index b47e8760b76b84e3ce6ccbc44a69f8d9a067c23f..30efd49881a3a2ec518eca4c9939dbbd51af4230 100644 (file)
@@ -49,14 +49,8 @@ void tt_save_orig_buffer(struct bat_priv *bat_priv, struct orig_node *orig_node,
 uint16_t tt_local_crc(struct bat_priv *bat_priv);
 uint16_t tt_global_crc(struct bat_priv *bat_priv, struct orig_node *orig_node);
 void tt_free(struct bat_priv *bat_priv);
-int send_tt_request(struct bat_priv *bat_priv,
-                   struct orig_node *dst_orig_node, uint8_t ttvn,
-                   uint16_t tt_crc, bool full_table);
 bool send_tt_response(struct bat_priv *bat_priv,
                      struct tt_query_packet *tt_request);
-void tt_update_changes(struct bat_priv *bat_priv, struct orig_node *orig_node,
-                      uint16_t tt_num_changes, uint8_t ttvn,
-                      struct tt_change *tt_change);
 bool is_my_client(struct bat_priv *bat_priv, const uint8_t *addr);
 void handle_tt_response(struct bat_priv *bat_priv,
                        struct tt_query_packet *tt_response);
@@ -64,5 +58,8 @@ void send_roam_adv(struct bat_priv *bat_priv, uint8_t *client,
                   struct orig_node *orig_node);
 void tt_commit_changes(struct bat_priv *bat_priv);
 bool is_ap_isolated(struct bat_priv *bat_priv, uint8_t *src, uint8_t *dst);
+void tt_update_orig(struct bat_priv *bat_priv, struct orig_node *orig_node,
+                   const unsigned char *tt_buff, uint8_t tt_num_changes,
+                   uint8_t ttvn, uint16_t tt_crc);
 
 #endif /* _NET_BATMAN_ADV_TRANSLATION_TABLE_H_ */