[2/2] batman-adv: skip the window protection test when the originator has no neighbours
Commit Message
When we receive an OGM from from a node for the first time, the last_real_seqno
field of the orig_node structure has not been initialised yet. The value of this
field is used to compute the current ogm-seqno window and therefore the
protection mechanism will probably drop the packet due to an out-of-window error.
To avoid this situation this patch adds a check to skip the window protection
mechanism if no neighbour nodes have already been added. When the first
neighbour node is added, the last_real_seqno field is initialised too.
Reported-by: Marek Lindner <lindner_marek@yahoo.de>
Signed-off-by: Antonio Quartulli <ordex@autistici.org>
---
bat_iv_ogm.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
Comments
On 02/26/2012 03:39 PM, Antonio Quartulli wrote:
> When we receive an OGM from from a node for the first time, the last_real_seqno
> field of the orig_node structure has not been initialised yet. The value of this
> field is used to compute the current ogm-seqno window and therefore the
> protection mechanism will probably drop the packet due to an out-of-window error.
> To avoid this situation this patch adds a check to skip the window protection
> mechanism if no neighbour nodes have already been added. When the first
> neighbour node is added, the last_real_seqno field is initialised too.
>
> Reported-by: Marek Lindner<lindner_marek@yahoo.de>
> Signed-off-by: Antonio Quartulli<ordex@autistici.org>
> ---
> bat_iv_ogm.c | 3 ++-
> 1 files changed, 2 insertions(+), 1 deletions(-)
>
> diff --git a/bat_iv_ogm.c b/bat_iv_ogm.c
> index c42e030..d9195b3 100644
> --- a/bat_iv_ogm.c
> +++ b/bat_iv_ogm.c
> @@ -869,7 +869,8 @@ static int bat_iv_ogm_update_seqnos(const struct ethhdr *ethhdr,
> seq_diff = batman_ogm_packet->seqno - orig_node->last_real_seqno;
>
> /* signalize caller that the packet is to be dropped. */
> - if (window_protected(bat_priv, seq_diff,
> + if (!hlist_empty(&orig_node->neigh_list)&&
> + window_protected(bat_priv, seq_diff,
> &orig_node->batman_seqno_reset))
> goto out;
>
Tested this and originators now appear within 3 seconds after being added to the mesh network. Good work, Antonio and Marek!
On Sunday, February 26, 2012 22:39:42 Antonio Quartulli wrote:
> When we receive an OGM from from a node for the first time, the
> last_real_seqno field of the orig_node structure has not been initialised
> yet. The value of this field is used to compute the current ogm-seqno
> window and therefore the protection mechanism will probably drop the
> packet due to an out-of-window error. To avoid this situation this patch
> adds a check to skip the window protection mechanism if no neighbour nodes
> have already been added. When the first neighbour node is added, the
> last_real_seqno field is initialised too.
Applied in revision a85b0bc.
Thanks,
Marek
@@ -869,7 +869,8 @@ static int bat_iv_ogm_update_seqnos(const struct ethhdr *ethhdr,
seq_diff = batman_ogm_packet->seqno - orig_node->last_real_seqno;
/* signalize caller that the packet is to be dropped. */
- if (window_protected(bat_priv, seq_diff,
+ if (!hlist_empty(&orig_node->neigh_list) &&
+ window_protected(bat_priv, seq_diff,
&orig_node->batman_seqno_reset))
goto out;