batman-adv: split tq information in neigh_node struct
[firefly-linux-kernel-4.4.55.git] / net / batman-adv / network-coding.c
index d6f0be346a3d115f11df6007b653e49de09bb454..aec3fa56402756222cc82a93eac20d296d22bb71 100644 (file)
@@ -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;
 }