batman-adv: split tq information in neigh_node struct
For the network wide multi interface optimization it is required to save metrics per outgoing interface in one neighbor. Therefore a new type is introduced to keep interface-specific information. This also requires some changes in access and list management. The compare and equiv_or_better API calls are changed to take the outgoing interface into consideration. Signed-off-by: Simon Wunderlich <simon@open-mesh.com> Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch> Signed-off-by: Antonio Quartulli <antonio@meshcoding.com>
This commit is contained in:

committed by
Antonio Quartulli

parent
f6c8b71173
commit
89652331c0
@@ -1008,6 +1008,8 @@ static bool batadv_nc_code_packets(struct batadv_priv *bat_priv,
|
||||
struct batadv_coded_packet *coded_packet;
|
||||
struct batadv_neigh_node *neigh_tmp, *router_neigh;
|
||||
struct batadv_neigh_node *router_coding = NULL;
|
||||
struct batadv_neigh_ifinfo *router_neigh_ifinfo = NULL;
|
||||
struct batadv_neigh_ifinfo *router_coding_ifinfo = NULL;
|
||||
uint8_t *first_source, *first_dest, *second_source, *second_dest;
|
||||
__be32 packet_id1, packet_id2;
|
||||
size_t count;
|
||||
@@ -1021,15 +1023,25 @@ static bool batadv_nc_code_packets(struct batadv_priv *bat_priv,
|
||||
if (!router_neigh)
|
||||
goto out;
|
||||
|
||||
router_neigh_ifinfo = batadv_neigh_ifinfo_get(router_neigh,
|
||||
BATADV_IF_DEFAULT);
|
||||
if (!router_neigh_ifinfo)
|
||||
goto out;
|
||||
|
||||
neigh_tmp = nc_packet->neigh_node;
|
||||
router_coding = batadv_orig_node_get_router(neigh_tmp->orig_node);
|
||||
if (!router_coding)
|
||||
goto out;
|
||||
|
||||
tq_tmp = batadv_nc_random_weight_tq(router_neigh->bat_iv.tq_avg);
|
||||
tq_weighted_neigh = tq_tmp;
|
||||
tq_tmp = batadv_nc_random_weight_tq(router_coding->bat_iv.tq_avg);
|
||||
tq_weighted_coding = tq_tmp;
|
||||
router_coding_ifinfo = batadv_neigh_ifinfo_get(router_coding,
|
||||
BATADV_IF_DEFAULT);
|
||||
if (!router_coding_ifinfo)
|
||||
goto out;
|
||||
|
||||
tq_tmp = router_neigh_ifinfo->bat_iv.tq_avg;
|
||||
tq_weighted_neigh = batadv_nc_random_weight_tq(tq_tmp);
|
||||
tq_tmp = router_coding_ifinfo->bat_iv.tq_avg;
|
||||
tq_weighted_coding = batadv_nc_random_weight_tq(tq_tmp);
|
||||
|
||||
/* Select one destination for the MAC-header dst-field based on
|
||||
* weighted TQ-values.
|
||||
@@ -1153,6 +1165,10 @@ out:
|
||||
batadv_neigh_node_free_ref(router_neigh);
|
||||
if (router_coding)
|
||||
batadv_neigh_node_free_ref(router_coding);
|
||||
if (router_neigh_ifinfo)
|
||||
batadv_neigh_ifinfo_free_ref(router_neigh_ifinfo);
|
||||
if (router_coding_ifinfo)
|
||||
batadv_neigh_ifinfo_free_ref(router_coding_ifinfo);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user