[1/2] batman-adv: fix neigh_node multiif regression in network coding

Message ID 1385121727-12847-1-git-send-email-sw@simonwunderlich.de (mailing list archive)
State Accepted, archived
Commit cb7ec5ff60a05ebecd141e87b4d544b82738b46d
Headers

Commit Message

Simon Wunderlich Nov. 22, 2013, 12:02 p.m. UTC
  From: Simon Wunderlich <simon@open-mesh.com>

A previous commit for the multi interface optimization did not
change the member access for neigh_node to their respective new ifinfo
structures for the network coding implementation.

This was introduced by change 9bb33b8d88e318c4879d37d06ad28e3e018b9036
("batman-adv: split tq information in neigh_node struct")

Signed-off-by: Simon Wunderlich <simon@open-mesh.com>
---
 network-coding.c |   24 ++++++++++++++++++++----
 1 file changed, 20 insertions(+), 4 deletions(-)
  

Comments

Marek Lindner Nov. 23, 2013, 4:33 p.m. UTC | #1
On Friday 22 November 2013 13:02:06 Simon Wunderlich wrote:
> From: Simon Wunderlich <simon@open-mesh.com>
> 
> A previous commit for the multi interface optimization did not
> change the member access for neigh_node to their respective new ifinfo
> structures for the network coding implementation.
> 
> This was introduced by change 9bb33b8d88e318c4879d37d06ad28e3e018b9036
> ("batman-adv: split tq information in neigh_node struct")
> 
> Signed-off-by: Simon Wunderlich <simon@open-mesh.com>
> ---
>  network-coding.c |   24 ++++++++++++++++++++----
>  1 file changed, 20 insertions(+), 4 deletions(-)

Applied in revision cb7ec5f.

Thanks,
Marek
  

Patch

diff --git a/network-coding.c b/network-coding.c
index 0b35e9e..8678448 100644
--- a/network-coding.c
+++ b/network-coding.c
@@ -1005,6 +1005,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;
@@ -1022,16 +1024,26 @@  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_router_get(neigh_tmp->orig_node,
 					       BATADV_IF_DEFAULT);
 	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.
@@ -1155,6 +1167,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;
 }