Merge tag 'batman-adv-for-davem' of git://git.open-mesh.org/linux-merge
This commit is contained in:
commit
0695512a57
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
|
# Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
|
||||||
#
|
#
|
||||||
# Marek Lindner, Simon Wunderlich
|
# Marek Lindner, Simon Wunderlich
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2011-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner
|
* Marek Lindner
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2010-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2010-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner
|
* Marek Lindner
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2010-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2010-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner
|
* Marek Lindner
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner, Simon Wunderlich
|
* Marek Lindner, Simon Wunderlich
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2010-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2010-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner
|
* Marek Lindner
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2010-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2010-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner
|
* Marek Lindner
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2006-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2006-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Simon Wunderlich, Marek Lindner
|
* Simon Wunderlich, Marek Lindner
|
||||||
*
|
*
|
||||||
|
@ -154,8 +154,8 @@ int bit_get_packet(void *priv, unsigned long *seq_bits,
|
||||||
|
|
||||||
/* sequence number is much newer, probably missed a lot of packets */
|
/* sequence number is much newer, probably missed a lot of packets */
|
||||||
|
|
||||||
if ((seq_num_diff >= TQ_LOCAL_WINDOW_SIZE)
|
if ((seq_num_diff >= TQ_LOCAL_WINDOW_SIZE) &&
|
||||||
&& (seq_num_diff < EXPECTED_SEQNO_RANGE)) {
|
(seq_num_diff < EXPECTED_SEQNO_RANGE)) {
|
||||||
bat_dbg(DBG_BATMAN, bat_priv,
|
bat_dbg(DBG_BATMAN, bat_priv,
|
||||||
"We missed a lot of packets (%i) !\n",
|
"We missed a lot of packets (%i) !\n",
|
||||||
seq_num_diff - 1);
|
seq_num_diff - 1);
|
||||||
|
@ -170,8 +170,8 @@ int bit_get_packet(void *priv, unsigned long *seq_bits,
|
||||||
* packet should be dropped without calling this function if the
|
* packet should be dropped without calling this function if the
|
||||||
* seqno window is protected. */
|
* seqno window is protected. */
|
||||||
|
|
||||||
if ((seq_num_diff <= -TQ_LOCAL_WINDOW_SIZE)
|
if ((seq_num_diff <= -TQ_LOCAL_WINDOW_SIZE) ||
|
||||||
|| (seq_num_diff >= EXPECTED_SEQNO_RANGE)) {
|
(seq_num_diff >= EXPECTED_SEQNO_RANGE)) {
|
||||||
|
|
||||||
bat_dbg(DBG_BATMAN, bat_priv,
|
bat_dbg(DBG_BATMAN, bat_priv,
|
||||||
"Other host probably restarted!\n");
|
"Other host probably restarted!\n");
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2006-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2006-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Simon Wunderlich, Marek Lindner
|
* Simon Wunderlich, Marek Lindner
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2009-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2009-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner
|
* Marek Lindner
|
||||||
*
|
*
|
||||||
|
@ -396,7 +396,7 @@ void gw_node_purge(struct bat_priv *bat_priv)
|
||||||
{
|
{
|
||||||
struct gw_node *gw_node, *curr_gw;
|
struct gw_node *gw_node, *curr_gw;
|
||||||
struct hlist_node *node, *node_tmp;
|
struct hlist_node *node, *node_tmp;
|
||||||
unsigned long timeout = 2 * PURGE_TIMEOUT * HZ;
|
unsigned long timeout = msecs_to_jiffies(2 * PURGE_TIMEOUT);
|
||||||
int do_deselect = 0;
|
int do_deselect = 0;
|
||||||
|
|
||||||
curr_gw = gw_get_selected_gw_node(bat_priv);
|
curr_gw = gw_get_selected_gw_node(bat_priv);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2009-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2009-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner
|
* Marek Lindner
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2009-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2009-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner
|
* Marek Lindner
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2009-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2009-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner
|
* Marek Lindner
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner, Simon Wunderlich
|
* Marek Lindner, Simon Wunderlich
|
||||||
*
|
*
|
||||||
|
@ -353,9 +353,9 @@ int hardif_enable_interface(struct hard_iface *hard_iface,
|
||||||
ETH_DATA_LEN + BAT_HEADER_LEN)
|
ETH_DATA_LEN + BAT_HEADER_LEN)
|
||||||
bat_info(hard_iface->soft_iface,
|
bat_info(hard_iface->soft_iface,
|
||||||
"The MTU of interface %s is too small (%i) to handle "
|
"The MTU of interface %s is too small (%i) to handle "
|
||||||
"the transport of batman-adv packets. If you experience"
|
"the transport of batman-adv packets. If you "
|
||||||
" problems getting traffic through try increasing the "
|
"experience problems getting traffic through try "
|
||||||
"MTU to %zi.\n",
|
"increasing the MTU to %zi.\n",
|
||||||
hard_iface->net_dev->name, hard_iface->net_dev->mtu,
|
hard_iface->net_dev->name, hard_iface->net_dev->mtu,
|
||||||
ETH_DATA_LEN + BAT_HEADER_LEN);
|
ETH_DATA_LEN + BAT_HEADER_LEN);
|
||||||
|
|
||||||
|
@ -580,8 +580,8 @@ static int batman_skb_recv(struct sk_buff *skb, struct net_device *dev,
|
||||||
goto err_free;
|
goto err_free;
|
||||||
|
|
||||||
/* expect a valid ethernet header here. */
|
/* expect a valid ethernet header here. */
|
||||||
if (unlikely(skb->mac_len != sizeof(struct ethhdr)
|
if (unlikely(skb->mac_len != sizeof(struct ethhdr) ||
|
||||||
|| !skb_mac_header(skb)))
|
!skb_mac_header(skb)))
|
||||||
goto err_free;
|
goto err_free;
|
||||||
|
|
||||||
if (!hard_iface->soft_iface)
|
if (!hard_iface->soft_iface)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner, Simon Wunderlich
|
* Marek Lindner, Simon Wunderlich
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2006-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2006-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Simon Wunderlich, Marek Lindner
|
* Simon Wunderlich, Marek Lindner
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2006-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2006-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Simon Wunderlich, Marek Lindner
|
* Simon Wunderlich, Marek Lindner
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner
|
* Marek Lindner
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner
|
* Marek Lindner
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner, Simon Wunderlich
|
* Marek Lindner, Simon Wunderlich
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner, Simon Wunderlich
|
* Marek Lindner, Simon Wunderlich
|
||||||
*
|
*
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
#define DRIVER_DEVICE "batman-adv"
|
#define DRIVER_DEVICE "batman-adv"
|
||||||
|
|
||||||
#ifndef SOURCE_VERSION
|
#ifndef SOURCE_VERSION
|
||||||
#define SOURCE_VERSION "2012.0.0"
|
#define SOURCE_VERSION "2012.1.0"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* B.A.T.M.A.N. parameters */
|
/* B.A.T.M.A.N. parameters */
|
||||||
|
@ -41,13 +41,14 @@
|
||||||
|
|
||||||
/* purge originators after time in seconds if no valid packet comes in
|
/* purge originators after time in seconds if no valid packet comes in
|
||||||
* -> TODO: check influence on TQ_LOCAL_WINDOW_SIZE */
|
* -> TODO: check influence on TQ_LOCAL_WINDOW_SIZE */
|
||||||
#define PURGE_TIMEOUT 200
|
#define PURGE_TIMEOUT 200000 /* 200 seconds */
|
||||||
#define TT_LOCAL_TIMEOUT 3600 /* in seconds */
|
#define TT_LOCAL_TIMEOUT 3600000 /* in miliseconds */
|
||||||
#define TT_CLIENT_ROAM_TIMEOUT 600
|
#define TT_CLIENT_ROAM_TIMEOUT 600000 /* in miliseconds */
|
||||||
/* sliding packet range of received originator messages in sequence numbers
|
/* sliding packet range of received originator messages in sequence numbers
|
||||||
* (should be a multiple of our word size) */
|
* (should be a multiple of our word size) */
|
||||||
#define TQ_LOCAL_WINDOW_SIZE 64
|
#define TQ_LOCAL_WINDOW_SIZE 64
|
||||||
#define TT_REQUEST_TIMEOUT 3 /* seconds we have to keep pending tt_req */
|
#define TT_REQUEST_TIMEOUT 3000 /* miliseconds we have to keep
|
||||||
|
* pending tt_req */
|
||||||
|
|
||||||
#define TQ_GLOBAL_WINDOW_SIZE 5
|
#define TQ_GLOBAL_WINDOW_SIZE 5
|
||||||
#define TQ_LOCAL_BIDRECT_SEND_MINIMUM 1
|
#define TQ_LOCAL_BIDRECT_SEND_MINIMUM 1
|
||||||
|
@ -56,8 +57,8 @@
|
||||||
|
|
||||||
#define TT_OGM_APPEND_MAX 3 /* number of OGMs sent with the last tt diff */
|
#define TT_OGM_APPEND_MAX 3 /* number of OGMs sent with the last tt diff */
|
||||||
|
|
||||||
#define ROAMING_MAX_TIME 20 /* Time in which a client can roam at most
|
#define ROAMING_MAX_TIME 20000 /* Time in which a client can roam at most
|
||||||
* ROAMING_MAX_COUNT times */
|
* ROAMING_MAX_COUNT times in miliseconds*/
|
||||||
#define ROAMING_MAX_COUNT 5
|
#define ROAMING_MAX_COUNT 5
|
||||||
|
|
||||||
#define NO_FLAGS 0
|
#define NO_FLAGS 0
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2009-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2009-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner, Simon Wunderlich
|
* Marek Lindner, Simon Wunderlich
|
||||||
*
|
*
|
||||||
|
@ -282,8 +282,7 @@ static bool purge_orig_neighbors(struct bat_priv *bat_priv,
|
||||||
hlist_for_each_entry_safe(neigh_node, node, node_tmp,
|
hlist_for_each_entry_safe(neigh_node, node, node_tmp,
|
||||||
&orig_node->neigh_list, list) {
|
&orig_node->neigh_list, list) {
|
||||||
|
|
||||||
if ((time_after(jiffies,
|
if ((has_timed_out(neigh_node->last_valid, PURGE_TIMEOUT)) ||
|
||||||
neigh_node->last_valid + PURGE_TIMEOUT * HZ)) ||
|
|
||||||
(neigh_node->if_incoming->if_status == IF_INACTIVE) ||
|
(neigh_node->if_incoming->if_status == IF_INACTIVE) ||
|
||||||
(neigh_node->if_incoming->if_status == IF_NOT_IN_USE) ||
|
(neigh_node->if_incoming->if_status == IF_NOT_IN_USE) ||
|
||||||
(neigh_node->if_incoming->if_status == IF_TO_BE_REMOVED)) {
|
(neigh_node->if_incoming->if_status == IF_TO_BE_REMOVED)) {
|
||||||
|
@ -327,19 +326,16 @@ static bool purge_orig_node(struct bat_priv *bat_priv,
|
||||||
{
|
{
|
||||||
struct neigh_node *best_neigh_node;
|
struct neigh_node *best_neigh_node;
|
||||||
|
|
||||||
if (time_after(jiffies,
|
if (has_timed_out(orig_node->last_valid, 2 * PURGE_TIMEOUT)) {
|
||||||
orig_node->last_valid + 2 * PURGE_TIMEOUT * HZ)) {
|
|
||||||
|
|
||||||
bat_dbg(DBG_BATMAN, bat_priv,
|
bat_dbg(DBG_BATMAN, bat_priv,
|
||||||
"Originator timeout: originator %pM, last_valid %lu\n",
|
"Originator timeout: originator %pM, last_valid %lu\n",
|
||||||
orig_node->orig, (orig_node->last_valid / HZ));
|
orig_node->orig, (orig_node->last_valid / HZ));
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
if (purge_orig_neighbors(bat_priv, orig_node,
|
if (purge_orig_neighbors(bat_priv, orig_node,
|
||||||
&best_neigh_node)) {
|
&best_neigh_node))
|
||||||
update_route(bat_priv, orig_node, best_neigh_node);
|
update_route(bat_priv, orig_node, best_neigh_node);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -372,8 +368,8 @@ static void _purge_orig(struct bat_priv *bat_priv)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (time_after(jiffies, orig_node->last_frag_packet +
|
if (has_timed_out(orig_node->last_frag_packet,
|
||||||
msecs_to_jiffies(FRAG_TIMEOUT)))
|
FRAG_TIMEOUT))
|
||||||
frag_list_free(&orig_node->frag_list);
|
frag_list_free(&orig_node->frag_list);
|
||||||
}
|
}
|
||||||
spin_unlock_bh(list_lock);
|
spin_unlock_bh(list_lock);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner, Simon Wunderlich
|
* Marek Lindner, Simon Wunderlich
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner, Simon Wunderlich
|
* Marek Lindner, Simon Wunderlich
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner
|
* Marek Lindner
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner
|
* Marek Lindner
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner, Simon Wunderlich
|
* Marek Lindner, Simon Wunderlich
|
||||||
*
|
*
|
||||||
|
@ -229,10 +229,9 @@ void bonding_save_primary(const struct orig_node *orig_node,
|
||||||
int window_protected(struct bat_priv *bat_priv, int32_t seq_num_diff,
|
int window_protected(struct bat_priv *bat_priv, int32_t seq_num_diff,
|
||||||
unsigned long *last_reset)
|
unsigned long *last_reset)
|
||||||
{
|
{
|
||||||
if ((seq_num_diff <= -TQ_LOCAL_WINDOW_SIZE)
|
if ((seq_num_diff <= -TQ_LOCAL_WINDOW_SIZE) ||
|
||||||
|| (seq_num_diff >= EXPECTED_SEQNO_RANGE)) {
|
(seq_num_diff >= EXPECTED_SEQNO_RANGE)) {
|
||||||
if (time_after(jiffies, *last_reset +
|
if (has_timed_out(*last_reset, RESET_PROTECTION_MS)) {
|
||||||
msecs_to_jiffies(RESET_PROTECTION_MS))) {
|
|
||||||
|
|
||||||
*last_reset = jiffies;
|
*last_reset = jiffies;
|
||||||
bat_dbg(DBG_BATMAN, bat_priv,
|
bat_dbg(DBG_BATMAN, bat_priv,
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner, Simon Wunderlich
|
* Marek Lindner, Simon Wunderlich
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner, Simon Wunderlich
|
* Marek Lindner, Simon Wunderlich
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner, Simon Wunderlich
|
* Marek Lindner, Simon Wunderlich
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner, Simon Wunderlich
|
* Marek Lindner, Simon Wunderlich
|
||||||
*
|
*
|
||||||
|
@ -396,8 +396,8 @@ void softif_neigh_purge(struct bat_priv *bat_priv)
|
||||||
hlist_for_each_entry_safe(softif_neigh, node_tmp, node_tmp2,
|
hlist_for_each_entry_safe(softif_neigh, node_tmp, node_tmp2,
|
||||||
&softif_neigh_vid->softif_neigh_list,
|
&softif_neigh_vid->softif_neigh_list,
|
||||||
list) {
|
list) {
|
||||||
if ((!time_after(jiffies, softif_neigh->last_seen +
|
if ((!has_timed_out(softif_neigh->last_seen,
|
||||||
msecs_to_jiffies(SOFTIF_NEIGH_TIMEOUT))) &&
|
SOFTIF_NEIGH_TIMEOUT)) &&
|
||||||
(atomic_read(&bat_priv->mesh_state) == MESH_ACTIVE))
|
(atomic_read(&bat_priv->mesh_state) == MESH_ACTIVE))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner
|
* Marek Lindner
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner, Simon Wunderlich
|
* Marek Lindner, Simon Wunderlich
|
||||||
*
|
*
|
||||||
|
@ -210,6 +210,11 @@ void tt_local_add(struct net_device *soft_iface, const uint8_t *addr,
|
||||||
if (compare_eth(addr, soft_iface->dev_addr))
|
if (compare_eth(addr, soft_iface->dev_addr))
|
||||||
tt_local_entry->common.flags |= TT_CLIENT_NOPURGE;
|
tt_local_entry->common.flags |= TT_CLIENT_NOPURGE;
|
||||||
|
|
||||||
|
/* The local entry has to be marked as NEW to avoid to send it in
|
||||||
|
* a full table response going out before the next ttvn increment
|
||||||
|
* (consistency check) */
|
||||||
|
tt_local_entry->common.flags |= TT_CLIENT_NEW;
|
||||||
|
|
||||||
hash_added = hash_add(bat_priv->tt_local_hash, compare_tt, choose_orig,
|
hash_added = hash_add(bat_priv->tt_local_hash, compare_tt, choose_orig,
|
||||||
&tt_local_entry->common,
|
&tt_local_entry->common,
|
||||||
&tt_local_entry->common.hash_entry);
|
&tt_local_entry->common.hash_entry);
|
||||||
|
@ -222,11 +227,6 @@ void tt_local_add(struct net_device *soft_iface, const uint8_t *addr,
|
||||||
|
|
||||||
tt_local_event(bat_priv, addr, tt_local_entry->common.flags);
|
tt_local_event(bat_priv, addr, tt_local_entry->common.flags);
|
||||||
|
|
||||||
/* The local entry has to be marked as NEW to avoid to send it in
|
|
||||||
* a full table response going out before the next ttvn increment
|
|
||||||
* (consistency check) */
|
|
||||||
tt_local_entry->common.flags |= TT_CLIENT_NEW;
|
|
||||||
|
|
||||||
/* remove address from global hash if present */
|
/* remove address from global hash if present */
|
||||||
tt_global_entry = tt_global_hash_find(bat_priv, addr);
|
tt_global_entry = tt_global_hash_find(bat_priv, addr);
|
||||||
|
|
||||||
|
@ -355,7 +355,7 @@ out:
|
||||||
|
|
||||||
static void tt_local_set_pending(struct bat_priv *bat_priv,
|
static void tt_local_set_pending(struct bat_priv *bat_priv,
|
||||||
struct tt_local_entry *tt_local_entry,
|
struct tt_local_entry *tt_local_entry,
|
||||||
uint16_t flags)
|
uint16_t flags, const char *message)
|
||||||
{
|
{
|
||||||
tt_local_event(bat_priv, tt_local_entry->common.addr,
|
tt_local_event(bat_priv, tt_local_entry->common.addr,
|
||||||
tt_local_entry->common.flags | flags);
|
tt_local_entry->common.flags | flags);
|
||||||
|
@ -364,6 +364,9 @@ static void tt_local_set_pending(struct bat_priv *bat_priv,
|
||||||
* to be kept in the table in order to send it in a full table
|
* to be kept in the table in order to send it in a full table
|
||||||
* response issued before the net ttvn increment (consistency check) */
|
* response issued before the net ttvn increment (consistency check) */
|
||||||
tt_local_entry->common.flags |= TT_CLIENT_PENDING;
|
tt_local_entry->common.flags |= TT_CLIENT_PENDING;
|
||||||
|
|
||||||
|
bat_dbg(DBG_TT, bat_priv, "Local tt entry (%pM) pending to be removed: "
|
||||||
|
"%s\n", tt_local_entry->common.addr, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tt_local_remove(struct bat_priv *bat_priv, const uint8_t *addr,
|
void tt_local_remove(struct bat_priv *bat_priv, const uint8_t *addr,
|
||||||
|
@ -376,10 +379,7 @@ void tt_local_remove(struct bat_priv *bat_priv, const uint8_t *addr,
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
tt_local_set_pending(bat_priv, tt_local_entry, TT_CLIENT_DEL |
|
tt_local_set_pending(bat_priv, tt_local_entry, TT_CLIENT_DEL |
|
||||||
(roaming ? TT_CLIENT_ROAM : NO_FLAGS));
|
(roaming ? TT_CLIENT_ROAM : NO_FLAGS), message);
|
||||||
|
|
||||||
bat_dbg(DBG_TT, bat_priv, "Local tt entry (%pM) pending to be removed: "
|
|
||||||
"%s\n", tt_local_entry->common.addr, message);
|
|
||||||
out:
|
out:
|
||||||
if (tt_local_entry)
|
if (tt_local_entry)
|
||||||
tt_local_entry_free_ref(tt_local_entry);
|
tt_local_entry_free_ref(tt_local_entry);
|
||||||
|
@ -413,14 +413,11 @@ static void tt_local_purge(struct bat_priv *bat_priv)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!has_timed_out(tt_local_entry->last_seen,
|
if (!has_timed_out(tt_local_entry->last_seen,
|
||||||
TT_LOCAL_TIMEOUT * 1000))
|
TT_LOCAL_TIMEOUT))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
tt_local_set_pending(bat_priv, tt_local_entry,
|
tt_local_set_pending(bat_priv, tt_local_entry,
|
||||||
TT_CLIENT_DEL);
|
TT_CLIENT_DEL, "timed out");
|
||||||
bat_dbg(DBG_TT, bat_priv, "Local tt entry (%pM) "
|
|
||||||
"pending to be removed: timed out\n",
|
|
||||||
tt_local_entry->common.addr);
|
|
||||||
}
|
}
|
||||||
spin_unlock_bh(list_lock);
|
spin_unlock_bh(list_lock);
|
||||||
}
|
}
|
||||||
|
@ -606,7 +603,7 @@ int tt_global_seq_print_text(struct seq_file *seq, void *offset)
|
||||||
struct tt_global_entry,
|
struct tt_global_entry,
|
||||||
common);
|
common);
|
||||||
seq_printf(seq, " * %pM (%3u) via %pM (%3u) "
|
seq_printf(seq, " * %pM (%3u) via %pM (%3u) "
|
||||||
"[%c%c%c]\n",
|
"[%c%c]\n",
|
||||||
tt_global_entry->common.addr,
|
tt_global_entry->common.addr,
|
||||||
tt_global_entry->ttvn,
|
tt_global_entry->ttvn,
|
||||||
tt_global_entry->orig_node->orig,
|
tt_global_entry->orig_node->orig,
|
||||||
|
@ -615,8 +612,6 @@ int tt_global_seq_print_text(struct seq_file *seq, void *offset)
|
||||||
last_ttvn),
|
last_ttvn),
|
||||||
(tt_global_entry->common.flags &
|
(tt_global_entry->common.flags &
|
||||||
TT_CLIENT_ROAM ? 'R' : '.'),
|
TT_CLIENT_ROAM ? 'R' : '.'),
|
||||||
(tt_global_entry->common.flags &
|
|
||||||
TT_CLIENT_PENDING ? 'X' : '.'),
|
|
||||||
(tt_global_entry->common.flags &
|
(tt_global_entry->common.flags &
|
||||||
TT_CLIENT_WIFI ? 'W' : '.'));
|
TT_CLIENT_WIFI ? 'W' : '.'));
|
||||||
}
|
}
|
||||||
|
@ -657,11 +652,12 @@ void tt_global_del(struct bat_priv *bat_priv,
|
||||||
struct tt_local_entry *tt_local_entry = NULL;
|
struct tt_local_entry *tt_local_entry = NULL;
|
||||||
|
|
||||||
tt_global_entry = tt_global_hash_find(bat_priv, addr);
|
tt_global_entry = tt_global_hash_find(bat_priv, addr);
|
||||||
if (!tt_global_entry)
|
if (!tt_global_entry || tt_global_entry->orig_node != orig_node)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
if (tt_global_entry->orig_node == orig_node) {
|
if (!roaming)
|
||||||
if (roaming) {
|
goto out_del;
|
||||||
|
|
||||||
/* if we are deleting a global entry due to a roam
|
/* if we are deleting a global entry due to a roam
|
||||||
* event, there are two possibilities:
|
* event, there are two possibilities:
|
||||||
* 1) the client roamed from node A to node B => we mark
|
* 1) the client roamed from node A to node B => we mark
|
||||||
|
@ -677,9 +673,10 @@ void tt_global_del(struct bat_priv *bat_priv,
|
||||||
tt_global_entry->roam_at = jiffies;
|
tt_global_entry->roam_at = jiffies;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
out_del:
|
||||||
_tt_global_del(bat_priv, tt_global_entry, message);
|
_tt_global_del(bat_priv, tt_global_entry, message);
|
||||||
}
|
|
||||||
out:
|
out:
|
||||||
if (tt_global_entry)
|
if (tt_global_entry)
|
||||||
tt_global_entry_free_ref(tt_global_entry);
|
tt_global_entry_free_ref(tt_global_entry);
|
||||||
|
@ -751,7 +748,7 @@ static void tt_global_roam_purge(struct bat_priv *bat_priv)
|
||||||
if (!(tt_global_entry->common.flags & TT_CLIENT_ROAM))
|
if (!(tt_global_entry->common.flags & TT_CLIENT_ROAM))
|
||||||
continue;
|
continue;
|
||||||
if (!has_timed_out(tt_global_entry->roam_at,
|
if (!has_timed_out(tt_global_entry->roam_at,
|
||||||
TT_CLIENT_ROAM_TIMEOUT * 1000))
|
TT_CLIENT_ROAM_TIMEOUT))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
bat_dbg(DBG_TT, bat_priv, "Deleting global "
|
bat_dbg(DBG_TT, bat_priv, "Deleting global "
|
||||||
|
@ -839,11 +836,6 @@ struct orig_node *transtable_search(struct bat_priv *bat_priv,
|
||||||
if (!atomic_inc_not_zero(&tt_global_entry->orig_node->refcount))
|
if (!atomic_inc_not_zero(&tt_global_entry->orig_node->refcount))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
/* A global client marked as PENDING has already moved from that
|
|
||||||
* originator */
|
|
||||||
if (tt_global_entry->common.flags & TT_CLIENT_PENDING)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
orig_node = tt_global_entry->orig_node;
|
orig_node = tt_global_entry->orig_node;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
@ -970,8 +962,7 @@ static void tt_req_purge(struct bat_priv *bat_priv)
|
||||||
|
|
||||||
spin_lock_bh(&bat_priv->tt_req_list_lock);
|
spin_lock_bh(&bat_priv->tt_req_list_lock);
|
||||||
list_for_each_entry_safe(node, safe, &bat_priv->tt_req_list, list) {
|
list_for_each_entry_safe(node, safe, &bat_priv->tt_req_list, list) {
|
||||||
if (has_timed_out(node->issued_at,
|
if (has_timed_out(node->issued_at, TT_REQUEST_TIMEOUT)) {
|
||||||
TT_REQUEST_TIMEOUT * 1000)) {
|
|
||||||
list_del(&node->list);
|
list_del(&node->list);
|
||||||
kfree(node);
|
kfree(node);
|
||||||
}
|
}
|
||||||
|
@ -990,7 +981,7 @@ static struct tt_req_node *new_tt_req_node(struct bat_priv *bat_priv,
|
||||||
list_for_each_entry(tt_req_node_tmp, &bat_priv->tt_req_list, list) {
|
list_for_each_entry(tt_req_node_tmp, &bat_priv->tt_req_list, list) {
|
||||||
if (compare_eth(tt_req_node_tmp, orig_node) &&
|
if (compare_eth(tt_req_node_tmp, orig_node) &&
|
||||||
!has_timed_out(tt_req_node_tmp->issued_at,
|
!has_timed_out(tt_req_node_tmp->issued_at,
|
||||||
TT_REQUEST_TIMEOUT * 1000))
|
TT_REQUEST_TIMEOUT))
|
||||||
goto unlock;
|
goto unlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1583,8 +1574,7 @@ static void tt_roam_purge(struct bat_priv *bat_priv)
|
||||||
|
|
||||||
spin_lock_bh(&bat_priv->tt_roam_list_lock);
|
spin_lock_bh(&bat_priv->tt_roam_list_lock);
|
||||||
list_for_each_entry_safe(node, safe, &bat_priv->tt_roam_list, list) {
|
list_for_each_entry_safe(node, safe, &bat_priv->tt_roam_list, list) {
|
||||||
if (!has_timed_out(node->first_time,
|
if (!has_timed_out(node->first_time, ROAMING_MAX_TIME))
|
||||||
ROAMING_MAX_TIME * 1000))
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
list_del(&node->list);
|
list_del(&node->list);
|
||||||
|
@ -1611,8 +1601,7 @@ static bool tt_check_roam_count(struct bat_priv *bat_priv,
|
||||||
if (!compare_eth(tt_roam_node->addr, client))
|
if (!compare_eth(tt_roam_node->addr, client))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (has_timed_out(tt_roam_node->first_time,
|
if (has_timed_out(tt_roam_node->first_time, ROAMING_MAX_TIME))
|
||||||
ROAMING_MAX_TIME * 1000))
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!atomic_dec_not_zero(&tt_roam_node->counter))
|
if (!atomic_dec_not_zero(&tt_roam_node->counter))
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner, Simon Wunderlich
|
* Marek Lindner, Simon Wunderlich
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Marek Lindner, Simon Wunderlich
|
* Marek Lindner, Simon Wunderlich
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2010-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2010-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Andreas Langer
|
* Andreas Langer
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2010-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2010-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Andreas Langer
|
* Andreas Langer
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2008-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2008-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Simon Wunderlich
|
* Simon Wunderlich
|
||||||
*
|
*
|
||||||
|
@ -714,8 +714,7 @@ static void purge_vis_packets(struct bat_priv *bat_priv)
|
||||||
if (info == bat_priv->my_vis_info)
|
if (info == bat_priv->my_vis_info)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (time_after(jiffies,
|
if (has_timed_out(info->first_seen, VIS_TIMEOUT)) {
|
||||||
info->first_seen + VIS_TIMEOUT * HZ)) {
|
|
||||||
hlist_del(node);
|
hlist_del(node);
|
||||||
send_list_del(info);
|
send_list_del(info);
|
||||||
kref_put(&info->refcount, free_info);
|
kref_put(&info->refcount, free_info);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2008-2011 B.A.T.M.A.N. contributors:
|
* Copyright (C) 2008-2012 B.A.T.M.A.N. contributors:
|
||||||
*
|
*
|
||||||
* Simon Wunderlich, Marek Lindner
|
* Simon Wunderlich, Marek Lindner
|
||||||
*
|
*
|
||||||
|
@ -22,7 +22,8 @@
|
||||||
#ifndef _NET_BATMAN_ADV_VIS_H_
|
#ifndef _NET_BATMAN_ADV_VIS_H_
|
||||||
#define _NET_BATMAN_ADV_VIS_H_
|
#define _NET_BATMAN_ADV_VIS_H_
|
||||||
|
|
||||||
#define VIS_TIMEOUT 200 /* timeout of vis packets in seconds */
|
#define VIS_TIMEOUT 200000 /* timeout of vis packets
|
||||||
|
* in miliseconds */
|
||||||
|
|
||||||
int vis_seq_print_text(struct seq_file *seq, void *offset);
|
int vis_seq_print_text(struct seq_file *seq, void *offset);
|
||||||
void receive_server_sync_packet(struct bat_priv *bat_priv,
|
void receive_server_sync_packet(struct bat_priv *bat_priv,
|
||||||
|
|
Loading…
Reference in a new issue