aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/batman-adv/bat_algo.h4
-rw-r--r--net/batman-adv/bat_debugfs.c4
-rw-r--r--net/batman-adv/bat_debugfs.h5
-rw-r--r--net/batman-adv/bat_iv_ogm.c75
-rw-r--r--net/batman-adv/bat_sysfs.c13
-rw-r--r--net/batman-adv/bat_sysfs.h5
-rw-r--r--net/batman-adv/bitarray.c17
-rw-r--r--net/batman-adv/bitarray.h10
-rw-r--r--net/batman-adv/bridge_loop_avoidance.c67
-rw-r--r--net/batman-adv/bridge_loop_avoidance.h4
-rw-r--r--net/batman-adv/gateway_client.c41
-rw-r--r--net/batman-adv/gateway_client.h4
-rw-r--r--net/batman-adv/gateway_common.c9
-rw-r--r--net/batman-adv/gateway_common.h4
-rw-r--r--net/batman-adv/hard-interface.c23
-rw-r--r--net/batman-adv/hard-interface.h4
-rw-r--r--net/batman-adv/hash.c4
-rw-r--r--net/batman-adv/hash.h24
-rw-r--r--net/batman-adv/icmp_socket.c7
-rw-r--r--net/batman-adv/icmp_socket.h4
-rw-r--r--net/batman-adv/main.c10
-rw-r--r--net/batman-adv/main.h38
-rw-r--r--net/batman-adv/originator.c13
-rw-r--r--net/batman-adv/originator.h9
-rw-r--r--net/batman-adv/packet.h21
-rw-r--r--net/batman-adv/ring_buffer.c4
-rw-r--r--net/batman-adv/ring_buffer.h4
-rw-r--r--net/batman-adv/routing.c67
-rw-r--r--net/batman-adv/routing.h4
-rw-r--r--net/batman-adv/send.c32
-rw-r--r--net/batman-adv/send.h4
-rw-r--r--net/batman-adv/soft-interface.c27
-rw-r--r--net/batman-adv/soft-interface.h4
-rw-r--r--net/batman-adv/translation-table.c78
-rw-r--r--net/batman-adv/translation-table.h4
-rw-r--r--net/batman-adv/types.h29
-rw-r--r--net/batman-adv/unicast.c10
-rw-r--r--net/batman-adv/unicast.h4
-rw-r--r--net/batman-adv/vis.c39
-rw-r--r--net/batman-adv/vis.h8
40 files changed, 349 insertions, 388 deletions
diff --git a/net/batman-adv/bat_algo.h b/net/batman-adv/bat_algo.h
index a14336a08fac..a0ba3bff9b36 100644
--- a/net/batman-adv/bat_algo.h
+++ b/net/batman-adv/bat_algo.h
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2011-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2011-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner 3 * Marek Lindner
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#ifndef _NET_BATMAN_ADV_BAT_ALGO_H_ 20#ifndef _NET_BATMAN_ADV_BAT_ALGO_H_
diff --git a/net/batman-adv/bat_debugfs.c b/net/batman-adv/bat_debugfs.c
index 3900624d333d..4001c57a25e4 100644
--- a/net/batman-adv/bat_debugfs.c
+++ b/net/batman-adv/bat_debugfs.c
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2010-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2010-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner 3 * Marek Lindner
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#include "main.h" 20#include "main.h"
diff --git a/net/batman-adv/bat_debugfs.h b/net/batman-adv/bat_debugfs.h
index 3b206c811263..eb0d576b4f9d 100644
--- a/net/batman-adv/bat_debugfs.h
+++ b/net/batman-adv/bat_debugfs.h
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2010-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2010-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner 3 * Marek Lindner
5 * 4 *
@@ -16,10 +15,8 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22
23#ifndef _NET_BATMAN_ADV_DEBUGFS_H_ 20#ifndef _NET_BATMAN_ADV_DEBUGFS_H_
24#define _NET_BATMAN_ADV_DEBUGFS_H_ 21#define _NET_BATMAN_ADV_DEBUGFS_H_
25 22
diff --git a/net/batman-adv/bat_iv_ogm.c b/net/batman-adv/bat_iv_ogm.c
index 0430063d3a7d..94859d45ed6e 100644
--- a/net/batman-adv/bat_iv_ogm.c
+++ b/net/batman-adv/bat_iv_ogm.c
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner, Simon Wunderlich 3 * Marek Lindner, Simon Wunderlich
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#include "main.h" 20#include "main.h"
@@ -170,7 +168,8 @@ static void bat_iv_ogm_send_to_if(struct forw_packet *forw_packet,
170 batman_ogm_packet->tt_num_changes)) { 168 batman_ogm_packet->tt_num_changes)) {
171 169
172 /* we might have aggregated direct link packets with an 170 /* we might have aggregated direct link packets with an
173 * ordinary base packet */ 171 * ordinary base packet
172 */
174 if ((forw_packet->direct_link_flags & (1 << packet_num)) && 173 if ((forw_packet->direct_link_flags & (1 << packet_num)) &&
175 (forw_packet->if_incoming == hard_iface)) 174 (forw_packet->if_incoming == hard_iface))
176 batman_ogm_packet->flags |= DIRECTLINK; 175 batman_ogm_packet->flags |= DIRECTLINK;
@@ -237,8 +236,9 @@ static void bat_iv_ogm_emit(struct forw_packet *forw_packet)
237 if (!primary_if) 236 if (!primary_if)
238 goto out; 237 goto out;
239 238
240 /* multihomed peer assumed */ 239 /* multihomed peer assumed
241 /* non-primary OGMs are only broadcasted on their interface */ 240 * non-primary OGMs are only broadcasted on their interface
241 */
242 if ((directlink && (batman_ogm_packet->header.ttl == 1)) || 242 if ((directlink && (batman_ogm_packet->header.ttl == 1)) ||
243 (forw_packet->own && (forw_packet->if_incoming != primary_if))) { 243 (forw_packet->own && (forw_packet->if_incoming != primary_if))) {
244 244
@@ -292,41 +292,39 @@ static bool bat_iv_ogm_can_aggregate(const struct batman_ogm_packet
292 292
293 batman_ogm_packet = (struct batman_ogm_packet *)forw_packet->skb->data; 293 batman_ogm_packet = (struct batman_ogm_packet *)forw_packet->skb->data;
294 294
295 /** 295 /* we can aggregate the current packet to this aggregated packet
296 * we can aggregate the current packet to this aggregated packet
297 * if: 296 * if:
298 * 297 *
299 * - the send time is within our MAX_AGGREGATION_MS time 298 * - the send time is within our MAX_AGGREGATION_MS time
300 * - the resulting packet wont be bigger than 299 * - the resulting packet wont be bigger than
301 * MAX_AGGREGATION_BYTES 300 * MAX_AGGREGATION_BYTES
302 */ 301 */
303
304 if (time_before(send_time, forw_packet->send_time) && 302 if (time_before(send_time, forw_packet->send_time) &&
305 time_after_eq(send_time + msecs_to_jiffies(MAX_AGGREGATION_MS), 303 time_after_eq(send_time + msecs_to_jiffies(MAX_AGGREGATION_MS),
306 forw_packet->send_time) && 304 forw_packet->send_time) &&
307 (aggregated_bytes <= MAX_AGGREGATION_BYTES)) { 305 (aggregated_bytes <= MAX_AGGREGATION_BYTES)) {
308 306
309 /** 307 /* check aggregation compatibility
310 * check aggregation compatibility
311 * -> direct link packets are broadcasted on 308 * -> direct link packets are broadcasted on
312 * their interface only 309 * their interface only
313 * -> aggregate packet if the current packet is 310 * -> aggregate packet if the current packet is
314 * a "global" packet as well as the base 311 * a "global" packet as well as the base
315 * packet 312 * packet
316 */ 313 */
317
318 primary_if = primary_if_get_selected(bat_priv); 314 primary_if = primary_if_get_selected(bat_priv);
319 if (!primary_if) 315 if (!primary_if)
320 goto out; 316 goto out;
321 317
322 /* packets without direct link flag and high TTL 318 /* packets without direct link flag and high TTL
323 * are flooded through the net */ 319 * are flooded through the net
320 */
324 if ((!directlink) && 321 if ((!directlink) &&
325 (!(batman_ogm_packet->flags & DIRECTLINK)) && 322 (!(batman_ogm_packet->flags & DIRECTLINK)) &&
326 (batman_ogm_packet->header.ttl != 1) && 323 (batman_ogm_packet->header.ttl != 1) &&
327 324
328 /* own packets originating non-primary 325 /* own packets originating non-primary
329 * interfaces leave only that interface */ 326 * interfaces leave only that interface
327 */
330 ((!forw_packet->own) || 328 ((!forw_packet->own) ||
331 (forw_packet->if_incoming == primary_if))) { 329 (forw_packet->if_incoming == primary_if))) {
332 res = true; 330 res = true;
@@ -334,14 +332,16 @@ static bool bat_iv_ogm_can_aggregate(const struct batman_ogm_packet
334 } 332 }
335 333
336 /* if the incoming packet is sent via this one 334 /* if the incoming packet is sent via this one
337 * interface only - we still can aggregate */ 335 * interface only - we still can aggregate
336 */
338 if ((directlink) && 337 if ((directlink) &&
339 (new_batman_ogm_packet->header.ttl == 1) && 338 (new_batman_ogm_packet->header.ttl == 1) &&
340 (forw_packet->if_incoming == if_incoming) && 339 (forw_packet->if_incoming == if_incoming) &&
341 340
342 /* packets from direct neighbors or 341 /* packets from direct neighbors or
343 * own secondary interface packets 342 * own secondary interface packets
344 * (= secondary interface packets in general) */ 343 * (= secondary interface packets in general)
344 */
345 (batman_ogm_packet->flags & DIRECTLINK || 345 (batman_ogm_packet->flags & DIRECTLINK ||
346 (forw_packet->own && 346 (forw_packet->own &&
347 forw_packet->if_incoming != primary_if))) { 347 forw_packet->if_incoming != primary_if))) {
@@ -457,8 +457,7 @@ static void bat_iv_ogm_queue_add(struct bat_priv *bat_priv,
457 int packet_len, struct hard_iface *if_incoming, 457 int packet_len, struct hard_iface *if_incoming,
458 int own_packet, unsigned long send_time) 458 int own_packet, unsigned long send_time)
459{ 459{
460 /** 460 /* _aggr -> pointer to the packet we want to aggregate with
461 * _aggr -> pointer to the packet we want to aggregate with
462 * _pos -> pointer to the position in the queue 461 * _pos -> pointer to the position in the queue
463 */ 462 */
464 struct forw_packet *forw_packet_aggr = NULL, *forw_packet_pos = NULL; 463 struct forw_packet *forw_packet_aggr = NULL, *forw_packet_pos = NULL;
@@ -487,13 +486,13 @@ static void bat_iv_ogm_queue_add(struct bat_priv *bat_priv,
487 } 486 }
488 487
489 /* nothing to aggregate with - either aggregation disabled or no 488 /* nothing to aggregate with - either aggregation disabled or no
490 * suitable aggregation packet found */ 489 * suitable aggregation packet found
490 */
491 if (!forw_packet_aggr) { 491 if (!forw_packet_aggr) {
492 /* the following section can run without the lock */ 492 /* the following section can run without the lock */
493 spin_unlock_bh(&bat_priv->forw_bat_list_lock); 493 spin_unlock_bh(&bat_priv->forw_bat_list_lock);
494 494
495 /** 495 /* if we could not aggregate this packet with one of the others
496 * if we could not aggregate this packet with one of the others
497 * we hold it back for a while, so that it might be aggregated 496 * we hold it back for a while, so that it might be aggregated
498 * later on 497 * later on
499 */ 498 */
@@ -691,7 +690,8 @@ static void bat_iv_ogm_orig_update(struct bat_priv *bat_priv,
691 batadv_bonding_candidate_add(orig_node, neigh_node); 690 batadv_bonding_candidate_add(orig_node, neigh_node);
692 691
693 /* if this neighbor already is our next hop there is nothing 692 /* if this neighbor already is our next hop there is nothing
694 * to change */ 693 * to change
694 */
695 router = batadv_orig_node_get_router(orig_node); 695 router = batadv_orig_node_get_router(orig_node);
696 if (router == neigh_node) 696 if (router == neigh_node)
697 goto update_tt; 697 goto update_tt;
@@ -701,7 +701,8 @@ static void bat_iv_ogm_orig_update(struct bat_priv *bat_priv,
701 goto update_tt; 701 goto update_tt;
702 702
703 /* if the TQ is the same and the link not more symmetric we 703 /* if the TQ is the same and the link not more symmetric we
704 * won't consider it either */ 704 * won't consider it either
705 */
705 if (router && (neigh_node->tq_avg == router->tq_avg)) { 706 if (router && (neigh_node->tq_avg == router->tq_avg)) {
706 orig_node_tmp = router->orig_node; 707 orig_node_tmp = router->orig_node;
707 spin_lock_bh(&orig_node_tmp->ogm_cnt_lock); 708 spin_lock_bh(&orig_node_tmp->ogm_cnt_lock);
@@ -723,7 +724,8 @@ static void bat_iv_ogm_orig_update(struct bat_priv *bat_priv,
723 724
724update_tt: 725update_tt:
725 /* I have to check for transtable changes only if the OGM has been 726 /* I have to check for transtable changes only if the OGM has been
726 * sent through a primary interface */ 727 * sent through a primary interface
728 */
727 if (((batman_ogm_packet->orig != ethhdr->h_source) && 729 if (((batman_ogm_packet->orig != ethhdr->h_source) &&
728 (batman_ogm_packet->header.ttl > 2)) || 730 (batman_ogm_packet->header.ttl > 2)) ||
729 (batman_ogm_packet->flags & PRIMARIES_FIRST_HOP)) 731 (batman_ogm_packet->flags & PRIMARIES_FIRST_HOP))
@@ -812,15 +814,17 @@ static int bat_iv_ogm_calc_tq(struct orig_node *orig_node,
812 total_count = (orig_eq_count > neigh_rq_count ? 814 total_count = (orig_eq_count > neigh_rq_count ?
813 neigh_rq_count : orig_eq_count); 815 neigh_rq_count : orig_eq_count);
814 816
815 /* if we have too few packets (too less data) we set tq_own to zero */ 817 /* if we have too few packets (too less data) we set tq_own to zero
816 /* if we receive too few packets it is not considered bidirectional */ 818 * if we receive too few packets it is not considered bidirectional
819 */
817 if ((total_count < TQ_LOCAL_BIDRECT_SEND_MINIMUM) || 820 if ((total_count < TQ_LOCAL_BIDRECT_SEND_MINIMUM) ||
818 (neigh_rq_count < TQ_LOCAL_BIDRECT_RECV_MINIMUM)) 821 (neigh_rq_count < TQ_LOCAL_BIDRECT_RECV_MINIMUM))
819 tq_own = 0; 822 tq_own = 0;
820 else 823 else
821 /* neigh_node->real_packet_count is never zero as we 824 /* neigh_node->real_packet_count is never zero as we
822 * only purge old information when getting new 825 * only purge old information when getting new
823 * information */ 826 * information
827 */
824 tq_own = (TQ_MAX_VALUE * total_count) / neigh_rq_count; 828 tq_own = (TQ_MAX_VALUE * total_count) / neigh_rq_count;
825 829
826 /* 1 - ((1-x) ** 3), normalized to TQ_MAX_VALUE this does 830 /* 1 - ((1-x) ** 3), normalized to TQ_MAX_VALUE this does
@@ -846,7 +850,8 @@ static int bat_iv_ogm_calc_tq(struct orig_node *orig_node,
846 neigh_rq_count, tq_own, tq_asym_penalty, batman_ogm_packet->tq); 850 neigh_rq_count, tq_own, tq_asym_penalty, batman_ogm_packet->tq);
847 851
848 /* if link has the minimum required transmission quality 852 /* if link has the minimum required transmission quality
849 * consider it bidirectional */ 853 * consider it bidirectional
854 */
850 if (batman_ogm_packet->tq >= TQ_TOTAL_BIDRECT_LIMIT) 855 if (batman_ogm_packet->tq >= TQ_TOTAL_BIDRECT_LIMIT)
851 ret = 1; 856 ret = 1;
852 857
@@ -1039,8 +1044,9 @@ static void bat_iv_ogm_process(const struct ethhdr *ethhdr,
1039 return; 1044 return;
1040 1045
1041 /* neighbor has to indicate direct link and it has to 1046 /* neighbor has to indicate direct link and it has to
1042 * come via the corresponding interface */ 1047 * come via the corresponding interface
1043 /* save packet seqno for bidirectional check */ 1048 * save packet seqno for bidirectional check
1049 */
1044 if (has_directlink_flag && 1050 if (has_directlink_flag &&
1045 compare_eth(if_incoming->net_dev->dev_addr, 1051 compare_eth(if_incoming->net_dev->dev_addr,
1046 batman_ogm_packet->orig)) { 1052 batman_ogm_packet->orig)) {
@@ -1117,7 +1123,8 @@ static void bat_iv_ogm_process(const struct ethhdr *ethhdr,
1117 } 1123 }
1118 1124
1119 /* if sender is a direct neighbor the sender mac equals 1125 /* if sender is a direct neighbor the sender mac equals
1120 * originator mac */ 1126 * originator mac
1127 */
1121 orig_neigh_node = (is_single_hop_neigh ? 1128 orig_neigh_node = (is_single_hop_neigh ?
1122 orig_node : 1129 orig_node :
1123 batadv_get_orig_node(bat_priv, ethhdr->h_source)); 1130 batadv_get_orig_node(bat_priv, ethhdr->h_source));
@@ -1127,7 +1134,8 @@ static void bat_iv_ogm_process(const struct ethhdr *ethhdr,
1127 orig_neigh_router = batadv_orig_node_get_router(orig_neigh_node); 1134 orig_neigh_router = batadv_orig_node_get_router(orig_neigh_node);
1128 1135
1129 /* drop packet if sender is not a direct neighbor and if we 1136 /* drop packet if sender is not a direct neighbor and if we
1130 * don't route towards it */ 1137 * don't route towards it
1138 */
1131 if (!is_single_hop_neigh && (!orig_neigh_router)) { 1139 if (!is_single_hop_neigh && (!orig_neigh_router)) {
1132 bat_dbg(DBG_BATMAN, bat_priv, 1140 bat_dbg(DBG_BATMAN, bat_priv,
1133 "Drop packet: OGM via unknown neighbor!\n"); 1141 "Drop packet: OGM via unknown neighbor!\n");
@@ -1141,7 +1149,8 @@ static void bat_iv_ogm_process(const struct ethhdr *ethhdr,
1141 batman_ogm_packet); 1149 batman_ogm_packet);
1142 1150
1143 /* update ranking if it is not a duplicate or has the same 1151 /* update ranking if it is not a duplicate or has the same
1144 * seqno and similar ttl as the non-duplicate */ 1152 * seqno and similar ttl as the non-duplicate
1153 */
1145 if (is_bidirectional && 1154 if (is_bidirectional &&
1146 (!is_duplicate || 1155 (!is_duplicate ||
1147 ((orig_node->last_real_seqno == ntohl(batman_ogm_packet->seqno)) && 1156 ((orig_node->last_real_seqno == ntohl(batman_ogm_packet->seqno)) &&
diff --git a/net/batman-adv/bat_sysfs.c b/net/batman-adv/bat_sysfs.c
index 5a7b042873e1..8196fa6ff22e 100644
--- a/net/batman-adv/bat_sysfs.c
+++ b/net/batman-adv/bat_sysfs.c
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2010-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2010-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner 3 * Marek Lindner
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#include "main.h" 20#include "main.h"
@@ -84,7 +82,8 @@ ssize_t show_##_name(struct kobject *kobj, \
84} \ 82} \
85 83
86/* Use this, if you are going to turn a [name] in the soft-interface 84/* Use this, if you are going to turn a [name] in the soft-interface
87 * (bat_priv) on or off */ 85 * (bat_priv) on or off
86 */
88#define BAT_ATTR_SIF_BOOL(_name, _mode, _post_func) \ 87#define BAT_ATTR_SIF_BOOL(_name, _mode, _post_func) \
89 static BAT_ATTR_SIF_STORE_BOOL(_name, _post_func) \ 88 static BAT_ATTR_SIF_STORE_BOOL(_name, _post_func) \
90 static BAT_ATTR_SIF_SHOW_BOOL(_name) \ 89 static BAT_ATTR_SIF_SHOW_BOOL(_name) \
@@ -110,7 +109,8 @@ ssize_t show_##_name(struct kobject *kobj, \
110} \ 109} \
111 110
112/* Use this, if you are going to set [name] in the soft-interface 111/* Use this, if you are going to set [name] in the soft-interface
113 * (bat_priv) to an unsigned integer value */ 112 * (bat_priv) to an unsigned integer value
113 */
114#define BAT_ATTR_SIF_UINT(_name, _mode, _min, _max, _post_func) \ 114#define BAT_ATTR_SIF_UINT(_name, _mode, _min, _max, _post_func) \
115 static BAT_ATTR_SIF_STORE_UINT(_name, _min, _max, _post_func) \ 115 static BAT_ATTR_SIF_STORE_UINT(_name, _min, _max, _post_func) \
116 static BAT_ATTR_SIF_SHOW_UINT(_name) \ 116 static BAT_ATTR_SIF_SHOW_UINT(_name) \
@@ -155,7 +155,8 @@ ssize_t show_##_name(struct kobject *kobj, \
155} 155}
156 156
157/* Use this, if you are going to set [name] in hard_iface to an 157/* Use this, if you are going to set [name] in hard_iface to an
158 * unsigned integer value*/ 158 * unsigned integer value
159 */
159#define BAT_ATTR_HIF_UINT(_name, _mode, _min, _max, _post_func) \ 160#define BAT_ATTR_HIF_UINT(_name, _mode, _min, _max, _post_func) \
160 static BAT_ATTR_HIF_STORE_UINT(_name, _min, _max, _post_func) \ 161 static BAT_ATTR_HIF_STORE_UINT(_name, _min, _max, _post_func) \
161 static BAT_ATTR_HIF_SHOW_UINT(_name) \ 162 static BAT_ATTR_HIF_SHOW_UINT(_name) \
diff --git a/net/batman-adv/bat_sysfs.h b/net/batman-adv/bat_sysfs.h
index f01aea836b98..367227707d52 100644
--- a/net/batman-adv/bat_sysfs.h
+++ b/net/batman-adv/bat_sysfs.h
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2010-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2010-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner 3 * Marek Lindner
5 * 4 *
@@ -16,10 +15,8 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22
23#ifndef _NET_BATMAN_ADV_SYSFS_H_ 20#ifndef _NET_BATMAN_ADV_SYSFS_H_
24#define _NET_BATMAN_ADV_SYSFS_H_ 21#define _NET_BATMAN_ADV_SYSFS_H_
25 22
diff --git a/net/batman-adv/bitarray.c b/net/batman-adv/bitarray.c
index 99ed9917ff0d..838abbc73c6c 100644
--- a/net/batman-adv/bitarray.c
+++ b/net/batman-adv/bitarray.c
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2006-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2006-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Simon Wunderlich, Marek Lindner 3 * Simon Wunderlich, Marek Lindner
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#include "main.h" 20#include "main.h"
@@ -46,8 +44,8 @@ int batadv_bit_get_packet(void *priv, unsigned long *seq_bits,
46 struct bat_priv *bat_priv = priv; 44 struct bat_priv *bat_priv = priv;
47 45
48 /* sequence number is slightly older. We already got a sequence number 46 /* sequence number is slightly older. We already got a sequence number
49 * higher than this one, so we just mark it. */ 47 * higher than this one, so we just mark it.
50 48 */
51 if ((seq_num_diff <= 0) && (seq_num_diff > -TQ_LOCAL_WINDOW_SIZE)) { 49 if ((seq_num_diff <= 0) && (seq_num_diff > -TQ_LOCAL_WINDOW_SIZE)) {
52 if (set_mark) 50 if (set_mark)
53 bat_set_bit(seq_bits, -seq_num_diff); 51 bat_set_bit(seq_bits, -seq_num_diff);
@@ -55,8 +53,8 @@ int batadv_bit_get_packet(void *priv, unsigned long *seq_bits,
55 } 53 }
56 54
57 /* sequence number is slightly newer, so we shift the window and 55 /* sequence number is slightly newer, so we shift the window and
58 * set the mark if required */ 56 * set the mark if required
59 57 */
60 if ((seq_num_diff > 0) && (seq_num_diff < TQ_LOCAL_WINDOW_SIZE)) { 58 if ((seq_num_diff > 0) && (seq_num_diff < TQ_LOCAL_WINDOW_SIZE)) {
61 batadv_bitmap_shift_left(seq_bits, seq_num_diff); 59 batadv_bitmap_shift_left(seq_bits, seq_num_diff);
62 60
@@ -66,7 +64,6 @@ int batadv_bit_get_packet(void *priv, unsigned long *seq_bits,
66 } 64 }
67 65
68 /* sequence number is much newer, probably missed a lot of packets */ 66 /* sequence number is much newer, probably missed a lot of packets */
69
70 if ((seq_num_diff >= TQ_LOCAL_WINDOW_SIZE) && 67 if ((seq_num_diff >= TQ_LOCAL_WINDOW_SIZE) &&
71 (seq_num_diff < EXPECTED_SEQNO_RANGE)) { 68 (seq_num_diff < EXPECTED_SEQNO_RANGE)) {
72 bat_dbg(DBG_BATMAN, bat_priv, 69 bat_dbg(DBG_BATMAN, bat_priv,
@@ -81,8 +78,8 @@ int batadv_bit_get_packet(void *priv, unsigned long *seq_bits,
81 /* received a much older packet. The other host either restarted 78 /* received a much older packet. The other host either restarted
82 * or the old packet got delayed somewhere in the network. The 79 * or the old packet got delayed somewhere in the network. The
83 * packet should be dropped without calling this function if the 80 * packet should be dropped without calling this function if the
84 * seqno window is protected. */ 81 * seqno window is protected.
85 82 */
86 if ((seq_num_diff <= -TQ_LOCAL_WINDOW_SIZE) || 83 if ((seq_num_diff <= -TQ_LOCAL_WINDOW_SIZE) ||
87 (seq_num_diff >= EXPECTED_SEQNO_RANGE)) { 84 (seq_num_diff >= EXPECTED_SEQNO_RANGE)) {
88 85
diff --git a/net/batman-adv/bitarray.h b/net/batman-adv/bitarray.h
index e855ddd37430..8ab542632343 100644
--- a/net/batman-adv/bitarray.h
+++ b/net/batman-adv/bitarray.h
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2006-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2006-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Simon Wunderlich, Marek Lindner 3 * Simon Wunderlich, Marek Lindner
5 * 4 *
@@ -16,14 +15,14 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#ifndef _NET_BATMAN_ADV_BITARRAY_H_ 20#ifndef _NET_BATMAN_ADV_BITARRAY_H_
23#define _NET_BATMAN_ADV_BITARRAY_H_ 21#define _NET_BATMAN_ADV_BITARRAY_H_
24 22
25/* returns true if the corresponding bit in the given seq_bits indicates true 23/* returns true if the corresponding bit in the given seq_bits indicates true
26 * and curr_seqno is within range of last_seqno */ 24 * and curr_seqno is within range of last_seqno
25 */
27static inline int bat_test_bit(const unsigned long *seq_bits, 26static inline int bat_test_bit(const unsigned long *seq_bits,
28 uint32_t last_seqno, uint32_t curr_seqno) 27 uint32_t last_seqno, uint32_t curr_seqno)
29{ 28{
@@ -47,7 +46,8 @@ static inline void bat_set_bit(unsigned long *seq_bits, int32_t n)
47} 46}
48 47
49/* receive and process one packet, returns 1 if received seq_num is considered 48/* receive and process one packet, returns 1 if received seq_num is considered
50 * new, 0 if old */ 49 * new, 0 if old
50 */
51int batadv_bit_get_packet(void *priv, unsigned long *seq_bits, 51int batadv_bit_get_packet(void *priv, unsigned long *seq_bits,
52 int32_t seq_num_diff, int set_mark); 52 int32_t seq_num_diff, int set_mark);
53 53
diff --git a/net/batman-adv/bridge_loop_avoidance.c b/net/batman-adv/bridge_loop_avoidance.c
index 27f451a64ad0..52c0d637d581 100644
--- a/net/batman-adv/bridge_loop_avoidance.c
+++ b/net/batman-adv/bridge_loop_avoidance.c
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2011-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2011-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Simon Wunderlich 3 * Simon Wunderlich
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#include "main.h" 20#include "main.h"
@@ -123,8 +121,7 @@ static void claim_free_ref(struct claim *claim)
123 call_rcu(&claim->rcu, claim_free_rcu); 121 call_rcu(&claim->rcu, claim_free_rcu);
124} 122}
125 123
126/** 124/* @bat_priv: the bat priv with all the soft interface information
127 * @bat_priv: the bat priv with all the soft interface information
128 * @data: search data (may be local/static data) 125 * @data: search data (may be local/static data)
129 * 126 *
130 * looks for a claim in the hash, and returns it if found 127 * looks for a claim in the hash, and returns it if found
@@ -162,8 +159,7 @@ static struct claim *claim_hash_find(struct bat_priv *bat_priv,
162 return claim_tmp; 159 return claim_tmp;
163} 160}
164 161
165/** 162/* @bat_priv: the bat priv with all the soft interface information
166 * @bat_priv: the bat priv with all the soft interface information
167 * @addr: the address of the originator 163 * @addr: the address of the originator
168 * @vid: the VLAN ID 164 * @vid: the VLAN ID
169 * 165 *
@@ -241,8 +237,7 @@ static void bla_del_backbone_claims(struct backbone_gw *backbone_gw)
241 backbone_gw->crc = BLA_CRC_INIT; 237 backbone_gw->crc = BLA_CRC_INIT;
242} 238}
243 239
244/** 240/* @bat_priv: the bat priv with all the soft interface information
245 * @bat_priv: the bat priv with all the soft interface information
246 * @orig: the mac address to be announced within the claim 241 * @orig: the mac address to be announced within the claim
247 * @vid: the VLAN ID 242 * @vid: the VLAN ID
248 * @claimtype: the type of the claim (CLAIM, UNCLAIM, ANNOUNCE, ...) 243 * @claimtype: the type of the claim (CLAIM, UNCLAIM, ANNOUNCE, ...)
@@ -347,8 +342,7 @@ out:
347 hardif_free_ref(primary_if); 342 hardif_free_ref(primary_if);
348} 343}
349 344
350/** 345/* @bat_priv: the bat priv with all the soft interface information
351 * @bat_priv: the bat priv with all the soft interface information
352 * @orig: the mac address of the originator 346 * @orig: the mac address of the originator
353 * @vid: the VLAN ID 347 * @vid: the VLAN ID
354 * 348 *
@@ -422,8 +416,7 @@ static void bla_update_own_backbone_gw(struct bat_priv *bat_priv,
422 backbone_gw_free_ref(backbone_gw); 416 backbone_gw_free_ref(backbone_gw);
423} 417}
424 418
425/** 419/* @bat_priv: the bat priv with all the soft interface information
426 * @bat_priv: the bat priv with all the soft interface information
427 * @vid: the vid where the request came on 420 * @vid: the vid where the request came on
428 * 421 *
429 * Repeat all of our own claims, and finally send an ANNOUNCE frame 422 * Repeat all of our own claims, and finally send an ANNOUNCE frame
@@ -468,8 +461,7 @@ static void bla_answer_request(struct bat_priv *bat_priv,
468 backbone_gw_free_ref(backbone_gw); 461 backbone_gw_free_ref(backbone_gw);
469} 462}
470 463
471/** 464/* @backbone_gw: the backbone gateway from whom we are out of sync
472 * @backbone_gw: the backbone gateway from whom we are out of sync
473 * 465 *
474 * When the crc is wrong, ask the backbone gateway for a full table update. 466 * When the crc is wrong, ask the backbone gateway for a full table update.
475 * After the request, it will repeat all of his own claims and finally 467 * After the request, it will repeat all of his own claims and finally
@@ -495,8 +487,7 @@ static void bla_send_request(struct backbone_gw *backbone_gw)
495 } 487 }
496} 488}
497 489
498/** 490/* @bat_priv: the bat priv with all the soft interface information
499 * @bat_priv: the bat priv with all the soft interface information
500 * @backbone_gw: our backbone gateway which should be announced 491 * @backbone_gw: our backbone gateway which should be announced
501 * 492 *
502 * This function sends an announcement. It is called from multiple 493 * This function sends an announcement. It is called from multiple
@@ -516,8 +507,7 @@ static void bla_send_announce(struct bat_priv *bat_priv,
516 507
517} 508}
518 509
519/** 510/* @bat_priv: the bat priv with all the soft interface information
520 * @bat_priv: the bat priv with all the soft interface information
521 * @mac: the mac address of the claim 511 * @mac: the mac address of the claim
522 * @vid: the VLAN ID of the frame 512 * @vid: the VLAN ID of the frame
523 * @backbone_gw: the backbone gateway which claims it 513 * @backbone_gw: the backbone gateway which claims it
@@ -731,8 +721,7 @@ static int handle_claim(struct bat_priv *bat_priv,
731 return 1; 721 return 1;
732} 722}
733 723
734/** 724/* @bat_priv: the bat priv with all the soft interface information
735 * @bat_priv: the bat priv with all the soft interface information
736 * @hw_src: the Hardware source in the ARP Header 725 * @hw_src: the Hardware source in the ARP Header
737 * @hw_dst: the Hardware destination in the ARP Header 726 * @hw_dst: the Hardware destination in the ARP Header
738 * @ethhdr: pointer to the Ethernet header of the claim frame 727 * @ethhdr: pointer to the Ethernet header of the claim frame
@@ -810,8 +799,7 @@ static int check_claim_group(struct bat_priv *bat_priv,
810} 799}
811 800
812 801
813/** 802/* @bat_priv: the bat priv with all the soft interface information
814 * @bat_priv: the bat priv with all the soft interface information
815 * @skb: the frame to be checked 803 * @skb: the frame to be checked
816 * 804 *
817 * Check if this is a claim frame, and process it accordingly. 805 * Check if this is a claim frame, and process it accordingly.
@@ -860,7 +848,6 @@ static int bla_process_claim(struct bat_priv *bat_priv,
860 /* Check whether the ARP frame carries a valid 848 /* Check whether the ARP frame carries a valid
861 * IP information 849 * IP information
862 */ 850 */
863
864 if (arphdr->ar_hrd != htons(ARPHRD_ETHER)) 851 if (arphdr->ar_hrd != htons(ARPHRD_ETHER))
865 return 0; 852 return 0;
866 if (arphdr->ar_pro != htons(ETH_P_IP)) 853 if (arphdr->ar_pro != htons(ETH_P_IP))
@@ -963,8 +950,7 @@ purge_now:
963 } 950 }
964} 951}
965 952
966/** 953/* @bat_priv: the bat priv with all the soft interface information
967 * @bat_priv: the bat priv with all the soft interface information
968 * @primary_if: the selected primary interface, may be NULL if now is set 954 * @primary_if: the selected primary interface, may be NULL if now is set
969 * @now: whether the whole hash shall be wiped now 955 * @now: whether the whole hash shall be wiped now
970 * 956 *
@@ -1011,13 +997,11 @@ purge_now:
1011 } 997 }
1012} 998}
1013 999
1014/** 1000/* @bat_priv: the bat priv with all the soft interface information
1015 * @bat_priv: the bat priv with all the soft interface information
1016 * @primary_if: the new selected primary_if 1001 * @primary_if: the new selected primary_if
1017 * @oldif: the old primary interface, may be NULL 1002 * @oldif: the old primary interface, may be NULL
1018 * 1003 *
1019 * Update the backbone gateways when the own orig address changes. 1004 * Update the backbone gateways when the own orig address changes.
1020 *
1021 */ 1005 */
1022void batadv_bla_update_orig_address(struct bat_priv *bat_priv, 1006void batadv_bla_update_orig_address(struct bat_priv *bat_priv,
1023 struct hard_iface *primary_if, 1007 struct hard_iface *primary_if,
@@ -1183,8 +1167,7 @@ int batadv_bla_init(struct bat_priv *bat_priv)
1183 return 0; 1167 return 0;
1184} 1168}
1185 1169
1186/** 1170/* @bat_priv: the bat priv with all the soft interface information
1187 * @bat_priv: the bat priv with all the soft interface information
1188 * @bcast_packet: originator mac address 1171 * @bcast_packet: originator mac address
1189 * @hdr_size: maximum length of the frame 1172 * @hdr_size: maximum length of the frame
1190 * 1173 *
@@ -1196,9 +1179,7 @@ int batadv_bla_init(struct bat_priv *bat_priv)
1196 * with a good chance that it is the same packet. If it is furthermore 1179 * with a good chance that it is the same packet. If it is furthermore
1197 * sent by another host, drop it. We allow equal packets from 1180 * sent by another host, drop it. We allow equal packets from
1198 * the same host however as this might be intended. 1181 * the same host however as this might be intended.
1199 * 1182 */
1200 **/
1201
1202int batadv_bla_check_bcast_duplist(struct bat_priv *bat_priv, 1183int batadv_bla_check_bcast_duplist(struct bat_priv *bat_priv,
1203 struct bcast_packet *bcast_packet, 1184 struct bcast_packet *bcast_packet,
1204 int hdr_size) 1185 int hdr_size)
@@ -1250,16 +1231,13 @@ int batadv_bla_check_bcast_duplist(struct bat_priv *bat_priv,
1250 1231
1251 1232
1252 1233
1253/** 1234/* @bat_priv: the bat priv with all the soft interface information
1254 * @bat_priv: the bat priv with all the soft interface information
1255 * @orig: originator mac address 1235 * @orig: originator mac address
1256 * 1236 *
1257 * check if the originator is a gateway for any VLAN ID. 1237 * check if the originator is a gateway for any VLAN ID.
1258 * 1238 *
1259 * returns 1 if it is found, 0 otherwise 1239 * returns 1 if it is found, 0 otherwise
1260 *
1261 */ 1240 */
1262
1263int batadv_bla_is_backbone_gw_orig(struct bat_priv *bat_priv, uint8_t *orig) 1241int batadv_bla_is_backbone_gw_orig(struct bat_priv *bat_priv, uint8_t *orig)
1264{ 1242{
1265 struct hashtable_t *hash = bat_priv->backbone_hash; 1243 struct hashtable_t *hash = bat_priv->backbone_hash;
@@ -1291,15 +1269,13 @@ int batadv_bla_is_backbone_gw_orig(struct bat_priv *bat_priv, uint8_t *orig)
1291} 1269}
1292 1270
1293 1271
1294/** 1272/* @skb: the frame to be checked
1295 * @skb: the frame to be checked
1296 * @orig_node: the orig_node of the frame 1273 * @orig_node: the orig_node of the frame
1297 * @hdr_size: maximum length of the frame 1274 * @hdr_size: maximum length of the frame
1298 * 1275 *
1299 * bla_is_backbone_gw inspects the skb for the VLAN ID and returns 1 1276 * bla_is_backbone_gw inspects the skb for the VLAN ID and returns 1
1300 * if the orig_node is also a gateway on the soft interface, otherwise it 1277 * if the orig_node is also a gateway on the soft interface, otherwise it
1301 * returns 0. 1278 * returns 0.
1302 *
1303 */ 1279 */
1304int batadv_bla_is_backbone_gw(struct sk_buff *skb, 1280int batadv_bla_is_backbone_gw(struct sk_buff *skb,
1305 struct orig_node *orig_node, int hdr_size) 1281 struct orig_node *orig_node, int hdr_size)
@@ -1328,7 +1304,6 @@ int batadv_bla_is_backbone_gw(struct sk_buff *skb,
1328 } 1304 }
1329 1305
1330 /* see if this originator is a backbone gw for this VLAN */ 1306 /* see if this originator is a backbone gw for this VLAN */
1331
1332 backbone_gw = backbone_hash_find(orig_node->bat_priv, 1307 backbone_gw = backbone_hash_find(orig_node->bat_priv,
1333 orig_node->orig, vid); 1308 orig_node->orig, vid);
1334 if (!backbone_gw) 1309 if (!backbone_gw)
@@ -1360,8 +1335,7 @@ void batadv_bla_free(struct bat_priv *bat_priv)
1360 hardif_free_ref(primary_if); 1335 hardif_free_ref(primary_if);
1361} 1336}
1362 1337
1363/** 1338/* @bat_priv: the bat priv with all the soft interface information
1364 * @bat_priv: the bat priv with all the soft interface information
1365 * @skb: the frame to be checked 1339 * @skb: the frame to be checked
1366 * @vid: the VLAN ID of the frame 1340 * @vid: the VLAN ID of the frame
1367 * 1341 *
@@ -1372,7 +1346,6 @@ void batadv_bla_free(struct bat_priv *bat_priv)
1372 * in these cases, the skb is further handled by this function and 1346 * in these cases, the skb is further handled by this function and
1373 * returns 1, otherwise it returns 0 and the caller shall further 1347 * returns 1, otherwise it returns 0 and the caller shall further
1374 * process the skb. 1348 * process the skb.
1375 *
1376 */ 1349 */
1377int batadv_bla_rx(struct bat_priv *bat_priv, struct sk_buff *skb, short vid) 1350int batadv_bla_rx(struct bat_priv *bat_priv, struct sk_buff *skb, short vid)
1378{ 1351{
@@ -1449,8 +1422,7 @@ out:
1449 return ret; 1422 return ret;
1450} 1423}
1451 1424
1452/** 1425/* @bat_priv: the bat priv with all the soft interface information
1453 * @bat_priv: the bat priv with all the soft interface information
1454 * @skb: the frame to be checked 1426 * @skb: the frame to be checked
1455 * @vid: the VLAN ID of the frame 1427 * @vid: the VLAN ID of the frame
1456 * 1428 *
@@ -1461,7 +1433,6 @@ out:
1461 * in these cases, the skb is further handled by this function and 1433 * in these cases, the skb is further handled by this function and
1462 * returns 1, otherwise it returns 0 and the caller shall further 1434 * returns 1, otherwise it returns 0 and the caller shall further
1463 * process the skb. 1435 * process the skb.
1464 *
1465 */ 1436 */
1466int batadv_bla_tx(struct bat_priv *bat_priv, struct sk_buff *skb, short vid) 1437int batadv_bla_tx(struct bat_priv *bat_priv, struct sk_buff *skb, short vid)
1467{ 1438{
diff --git a/net/batman-adv/bridge_loop_avoidance.h b/net/batman-adv/bridge_loop_avoidance.h
index 546cd641012a..9818b1e4c59e 100644
--- a/net/batman-adv/bridge_loop_avoidance.h
+++ b/net/batman-adv/bridge_loop_avoidance.h
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2011-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2011-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Simon Wunderlich 3 * Simon Wunderlich
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#ifndef _NET_BATMAN_ADV_BLA_H_ 20#ifndef _NET_BATMAN_ADV_BLA_H_
diff --git a/net/batman-adv/gateway_client.c b/net/batman-adv/gateway_client.c
index e396029e578b..0d90fffd9efb 100644
--- a/net/batman-adv/gateway_client.c
+++ b/net/batman-adv/gateway_client.c
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2009-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2009-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner 3 * Marek Lindner
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#include "main.h" 20#include "main.h"
@@ -33,7 +31,8 @@
33#include <linux/if_vlan.h> 31#include <linux/if_vlan.h>
34 32
35/* This is the offset of the options field in a dhcp packet starting at 33/* This is the offset of the options field in a dhcp packet starting at
36 * the beginning of the dhcp header */ 34 * the beginning of the dhcp header
35 */
37#define DHCP_OPTIONS_OFFSET 240 36#define DHCP_OPTIONS_OFFSET 240
38#define DHCP_REQUEST 3 37#define DHCP_REQUEST 3
39 38
@@ -151,14 +150,13 @@ static struct gw_node *gw_get_best_gw_node(struct bat_priv *bat_priv)
151 } 150 }
152 break; 151 break;
153 152
154 default: /** 153 default: /* 2: stable connection (use best statistic)
155 * 2: stable connection (use best statistic)
156 * 3: fast-switch (use best statistic but change as 154 * 3: fast-switch (use best statistic but change as
157 * soon as a better gateway appears) 155 * soon as a better gateway appears)
158 * XX: late-switch (use best statistic but change as 156 * XX: late-switch (use best statistic but change as
159 * soon as a better gateway appears which has 157 * soon as a better gateway appears which has
160 * $routing_class more tq points) 158 * $routing_class more tq points)
161 **/ 159 */
162 if (router->tq_avg > max_tq) { 160 if (router->tq_avg > max_tq) {
163 if (curr_gw) 161 if (curr_gw)
164 gw_node_free_ref(curr_gw); 162 gw_node_free_ref(curr_gw);
@@ -190,12 +188,11 @@ void batadv_gw_election(struct bat_priv *bat_priv)
190 struct neigh_node *router = NULL; 188 struct neigh_node *router = NULL;
191 char gw_addr[18] = { '\0' }; 189 char gw_addr[18] = { '\0' };
192 190
193 /** 191 /* The batman daemon checks here if we already passed a full originator
194 * The batman daemon checks here if we already passed a full originator
195 * cycle in order to make sure we don't choose the first gateway we 192 * cycle in order to make sure we don't choose the first gateway we
196 * hear about. This check is based on the daemon's uptime which we 193 * hear about. This check is based on the daemon's uptime which we
197 * don't have. 194 * don't have.
198 **/ 195 */
199 if (atomic_read(&bat_priv->gw_mode) != GW_MODE_CLIENT) 196 if (atomic_read(&bat_priv->gw_mode) != GW_MODE_CLIENT)
200 goto out; 197 goto out;
201 198
@@ -278,10 +275,9 @@ void batadv_gw_check_election(struct bat_priv *bat_priv,
278 if (orig_tq_avg < gw_tq_avg) 275 if (orig_tq_avg < gw_tq_avg)
279 goto out; 276 goto out;
280 277
281 /** 278 /* if the routing class is greater than 3 the value tells us how much
282 * if the routing class is greater than 3 the value tells us how much
283 * greater the TQ value of the new gateway must be 279 * greater the TQ value of the new gateway must be
284 **/ 280 */
285 if ((atomic_read(&bat_priv->gw_sel_class) > 3) && 281 if ((atomic_read(&bat_priv->gw_sel_class) > 3) &&
286 (orig_tq_avg - gw_tq_avg < atomic_read(&bat_priv->gw_sel_class))) 282 (orig_tq_avg - gw_tq_avg < atomic_read(&bat_priv->gw_sel_class)))
287 goto out; 283 goto out;
@@ -337,8 +333,7 @@ void batadv_gw_node_update(struct bat_priv *bat_priv,
337 struct hlist_node *node; 333 struct hlist_node *node;
338 struct gw_node *gw_node, *curr_gw; 334 struct gw_node *gw_node, *curr_gw;
339 335
340 /** 336 /* Note: We don't need a NULL check here, since curr_gw never gets
341 * Note: We don't need a NULL check here, since curr_gw never gets
342 * dereferenced. If curr_gw is NULL we also should not exit as we may 337 * dereferenced. If curr_gw is NULL we also should not exit as we may
343 * have this gateway in our list (duplication check!) even though we 338 * have this gateway in our list (duplication check!) even though we
344 * have no currently selected gateway. 339 * have no currently selected gateway.
@@ -426,9 +421,7 @@ void batadv_gw_node_purge(struct bat_priv *bat_priv)
426 gw_node_free_ref(curr_gw); 421 gw_node_free_ref(curr_gw);
427} 422}
428 423
429/** 424/* fails if orig_node has no router */
430 * fails if orig_node has no router
431 */
432static int _write_buffer_text(struct bat_priv *bat_priv, struct seq_file *seq, 425static int _write_buffer_text(struct bat_priv *bat_priv, struct seq_file *seq,
433 const struct gw_node *gw_node) 426 const struct gw_node *gw_node)
434{ 427{
@@ -534,12 +527,14 @@ static bool is_type_dhcprequest(struct sk_buff *skb, int header_len)
534 /* Access the dhcp option lists. Each entry is made up by: 527 /* Access the dhcp option lists. Each entry is made up by:
535 * - octet 1: option type 528 * - octet 1: option type
536 * - octet 2: option data len (only if type != 255 and 0) 529 * - octet 2: option data len (only if type != 255 and 0)
537 * - octet 3: option data */ 530 * - octet 3: option data
531 */
538 while (*p != 255 && !ret) { 532 while (*p != 255 && !ret) {
539 /* p now points to the first octet: option type */ 533 /* p now points to the first octet: option type */
540 if (*p == 53) { 534 if (*p == 53) {
541 /* type 53 is the message type option. 535 /* type 53 is the message type option.
542 * Jump the len octet and go to the data octet */ 536 * Jump the len octet and go to the data octet
537 */
543 if (pkt_len < 2) 538 if (pkt_len < 2)
544 goto out; 539 goto out;
545 p += 2; 540 p += 2;
@@ -667,7 +662,8 @@ bool batadv_gw_out_of_range(struct bat_priv *bat_priv,
667 switch (atomic_read(&bat_priv->gw_mode)) { 662 switch (atomic_read(&bat_priv->gw_mode)) {
668 case GW_MODE_SERVER: 663 case GW_MODE_SERVER:
669 /* If we are a GW then we are our best GW. We can artificially 664 /* If we are a GW then we are our best GW. We can artificially
670 * set the tq towards ourself as the maximum value */ 665 * set the tq towards ourself as the maximum value
666 */
671 curr_tq_avg = TQ_MAX_VALUE; 667 curr_tq_avg = TQ_MAX_VALUE;
672 break; 668 break;
673 case GW_MODE_CLIENT: 669 case GW_MODE_CLIENT:
@@ -681,7 +677,8 @@ bool batadv_gw_out_of_range(struct bat_priv *bat_priv,
681 677
682 /* If the dhcp packet has been sent to a different gw, 678 /* If the dhcp packet has been sent to a different gw,
683 * we have to evaluate whether the old gw is still 679 * we have to evaluate whether the old gw is still
684 * reliable enough */ 680 * reliable enough
681 */
685 neigh_curr = batadv_find_router(bat_priv, curr_gw->orig_node, 682 neigh_curr = batadv_find_router(bat_priv, curr_gw->orig_node,
686 NULL); 683 NULL);
687 if (!neigh_curr) 684 if (!neigh_curr)
diff --git a/net/batman-adv/gateway_client.h b/net/batman-adv/gateway_client.h
index 2c2446f3f124..4529d42894ef 100644
--- a/net/batman-adv/gateway_client.h
+++ b/net/batman-adv/gateway_client.h
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2009-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2009-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner 3 * Marek Lindner
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#ifndef _NET_BATMAN_ADV_GATEWAY_CLIENT_H_ 20#ifndef _NET_BATMAN_ADV_GATEWAY_CLIENT_H_
diff --git a/net/batman-adv/gateway_common.c b/net/batman-adv/gateway_common.c
index 722c93282442..3700562cf276 100644
--- a/net/batman-adv/gateway_common.c
+++ b/net/batman-adv/gateway_common.c
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2009-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2009-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner 3 * Marek Lindner
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#include "main.h" 20#include "main.h"
@@ -156,11 +154,10 @@ ssize_t batadv_gw_bandwidth_set(struct net_device *net_dev, char *buff,
156 154
157 kbit_to_gw_bandwidth(down, up, &gw_bandwidth_tmp); 155 kbit_to_gw_bandwidth(down, up, &gw_bandwidth_tmp);
158 156
159 /** 157 /* the gw bandwidth we guessed above might not match the given
160 * the gw bandwidth we guessed above might not match the given
161 * speeds, hence we need to calculate it back to show the number 158 * speeds, hence we need to calculate it back to show the number
162 * that is going to be propagated 159 * that is going to be propagated
163 **/ 160 */
164 batadv_gw_bandwidth_to_kbit((uint8_t)gw_bandwidth_tmp, &down, &up); 161 batadv_gw_bandwidth_to_kbit((uint8_t)gw_bandwidth_tmp, &down, &up);
165 162
166 if (atomic_read(&bat_priv->gw_bandwidth) == gw_bandwidth_tmp) 163 if (atomic_read(&bat_priv->gw_bandwidth) == gw_bandwidth_tmp)
diff --git a/net/batman-adv/gateway_common.h b/net/batman-adv/gateway_common.h
index e256040760bf..6f8a4d0cbbb6 100644
--- a/net/batman-adv/gateway_common.h
+++ b/net/batman-adv/gateway_common.h
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2009-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2009-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner 3 * Marek Lindner
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#ifndef _NET_BATMAN_ADV_GATEWAY_COMMON_H_ 20#ifndef _NET_BATMAN_ADV_GATEWAY_COMMON_H_
diff --git a/net/batman-adv/hard-interface.c b/net/batman-adv/hard-interface.c
index ab2fcfaf297e..2a4d394771b8 100644
--- a/net/batman-adv/hard-interface.c
+++ b/net/batman-adv/hard-interface.c
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner, Simon Wunderlich 3 * Marek Lindner, Simon Wunderlich
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#include "main.h" 20#include "main.h"
@@ -74,10 +72,6 @@ static int is_valid_iface(const struct net_device *net_dev)
74 if (batadv_softif_is_valid(net_dev)) 72 if (batadv_softif_is_valid(net_dev))
75 return 0; 73 return 0;
76 74
77 /* Device is being bridged */
78 /* if (net_dev->priv_flags & IFF_BRIDGE_PORT)
79 return 0; */
80
81 return 1; 75 return 1;
82} 76}
83 77
@@ -185,7 +179,8 @@ int batadv_hardif_min_mtu(struct net_device *soft_iface)
185 const struct bat_priv *bat_priv = netdev_priv(soft_iface); 179 const struct bat_priv *bat_priv = netdev_priv(soft_iface);
186 const struct hard_iface *hard_iface; 180 const struct hard_iface *hard_iface;
187 /* allow big frames if all devices are capable to do so 181 /* allow big frames if all devices are capable to do so
188 * (have MTU > 1500 + BAT_HEADER_LEN) */ 182 * (have MTU > 1500 + BAT_HEADER_LEN)
183 */
189 int min_mtu = ETH_DATA_LEN; 184 int min_mtu = ETH_DATA_LEN;
190 185
191 if (atomic_read(&bat_priv->fragmentation)) 186 if (atomic_read(&bat_priv->fragmentation))
@@ -231,8 +226,7 @@ static void hardif_activate_interface(struct hard_iface *hard_iface)
231 bat_priv->bat_algo_ops->bat_iface_update_mac(hard_iface); 226 bat_priv->bat_algo_ops->bat_iface_update_mac(hard_iface);
232 hard_iface->if_status = IF_TO_BE_ACTIVATED; 227 hard_iface->if_status = IF_TO_BE_ACTIVATED;
233 228
234 /** 229 /* the first active interface becomes our primary interface or
235 * the first active interface becomes our primary interface or
236 * the next active interface after the old primary interface was removed 230 * the next active interface after the old primary interface was removed
237 */ 231 */
238 primary_if = primary_if_get_selected(bat_priv); 232 primary_if = primary_if_get_selected(bat_priv);
@@ -438,8 +432,7 @@ static struct hard_iface *hardif_add_interface(struct net_device *net_dev)
438 check_known_mac_addr(hard_iface->net_dev); 432 check_known_mac_addr(hard_iface->net_dev);
439 list_add_tail_rcu(&hard_iface->list, &batadv_hardif_list); 433 list_add_tail_rcu(&hard_iface->list, &batadv_hardif_list);
440 434
441 /** 435 /* This can't be called via a bat_priv callback because
442 * This can't be called via a bat_priv callback because
443 * we have no bat_priv yet. 436 * we have no bat_priv yet.
444 */ 437 */
445 atomic_set(&hard_iface->seqno, 1); 438 atomic_set(&hard_iface->seqno, 1);
@@ -544,7 +537,8 @@ out:
544} 537}
545 538
546/* This function returns true if the interface represented by ifindex is a 539/* This function returns true if the interface represented by ifindex is a
547 * 802.11 wireless device */ 540 * 802.11 wireless device
541 */
548bool batadv_is_wifi_iface(int ifindex) 542bool batadv_is_wifi_iface(int ifindex)
549{ 543{
550 struct net_device *net_device = NULL; 544 struct net_device *net_device = NULL;
@@ -559,7 +553,8 @@ bool batadv_is_wifi_iface(int ifindex)
559 553
560#ifdef CONFIG_WIRELESS_EXT 554#ifdef CONFIG_WIRELESS_EXT
561 /* pre-cfg80211 drivers have to implement WEXT, so it is possible to 555 /* pre-cfg80211 drivers have to implement WEXT, so it is possible to
562 * check for wireless_handlers != NULL */ 556 * check for wireless_handlers != NULL
557 */
563 if (net_device->wireless_handlers) 558 if (net_device->wireless_handlers)
564 ret = true; 559 ret = true;
565 else 560 else
diff --git a/net/batman-adv/hard-interface.h b/net/batman-adv/hard-interface.h
index 20e09db29d15..6bc12c0eb2f0 100644
--- a/net/batman-adv/hard-interface.h
+++ b/net/batman-adv/hard-interface.h
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner, Simon Wunderlich 3 * Marek Lindner, Simon Wunderlich
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#ifndef _NET_BATMAN_ADV_HARD_INTERFACE_H_ 20#ifndef _NET_BATMAN_ADV_HARD_INTERFACE_H_
diff --git a/net/batman-adv/hash.c b/net/batman-adv/hash.c
index 65bbd15dd37c..e39f8f4bb165 100644
--- a/net/batman-adv/hash.c
+++ b/net/batman-adv/hash.c
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2006-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2006-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Simon Wunderlich, Marek Lindner 3 * Simon Wunderlich, Marek Lindner
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#include "main.h" 20#include "main.h"
diff --git a/net/batman-adv/hash.h b/net/batman-adv/hash.h
index e75df6be4f22..eba8f2a55ccc 100644
--- a/net/batman-adv/hash.h
+++ b/net/batman-adv/hash.h
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2006-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2006-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Simon Wunderlich, Marek Lindner 3 * Simon Wunderlich, Marek Lindner
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#ifndef _NET_BATMAN_ADV_HASH_H_ 20#ifndef _NET_BATMAN_ADV_HASH_H_
@@ -24,15 +22,15 @@
24 22
25#include <linux/list.h> 23#include <linux/list.h>
26 24
27/* callback to a compare function. should 25/* callback to a compare function. should compare 2 element datas for their
28 * compare 2 element datas for their keys, 26 * keys, return 0 if same and not 0 if not same
29 * return 0 if same and not 0 if not 27 */
30 * same */
31typedef int (*hashdata_compare_cb)(const struct hlist_node *, const void *); 28typedef int (*hashdata_compare_cb)(const struct hlist_node *, const void *);
32 29
33/* the hashfunction, should return an index 30/* the hashfunction, should return an index
34 * based on the key in the data of the first 31 * based on the key in the data of the first
35 * argument and the size the second */ 32 * argument and the size the second
33 */
36typedef uint32_t (*hashdata_choose_cb)(const void *, uint32_t); 34typedef uint32_t (*hashdata_choose_cb)(const void *, uint32_t);
37typedef void (*hashdata_free_cb)(struct hlist_node *, void *); 35typedef void (*hashdata_free_cb)(struct hlist_node *, void *);
38 36
@@ -54,7 +52,8 @@ void batadv_hash_destroy(struct hashtable_t *hash);
54 52
55/* remove the hash structure. if hashdata_free_cb != NULL, this function will be 53/* remove the hash structure. if hashdata_free_cb != NULL, this function will be
56 * called to remove the elements inside of the hash. if you don't remove the 54 * called to remove the elements inside of the hash. if you don't remove the
57 * elements, memory might be leaked. */ 55 * elements, memory might be leaked.
56 */
58static inline void hash_delete(struct hashtable_t *hash, 57static inline void hash_delete(struct hashtable_t *hash,
59 hashdata_free_cb free_cb, void *arg) 58 hashdata_free_cb free_cb, void *arg)
60{ 59{
@@ -80,8 +79,7 @@ static inline void hash_delete(struct hashtable_t *hash,
80 batadv_hash_destroy(hash); 79 batadv_hash_destroy(hash);
81} 80}
82 81
83/** 82/* hash_add - adds data to the hashtable
84 * hash_add - adds data to the hashtable
85 * @hash: storage hash table 83 * @hash: storage hash table
86 * @compare: callback to determine if 2 hash elements are identical 84 * @compare: callback to determine if 2 hash elements are identical
87 * @choose: callback calculating the hash index 85 * @choose: callback calculating the hash index
@@ -91,7 +89,6 @@ static inline void hash_delete(struct hashtable_t *hash,
91 * Returns 0 on success, 1 if the element already is in the hash 89 * Returns 0 on success, 1 if the element already is in the hash
92 * and -1 on error. 90 * and -1 on error.
93 */ 91 */
94
95static inline int hash_add(struct hashtable_t *hash, 92static inline int hash_add(struct hashtable_t *hash,
96 hashdata_compare_cb compare, 93 hashdata_compare_cb compare,
97 hashdata_choose_cb choose, 94 hashdata_choose_cb choose,
@@ -134,7 +131,8 @@ out:
134/* removes data from hash, if found. returns pointer do data on success, so you 131/* removes data from hash, if found. returns pointer do data on success, so you
135 * can remove the used structure yourself, or NULL on error . data could be the 132 * can remove the used structure yourself, or NULL on error . data could be the
136 * structure you use with just the key filled, we just need the key for 133 * structure you use with just the key filled, we just need the key for
137 * comparing. */ 134 * comparing.
135 */
138static inline void *hash_remove(struct hashtable_t *hash, 136static inline void *hash_remove(struct hashtable_t *hash,
139 hashdata_compare_cb compare, 137 hashdata_compare_cb compare,
140 hashdata_choose_cb choose, void *data) 138 hashdata_choose_cb choose, void *data)
diff --git a/net/batman-adv/icmp_socket.c b/net/batman-adv/icmp_socket.c
index 230056139445..40c5e189e6fd 100644
--- a/net/batman-adv/icmp_socket.c
+++ b/net/batman-adv/icmp_socket.c
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner 3 * Marek Lindner
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#include "main.h" 20#include "main.h"
@@ -312,7 +310,8 @@ static void bat_socket_add_packet(struct socket_client *socket_client,
312 spin_lock_bh(&socket_client->lock); 310 spin_lock_bh(&socket_client->lock);
313 311
314 /* while waiting for the lock the socket_client could have been 312 /* while waiting for the lock the socket_client could have been
315 * deleted */ 313 * deleted
314 */
316 if (!socket_client_hash[icmp_packet->uid]) { 315 if (!socket_client_hash[icmp_packet->uid]) {
317 spin_unlock_bh(&socket_client->lock); 316 spin_unlock_bh(&socket_client->lock);
318 kfree(socket_packet); 317 kfree(socket_packet);
diff --git a/net/batman-adv/icmp_socket.h b/net/batman-adv/icmp_socket.h
index 7b8863668490..a62ab80df9bd 100644
--- a/net/batman-adv/icmp_socket.h
+++ b/net/batman-adv/icmp_socket.h
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner 3 * Marek Lindner
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#ifndef _NET_BATMAN_ADV_ICMP_SOCKET_H_ 20#ifndef _NET_BATMAN_ADV_ICMP_SOCKET_H_
diff --git a/net/batman-adv/main.c b/net/batman-adv/main.c
index 5e1d906628f5..d56d6b2e1924 100644
--- a/net/batman-adv/main.c
+++ b/net/batman-adv/main.c
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner, Simon Wunderlich 3 * Marek Lindner, Simon Wunderlich
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#include "main.h" 20#include "main.h"
@@ -37,7 +35,8 @@
37 35
38 36
39/* List manipulations on hardif_list have to be rtnl_lock()'ed, 37/* List manipulations on hardif_list have to be rtnl_lock()'ed,
40 * list traversals just rcu-locked */ 38 * list traversals just rcu-locked
39 */
41struct list_head batadv_hardif_list; 40struct list_head batadv_hardif_list;
42static int (*recv_packet_handler[256])(struct sk_buff *, struct hard_iface *); 41static int (*recv_packet_handler[256])(struct sk_buff *, struct hard_iface *);
43char batadv_routing_algo[20] = "BATMAN_IV"; 42char batadv_routing_algo[20] = "BATMAN_IV";
@@ -59,7 +58,8 @@ static int __init batman_init(void)
59 batadv_iv_init(); 58 batadv_iv_init();
60 59
61 /* the name should not be longer than 10 chars - see 60 /* the name should not be longer than 10 chars - see
62 * http://lwn.net/Articles/23634/ */ 61 * http://lwn.net/Articles/23634/
62 */
63 batadv_event_workqueue = create_singlethread_workqueue("bat_events"); 63 batadv_event_workqueue = create_singlethread_workqueue("bat_events");
64 64
65 if (!batadv_event_workqueue) 65 if (!batadv_event_workqueue)
diff --git a/net/batman-adv/main.h b/net/batman-adv/main.h
index 12386421a55b..4b06b7621e7a 100644
--- a/net/batman-adv/main.h
+++ b/net/batman-adv/main.h
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner, Simon Wunderlich 3 * Marek Lindner, Simon Wunderlich
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#ifndef _NET_BATMAN_ADV_MAIN_H_ 20#ifndef _NET_BATMAN_ADV_MAIN_H_
@@ -36,19 +34,21 @@
36#define TQ_MAX_VALUE 255 34#define TQ_MAX_VALUE 255
37#define JITTER 20 35#define JITTER 20
38 36
39 /* Time To Live of broadcast messages */ 37/* Time To Live of broadcast messages */
40#define TTL 50 38#define TTL 50
41 39
42/* purge originators after time in seconds if no valid packet comes in 40/* purge originators after time in seconds if no valid packet comes in
43 * -> TODO: check influence on TQ_LOCAL_WINDOW_SIZE */ 41 * -> TODO: check influence on TQ_LOCAL_WINDOW_SIZE
42 */
44#define PURGE_TIMEOUT 200000 /* 200 seconds */ 43#define PURGE_TIMEOUT 200000 /* 200 seconds */
45#define TT_LOCAL_TIMEOUT 3600000 /* in miliseconds */ 44#define TT_LOCAL_TIMEOUT 3600000 /* in miliseconds */
46#define TT_CLIENT_ROAM_TIMEOUT 600000 /* in miliseconds */ 45#define TT_CLIENT_ROAM_TIMEOUT 600000 /* in miliseconds */
47/* sliding packet range of received originator messages in sequence numbers 46/* sliding packet range of received originator messages in sequence numbers
48 * (should be a multiple of our word size) */ 47 * (should be a multiple of our word size)
48 */
49#define TQ_LOCAL_WINDOW_SIZE 64 49#define TQ_LOCAL_WINDOW_SIZE 64
50#define TT_REQUEST_TIMEOUT 3000 /* miliseconds we have to keep 50/* miliseconds we have to keep pending tt_req */
51 * pending tt_req */ 51#define TT_REQUEST_TIMEOUT 3000
52 52
53#define TQ_GLOBAL_WINDOW_SIZE 5 53#define TQ_GLOBAL_WINDOW_SIZE 5
54#define TQ_LOCAL_BIDRECT_SEND_MINIMUM 1 54#define TQ_LOCAL_BIDRECT_SEND_MINIMUM 1
@@ -57,8 +57,10 @@
57 57
58#define TT_OGM_APPEND_MAX 3 /* number of OGMs sent with the last tt diff */ 58#define TT_OGM_APPEND_MAX 3 /* number of OGMs sent with the last tt diff */
59 59
60#define ROAMING_MAX_TIME 20000 /* Time in which a client can roam at most 60/* Time in which a client can roam at most ROAMING_MAX_COUNT times in
61 * ROAMING_MAX_COUNT times in miliseconds*/ 61 * miliseconds
62 */
63#define ROAMING_MAX_TIME 20000
62#define ROAMING_MAX_COUNT 5 64#define ROAMING_MAX_COUNT 5
63 65
64#define NO_FLAGS 0 66#define NO_FLAGS 0
@@ -72,11 +74,13 @@
72#define VIS_INTERVAL 5000 /* 5 seconds */ 74#define VIS_INTERVAL 5000 /* 5 seconds */
73 75
74/* how much worse secondary interfaces may be to be considered as bonding 76/* how much worse secondary interfaces may be to be considered as bonding
75 * candidates */ 77 * candidates
78 */
76#define BONDING_TQ_THRESHOLD 50 79#define BONDING_TQ_THRESHOLD 50
77 80
78/* should not be bigger than 512 bytes or change the size of 81/* should not be bigger than 512 bytes or change the size of
79 * forw_packet->direct_link_flags */ 82 * forw_packet->direct_link_flags
83 */
80#define MAX_AGGREGATION_BYTES 512 84#define MAX_AGGREGATION_BYTES 512
81#define MAX_AGGREGATION_MS 100 85#define MAX_AGGREGATION_MS 100
82 86
@@ -201,19 +205,16 @@ static inline void bat_dbg(int type __always_unused,
201 pr_err("%s: " fmt, _netdev->name, ## arg); \ 205 pr_err("%s: " fmt, _netdev->name, ## arg); \
202 } while (0) 206 } while (0)
203 207
204/** 208/* returns 1 if they are the same ethernet addr
205 * returns 1 if they are the same ethernet addr
206 * 209 *
207 * note: can't use compare_ether_addr() as it requires aligned memory 210 * note: can't use compare_ether_addr() as it requires aligned memory
208 */ 211 */
209
210static inline int compare_eth(const void *data1, const void *data2) 212static inline int compare_eth(const void *data1, const void *data2)
211{ 213{
212 return (memcmp(data1, data2, ETH_ALEN) == 0 ? 1 : 0); 214 return (memcmp(data1, data2, ETH_ALEN) == 0 ? 1 : 0);
213} 215}
214 216
215/** 217/* has_timed_out - compares current time (jiffies) and timestamp + timeout
216 * has_timed_out - compares current time (jiffies) and timestamp + timeout
217 * @timestamp: base value to compare with (in jiffies) 218 * @timestamp: base value to compare with (in jiffies)
218 * @timeout: added to base value before comparing (in milliseconds) 219 * @timeout: added to base value before comparing (in milliseconds)
219 * 220 *
@@ -237,7 +238,8 @@ static inline bool has_timed_out(unsigned long timestamp, unsigned int timeout)
237 * - when adding nothing - it is neither a predecessor nor a successor 238 * - when adding nothing - it is neither a predecessor nor a successor
238 * - before adding more than 127 to the starting value - it is a predecessor, 239 * - before adding more than 127 to the starting value - it is a predecessor,
239 * - when adding 128 - it is neither a predecessor nor a successor, 240 * - when adding 128 - it is neither a predecessor nor a successor,
240 * - after adding more than 127 to the starting value - it is a successor */ 241 * - after adding more than 127 to the starting value - it is a successor
242 */
241#define seq_before(x, y) ({typeof(x) _d1 = (x); \ 243#define seq_before(x, y) ({typeof(x) _d1 = (x); \
242 typeof(y) _d2 = (y); \ 244 typeof(y) _d2 = (y); \
243 typeof(x) _dummy = (_d1 - _d2); \ 245 typeof(x) _dummy = (_d1 - _d2); \
diff --git a/net/batman-adv/originator.c b/net/batman-adv/originator.c
index 3e902042af8f..86e7e082c2bc 100644
--- a/net/batman-adv/originator.c
+++ b/net/batman-adv/originator.c
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2009-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2009-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner, Simon Wunderlich 3 * Marek Lindner, Simon Wunderlich
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#include "main.h" 20#include "main.h"
@@ -188,7 +186,8 @@ void batadv_originator_free(struct bat_priv *bat_priv)
188} 186}
189 187
190/* this function finds or creates an originator entry for the given 188/* this function finds or creates an originator entry for the given
191 * address if it does not exits */ 189 * address if it does not exits
190 */
192struct orig_node *batadv_get_orig_node(struct bat_priv *bat_priv, 191struct orig_node *batadv_get_orig_node(struct bat_priv *bat_priv,
193 const uint8_t *addr) 192 const uint8_t *addr)
194{ 193{
@@ -521,7 +520,8 @@ int batadv_orig_hash_add_if(struct hard_iface *hard_iface, int max_if_num)
521 int ret; 520 int ret;
522 521
523 /* resize all orig nodes because orig_node->bcast_own(_sum) depend on 522 /* resize all orig nodes because orig_node->bcast_own(_sum) depend on
524 * if_num */ 523 * if_num
524 */
525 for (i = 0; i < hash->size; i++) { 525 for (i = 0; i < hash->size; i++) {
526 head = &hash->table[i]; 526 head = &hash->table[i];
527 527
@@ -604,7 +604,8 @@ int batadv_orig_hash_del_if(struct hard_iface *hard_iface, int max_if_num)
604 int ret; 604 int ret;
605 605
606 /* resize all orig nodes because orig_node->bcast_own(_sum) depend on 606 /* resize all orig nodes because orig_node->bcast_own(_sum) depend on
607 * if_num */ 607 * if_num
608 */
608 for (i = 0; i < hash->size; i++) { 609 for (i = 0; i < hash->size; i++) {
609 head = &hash->table[i]; 610 head = &hash->table[i];
610 611
diff --git a/net/batman-adv/originator.h b/net/batman-adv/originator.h
index 97deeba787ea..a72171997056 100644
--- a/net/batman-adv/originator.h
+++ b/net/batman-adv/originator.h
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner, Simon Wunderlich 3 * Marek Lindner, Simon Wunderlich
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#ifndef _NET_BATMAN_ADV_ORIGINATOR_H_ 20#ifndef _NET_BATMAN_ADV_ORIGINATOR_H_
@@ -40,8 +38,9 @@ int batadv_orig_hash_add_if(struct hard_iface *hard_iface, int max_if_num);
40int batadv_orig_hash_del_if(struct hard_iface *hard_iface, int max_if_num); 38int batadv_orig_hash_del_if(struct hard_iface *hard_iface, int max_if_num);
41 39
42 40
43/* hashfunction to choose an entry in a hash table of given size */ 41/* hashfunction to choose an entry in a hash table of given size
44/* hash algorithm from http://en.wikipedia.org/wiki/Hash_table */ 42 * hash algorithm from http://en.wikipedia.org/wiki/Hash_table
43 */
45static inline uint32_t choose_orig(const void *data, uint32_t size) 44static inline uint32_t choose_orig(const void *data, uint32_t size)
46{ 45{
47 const unsigned char *key = data; 46 const unsigned char *key = data;
diff --git a/net/batman-adv/packet.h b/net/batman-adv/packet.h
index 033d99490e82..c90219cd648e 100644
--- a/net/batman-adv/packet.h
+++ b/net/batman-adv/packet.h
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner, Simon Wunderlich 3 * Marek Lindner, Simon Wunderlich
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#ifndef _NET_BATMAN_ADV_PACKET_H_ 20#ifndef _NET_BATMAN_ADV_PACKET_H_
@@ -81,7 +79,8 @@ enum tt_query_flags {
81 79
82/* TT_CLIENT flags. 80/* TT_CLIENT flags.
83 * Flags from 1 to 1 << 7 are sent on the wire, while flags from 1 << 8 to 81 * Flags from 1 to 1 << 7 are sent on the wire, while flags from 1 << 8 to
84 * 1 << 15 are used for local computation only */ 82 * 1 << 15 are used for local computation only
83 */
85enum tt_client_flags { 84enum tt_client_flags {
86 TT_CLIENT_DEL = 1 << 0, 85 TT_CLIENT_DEL = 1 << 0,
87 TT_CLIENT_ROAM = 1 << 1, 86 TT_CLIENT_ROAM = 1 << 1,
@@ -142,7 +141,8 @@ struct icmp_packet {
142#define BAT_RR_LEN 16 141#define BAT_RR_LEN 16
143 142
144/* icmp_packet_rr must start with all fields from imcp_packet 143/* icmp_packet_rr must start with all fields from imcp_packet
145 * as this is assumed by code that handles ICMP packets */ 144 * as this is assumed by code that handles ICMP packets
145 */
146struct icmp_packet_rr { 146struct icmp_packet_rr {
147 struct batman_header header; 147 struct batman_header header;
148 uint8_t msg_type; /* see ICMP message types above */ 148 uint8_t msg_type; /* see ICMP message types above */
@@ -192,7 +192,8 @@ struct tt_query_packet {
192 struct batman_header header; 192 struct batman_header header;
193 /* the flag field is a combination of: 193 /* the flag field is a combination of:
194 * - TT_REQUEST or TT_RESPONSE 194 * - TT_REQUEST or TT_RESPONSE
195 * - TT_FULL_TABLE */ 195 * - TT_FULL_TABLE
196 */
196 uint8_t flags; 197 uint8_t flags;
197 uint8_t dst[ETH_ALEN]; 198 uint8_t dst[ETH_ALEN];
198 uint8_t src[ETH_ALEN]; 199 uint8_t src[ETH_ALEN];
@@ -200,13 +201,15 @@ struct tt_query_packet {
200 * if TT_REQUEST: ttvn that triggered the 201 * if TT_REQUEST: ttvn that triggered the
201 * request 202 * request
202 * if TT_RESPONSE: new ttvn for the src 203 * if TT_RESPONSE: new ttvn for the src
203 * orig_node */ 204 * orig_node
205 */
204 uint8_t ttvn; 206 uint8_t ttvn;
205 /* tt_data field is: 207 /* tt_data field is:
206 * if TT_REQUEST: crc associated with the 208 * if TT_REQUEST: crc associated with the
207 * ttvn 209 * ttvn
208 * if TT_RESPONSE: table_size */ 210 * if TT_RESPONSE: table_size
209 __be16 tt_data; 211 */
212 __be16 tt_data;
210} __packed; 213} __packed;
211 214
212struct roam_adv_packet { 215struct roam_adv_packet {
diff --git a/net/batman-adv/ring_buffer.c b/net/batman-adv/ring_buffer.c
index db8f5ef83d3e..aff1ca2990f1 100644
--- a/net/batman-adv/ring_buffer.c
+++ b/net/batman-adv/ring_buffer.c
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner 3 * Marek Lindner
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#include "main.h" 20#include "main.h"
diff --git a/net/batman-adv/ring_buffer.h b/net/batman-adv/ring_buffer.h
index fbaf9d29d1d7..fda8c17df273 100644
--- a/net/batman-adv/ring_buffer.h
+++ b/net/batman-adv/ring_buffer.h
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner 3 * Marek Lindner
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#ifndef _NET_BATMAN_ADV_RING_BUFFER_H_ 20#ifndef _NET_BATMAN_ADV_RING_BUFFER_H_
diff --git a/net/batman-adv/routing.c b/net/batman-adv/routing.c
index 1b1dd41f5fe6..79f63cf11be4 100644
--- a/net/batman-adv/routing.c
+++ b/net/batman-adv/routing.c
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner, Simon Wunderlich 3 * Marek Lindner, Simon Wunderlich
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#include "main.h" 20#include "main.h"
@@ -165,8 +163,7 @@ void batadv_bonding_candidate_add(struct orig_node *orig_node,
165 if (neigh_node->tq_avg < router->tq_avg - BONDING_TQ_THRESHOLD) 163 if (neigh_node->tq_avg < router->tq_avg - BONDING_TQ_THRESHOLD)
166 goto candidate_del; 164 goto candidate_del;
167 165
168 /** 166 /* check if we have another candidate with the same mac address or
169 * check if we have another candidate with the same mac address or
170 * interface. If we do, we won't select this candidate because of 167 * interface. If we do, we won't select this candidate because of
171 * possible interference. 168 * possible interference.
172 */ 169 */
@@ -177,7 +174,8 @@ void batadv_bonding_candidate_add(struct orig_node *orig_node,
177 continue; 174 continue;
178 175
179 /* we only care if the other candidate is even 176 /* we only care if the other candidate is even
180 * considered as candidate. */ 177 * considered as candidate.
178 */
181 if (list_empty(&tmp_neigh_node->bonding_list)) 179 if (list_empty(&tmp_neigh_node->bonding_list))
182 continue; 180 continue;
183 181
@@ -398,9 +396,7 @@ int batadv_recv_icmp_packet(struct sk_buff *skb, struct hard_iface *recv_if)
398 int hdr_size = sizeof(struct icmp_packet); 396 int hdr_size = sizeof(struct icmp_packet);
399 int ret = NET_RX_DROP; 397 int ret = NET_RX_DROP;
400 398
401 /** 399 /* we truncate all incoming icmp packets if they don't match our size */
402 * we truncate all incoming icmp packets if they don't match our size
403 */
404 if (skb->len >= sizeof(struct icmp_packet_rr)) 400 if (skb->len >= sizeof(struct icmp_packet_rr))
405 hdr_size = sizeof(struct icmp_packet_rr); 401 hdr_size = sizeof(struct icmp_packet_rr);
406 402
@@ -474,7 +470,8 @@ out:
474 * robin fashion over the remaining interfaces. 470 * robin fashion over the remaining interfaces.
475 * 471 *
476 * This method rotates the bonding list and increases the 472 * This method rotates the bonding list and increases the
477 * returned router's refcount. */ 473 * returned router's refcount.
474 */
478static struct neigh_node *find_bond_router(struct orig_node *primary_orig, 475static struct neigh_node *find_bond_router(struct orig_node *primary_orig,
479 const struct hard_iface *recv_if) 476 const struct hard_iface *recv_if)
480{ 477{
@@ -507,10 +504,12 @@ static struct neigh_node *find_bond_router(struct orig_node *primary_orig,
507 goto out; 504 goto out;
508 505
509 /* selected should point to the next element 506 /* selected should point to the next element
510 * after the current router */ 507 * after the current router
508 */
511 spin_lock_bh(&primary_orig->neigh_list_lock); 509 spin_lock_bh(&primary_orig->neigh_list_lock);
512 /* this is a list_move(), which unfortunately 510 /* this is a list_move(), which unfortunately
513 * does not exist as rcu version */ 511 * does not exist as rcu version
512 */
514 list_del_rcu(&primary_orig->bond_list); 513 list_del_rcu(&primary_orig->bond_list);
515 list_add_rcu(&primary_orig->bond_list, 514 list_add_rcu(&primary_orig->bond_list,
516 &router->bonding_list); 515 &router->bonding_list);
@@ -525,7 +524,8 @@ out:
525 * remaining candidates which are not using 524 * remaining candidates which are not using
526 * this interface. 525 * this interface.
527 * 526 *
528 * Increases the returned router's refcount */ 527 * Increases the returned router's refcount
528 */
529static struct neigh_node *find_ifalter_router(struct orig_node *primary_orig, 529static struct neigh_node *find_ifalter_router(struct orig_node *primary_orig,
530 const struct hard_iface *recv_if) 530 const struct hard_iface *recv_if)
531{ 531{
@@ -546,11 +546,13 @@ static struct neigh_node *find_ifalter_router(struct orig_node *primary_orig,
546 continue; 546 continue;
547 547
548 /* if we don't have a router yet 548 /* if we don't have a router yet
549 * or this one is better, choose it. */ 549 * or this one is better, choose it.
550 */
550 if ((!router) || 551 if ((!router) ||
551 (tmp_neigh_node->tq_avg > router->tq_avg)) { 552 (tmp_neigh_node->tq_avg > router->tq_avg)) {
552 /* decrement refcount of 553 /* decrement refcount of
553 * previously selected router */ 554 * previously selected router
555 */
554 if (router) 556 if (router)
555 batadv_neigh_node_free_ref(router); 557 batadv_neigh_node_free_ref(router);
556 558
@@ -602,7 +604,8 @@ int batadv_recv_tt_query(struct sk_buff *skb, struct hard_iface *recv_if)
602 batadv_inc_counter(bat_priv, BAT_CNT_TT_REQUEST_RX); 604 batadv_inc_counter(bat_priv, BAT_CNT_TT_REQUEST_RX);
603 605
604 /* If we cannot provide an answer the tt_request is 606 /* If we cannot provide an answer the tt_request is
605 * forwarded */ 607 * forwarded
608 */
606 if (!batadv_send_tt_response(bat_priv, tt_query)) { 609 if (!batadv_send_tt_response(bat_priv, tt_query)) {
607 bat_dbg(DBG_TT, bat_priv, 610 bat_dbg(DBG_TT, bat_priv,
608 "Routing TT_REQUEST to %pM [%c]\n", 611 "Routing TT_REQUEST to %pM [%c]\n",
@@ -616,7 +619,8 @@ int batadv_recv_tt_query(struct sk_buff *skb, struct hard_iface *recv_if)
616 619
617 if (batadv_is_my_mac(tt_query->dst)) { 620 if (batadv_is_my_mac(tt_query->dst)) {
618 /* packet needs to be linearized to access the TT 621 /* packet needs to be linearized to access the TT
619 * changes */ 622 * changes
623 */
620 if (skb_linearize(skb) < 0) 624 if (skb_linearize(skb) < 0)
621 goto out; 625 goto out;
622 /* skb_linearize() possibly changed skb->data */ 626 /* skb_linearize() possibly changed skb->data */
@@ -694,7 +698,8 @@ int batadv_recv_roam_adv(struct sk_buff *skb, struct hard_iface *recv_if)
694 698
695 /* Roaming phase starts: I have new information but the ttvn has not 699 /* Roaming phase starts: I have new information but the ttvn has not
696 * been incremented yet. This flag will make me check all the incoming 700 * been incremented yet. This flag will make me check all the incoming
697 * packets for the correct destination. */ 701 * packets for the correct destination.
702 */
698 bat_priv->tt_poss_change = true; 703 bat_priv->tt_poss_change = true;
699 704
700 batadv_orig_node_free_ref(orig_node); 705 batadv_orig_node_free_ref(orig_node);
@@ -705,7 +710,8 @@ out:
705 710
706/* find a suitable router for this originator, and use 711/* find a suitable router for this originator, and use
707 * bonding if possible. increases the found neighbors 712 * bonding if possible. increases the found neighbors
708 * refcount.*/ 713 * refcount.
714 */
709struct neigh_node *batadv_find_router(struct bat_priv *bat_priv, 715struct neigh_node *batadv_find_router(struct bat_priv *bat_priv,
710 struct orig_node *orig_node, 716 struct orig_node *orig_node,
711 const struct hard_iface *recv_if) 717 const struct hard_iface *recv_if)
@@ -724,7 +730,8 @@ struct neigh_node *batadv_find_router(struct bat_priv *bat_priv,
724 goto err; 730 goto err;
725 731
726 /* without bonding, the first node should 732 /* without bonding, the first node should
727 * always choose the default router. */ 733 * always choose the default router.
734 */
728 bonding_enabled = atomic_read(&bat_priv->bonding); 735 bonding_enabled = atomic_read(&bat_priv->bonding);
729 736
730 rcu_read_lock(); 737 rcu_read_lock();
@@ -737,13 +744,14 @@ struct neigh_node *batadv_find_router(struct bat_priv *bat_priv,
737 goto return_router; 744 goto return_router;
738 745
739 /* if we have something in the primary_addr, we can search 746 /* if we have something in the primary_addr, we can search
740 * for a potential bonding candidate. */ 747 * for a potential bonding candidate.
748 */
741 if (compare_eth(router_orig->primary_addr, zero_mac)) 749 if (compare_eth(router_orig->primary_addr, zero_mac))
742 goto return_router; 750 goto return_router;
743 751
744 /* find the orig_node which has the primary interface. might 752 /* find the orig_node which has the primary interface. might
745 * even be the same as our router_orig in many cases */ 753 * even be the same as our router_orig in many cases
746 754 */
747 if (compare_eth(router_orig->primary_addr, router_orig->orig)) { 755 if (compare_eth(router_orig->primary_addr, router_orig->orig)) {
748 primary_orig_node = router_orig; 756 primary_orig_node = router_orig;
749 } else { 757 } else {
@@ -756,14 +764,15 @@ struct neigh_node *batadv_find_router(struct bat_priv *bat_priv,
756 } 764 }
757 765
758 /* with less than 2 candidates, we can't do any 766 /* with less than 2 candidates, we can't do any
759 * bonding and prefer the original router. */ 767 * bonding and prefer the original router.
768 */
760 if (atomic_read(&primary_orig_node->bond_candidates) < 2) 769 if (atomic_read(&primary_orig_node->bond_candidates) < 2)
761 goto return_router; 770 goto return_router;
762 771
763 /* all nodes between should choose a candidate which 772 /* all nodes between should choose a candidate which
764 * is is not on the interface where the packet came 773 * is is not on the interface where the packet came
765 * in. */ 774 * in.
766 775 */
767 batadv_neigh_node_free_ref(router); 776 batadv_neigh_node_free_ref(router);
768 777
769 if (bonding_enabled) 778 if (bonding_enabled)
@@ -1089,7 +1098,8 @@ int batadv_recv_bcast_packet(struct sk_buff *skb, struct hard_iface *recv_if)
1089 goto spin_unlock; 1098 goto spin_unlock;
1090 1099
1091 /* mark broadcast in flood history, update window position 1100 /* mark broadcast in flood history, update window position
1092 * if required. */ 1101 * if required.
1102 */
1093 if (batadv_bit_get_packet(bat_priv, orig_node->bcast_bits, seq_diff, 1)) 1103 if (batadv_bit_get_packet(bat_priv, orig_node->bcast_bits, seq_diff, 1))
1094 orig_node->last_bcast_seqno = ntohl(bcast_packet->seqno); 1104 orig_node->last_bcast_seqno = ntohl(bcast_packet->seqno);
1095 1105
@@ -1165,6 +1175,7 @@ int batadv_recv_vis_packet(struct sk_buff *skb, struct hard_iface *recv_if)
1165 } 1175 }
1166 1176
1167 /* We take a copy of the data in the packet, so we should 1177 /* We take a copy of the data in the packet, so we should
1168 always free the skbuf. */ 1178 * always free the skbuf.
1179 */
1169 return NET_RX_DROP; 1180 return NET_RX_DROP;
1170} 1181}
diff --git a/net/batman-adv/routing.h b/net/batman-adv/routing.h
index 4652f0c147f5..c3fd219e8e53 100644
--- a/net/batman-adv/routing.h
+++ b/net/batman-adv/routing.h
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner, Simon Wunderlich 3 * Marek Lindner, Simon Wunderlich
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#ifndef _NET_BATMAN_ADV_ROUTING_H_ 20#ifndef _NET_BATMAN_ADV_ROUTING_H_
diff --git a/net/batman-adv/send.c b/net/batman-adv/send.c
index 1a0f7c364ea0..2c92a32ec6c6 100644
--- a/net/batman-adv/send.c
+++ b/net/batman-adv/send.c
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner, Simon Wunderlich 3 * Marek Lindner, Simon Wunderlich
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#include "main.h" 20#include "main.h"
@@ -32,7 +30,8 @@
32static void send_outstanding_bcast_packet(struct work_struct *work); 30static void send_outstanding_bcast_packet(struct work_struct *work);
33 31
34/* send out an already prepared packet to the given address via the 32/* send out an already prepared packet to the given address via the
35 * specified batman interface */ 33 * specified batman interface
34 */
36int batadv_send_skb_packet(struct sk_buff *skb, struct hard_iface *hard_iface, 35int batadv_send_skb_packet(struct sk_buff *skb, struct hard_iface *hard_iface,
37 const uint8_t *dst_addr) 36 const uint8_t *dst_addr)
38{ 37{
@@ -69,8 +68,8 @@ int batadv_send_skb_packet(struct sk_buff *skb, struct hard_iface *hard_iface,
69 68
70 /* dev_queue_xmit() returns a negative result on error. However on 69 /* dev_queue_xmit() returns a negative result on error. However on
71 * congestion and traffic shaping, it drops and returns NET_XMIT_DROP 70 * congestion and traffic shaping, it drops and returns NET_XMIT_DROP
72 * (which is > 0). This will not be treated as an error. */ 71 * (which is > 0). This will not be treated as an error.
73 72 */
74 return dev_queue_xmit(skb); 73 return dev_queue_xmit(skb);
75send_skb_err: 74send_skb_err:
76 kfree_skb(skb); 75 kfree_skb(skb);
@@ -85,8 +84,7 @@ void batadv_schedule_bat_ogm(struct hard_iface *hard_iface)
85 (hard_iface->if_status == IF_TO_BE_REMOVED)) 84 (hard_iface->if_status == IF_TO_BE_REMOVED))
86 return; 85 return;
87 86
88 /** 87 /* the interface gets activated here to avoid race conditions between
89 * the interface gets activated here to avoid race conditions between
90 * the moment of activating the interface in 88 * the moment of activating the interface in
91 * hardif_activate_interface() where the originator mac is set and 89 * hardif_activate_interface() where the originator mac is set and
92 * outdated packets (especially uninitialized mac addresses) in the 90 * outdated packets (especially uninitialized mac addresses) in the
@@ -132,7 +130,8 @@ static void _add_bcast_packet_to_list(struct bat_priv *bat_priv,
132 * errors. 130 * errors.
133 * 131 *
134 * The skb is not consumed, so the caller should make sure that the 132 * The skb is not consumed, so the caller should make sure that the
135 * skb is freed. */ 133 * skb is freed.
134 */
136int batadv_add_bcast_packet_to_list(struct bat_priv *bat_priv, 135int batadv_add_bcast_packet_to_list(struct bat_priv *bat_priv,
137 const struct sk_buff *skb, 136 const struct sk_buff *skb,
138 unsigned long delay) 137 unsigned long delay)
@@ -249,8 +248,7 @@ void batadv_send_outstanding_bat_ogm_packet(struct work_struct *work)
249 248
250 bat_priv->bat_algo_ops->bat_ogm_emit(forw_packet); 249 bat_priv->bat_algo_ops->bat_ogm_emit(forw_packet);
251 250
252 /** 251 /* we have to have at least one packet in the queue
253 * we have to have at least one packet in the queue
254 * to determine the queues wake up time unless we are 252 * to determine the queues wake up time unless we are
255 * shutting down 253 * shutting down
256 */ 254 */
@@ -285,8 +283,7 @@ void batadv_purge_outstanding_packets(struct bat_priv *bat_priv,
285 hlist_for_each_entry_safe(forw_packet, tmp_node, safe_tmp_node, 283 hlist_for_each_entry_safe(forw_packet, tmp_node, safe_tmp_node,
286 &bat_priv->forw_bcast_list, list) { 284 &bat_priv->forw_bcast_list, list) {
287 285
288 /** 286 /* if purge_outstanding_packets() was called with an argument
289 * if purge_outstanding_packets() was called with an argument
290 * we delete only packets belonging to the given interface 287 * we delete only packets belonging to the given interface
291 */ 288 */
292 if ((hard_iface) && 289 if ((hard_iface) &&
@@ -295,8 +292,7 @@ void batadv_purge_outstanding_packets(struct bat_priv *bat_priv,
295 292
296 spin_unlock_bh(&bat_priv->forw_bcast_list_lock); 293 spin_unlock_bh(&bat_priv->forw_bcast_list_lock);
297 294
298 /** 295 /* send_outstanding_bcast_packet() will lock the list to
299 * send_outstanding_bcast_packet() will lock the list to
300 * delete the item from the list 296 * delete the item from the list
301 */ 297 */
302 pending = cancel_delayed_work_sync(&forw_packet->delayed_work); 298 pending = cancel_delayed_work_sync(&forw_packet->delayed_work);
@@ -314,8 +310,7 @@ void batadv_purge_outstanding_packets(struct bat_priv *bat_priv,
314 hlist_for_each_entry_safe(forw_packet, tmp_node, safe_tmp_node, 310 hlist_for_each_entry_safe(forw_packet, tmp_node, safe_tmp_node,
315 &bat_priv->forw_bat_list, list) { 311 &bat_priv->forw_bat_list, list) {
316 312
317 /** 313 /* if purge_outstanding_packets() was called with an argument
318 * if purge_outstanding_packets() was called with an argument
319 * we delete only packets belonging to the given interface 314 * we delete only packets belonging to the given interface
320 */ 315 */
321 if ((hard_iface) && 316 if ((hard_iface) &&
@@ -324,8 +319,7 @@ void batadv_purge_outstanding_packets(struct bat_priv *bat_priv,
324 319
325 spin_unlock_bh(&bat_priv->forw_bat_list_lock); 320 spin_unlock_bh(&bat_priv->forw_bat_list_lock);
326 321
327 /** 322 /* send_outstanding_bat_packet() will lock the list to
328 * send_outstanding_bat_packet() will lock the list to
329 * delete the item from the list 323 * delete the item from the list
330 */ 324 */
331 pending = cancel_delayed_work_sync(&forw_packet->delayed_work); 325 pending = cancel_delayed_work_sync(&forw_packet->delayed_work);
diff --git a/net/batman-adv/send.h b/net/batman-adv/send.h
index 452e8df5abb8..e3ac75ba432b 100644
--- a/net/batman-adv/send.h
+++ b/net/batman-adv/send.h
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner, Simon Wunderlich 3 * Marek Lindner, Simon Wunderlich
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#ifndef _NET_BATMAN_ADV_SEND_H_ 20#ifndef _NET_BATMAN_ADV_SEND_H_
diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c
index 994b2b8d7e10..0658781febde 100644
--- a/net/batman-adv/soft-interface.c
+++ b/net/batman-adv/soft-interface.c
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner, Simon Wunderlich 3 * Marek Lindner, Simon Wunderlich
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#include "main.h" 20#include "main.h"
@@ -65,8 +63,7 @@ int batadv_skb_head_push(struct sk_buff *skb, unsigned int len)
65{ 63{
66 int result; 64 int result;
67 65
68 /** 66 /* TODO: We must check if we can release all references to non-payload
69 * TODO: We must check if we can release all references to non-payload
70 * data using skb_header_release in our skbs to allow skb_cow_header to 67 * data using skb_header_release in our skbs to allow skb_cow_header to
71 * work optimally. This means that those skbs are not allowed to read 68 * work optimally. This means that those skbs are not allowed to read
72 * or write any data which is before the current position of skb->data 69 * or write any data which is before the current position of skb->data
@@ -180,14 +177,16 @@ static int interface_tx(struct sk_buff *skb, struct net_device *soft_iface)
180 switch (atomic_read(&bat_priv->gw_mode)) { 177 switch (atomic_read(&bat_priv->gw_mode)) {
181 case GW_MODE_SERVER: 178 case GW_MODE_SERVER:
182 /* gateway servers should not send dhcp 179 /* gateway servers should not send dhcp
183 * requests into the mesh */ 180 * requests into the mesh
181 */
184 ret = batadv_gw_is_dhcp_target(skb, &header_len); 182 ret = batadv_gw_is_dhcp_target(skb, &header_len);
185 if (ret) 183 if (ret)
186 goto dropped; 184 goto dropped;
187 break; 185 break;
188 case GW_MODE_CLIENT: 186 case GW_MODE_CLIENT:
189 /* gateway clients should send dhcp requests 187 /* gateway clients should send dhcp requests
190 * via unicast to their gateway */ 188 * via unicast to their gateway
189 */
191 ret = batadv_gw_is_dhcp_target(skb, &header_len); 190 ret = batadv_gw_is_dhcp_target(skb, &header_len);
192 if (ret) 191 if (ret)
193 do_bcast = false; 192 do_bcast = false;
@@ -215,7 +214,8 @@ static int interface_tx(struct sk_buff *skb, struct net_device *soft_iface)
215 bcast_packet->header.packet_type = BAT_BCAST; 214 bcast_packet->header.packet_type = BAT_BCAST;
216 215
217 /* hw address of first interface is the orig mac because only 216 /* hw address of first interface is the orig mac because only
218 * this mac is known throughout the mesh */ 217 * this mac is known throughout the mesh
218 */
219 memcpy(bcast_packet->orig, 219 memcpy(bcast_packet->orig,
220 primary_if->net_dev->dev_addr, ETH_ALEN); 220 primary_if->net_dev->dev_addr, ETH_ALEN);
221 221
@@ -226,7 +226,8 @@ static int interface_tx(struct sk_buff *skb, struct net_device *soft_iface)
226 batadv_add_bcast_packet_to_list(bat_priv, skb, 1); 226 batadv_add_bcast_packet_to_list(bat_priv, skb, 1);
227 227
228 /* a copy is stored in the bcast list, therefore removing 228 /* a copy is stored in the bcast list, therefore removing
229 * the original skb. */ 229 * the original skb.
230 */
230 kfree_skb(skb); 231 kfree_skb(skb);
231 232
232 /* unicast packet */ 233 /* unicast packet */
@@ -294,9 +295,10 @@ void batadv_interface_rx(struct net_device *soft_iface,
294 295
295 /* should not be necessary anymore as we use skb_pull_rcsum() 296 /* should not be necessary anymore as we use skb_pull_rcsum()
296 * TODO: please verify this and remove this TODO 297 * TODO: please verify this and remove this TODO
297 * -- Dec 21st 2009, Simon Wunderlich */ 298 * -- Dec 21st 2009, Simon Wunderlich
299 */
298 300
299/* skb->ip_summed = CHECKSUM_UNNECESSARY;*/ 301 /* skb->ip_summed = CHECKSUM_UNNECESSARY; */
300 302
301 bat_priv->stats.rx_packets++; 303 bat_priv->stats.rx_packets++;
302 bat_priv->stats.rx_bytes += skb->len + ETH_HLEN; 304 bat_priv->stats.rx_bytes += skb->len + ETH_HLEN;
@@ -341,8 +343,7 @@ static void interface_setup(struct net_device *dev)
341 dev->destructor = free_netdev; 343 dev->destructor = free_netdev;
342 dev->tx_queue_len = 0; 344 dev->tx_queue_len = 0;
343 345
344 /** 346 /* can't call min_mtu, because the needed variables
345 * can't call min_mtu, because the needed variables
346 * have not been initialized yet 347 * have not been initialized yet
347 */ 348 */
348 dev->mtu = ETH_DATA_LEN; 349 dev->mtu = ETH_DATA_LEN;
diff --git a/net/batman-adv/soft-interface.h b/net/batman-adv/soft-interface.h
index 7e2bfafbcb79..2711ba5b1233 100644
--- a/net/batman-adv/soft-interface.h
+++ b/net/batman-adv/soft-interface.h
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner 3 * Marek Lindner
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#ifndef _NET_BATMAN_ADV_SOFT_INTERFACE_H_ 20#ifndef _NET_BATMAN_ADV_SOFT_INTERFACE_H_
diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c
index 66e11b58312e..5180d50e909d 100644
--- a/net/batman-adv/translation-table.c
+++ b/net/batman-adv/translation-table.c
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner, Simon Wunderlich, Antonio Quartulli 3 * Marek Lindner, Simon Wunderlich, Antonio Quartulli
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#include "main.h" 20#include "main.h"
@@ -232,7 +230,8 @@ void batadv_tt_local_add(struct net_device *soft_iface, const uint8_t *addr,
232 230
233 /* The local entry has to be marked as NEW to avoid to send it in 231 /* The local entry has to be marked as NEW to avoid to send it in
234 * a full table response going out before the next ttvn increment 232 * a full table response going out before the next ttvn increment
235 * (consistency check) */ 233 * (consistency check)
234 */
236 tt_local_entry->common.flags |= TT_CLIENT_NEW; 235 tt_local_entry->common.flags |= TT_CLIENT_NEW;
237 236
238 hash_added = hash_add(bat_priv->tt_local_hash, compare_tt, choose_orig, 237 hash_added = hash_add(bat_priv->tt_local_hash, compare_tt, choose_orig,
@@ -437,7 +436,8 @@ static void tt_local_set_pending(struct bat_priv *bat_priv,
437 436
438 /* The local client has to be marked as "pending to be removed" but has 437 /* The local client has to be marked as "pending to be removed" but has
439 * to be kept in the table in order to send it in a full table 438 * to be kept in the table in order to send it in a full table
440 * response issued before the net ttvn increment (consistency check) */ 439 * response issued before the net ttvn increment (consistency check)
440 */
441 tt_local_entry->common.flags |= TT_CLIENT_PENDING; 441 tt_local_entry->common.flags |= TT_CLIENT_PENDING;
442 442
443 bat_dbg(DBG_TT, bat_priv, 443 bat_dbg(DBG_TT, bat_priv,
@@ -898,8 +898,8 @@ static void tt_global_del(struct bat_priv *bat_priv,
898 * If there are other originators left, we directly delete 898 * If there are other originators left, we directly delete
899 * the originator. 899 * the originator.
900 * 2) the client roamed to us => we can directly delete 900 * 2) the client roamed to us => we can directly delete
901 * the global entry, since it is useless now. */ 901 * the global entry, since it is useless now.
902 902 */
903 tt_local_entry = tt_local_hash_find(bat_priv, 903 tt_local_entry = tt_local_hash_find(bat_priv,
904 tt_global_entry->common.addr); 904 tt_global_entry->common.addr);
905 if (tt_local_entry) { 905 if (tt_local_entry) {
@@ -1072,7 +1072,8 @@ struct orig_node *batadv_transtable_search(struct bat_priv *bat_priv,
1072 goto out; 1072 goto out;
1073 1073
1074 /* check whether the clients should not communicate due to AP 1074 /* check whether the clients should not communicate due to AP
1075 * isolation */ 1075 * isolation
1076 */
1076 if (tt_local_entry && _is_ap_isolated(tt_local_entry, tt_global_entry)) 1077 if (tt_local_entry && _is_ap_isolated(tt_local_entry, tt_global_entry))
1077 goto out; 1078 goto out;
1078 1079
@@ -1171,7 +1172,8 @@ static uint16_t batadv_tt_local_crc(struct bat_priv *bat_priv)
1171 hlist_for_each_entry_rcu(tt_common_entry, node, 1172 hlist_for_each_entry_rcu(tt_common_entry, node,
1172 head, hash_entry) { 1173 head, hash_entry) {
1173 /* not yet committed clients have not to be taken into 1174 /* not yet committed clients have not to be taken into
1174 * account while computing the CRC */ 1175 * account while computing the CRC
1176 */
1175 if (tt_common_entry->flags & TT_CLIENT_NEW) 1177 if (tt_common_entry->flags & TT_CLIENT_NEW)
1176 continue; 1178 continue;
1177 total_one = 0; 1179 total_one = 0;
@@ -1208,7 +1210,8 @@ static void tt_save_orig_buffer(struct bat_priv *bat_priv,
1208 uint16_t tt_buff_len = batadv_tt_len(tt_num_changes); 1210 uint16_t tt_buff_len = batadv_tt_len(tt_num_changes);
1209 1211
1210 /* Replace the old buffer only if I received something in the 1212 /* Replace the old buffer only if I received something in the
1211 * last OGM (the OGM could carry no changes) */ 1213 * last OGM (the OGM could carry no changes)
1214 */
1212 spin_lock_bh(&orig_node->tt_buff_lock); 1215 spin_lock_bh(&orig_node->tt_buff_lock);
1213 if (tt_buff_len > 0) { 1216 if (tt_buff_len > 0) {
1214 kfree(orig_node->tt_buff); 1217 kfree(orig_node->tt_buff);
@@ -1237,7 +1240,8 @@ static void tt_req_purge(struct bat_priv *bat_priv)
1237} 1240}
1238 1241
1239/* returns the pointer to the new tt_req_node struct if no request 1242/* returns the pointer to the new tt_req_node struct if no request
1240 * has already been issued for this orig_node, NULL otherwise */ 1243 * has already been issued for this orig_node, NULL otherwise
1244 */
1241static struct tt_req_node *new_tt_req_node(struct bat_priv *bat_priv, 1245static struct tt_req_node *new_tt_req_node(struct bat_priv *bat_priv,
1242 struct orig_node *orig_node) 1246 struct orig_node *orig_node)
1243{ 1247{
@@ -1347,7 +1351,8 @@ static struct sk_buff *tt_response_fill_table(uint16_t tt_len, uint8_t ttvn,
1347 rcu_read_unlock(); 1351 rcu_read_unlock();
1348 1352
1349 /* store in the message the number of entries we have successfully 1353 /* store in the message the number of entries we have successfully
1350 * copied */ 1354 * copied
1355 */
1351 tt_response->tt_data = htons(tt_count); 1356 tt_response->tt_data = htons(tt_count);
1352 1357
1353out: 1358out:
@@ -1370,7 +1375,8 @@ static int send_tt_request(struct bat_priv *bat_priv,
1370 goto out; 1375 goto out;
1371 1376
1372 /* The new tt_req will be issued only if I'm not waiting for a 1377 /* The new tt_req will be issued only if I'm not waiting for a
1373 * reply from the same orig_node yet */ 1378 * reply from the same orig_node yet
1379 */
1374 tt_req_node = new_tt_req_node(bat_priv, dst_orig_node); 1380 tt_req_node = new_tt_req_node(bat_priv, dst_orig_node);
1375 if (!tt_req_node) 1381 if (!tt_req_node)
1376 goto out; 1382 goto out;
@@ -1478,7 +1484,8 @@ static bool send_other_tt_response(struct bat_priv *bat_priv,
1478 full_table = false; 1484 full_table = false;
1479 1485
1480 /* In this version, fragmentation is not implemented, then 1486 /* In this version, fragmentation is not implemented, then
1481 * I'll send only one packet with as much TT entries as I can */ 1487 * I'll send only one packet with as much TT entries as I can
1488 */
1482 if (!full_table) { 1489 if (!full_table) {
1483 spin_lock_bh(&req_dst_orig_node->tt_buff_lock); 1490 spin_lock_bh(&req_dst_orig_node->tt_buff_lock);
1484 tt_len = req_dst_orig_node->tt_buff_len; 1491 tt_len = req_dst_orig_node->tt_buff_len;
@@ -1590,7 +1597,8 @@ static bool send_my_tt_response(struct bat_priv *bat_priv,
1590 goto out; 1597 goto out;
1591 1598
1592 /* If the full table has been explicitly requested or the gap 1599 /* If the full table has been explicitly requested or the gap
1593 * is too big send the whole local translation table */ 1600 * is too big send the whole local translation table
1601 */
1594 if (tt_request->flags & TT_FULL_TABLE || my_ttvn != req_ttvn || 1602 if (tt_request->flags & TT_FULL_TABLE || my_ttvn != req_ttvn ||
1595 !bat_priv->tt_buff) 1603 !bat_priv->tt_buff)
1596 full_table = true; 1604 full_table = true;
@@ -1598,7 +1606,8 @@ static bool send_my_tt_response(struct bat_priv *bat_priv,
1598 full_table = false; 1606 full_table = false;
1599 1607
1600 /* In this version, fragmentation is not implemented, then 1608 /* In this version, fragmentation is not implemented, then
1601 * I'll send only one packet with as much TT entries as I can */ 1609 * I'll send only one packet with as much TT entries as I can
1610 */
1602 if (!full_table) { 1611 if (!full_table) {
1603 spin_lock_bh(&bat_priv->tt_buff_lock); 1612 spin_lock_bh(&bat_priv->tt_buff_lock);
1604 tt_len = bat_priv->tt_buff_len; 1613 tt_len = bat_priv->tt_buff_len;
@@ -1766,7 +1775,8 @@ bool batadv_is_my_client(struct bat_priv *bat_priv, const uint8_t *addr)
1766 if (!tt_local_entry) 1775 if (!tt_local_entry)
1767 goto out; 1776 goto out;
1768 /* Check if the client has been logically deleted (but is kept for 1777 /* Check if the client has been logically deleted (but is kept for
1769 * consistency purpose) */ 1778 * consistency purpose)
1779 */
1770 if (tt_local_entry->common.flags & TT_CLIENT_PENDING) 1780 if (tt_local_entry->common.flags & TT_CLIENT_PENDING)
1771 goto out; 1781 goto out;
1772 ret = true; 1782 ret = true;
@@ -1817,7 +1827,8 @@ void batadv_handle_tt_response(struct bat_priv *bat_priv,
1817 /* Recalculate the CRC for this orig_node and store it */ 1827 /* Recalculate the CRC for this orig_node and store it */
1818 orig_node->tt_crc = tt_global_crc(bat_priv, orig_node); 1828 orig_node->tt_crc = tt_global_crc(bat_priv, orig_node);
1819 /* Roaming phase is over: tables are in sync again. I can 1829 /* Roaming phase is over: tables are in sync again. I can
1820 * unset the flag */ 1830 * unset the flag
1831 */
1821 orig_node->tt_poss_change = false; 1832 orig_node->tt_poss_change = false;
1822out: 1833out:
1823 if (orig_node) 1834 if (orig_node)
@@ -1874,7 +1885,8 @@ static void tt_roam_purge(struct bat_priv *bat_priv)
1874 * maximum number of possible roaming phases. In this case the ROAMING_ADV 1885 * maximum number of possible roaming phases. In this case the ROAMING_ADV
1875 * will not be sent. 1886 * will not be sent.
1876 * 1887 *
1877 * returns true if the ROAMING_ADV can be sent, false otherwise */ 1888 * returns true if the ROAMING_ADV can be sent, false otherwise
1889 */
1878static bool tt_check_roam_count(struct bat_priv *bat_priv, 1890static bool tt_check_roam_count(struct bat_priv *bat_priv,
1879 uint8_t *client) 1891 uint8_t *client)
1880{ 1892{
@@ -1883,7 +1895,8 @@ static bool tt_check_roam_count(struct bat_priv *bat_priv,
1883 1895
1884 spin_lock_bh(&bat_priv->tt_roam_list_lock); 1896 spin_lock_bh(&bat_priv->tt_roam_list_lock);
1885 /* The new tt_req will be issued only if I'm not waiting for a 1897 /* The new tt_req will be issued only if I'm not waiting for a
1886 * reply from the same orig_node yet */ 1898 * reply from the same orig_node yet
1899 */
1887 list_for_each_entry(tt_roam_node, &bat_priv->tt_roam_list, list) { 1900 list_for_each_entry(tt_roam_node, &bat_priv->tt_roam_list, list) {
1888 if (!compare_eth(tt_roam_node->addr, client)) 1901 if (!compare_eth(tt_roam_node->addr, client))
1889 continue; 1902 continue;
@@ -1926,7 +1939,8 @@ static void send_roam_adv(struct bat_priv *bat_priv, uint8_t *client,
1926 struct hard_iface *primary_if; 1939 struct hard_iface *primary_if;
1927 1940
1928 /* before going on we have to check whether the client has 1941 /* before going on we have to check whether the client has
1929 * already roamed to us too many times */ 1942 * already roamed to us too many times
1943 */
1930 if (!tt_check_roam_count(bat_priv, client)) 1944 if (!tt_check_roam_count(bat_priv, client))
1931 goto out; 1945 goto out;
1932 1946
@@ -2000,7 +2014,8 @@ void batadv_tt_free(struct bat_priv *bat_priv)
2000} 2014}
2001 2015
2002/* This function will enable or disable the specified flags for all the entries 2016/* This function will enable or disable the specified flags for all the entries
2003 * in the given hash table and returns the number of modified entries */ 2017 * in the given hash table and returns the number of modified entries
2018 */
2004static uint16_t tt_set_flags(struct hashtable_t *hash, uint16_t flags, 2019static uint16_t tt_set_flags(struct hashtable_t *hash, uint16_t flags,
2005 bool enable) 2020 bool enable)
2006{ 2021{
@@ -2172,12 +2187,14 @@ void batadv_tt_update_orig(struct bat_priv *bat_priv,
2172 return; 2187 return;
2173 2188
2174 /* orig table not initialised AND first diff is in the OGM OR the ttvn 2189 /* orig table not initialised AND first diff is in the OGM OR the ttvn
2175 * increased by one -> we can apply the attached changes */ 2190 * increased by one -> we can apply the attached changes
2191 */
2176 if ((!orig_node->tt_initialised && ttvn == 1) || 2192 if ((!orig_node->tt_initialised && ttvn == 1) ||
2177 ttvn - orig_ttvn == 1) { 2193 ttvn - orig_ttvn == 1) {
2178 /* the OGM could not contain the changes due to their size or 2194 /* the OGM could not contain the changes due to their size or
2179 * because they have already been sent TT_OGM_APPEND_MAX times. 2195 * because they have already been sent TT_OGM_APPEND_MAX times.
2180 * In this case send a tt request */ 2196 * In this case send a tt request
2197 */
2181 if (!tt_num_changes) { 2198 if (!tt_num_changes) {
2182 full_table = false; 2199 full_table = false;
2183 goto request_table; 2200 goto request_table;
@@ -2188,7 +2205,8 @@ void batadv_tt_update_orig(struct bat_priv *bat_priv,
2188 2205
2189 /* Even if we received the precomputed crc with the OGM, we 2206 /* Even if we received the precomputed crc with the OGM, we
2190 * prefer to recompute it to spot any possible inconsistency 2207 * prefer to recompute it to spot any possible inconsistency
2191 * in the global table */ 2208 * in the global table
2209 */
2192 orig_node->tt_crc = tt_global_crc(bat_priv, orig_node); 2210 orig_node->tt_crc = tt_global_crc(bat_priv, orig_node);
2193 2211
2194 /* The ttvn alone is not enough to guarantee consistency 2212 /* The ttvn alone is not enough to guarantee consistency
@@ -2198,17 +2216,19 @@ void batadv_tt_update_orig(struct bat_priv *bat_priv,
2198 * consistent or not. E.g. a node could disconnect while its 2216 * consistent or not. E.g. a node could disconnect while its
2199 * ttvn is X and reconnect on ttvn = X + TTVN_MAX: in this case 2217 * ttvn is X and reconnect on ttvn = X + TTVN_MAX: in this case
2200 * checking the CRC value is mandatory to detect the 2218 * checking the CRC value is mandatory to detect the
2201 * inconsistency */ 2219 * inconsistency
2220 */
2202 if (orig_node->tt_crc != tt_crc) 2221 if (orig_node->tt_crc != tt_crc)
2203 goto request_table; 2222 goto request_table;
2204 2223
2205 /* Roaming phase is over: tables are in sync again. I can 2224 /* Roaming phase is over: tables are in sync again. I can
2206 * unset the flag */ 2225 * unset the flag
2226 */
2207 orig_node->tt_poss_change = false; 2227 orig_node->tt_poss_change = false;
2208 } else { 2228 } else {
2209 /* if we missed more than one change or our tables are not 2229 /* if we missed more than one change or our tables are not
2210 * in sync anymore -> request fresh tt data */ 2230 * in sync anymore -> request fresh tt data
2211 2231 */
2212 if (!orig_node->tt_initialised || ttvn != orig_ttvn || 2232 if (!orig_node->tt_initialised || ttvn != orig_ttvn ||
2213 orig_node->tt_crc != tt_crc) { 2233 orig_node->tt_crc != tt_crc) {
2214request_table: 2234request_table:
diff --git a/net/batman-adv/translation-table.h b/net/batman-adv/translation-table.h
index fe1281a71685..7edc9dff8ba1 100644
--- a/net/batman-adv/translation-table.h
+++ b/net/batman-adv/translation-table.h
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner, Simon Wunderlich, Antonio Quartulli 3 * Marek Lindner, Simon Wunderlich, Antonio Quartulli
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#ifndef _NET_BATMAN_ADV_TRANSLATION_TABLE_H_ 20#ifndef _NET_BATMAN_ADV_TRANSLATION_TABLE_H_
diff --git a/net/batman-adv/types.h b/net/batman-adv/types.h
index bf71d525445a..053c5d4776ce 100644
--- a/net/batman-adv/types.h
+++ b/net/batman-adv/types.h
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Marek Lindner, Simon Wunderlich 3 * Marek Lindner, Simon Wunderlich
5 * 4 *
@@ -16,11 +15,8 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22
23
24#ifndef _NET_BATMAN_ADV_TYPES_H_ 20#ifndef _NET_BATMAN_ADV_TYPES_H_
25#define _NET_BATMAN_ADV_TYPES_H_ 21#define _NET_BATMAN_ADV_TYPES_H_
26 22
@@ -49,8 +45,7 @@ struct hard_iface {
49 struct rcu_head rcu; 45 struct rcu_head rcu;
50}; 46};
51 47
52/** 48/* orig_node - structure for orig_list maintaining nodes of mesh
53 * orig_node - structure for orig_list maintaining nodes of mesh
54 * @primary_addr: hosts primary interface address 49 * @primary_addr: hosts primary interface address
55 * @last_seen: when last packet from this node was received 50 * @last_seen: when last packet from this node was received
56 * @bcast_seqno_reset: time when the broadcast seqno window was reset 51 * @bcast_seqno_reset: time when the broadcast seqno window was reset
@@ -86,7 +81,8 @@ struct orig_node {
86 * If true, then I sent a Roaming_adv to this orig_node and I have to 81 * If true, then I sent a Roaming_adv to this orig_node and I have to
87 * inspect every packet directed to it to check whether it is still 82 * inspect every packet directed to it to check whether it is still
88 * the true destination or not. This flag will be reset to false as 83 * the true destination or not. This flag will be reset to false as
89 * soon as I receive a new TTVN from this orig_node */ 84 * soon as I receive a new TTVN from this orig_node
85 */
90 bool tt_poss_change; 86 bool tt_poss_change;
91 uint32_t last_real_seqno; 87 uint32_t last_real_seqno;
92 uint8_t last_ttl; 88 uint8_t last_ttl;
@@ -101,7 +97,8 @@ struct orig_node {
101 struct bat_priv *bat_priv; 97 struct bat_priv *bat_priv;
102 unsigned long last_frag_packet; 98 unsigned long last_frag_packet;
103 /* ogm_cnt_lock protects: bcast_own, bcast_own_sum, 99 /* ogm_cnt_lock protects: bcast_own, bcast_own_sum,
104 * neigh_node->real_bits, neigh_node->real_packet_count */ 100 * neigh_node->real_bits, neigh_node->real_packet_count
101 */
105 spinlock_t ogm_cnt_lock; 102 spinlock_t ogm_cnt_lock;
106 /* bcast_seqno_lock protects bcast_bits, last_bcast_seqno */ 103 /* bcast_seqno_lock protects bcast_bits, last_bcast_seqno */
107 spinlock_t bcast_seqno_lock; 104 spinlock_t bcast_seqno_lock;
@@ -118,8 +115,7 @@ struct gw_node {
118 struct rcu_head rcu; 115 struct rcu_head rcu;
119}; 116};
120 117
121/** 118/* neigh_node
122 * neigh_node
123 * @last_seen: when last packet via this neighbor was received 119 * @last_seen: when last packet via this neighbor was received
124 */ 120 */
125struct neigh_node { 121struct neigh_node {
@@ -191,7 +187,8 @@ struct bat_priv {
191 * If true, then I received a Roaming_adv and I have to inspect every 187 * If true, then I received a Roaming_adv and I have to inspect every
192 * packet directed to me to check whether I am still the true 188 * packet directed to me to check whether I am still the true
193 * destination or not. This flag will be reset to false as soon as I 189 * destination or not. This flag will be reset to false as soon as I
194 * increase my TTVN */ 190 * increase my TTVN
191 */
195 bool tt_poss_change; 192 bool tt_poss_change;
196 char num_ifaces; 193 char num_ifaces;
197 struct debug_log *debug_log; 194 struct debug_log *debug_log;
@@ -326,8 +323,7 @@ struct tt_roam_node {
326 struct list_head list; 323 struct list_head list;
327}; 324};
328 325
329/** 326/* forw_packet - structure for forw_list maintaining packets to be
330 * forw_packet - structure for forw_list maintaining packets to be
331 * send/forwarded 327 * send/forwarded
332 */ 328 */
333struct forw_packet { 329struct forw_packet {
@@ -369,7 +365,8 @@ struct frag_packet_list_entry {
369struct vis_info { 365struct vis_info {
370 unsigned long first_seen; 366 unsigned long first_seen;
371 /* list of server-neighbors we received a vis-packet 367 /* list of server-neighbors we received a vis-packet
372 * from. we should not reply to them. */ 368 * from. we should not reply to them.
369 */
373 struct list_head recv_list; 370 struct list_head recv_list;
374 struct list_head send_list; 371 struct list_head send_list;
375 struct kref refcount; 372 struct kref refcount;
@@ -377,7 +374,7 @@ struct vis_info {
377 struct bat_priv *bat_priv; 374 struct bat_priv *bat_priv;
378 /* this packet might be part of the vis send queue. */ 375 /* this packet might be part of the vis send queue. */
379 struct sk_buff *skb_packet; 376 struct sk_buff *skb_packet;
380 /* vis_info may follow here*/ 377 /* vis_info may follow here */
381} __packed; 378} __packed;
382 379
383struct vis_info_entry { 380struct vis_info_entry {
diff --git a/net/batman-adv/unicast.c b/net/batman-adv/unicast.c
index e9d3bdd4e3d6..b2b76df69607 100644
--- a/net/batman-adv/unicast.c
+++ b/net/batman-adv/unicast.c
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2010-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2010-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Andreas Langer 3 * Andreas Langer
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#include "main.h" 20#include "main.h"
@@ -300,12 +298,12 @@ int batadv_unicast_send_skb(struct sk_buff *skb, struct bat_priv *bat_priv)
300 } 298 }
301 299
302 /* check for tt host - increases orig_node refcount. 300 /* check for tt host - increases orig_node refcount.
303 * returns NULL in case of AP isolation */ 301 * returns NULL in case of AP isolation
302 */
304 orig_node = batadv_transtable_search(bat_priv, ethhdr->h_source, 303 orig_node = batadv_transtable_search(bat_priv, ethhdr->h_source,
305 ethhdr->h_dest); 304 ethhdr->h_dest);
306find_router: 305find_router:
307 /** 306 /* find_router():
308 * find_router():
309 * - if orig_node is NULL it returns NULL 307 * - if orig_node is NULL it returns NULL
310 * - increases neigh_nodes refcount if found. 308 * - increases neigh_nodes refcount if found.
311 */ 309 */
diff --git a/net/batman-adv/unicast.h b/net/batman-adv/unicast.h
index 657fe7392b14..87f8f89d1440 100644
--- a/net/batman-adv/unicast.h
+++ b/net/batman-adv/unicast.h
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2010-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2010-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Andreas Langer 3 * Andreas Langer
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#ifndef _NET_BATMAN_ADV_UNICAST_H_ 20#ifndef _NET_BATMAN_ADV_UNICAST_H_
diff --git a/net/batman-adv/vis.c b/net/batman-adv/vis.c
index 83c931fa5c21..20eef04645bd 100644
--- a/net/batman-adv/vis.c
+++ b/net/batman-adv/vis.c
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2008-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2008-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Simon Wunderlich 3 * Simon Wunderlich
5 * 4 *
@@ -16,7 +15,6 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#include "main.h" 20#include "main.h"
@@ -64,8 +62,9 @@ static int vis_info_cmp(const struct hlist_node *node, const void *data2)
64 return compare_eth(p1->vis_orig, p2->vis_orig); 62 return compare_eth(p1->vis_orig, p2->vis_orig);
65} 63}
66 64
67/* hash function to choose an entry in a hash table of given size */ 65/* hash function to choose an entry in a hash table of given size
68/* hash algorithm from http://en.wikipedia.org/wiki/Hash_table */ 66 * hash algorithm from http://en.wikipedia.org/wiki/Hash_table
67 */
69static uint32_t vis_info_choose(const void *data, uint32_t size) 68static uint32_t vis_info_choose(const void *data, uint32_t size)
70{ 69{
71 const struct vis_info *vis_info = data; 70 const struct vis_info *vis_info = data;
@@ -118,7 +117,8 @@ static struct vis_info *vis_hash_find(struct bat_priv *bat_priv,
118} 117}
119 118
120/* insert interface to the list of interfaces of one originator, if it 119/* insert interface to the list of interfaces of one originator, if it
121 * does not already exist in the list */ 120 * does not already exist in the list
121 */
122static void vis_data_insert_interface(const uint8_t *interface, 122static void vis_data_insert_interface(const uint8_t *interface,
123 struct hlist_head *if_list, 123 struct hlist_head *if_list,
124 bool primary) 124 bool primary)
@@ -334,7 +334,8 @@ out:
334} 334}
335 335
336/* add the info packet to the send list, if it was not 336/* add the info packet to the send list, if it was not
337 * already linked in. */ 337 * already linked in.
338 */
338static void send_list_add(struct bat_priv *bat_priv, struct vis_info *info) 339static void send_list_add(struct bat_priv *bat_priv, struct vis_info *info)
339{ 340{
340 if (list_empty(&info->send_list)) { 341 if (list_empty(&info->send_list)) {
@@ -344,7 +345,8 @@ static void send_list_add(struct bat_priv *bat_priv, struct vis_info *info)
344} 345}
345 346
346/* delete the info packet from the send list, if it was 347/* delete the info packet from the send list, if it was
347 * linked in. */ 348 * linked in.
349 */
348static void send_list_del(struct vis_info *info) 350static void send_list_del(struct vis_info *info)
349{ 351{
350 if (!list_empty(&info->send_list)) { 352 if (!list_empty(&info->send_list)) {
@@ -388,7 +390,8 @@ static int recv_list_is_in(struct bat_priv *bat_priv,
388 390
389/* try to add the packet to the vis_hash. return NULL if invalid (e.g. too old, 391/* try to add the packet to the vis_hash. return NULL if invalid (e.g. too old,
390 * broken.. ). vis hash must be locked outside. is_new is set when the packet 392 * broken.. ). vis hash must be locked outside. is_new is set when the packet
391 * is newer than old entries in the hash. */ 393 * is newer than old entries in the hash.
394 */
392static struct vis_info *add_packet(struct bat_priv *bat_priv, 395static struct vis_info *add_packet(struct bat_priv *bat_priv,
393 struct vis_packet *vis_packet, 396 struct vis_packet *vis_packet,
394 int vis_info_len, int *is_new, 397 int vis_info_len, int *is_new,
@@ -500,7 +503,8 @@ void batadv_receive_server_sync_packet(struct bat_priv *bat_priv,
500 goto end; 503 goto end;
501 504
502 /* only if we are server ourselves and packet is newer than the one in 505 /* only if we are server ourselves and packet is newer than the one in
503 * hash.*/ 506 * hash.
507 */
504 if (vis_server == VIS_TYPE_SERVER_SYNC && is_new) 508 if (vis_server == VIS_TYPE_SERVER_SYNC && is_new)
505 send_list_add(bat_priv, info); 509 send_list_add(bat_priv, info);
506end: 510end:
@@ -554,7 +558,8 @@ end:
554/* Walk the originators and find the VIS server with the best tq. Set the packet 558/* Walk the originators and find the VIS server with the best tq. Set the packet
555 * address to its address and return the best_tq. 559 * address to its address and return the best_tq.
556 * 560 *
557 * Must be called with the originator hash locked */ 561 * Must be called with the originator hash locked
562 */
558static int find_best_vis_server(struct bat_priv *bat_priv, 563static int find_best_vis_server(struct bat_priv *bat_priv,
559 struct vis_info *info) 564 struct vis_info *info)
560{ 565{
@@ -605,7 +610,8 @@ static bool vis_packet_full(const struct vis_info *info)
605} 610}
606 611
607/* generates a packet of own vis data, 612/* generates a packet of own vis data,
608 * returns 0 on success, -1 if no packet could be generated */ 613 * returns 0 on success, -1 if no packet could be generated
614 */
609static int generate_vis_packet(struct bat_priv *bat_priv) 615static int generate_vis_packet(struct bat_priv *bat_priv)
610{ 616{
611 struct hashtable_t *hash = bat_priv->orig_hash; 617 struct hashtable_t *hash = bat_priv->orig_hash;
@@ -703,7 +709,8 @@ unlock:
703} 709}
704 710
705/* free old vis packets. Must be called with this vis_hash_lock 711/* free old vis packets. Must be called with this vis_hash_lock
706 * held */ 712 * held
713 */
707static void purge_vis_packets(struct bat_priv *bat_priv) 714static void purge_vis_packets(struct bat_priv *bat_priv)
708{ 715{
709 uint32_t i; 716 uint32_t i;
@@ -762,7 +769,8 @@ static void broadcast_vis_packet(struct bat_priv *bat_priv,
762 continue; 769 continue;
763 770
764 /* don't send it if we already received the packet from 771 /* don't send it if we already received the packet from
765 * this node. */ 772 * this node.
773 */
766 if (recv_list_is_in(bat_priv, &info->recv_list, 774 if (recv_list_is_in(bat_priv, &info->recv_list,
767 orig_node->orig)) { 775 orig_node->orig)) {
768 batadv_neigh_node_free_ref(router); 776 batadv_neigh_node_free_ref(router);
@@ -879,7 +887,8 @@ static void send_vis_packets(struct work_struct *work)
879} 887}
880 888
881/* init the vis server. this may only be called when if_list is already 889/* init the vis server. this may only be called when if_list is already
882 * initialized (e.g. bat0 is initialized, interfaces have been added) */ 890 * initialized (e.g. bat0 is initialized, interfaces have been added)
891 */
883int batadv_vis_init(struct bat_priv *bat_priv) 892int batadv_vis_init(struct bat_priv *bat_priv)
884{ 893{
885 struct vis_packet *packet; 894 struct vis_packet *packet;
diff --git a/net/batman-adv/vis.h b/net/batman-adv/vis.h
index 932514e4b7d7..dad595870f8f 100644
--- a/net/batman-adv/vis.h
+++ b/net/batman-adv/vis.h
@@ -1,5 +1,4 @@
1/* 1/* Copyright (C) 2008-2012 B.A.T.M.A.N. contributors:
2 * Copyright (C) 2008-2012 B.A.T.M.A.N. contributors:
3 * 2 *
4 * Simon Wunderlich, Marek Lindner 3 * Simon Wunderlich, Marek Lindner
5 * 4 *
@@ -16,14 +15,13 @@
16 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301, USA 17 * 02110-1301, USA
19 *
20 */ 18 */
21 19
22#ifndef _NET_BATMAN_ADV_VIS_H_ 20#ifndef _NET_BATMAN_ADV_VIS_H_
23#define _NET_BATMAN_ADV_VIS_H_ 21#define _NET_BATMAN_ADV_VIS_H_
24 22
25#define VIS_TIMEOUT 200000 /* timeout of vis packets 23/* timeout of vis packets in miliseconds */
26 * in miliseconds */ 24#define VIS_TIMEOUT 200000
27 25
28int batadv_vis_seq_print_text(struct seq_file *seq, void *offset); 26int batadv_vis_seq_print_text(struct seq_file *seq, void *offset);
29void batadv_receive_server_sync_packet(struct bat_priv *bat_priv, 27void batadv_receive_server_sync_packet(struct bat_priv *bat_priv,