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

Message ID 1385121727-12847-2-git-send-email-sw@simonwunderlich.de (mailing list archive)
State Accepted, archived
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 orig_node to their respective new ifinfo
structures for the network coding implementation.

This was introduced by change de6bcc76ea84fecb136f8c8f5ba1862e4a13f06b
("batman-adv: split out router from orig_node")

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

Comments

Marek Lindner Nov. 23, 2013, 4:35 p.m. UTC | #1
On Friday 22 November 2013 13:02:07 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 orig_node to their respective new ifinfo
> structures for the network coding implementation.
> 
> This was introduced by change de6bcc76ea84fecb136f8c8f5ba1862e4a13f06b
> ("batman-adv: split out router from orig_node")
> 
> Signed-off-by: Simon Wunderlich <simon@open-mesh.com>
> ---
>  network-coding.c |   16 ++++++++++++++--
>  1 file changed, 14 insertions(+), 2 deletions(-)

Applied in revision d078de3.

Thanks,
Marek
  

Patch

diff --git a/network-coding.c b/network-coding.c
index 8678448..b2fde56 100644
--- a/network-coding.c
+++ b/network-coding.c
@@ -715,9 +715,21 @@  static bool batadv_can_nc_with_orig(struct batadv_priv *bat_priv,
 				    struct batadv_orig_node *orig_node,
 				    struct batadv_ogm_packet *ogm_packet)
 {
-	if (orig_node->last_real_seqno != ntohl(ogm_packet->seqno))
+	struct batadv_orig_ifinfo *orig_ifinfo;
+	uint32_t last_real_seqno;
+	uint8_t last_ttl;
+
+	orig_ifinfo = batadv_orig_ifinfo_get(orig_node, BATADV_IF_DEFAULT);
+	if (!orig_ifinfo)
 		return false;
-	if (orig_node->last_ttl != ogm_packet->header.ttl + 1)
+
+	last_ttl = orig_ifinfo->last_ttl;
+	last_real_seqno = orig_ifinfo->last_real_seqno;
+	batadv_orig_ifinfo_free_ref(orig_ifinfo);
+
+	if (last_real_seqno != ntohl(ogm_packet->seqno))
+		return false;
+	if (last_ttl != ogm_packet->header.ttl + 1)
 		return false;
 	if (!batadv_compare_eth(ogm_packet->orig, ogm_packet->prev_sender))
 		return false;