r1489 - trunk/batman-adv-kernelland
by postmaster@open-mesh.net
Author: simon
Date: 2009-11-28 20:11:09 +0000 (Sat, 28 Nov 2009)
New Revision: 1489
Modified:
trunk/batman-adv-kernelland/routing.c
Log:
if discarding a packet, we need to read it under any condition.
Modified: trunk/batman-adv-kernelland/routing.c
===================================================================
--- trunk/batman-adv-kernelland/routing.c 2009-11-28 20:09:17 UTC (rev 1488)
+++ trunk/batman-adv-kernelland/routing.c 2009-11-28 20:11:09 UTC (rev 1489)
@@ -968,8 +968,7 @@
{
int result = -EAGAIN;
- if ((batman_if->if_active == IF_TO_BE_ACTIVATED)
- && (batman_if->raw_sock)) {
+ if (batman_if->raw_sock) {
result = receive_raw_packet(batman_if->raw_sock,
packet_buff,
PACKBUFF_SIZE);
13 years, 2 months
r1488 - trunk/batman-adv-kernelland
by postmaster@open-mesh.net
Author: simon
Date: 2009-11-28 20:09:17 +0000 (Sat, 28 Nov 2009)
New Revision: 1488
Added:
trunk/batman-adv-kernelland/originator.c
trunk/batman-adv-kernelland/originator.h
Modified:
trunk/batman-adv-kernelland/Makefile.kbuild
trunk/batman-adv-kernelland/main.c
trunk/batman-adv-kernelland/routing.c
trunk/batman-adv-kernelland/routing.h
Log:
split originator handling parts off routing.c
Modified: trunk/batman-adv-kernelland/Makefile.kbuild
===================================================================
--- trunk/batman-adv-kernelland/Makefile.kbuild 2009-11-28 18:44:04 UTC (rev 1487)
+++ trunk/batman-adv-kernelland/Makefile.kbuild 2009-11-28 20:09:17 UTC (rev 1488)
@@ -32,4 +32,4 @@
endif
obj-m += batman-adv.o
-batman-adv-objs := main.o proc.o send.o routing.o soft-interface.o device.o translation-table.o bitarray.o hash.o ring_buffer.o vis.o hard-interface.o aggregation.o
+batman-adv-objs := main.o proc.o send.o routing.o soft-interface.o device.o translation-table.o bitarray.o hash.o ring_buffer.o vis.o hard-interface.o aggregation.o originator.o
Modified: trunk/batman-adv-kernelland/main.c
===================================================================
--- trunk/batman-adv-kernelland/main.c 2009-11-28 18:44:04 UTC (rev 1487)
+++ trunk/batman-adv-kernelland/main.c 2009-11-28 20:09:17 UTC (rev 1488)
@@ -23,6 +23,7 @@
#include "proc.h"
#include "routing.h"
#include "send.h"
+#include "originator.h"
#include "soft-interface.h"
#include "device.h"
#include "translation-table.h"
Added: trunk/batman-adv-kernelland/originator.c
===================================================================
--- trunk/batman-adv-kernelland/originator.c (rev 0)
+++ trunk/batman-adv-kernelland/originator.c 2009-11-28 20:09:17 UTC (rev 1488)
@@ -0,0 +1,242 @@
+/*
+ * Copyright (C) 2009 B.A.T.M.A.N. contributors:
+ *
+ * Marek Lindner, Simon Wunderlich
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU General Public
+ * License as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ *
+ */
+
+/* increase the reference counter for this originator */
+
+#include "main.h"
+#include "originator.h"
+#include "hash.h"
+#include "translation-table.h"
+#include "routing.h"
+
+
+static DECLARE_DELAYED_WORK(purge_orig_wq, purge_orig);
+
+static void start_purge_timer(void)
+{
+ queue_delayed_work(bat_event_workqueue, &purge_orig_wq, 1 * HZ);
+}
+
+int originator_init(void)
+{
+ if (orig_hash)
+ return 1;
+
+ spin_lock(&orig_hash_lock);
+ orig_hash = hash_new(128, compare_orig, choose_orig);
+
+ if (!orig_hash)
+ goto err;
+
+ spin_unlock(&orig_hash_lock);
+ start_purge_timer();
+ return 1;
+
+err:
+ spin_unlock(&orig_hash_lock);
+ return 0;
+}
+
+void originator_free(void)
+{
+ if (!orig_hash)
+ return;
+
+ cancel_delayed_work_sync(&purge_orig_wq);
+
+ spin_lock(&orig_hash_lock);
+ hash_delete(orig_hash, free_orig_node);
+ orig_hash = NULL;
+ spin_unlock(&orig_hash_lock);
+}
+
+struct neigh_node *
+create_neighbor(struct orig_node *orig_node, struct orig_node *orig_neigh_node,
+ uint8_t *neigh, struct batman_if *if_incoming)
+{
+ struct neigh_node *neigh_node;
+
+ bat_dbg(DBG_BATMAN, "Creating new last-hop neighbour of originator\n");
+
+ neigh_node = kmalloc(sizeof(struct neigh_node), GFP_ATOMIC);
+ memset(neigh_node, 0, sizeof(struct neigh_node));
+ INIT_LIST_HEAD(&neigh_node->list);
+
+ memcpy(neigh_node->addr, neigh, ETH_ALEN);
+ neigh_node->orig_node = orig_neigh_node;
+ neigh_node->if_incoming = if_incoming;
+
+ list_add_tail(&neigh_node->list, &orig_node->neigh_list);
+ return neigh_node;
+}
+
+void free_orig_node(void *data)
+{
+ struct list_head *list_pos, *list_pos_tmp;
+ struct neigh_node *neigh_node;
+ struct orig_node *orig_node = (struct orig_node *)data;
+
+ /* for all neighbours towards this originator ... */
+ list_for_each_safe(list_pos, list_pos_tmp, &orig_node->neigh_list) {
+ neigh_node = list_entry(list_pos, struct neigh_node, list);
+
+ list_del(list_pos);
+ kfree(neigh_node);
+ }
+
+ hna_global_del_orig(orig_node, "originator timed out");
+
+ kfree(orig_node->bcast_own);
+ kfree(orig_node->bcast_own_sum);
+ kfree(orig_node);
+}
+
+/* this function finds or creates an originator entry for the given
+ * address if it does not exits */
+struct orig_node *get_orig_node(uint8_t *addr)
+{
+ struct orig_node *orig_node;
+ struct hashtable_t *swaphash;
+ char orig_str[ETH_STR_LEN];
+ int size;
+
+ orig_node = ((struct orig_node *)hash_find(orig_hash, addr));
+
+ if (orig_node != NULL)
+ return orig_node;
+
+ addr_to_string(orig_str, addr);
+ bat_dbg(DBG_BATMAN, "Creating new originator: %s \n", orig_str);
+
+ orig_node = kmalloc(sizeof(struct orig_node), GFP_ATOMIC);
+ memset(orig_node, 0, sizeof(struct orig_node));
+ INIT_LIST_HEAD(&orig_node->neigh_list);
+
+ memcpy(orig_node->orig, addr, ETH_ALEN);
+ orig_node->router = NULL;
+ orig_node->batman_if = NULL;
+ orig_node->hna_buff = NULL;
+
+ size = num_ifs * sizeof(TYPE_OF_WORD) * NUM_WORDS;
+
+ orig_node->bcast_own = kmalloc(size, GFP_ATOMIC);
+ memset(orig_node->bcast_own, 0, size);
+
+ size = num_ifs * sizeof(uint8_t);
+ orig_node->bcast_own_sum = kmalloc(size, GFP_ATOMIC);
+ memset(orig_node->bcast_own_sum, 0, size);
+
+ hash_add(orig_hash, orig_node);
+
+ if (orig_hash->elements * 4 > orig_hash->size) {
+ swaphash = hash_resize(orig_hash, orig_hash->size * 2);
+
+ if (swaphash == NULL)
+ printk(KERN_ERR
+ "batman-adv:Couldn't resize orig hash table \n");
+ else
+ orig_hash = swaphash;
+ }
+
+ return orig_node;
+}
+
+static bool purge_orig_neigbours(struct orig_node *orig_node,
+ struct neigh_node **best_neigh_node)
+{
+ struct list_head *list_pos, *list_pos_tmp;
+ char neigh_str[ETH_STR_LEN];
+ struct neigh_node *neigh_node;
+ bool neigh_purged = false;
+
+ *best_neigh_node = NULL;
+
+
+ /* for all neighbours towards this originator ... */
+ list_for_each_safe(list_pos, list_pos_tmp, &orig_node->neigh_list) {
+ neigh_node = list_entry(list_pos, struct neigh_node, list);
+
+ if (time_after(jiffies,
+ (neigh_node->last_valid +
+ ((PURGE_TIMEOUT * HZ) / 1000)))) {
+
+ addr_to_string(neigh_str, neigh_node->addr);
+ bat_dbg(DBG_BATMAN, "Neighbour timeout: originator %s, neighbour: %s, last_valid %lu\n", orig_str, neigh_str, (neigh_node->last_valid / HZ));
+
+ neigh_purged = true;
+ list_del(list_pos);
+ kfree(neigh_node);
+ } else {
+ if ((*best_neigh_node == NULL) ||
+ (neigh_node->tq_avg > (*best_neigh_node)->tq_avg))
+ *best_neigh_node = neigh_node;
+ }
+ }
+ return neigh_purged;
+}
+
+
+static bool purge_orig_node(struct orig_node *orig_node)
+{
+ struct neigh_node *best_neigh_node;
+ char orig_str[ETH_STR_LEN];
+
+ addr_to_string(orig_str, orig_node->orig);
+
+ if (time_after(jiffies,
+ (orig_node->last_valid +
+ ((2 * PURGE_TIMEOUT * HZ) / 1000)))) {
+
+ bat_dbg(DBG_BATMAN,
+ "Originator timeout: originator %s, last_valid %lu\n",
+ orig_str, (orig_node->last_valid / HZ));
+ return true;
+ } else {
+ if (purge_orig_neigbours(orig_node, &best_neigh_node))
+ update_routes(orig_node, best_neigh_node,
+ orig_node->hna_buff,
+ orig_node->hna_buff_len);
+ }
+ return false;
+}
+
+void purge_orig(struct work_struct *work)
+{
+ struct hash_it_t *hashit = NULL;
+ struct orig_node *orig_node;
+
+ spin_lock(&orig_hash_lock);
+
+ /* for all origins... */
+ while (NULL != (hashit = hash_iterate(orig_hash, hashit))) {
+ orig_node = hashit->bucket->data;
+ if (purge_orig_node(orig_node)) {
+ hash_remove_bucket(orig_hash, hashit);
+ free_orig_node(orig_node);
+ }
+ }
+
+ spin_unlock(&orig_hash_lock);
+
+ start_purge_timer();
+}
+
+
Added: trunk/batman-adv-kernelland/originator.h
===================================================================
--- trunk/batman-adv-kernelland/originator.h (rev 0)
+++ trunk/batman-adv-kernelland/originator.h 2009-11-28 20:09:17 UTC (rev 1488)
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2007-2009 B.A.T.M.A.N. contributors:
+ *
+ * Marek Lindner, Simon Wunderlich
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU General Public
+ * License as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ *
+ */
+
+int originator_init(void);
+void free_orig_node(void *data);
+void originator_free(void);
+void purge_orig(struct work_struct *work);
+struct orig_node *orig_find(char *mac);
+struct orig_node *get_orig_node(uint8_t *addr);
+struct neigh_node *
+create_neighbor(struct orig_node *orig_node, struct orig_node *orig_neigh_node,
+ uint8_t *neigh, struct batman_if *if_incoming);
+
Modified: trunk/batman-adv-kernelland/routing.c
===================================================================
--- trunk/batman-adv-kernelland/routing.c 2009-11-28 18:44:04 UTC (rev 1487)
+++ trunk/batman-adv-kernelland/routing.c 2009-11-28 20:09:17 UTC (rev 1488)
@@ -22,152 +22,22 @@
#include "main.h"
#include "routing.h"
#include "send.h"
+#include "hash.h"
#include "soft-interface.h"
#include "hard-interface.h"
#include "device.h"
#include "translation-table.h"
+#include "originator.h"
#include "types.h"
-#include "hash.h"
#include "ring_buffer.h"
#include "vis.h"
#include "aggregation.h"
#include "compat.h"
DECLARE_WAIT_QUEUE_HEAD(thread_wait);
-static DECLARE_DELAYED_WORK(purge_orig_wq, purge_orig);
static atomic_t data_ready_cond;
atomic_t exit_cond;
-
-static void start_purge_timer(void)
-{
- queue_delayed_work(bat_event_workqueue, &purge_orig_wq, 1 * HZ);
-}
-
-int originator_init(void)
-{
- if (orig_hash)
- return 1;
-
- spin_lock(&orig_hash_lock);
- orig_hash = hash_new(128, compare_orig, choose_orig);
-
- if (!orig_hash)
- goto err;
-
- spin_unlock(&orig_hash_lock);
- start_purge_timer();
- return 1;
-
-err:
- spin_unlock(&orig_hash_lock);
- return 0;
-}
-
-void originator_free(void)
-{
- if (!orig_hash)
- return;
-
- cancel_delayed_work_sync(&purge_orig_wq);
-
- spin_lock(&orig_hash_lock);
- hash_delete(orig_hash, free_orig_node);
- orig_hash = NULL;
- spin_unlock(&orig_hash_lock);
-}
-
-static struct neigh_node *
-create_neighbor(struct orig_node *orig_node, struct orig_node *orig_neigh_node,
- uint8_t *neigh, struct batman_if *if_incoming)
-{
- struct neigh_node *neigh_node;
-
- bat_dbg(DBG_BATMAN, "Creating new last-hop neighbour of originator\n");
-
- neigh_node = kmalloc(sizeof(struct neigh_node), GFP_ATOMIC);
- memset(neigh_node, 0, sizeof(struct neigh_node));
- INIT_LIST_HEAD(&neigh_node->list);
-
- memcpy(neigh_node->addr, neigh, ETH_ALEN);
- neigh_node->orig_node = orig_neigh_node;
- neigh_node->if_incoming = if_incoming;
-
- list_add_tail(&neigh_node->list, &orig_node->neigh_list);
- return neigh_node;
-}
-
-void free_orig_node(void *data)
-{
- struct list_head *list_pos, *list_pos_tmp;
- struct neigh_node *neigh_node;
- struct orig_node *orig_node = (struct orig_node *)data;
-
- /* for all neighbours towards this originator ... */
- list_for_each_safe(list_pos, list_pos_tmp, &orig_node->neigh_list) {
- neigh_node = list_entry(list_pos, struct neigh_node, list);
-
- list_del(list_pos);
- kfree(neigh_node);
- }
-
- hna_global_del_orig(orig_node, "originator timed out");
-
- kfree(orig_node->bcast_own);
- kfree(orig_node->bcast_own_sum);
- kfree(orig_node);
-}
-
-/* this function finds or creates an originator entry for the given
- * address if it does not exits */
-static struct orig_node *get_orig_node(uint8_t *addr)
-{
- struct orig_node *orig_node;
- struct hashtable_t *swaphash;
- char orig_str[ETH_STR_LEN];
- int size;
-
- orig_node = ((struct orig_node *)hash_find(orig_hash, addr));
-
- if (orig_node != NULL)
- return orig_node;
-
- addr_to_string(orig_str, addr);
- bat_dbg(DBG_BATMAN, "Creating new originator: %s \n", orig_str);
-
- orig_node = kmalloc(sizeof(struct orig_node), GFP_ATOMIC);
- memset(orig_node, 0, sizeof(struct orig_node));
- INIT_LIST_HEAD(&orig_node->neigh_list);
-
- memcpy(orig_node->orig, addr, ETH_ALEN);
- orig_node->router = NULL;
- orig_node->batman_if = NULL;
- orig_node->hna_buff = NULL;
-
- size = num_ifs * sizeof(TYPE_OF_WORD) * NUM_WORDS;
-
- orig_node->bcast_own = kmalloc(size, GFP_ATOMIC);
- memset(orig_node->bcast_own, 0, size);
-
- size = num_ifs * sizeof(uint8_t);
- orig_node->bcast_own_sum = kmalloc(size, GFP_ATOMIC);
- memset(orig_node->bcast_own_sum, 0, size);
-
- hash_add(orig_hash, orig_node);
-
- if (orig_hash->elements * 4 > orig_hash->size) {
- swaphash = hash_resize(orig_hash, orig_hash->size * 2);
-
- if (swaphash == NULL)
- printk(KERN_ERR
- "batman-adv:Couldn't resize orig hash table \n");
- else
- orig_hash = swaphash;
- }
-
- return orig_node;
-}
-
void slide_own_bcast_window(struct batman_if *batman_if)
{
struct hash_it_t *hashit = NULL;
@@ -246,7 +116,7 @@
}
-static void update_routes(struct orig_node *orig_node,
+void update_routes(struct orig_node *orig_node,
struct neigh_node *neigh_node,
unsigned char *hna_buff, int hna_buff_len)
{
@@ -679,86 +549,7 @@
0, hna_buff_len, if_incoming);
}
-static bool purge_orig_neigbours(struct orig_node *orig_node,
- struct neigh_node **best_neigh_node)
-{
- struct list_head *list_pos, *list_pos_tmp;
- char neigh_str[ETH_STR_LEN], orig_str[ETH_STR_LEN];
- struct neigh_node *neigh_node;
- bool neigh_purged = false;
- *best_neigh_node = NULL;
-
-
- /* for all neighbours towards this originator ... */
- list_for_each_safe(list_pos, list_pos_tmp, &orig_node->neigh_list) {
- neigh_node = list_entry(list_pos, struct neigh_node, list);
-
- if (time_after(jiffies,
- (neigh_node->last_valid +
- ((PURGE_TIMEOUT * HZ) / 1000)))) {
-
- addr_to_string(neigh_str, neigh_node->addr);
- bat_dbg(DBG_BATMAN, "Neighbour timeout: originator %s, neighbour: %s, last_valid %lu\n", orig_str, neigh_str, (neigh_node->last_valid / HZ));
-
- neigh_purged = true;
- list_del(list_pos);
- kfree(neigh_node);
- } else {
- if ((*best_neigh_node == NULL) ||
- (neigh_node->tq_avg > (*best_neigh_node)->tq_avg))
- *best_neigh_node = neigh_node;
- }
- }
- return neigh_purged;
-}
-
-static bool purge_orig_node(struct orig_node *orig_node)
-{
- struct neigh_node *best_neigh_node;
- char orig_str[ETH_STR_LEN];
-
- addr_to_string(orig_str, orig_node->orig);
-
- if (time_after(jiffies,
- (orig_node->last_valid +
- ((2 * PURGE_TIMEOUT * HZ) / 1000)))) {
-
- bat_dbg(DBG_BATMAN,
- "Originator timeout: originator %s, last_valid %lu\n",
- orig_str, (orig_node->last_valid / HZ));
- return true;
- } else {
- if (purge_orig_neigbours(orig_node, &best_neigh_node))
- update_routes(orig_node, best_neigh_node,
- orig_node->hna_buff,
- orig_node->hna_buff_len);
- }
- return false;
-}
-
-
-void purge_orig(struct work_struct *work)
-{
- struct hash_it_t *hashit = NULL;
- struct orig_node *orig_node;
-
- spin_lock(&orig_hash_lock);
-
- /* for all origins... */
- while (NULL != (hashit = hash_iterate(orig_hash, hashit))) {
- orig_node = hashit->bucket->data;
- if (purge_orig_node(orig_node)) {
- hash_remove_bucket(orig_hash, hashit);
- free_orig_node(orig_node);
- }
- }
-
- spin_unlock(&orig_hash_lock);
-
- start_purge_timer();
-}
-
static int receive_raw_packet(struct socket *raw_sock,
unsigned char *packet_buff, int packet_buff_len)
{
Modified: trunk/batman-adv-kernelland/routing.h
===================================================================
--- trunk/batman-adv-kernelland/routing.h 2009-11-28 18:44:04 UTC (rev 1487)
+++ trunk/batman-adv-kernelland/routing.h 2009-11-28 20:09:17 UTC (rev 1488)
@@ -24,11 +24,13 @@
extern wait_queue_head_t thread_wait;
extern atomic_t exit_cond;
-int originator_init(void);
-void free_orig_node(void *data);
-void originator_free(void);
void slide_own_bcast_window(struct batman_if *batman_if);
void batman_data_ready(struct sock *sk, int len);
-void purge_orig(struct work_struct *work);
int packet_recv_thread(void *data);
-void receive_bat_packet(struct ethhdr *ethhdr, struct batman_packet *batman_packet, unsigned char *hna_buff, int hna_buff_len, struct batman_if *if_incoming);
+void receive_bat_packet(struct ethhdr *ethhdr,
+ struct batman_packet *batman_packet,
+ unsigned char *hna_buff, int hna_buff_len,
+ struct batman_if *if_incoming);
+void update_routes(struct orig_node *orig_node,
+ struct neigh_node *neigh_node,
+ unsigned char *hna_buff, int hna_buff_len);
13 years, 2 months
r1487 - trunk/batman-adv-kernelland
by postmaster@open-mesh.net
Author: simon
Date: 2009-11-28 18:44:04 +0000 (Sat, 28 Nov 2009)
New Revision: 1487
Modified:
trunk/batman-adv-kernelland/routing.c
Log:
stop permanent warnings if a device is added but deactivated.
Modified: trunk/batman-adv-kernelland/routing.c
===================================================================
--- trunk/batman-adv-kernelland/routing.c 2009-11-28 18:41:31 UTC (rev 1486)
+++ trunk/batman-adv-kernelland/routing.c 2009-11-28 18:44:04 UTC (rev 1487)
@@ -1177,12 +1177,8 @@
{
int result = -EAGAIN;
- if (batman_if->if_active != IF_TO_BE_ACTIVATED) {
- printk(KERN_WARNING
- "batman-adv:Could not read from deactivated interface %s!\n",
- batman_if->dev);
- } else {
- if (batman_if->raw_sock)
+ if ((batman_if->if_active == IF_TO_BE_ACTIVATED)
+ && (batman_if->raw_sock)) {
result = receive_raw_packet(batman_if->raw_sock,
packet_buff,
PACKBUFF_SIZE);
13 years, 2 months
r1486 - trunk/batman-adv-kernelland
by postmaster@open-mesh.net
Author: simon
Date: 2009-11-28 18:41:31 +0000 (Sat, 28 Nov 2009)
New Revision: 1486
Modified:
trunk/batman-adv-kernelland/routing.c
Log:
Andrews refactored routing.c file patch: "I broke a lot of the big
functions up into many smaller ones. This helps with readability and
there is now a lot less code squashed against the right margin."
Signed-off-by: Andrew Lunn <andrew.lunn(a)ascom.ch>
Acked-by: Marek Lindner <lindner_marek(a)yahoo.de>
Acked-by: Simon Wunderlich <simon.wunderlich(a)s2003.tu-chemnitz.de>
Modified: trunk/batman-adv-kernelland/routing.c
===================================================================
--- trunk/batman-adv-kernelland/routing.c 2009-11-27 23:08:32 UTC (rev 1485)
+++ trunk/batman-adv-kernelland/routing.c 2009-11-28 18:41:31 UTC (rev 1486)
@@ -19,10 +19,6 @@
*
*/
-
-
-
-
#include "main.h"
#include "routing.h"
#include "send.h"
@@ -37,8 +33,6 @@
#include "aggregation.h"
#include "compat.h"
-
-
DECLARE_WAIT_QUEUE_HEAD(thread_wait);
static DECLARE_DELAYED_WORK(purge_orig_wq, purge_orig);
@@ -83,7 +77,9 @@
spin_unlock(&orig_hash_lock);
}
-static struct neigh_node *create_neighbor(struct orig_node *orig_node, struct orig_node *orig_neigh_node, uint8_t *neigh, struct batman_if *if_incoming)
+static struct neigh_node *
+create_neighbor(struct orig_node *orig_node, struct orig_node *orig_neigh_node,
+ uint8_t *neigh, struct batman_if *if_incoming)
{
struct neigh_node *neigh_node;
@@ -122,12 +118,14 @@
kfree(orig_node);
}
-/* this function finds or creates an originator entry for the given address if it does not exits */
+/* this function finds or creates an originator entry for the given
+ * address if it does not exits */
static struct orig_node *get_orig_node(uint8_t *addr)
{
struct orig_node *orig_node;
struct hashtable_t *swaphash;
char orig_str[ETH_STR_LEN];
+ int size;
orig_node = ((struct orig_node *)hash_find(orig_hash, addr));
@@ -146,19 +144,23 @@
orig_node->batman_if = NULL;
orig_node->hna_buff = NULL;
- orig_node->bcast_own = kmalloc(num_ifs * sizeof(TYPE_OF_WORD) * NUM_WORDS, GFP_ATOMIC);
- memset(orig_node->bcast_own, 0, num_ifs * sizeof(TYPE_OF_WORD) * NUM_WORDS);
+ size = num_ifs * sizeof(TYPE_OF_WORD) * NUM_WORDS;
- orig_node->bcast_own_sum = kmalloc(num_ifs * sizeof(uint8_t), GFP_ATOMIC);
- memset(orig_node->bcast_own_sum, 0, num_ifs * sizeof(uint8_t));
+ orig_node->bcast_own = kmalloc(size, GFP_ATOMIC);
+ memset(orig_node->bcast_own, 0, size);
+ size = num_ifs * sizeof(uint8_t);
+ orig_node->bcast_own_sum = kmalloc(size, GFP_ATOMIC);
+ memset(orig_node->bcast_own_sum, 0, size);
+
hash_add(orig_hash, orig_node);
if (orig_hash->elements * 4 > orig_hash->size) {
swaphash = hash_resize(orig_hash, orig_hash->size * 2);
if (swaphash == NULL)
- printk(KERN_ERR "batman-adv:Couldn't resize orig hash table \n");
+ printk(KERN_ERR
+ "batman-adv:Couldn't resize orig hash table \n");
else
orig_hash = swaphash;
}
@@ -170,75 +172,99 @@
{
struct hash_it_t *hashit = NULL;
struct orig_node *orig_node;
+ TYPE_OF_WORD *word;
spin_lock(&orig_hash_lock);
while (NULL != (hashit = hash_iterate(orig_hash, hashit))) {
orig_node = hashit->bucket->data;
+ word = &(orig_node->bcast_own[batman_if->if_num * NUM_WORDS]);
- bit_get_packet((TYPE_OF_WORD *)&(orig_node->bcast_own[batman_if->if_num * NUM_WORDS]), 1, 0);
- orig_node->bcast_own_sum[batman_if->if_num] = bit_packet_count((TYPE_OF_WORD *)&(orig_node->bcast_own[batman_if->if_num * NUM_WORDS]));
+ bit_get_packet(word, 1, 0);
+ orig_node->bcast_own_sum[batman_if->if_num] =
+ bit_packet_count(word);
}
spin_unlock(&orig_hash_lock);
}
-static void update_routes(struct orig_node *orig_node, struct neigh_node *neigh_node, unsigned char *hna_buff, int hna_buff_len)
+static void update_HNA(struct orig_node *orig_node,
+ unsigned char *hna_buff, int hna_buff_len)
{
- char orig_str[ETH_STR_LEN], neigh_str[ETH_STR_LEN], router_str[ETH_STR_LEN];
+ if ((hna_buff_len != orig_node->hna_buff_len) ||
+ ((hna_buff_len > 0) &&
+ (orig_node->hna_buff_len > 0) &&
+ (memcmp(orig_node->hna_buff, hna_buff, hna_buff_len) != 0))) {
- if (orig_node == NULL)
- return;
+ if (orig_node->hna_buff_len > 0)
+ hna_global_del_orig(orig_node,
+ "originator changed hna");
- if (orig_node->router != neigh_node) {
- addr_to_string(orig_str, orig_node->orig);
+ if ((hna_buff_len > 0) && (hna_buff != NULL))
+ hna_global_add_orig(orig_node, hna_buff, hna_buff_len);
+ }
+}
- /* route deleted */
- if ((orig_node->router != NULL) && (neigh_node == NULL)) {
- bat_dbg(DBG_ROUTES, "Deleting route towards: %s\n",
- orig_str);
- hna_global_del_orig(orig_node, "originator timed out");
+static void update_route(struct orig_node *orig_node,
+ struct neigh_node *neigh_node,
+ unsigned char *hna_buff, int hna_buff_len)
+{
+ char orig_str[ETH_STR_LEN], neigh_str[ETH_STR_LEN];
+ char router_str[ETH_STR_LEN];
- /* route added */
- } else if ((orig_node->router == NULL) && (neigh_node != NULL)) {
+ addr_to_string(orig_str, orig_node->orig);
- addr_to_string(neigh_str, neigh_node->addr);
- bat_dbg(DBG_ROUTES, "Adding route towards: %s (via %s)\n", orig_str, neigh_str);
- hna_global_add_orig(orig_node, hna_buff, hna_buff_len);
+ /* route deleted */
+ if ((orig_node->router != NULL) && (neigh_node == NULL)) {
- /* route changed */
- } else {
+ bat_dbg(DBG_ROUTES, "Deleting route towards: %s\n",
+ orig_str);
+ hna_global_del_orig(orig_node, "originator timed out");
- addr_to_string(neigh_str, neigh_node->addr);
- addr_to_string(router_str, orig_node->router->addr);
- bat_dbg(DBG_ROUTES, "Changing route towards: %s (now via %s - was via %s)\n", orig_str, neigh_str, router_str);
+ /* route added */
+ } else if ((orig_node->router == NULL) && (neigh_node != NULL)) {
- }
+ addr_to_string(neigh_str, neigh_node->addr);
+ bat_dbg(DBG_ROUTES,
+ "Adding route towards: %s (via %s)\n",
+ orig_str, neigh_str);
+ hna_global_add_orig(orig_node, hna_buff, hna_buff_len);
- if (neigh_node != NULL)
- orig_node->batman_if = neigh_node->if_incoming;
- else
- orig_node->batman_if = NULL;
+ /* route changed */
+ } else {
+ addr_to_string(neigh_str, neigh_node->addr);
+ addr_to_string(router_str, orig_node->router->addr);
+ bat_dbg(DBG_ROUTES, "Changing route towards: %s (now via %s - was via %s)\n", orig_str, neigh_str, router_str);
+ }
- orig_node->router = neigh_node;
+ if (neigh_node != NULL)
+ orig_node->batman_if = neigh_node->if_incoming;
+ else
+ orig_node->batman_if = NULL;
- /* may be just HNA changed */
- } else {
+ orig_node->router = neigh_node;
+}
- if ((hna_buff_len != orig_node->hna_buff_len) || ((hna_buff_len > 0) && (orig_node->hna_buff_len > 0) && (memcmp(orig_node->hna_buff, hna_buff, hna_buff_len) != 0))) {
- if (orig_node->hna_buff_len > 0)
- hna_global_del_orig(orig_node, "originator changed hna");
+static void update_routes(struct orig_node *orig_node,
+ struct neigh_node *neigh_node,
+ unsigned char *hna_buff, int hna_buff_len)
+{
- if ((hna_buff_len > 0) && (hna_buff != NULL))
- hna_global_add_orig(orig_node, hna_buff, hna_buff_len);
+ if (orig_node == NULL)
+ return;
- }
-
- }
+ if (orig_node->router != neigh_node)
+ update_route(orig_node, neigh_node, hna_buff, hna_buff_len);
+ /* may be just HNA changed */
+ else
+ update_HNA(orig_node, hna_buff, hna_buff_len);
}
-static int isBidirectionalNeigh(struct orig_node *orig_node, struct orig_node *orig_neigh_node, struct batman_packet *batman_packet, struct batman_if *if_incoming)
+static int isBidirectionalNeigh(struct orig_node *orig_node,
+ struct orig_node *orig_neigh_node,
+ struct batman_packet *batman_packet,
+ struct batman_if *if_incoming)
{
struct neigh_node *neigh_node = NULL, *tmp_neigh_node = NULL;
char orig_str[ETH_STR_LEN], neigh_str[ETH_STR_LEN];
@@ -248,66 +274,100 @@
addr_to_string(neigh_str, orig_neigh_node->orig);
if (orig_node == orig_neigh_node) {
- list_for_each_entry(tmp_neigh_node, &orig_node->neigh_list, list) {
+ list_for_each_entry(tmp_neigh_node,
+ &orig_node->neigh_list,
+ list) {
- if (compare_orig(tmp_neigh_node->addr, orig_neigh_node->orig) && (tmp_neigh_node->if_incoming == if_incoming))
+ if (compare_orig(tmp_neigh_node->addr,
+ orig_neigh_node->orig) &&
+ (tmp_neigh_node->if_incoming == if_incoming))
neigh_node = tmp_neigh_node;
}
if (neigh_node == NULL)
- neigh_node = create_neighbor(orig_node, orig_neigh_node, orig_neigh_node->orig, if_incoming);
+ neigh_node = create_neighbor(orig_node,
+ orig_neigh_node,
+ orig_neigh_node->orig,
+ if_incoming);
neigh_node->last_valid = jiffies;
} else {
/* find packet count of corresponding one hop neighbor */
- list_for_each_entry(tmp_neigh_node, &orig_neigh_node->neigh_list, list) {
+ list_for_each_entry(tmp_neigh_node,
+ &orig_neigh_node->neigh_list, list) {
- if (compare_orig(tmp_neigh_node->addr, orig_neigh_node->orig) && (tmp_neigh_node->if_incoming == if_incoming))
+ if (compare_orig(tmp_neigh_node->addr,
+ orig_neigh_node->orig) &&
+ (tmp_neigh_node->if_incoming == if_incoming))
neigh_node = tmp_neigh_node;
}
if (neigh_node == NULL)
- neigh_node = create_neighbor(orig_neigh_node, orig_neigh_node, orig_neigh_node->orig, if_incoming);
+ neigh_node = create_neighbor(orig_neigh_node,
+ orig_neigh_node,
+ orig_neigh_node->orig,
+ if_incoming);
}
orig_node->last_valid = jiffies;
/* pay attention to not get a value bigger than 100 % */
- total_count = (orig_neigh_node->bcast_own_sum[if_incoming->if_num] > neigh_node->real_packet_count ? neigh_node->real_packet_count : orig_neigh_node->bcast_own_sum[if_incoming->if_num]);
+ total_count = (orig_neigh_node->bcast_own_sum[if_incoming->if_num] >
+ neigh_node->real_packet_count ?
+ neigh_node->real_packet_count :
+ orig_neigh_node->bcast_own_sum[if_incoming->if_num]);
/* if we have too few packets (too less data) we set tq_own to zero */
/* if we receive too few packets it is not considered bidirectional */
- if ((total_count < TQ_LOCAL_BIDRECT_SEND_MINIMUM) || (neigh_node->real_packet_count < TQ_LOCAL_BIDRECT_RECV_MINIMUM))
+ if ((total_count < TQ_LOCAL_BIDRECT_SEND_MINIMUM) ||
+ (neigh_node->real_packet_count < TQ_LOCAL_BIDRECT_RECV_MINIMUM))
orig_neigh_node->tq_own = 0;
else
- /* neigh_node->real_packet_count is never zero as we only purge old information when getting new information */
- orig_neigh_node->tq_own = (TQ_MAX_VALUE * total_count) / neigh_node->real_packet_count;
+ /* neigh_node->real_packet_count is never zero as we
+ * only purge old information when getting new
+ * information */
+ orig_neigh_node->tq_own = (TQ_MAX_VALUE * total_count) /
+ neigh_node->real_packet_count;
/*
- * 1 - ((1-x) ** 3), normalized to TQ_MAX_VALUE
- * this does affect the nearly-symmetric links only a little,
- * but punishes asymmetric links more.
- * this will give a value between 0 and TQ_MAX_VALUE
+ * 1 - ((1-x) ** 3), normalized to TQ_MAX_VALUE this does
+ * affect the nearly-symmetric links only a little, but
+ * punishes asymmetric links more. This will give a value
+ * between 0 and TQ_MAX_VALUE
*/
- orig_neigh_node->tq_asym_penalty = TQ_MAX_VALUE - (TQ_MAX_VALUE *
- (TQ_LOCAL_WINDOW_SIZE - neigh_node->real_packet_count) *
- (TQ_LOCAL_WINDOW_SIZE - neigh_node->real_packet_count) *
- (TQ_LOCAL_WINDOW_SIZE - neigh_node->real_packet_count)) /
- (TQ_LOCAL_WINDOW_SIZE * TQ_LOCAL_WINDOW_SIZE * TQ_LOCAL_WINDOW_SIZE);
+ orig_neigh_node->tq_asym_penalty =
+ TQ_MAX_VALUE -
+ (TQ_MAX_VALUE *
+ (TQ_LOCAL_WINDOW_SIZE - neigh_node->real_packet_count) *
+ (TQ_LOCAL_WINDOW_SIZE - neigh_node->real_packet_count) *
+ (TQ_LOCAL_WINDOW_SIZE - neigh_node->real_packet_count)) /
+ (TQ_LOCAL_WINDOW_SIZE *
+ TQ_LOCAL_WINDOW_SIZE *
+ TQ_LOCAL_WINDOW_SIZE);
- batman_packet->tq = ((batman_packet->tq * orig_neigh_node->tq_own * orig_neigh_node->tq_asym_penalty) / (TQ_MAX_VALUE * TQ_MAX_VALUE));
+ batman_packet->tq = ((batman_packet->tq *
+ orig_neigh_node->tq_own *
+ orig_neigh_node->tq_asym_penalty) /
+ (TQ_MAX_VALUE * TQ_MAX_VALUE));
bat_dbg(DBG_BATMAN, "bidirectional: orig = %-15s neigh = %-15s => own_bcast = %2i, real recv = %2i, local tq: %3i, asym_penalty: %3i, total tq: %3i \n",
- orig_str, neigh_str, total_count, neigh_node->real_packet_count, orig_neigh_node->tq_own, orig_neigh_node->tq_asym_penalty, batman_packet->tq);
+ orig_str, neigh_str, total_count,
+ neigh_node->real_packet_count, orig_neigh_node->tq_own,
+ orig_neigh_node->tq_asym_penalty, batman_packet->tq);
- /* if link has the minimum required transmission quality consider it bidirectional */
+ /* if link has the minimum required transmission quality
+ * consider it bidirectional */
if (batman_packet->tq >= TQ_TOTAL_BIDRECT_LIMIT)
return 1;
return 0;
}
-static void update_orig(struct orig_node *orig_node, struct ethhdr *ethhdr, struct batman_packet *batman_packet, struct batman_if *if_incoming, unsigned char *hna_buff, int hna_buff_len, char is_duplicate)
+static void update_orig(struct orig_node *orig_node, struct ethhdr *ethhdr,
+ struct batman_packet *batman_packet,
+ struct batman_if *if_incoming,
+ unsigned char *hna_buff, int hna_buff_len,
+ char is_duplicate)
{
struct neigh_node *neigh_node = NULL, *tmp_neigh_node = NULL;
int tmp_hna_buff_len;
@@ -315,7 +375,8 @@
bat_dbg(DBG_BATMAN, "update_originator(): Searching and updating originator entry of received packet \n");
list_for_each_entry(tmp_neigh_node, &orig_node->neigh_list, list) {
- if (compare_orig(tmp_neigh_node->addr, ethhdr->h_source) && (tmp_neigh_node->if_incoming == if_incoming)) {
+ if (compare_orig(tmp_neigh_node->addr, ethhdr->h_source) &&
+ (tmp_neigh_node->if_incoming == if_incoming)) {
neigh_node = tmp_neigh_node;
continue;
}
@@ -323,19 +384,26 @@
if (is_duplicate)
continue;
- ring_buffer_set(tmp_neigh_node->tq_recv, &tmp_neigh_node->tq_index, 0);
- tmp_neigh_node->tq_avg = ring_buffer_avg(tmp_neigh_node->tq_recv);
+ ring_buffer_set(tmp_neigh_node->tq_recv,
+ &tmp_neigh_node->tq_index, 0);
+ tmp_neigh_node->tq_avg =
+ ring_buffer_avg(tmp_neigh_node->tq_recv);
}
if (neigh_node == NULL)
- neigh_node = create_neighbor(orig_node, get_orig_node(ethhdr->h_source), ethhdr->h_source, if_incoming);
+ neigh_node = create_neighbor(orig_node,
+ get_orig_node(ethhdr->h_source),
+ ethhdr->h_source, if_incoming);
else
- bat_dbg(DBG_BATMAN, "Updating existing last-hop neighbour of originator\n");
+ bat_dbg(DBG_BATMAN,
+ "Updating existing last-hop neighbour of originator\n");
orig_node->flags = batman_packet->flags;
neigh_node->last_valid = jiffies;
- ring_buffer_set(neigh_node->tq_recv, &neigh_node->tq_index, batman_packet->tq);
+ ring_buffer_set(neigh_node->tq_recv,
+ &neigh_node->tq_index,
+ batman_packet->tq);
neigh_node->tq_avg = ring_buffer_avg(neigh_node->tq_recv);
if (!is_duplicate) {
@@ -343,9 +411,11 @@
neigh_node->last_ttl = batman_packet->ttl;
}
- tmp_hna_buff_len = (hna_buff_len > batman_packet->num_hna * ETH_ALEN ? batman_packet->num_hna * ETH_ALEN : hna_buff_len);
+ tmp_hna_buff_len = (hna_buff_len > batman_packet->num_hna * ETH_ALEN ?
+ batman_packet->num_hna * ETH_ALEN : hna_buff_len);
- /* if this neighbor already is our next hop there is nothing to change */
+ /* if this neighbor already is our next hop there is nothing
+ * to change */
if (orig_node->router == neigh_node)
goto update_hna;
@@ -354,11 +424,12 @@
(orig_node->router->tq_avg > neigh_node->tq_avg))
goto update_hna;
- /* if the TQ is the same and the link not more symetric we won't consider it either */
+ /* if the TQ is the same and the link not more symetric we
+ * won't consider it either */
if ((orig_node->router) &&
((neigh_node->tq_avg == orig_node->router->tq_avg) &&
- (orig_node->router->orig_node->bcast_own_sum[if_incoming->if_num] >=
- neigh_node->orig_node->bcast_own_sum[if_incoming->if_num])))
+ (orig_node->router->orig_node->bcast_own_sum[if_incoming->if_num]
+ >= neigh_node->orig_node->bcast_own_sum[if_incoming->if_num])))
goto update_hna;
update_routes(orig_node, neigh_node, hna_buff, tmp_hna_buff_len);
@@ -369,29 +440,35 @@
return;
}
-static char count_real_packets(struct ethhdr *ethhdr, struct batman_packet *batman_packet, struct batman_if *if_incoming)
+static char count_real_packets(struct ethhdr *ethhdr,
+ struct batman_packet *batman_packet,
+ struct batman_if *if_incoming)
{
struct orig_node *orig_node;
struct neigh_node *tmp_neigh_node;
char is_duplicate = 0;
+ uint16_t seq_diff;
-
orig_node = get_orig_node(batman_packet->orig);
if (orig_node == NULL)
return 0;
-
list_for_each_entry(tmp_neigh_node, &orig_node->neigh_list, list) {
if (!is_duplicate)
- is_duplicate = get_bit_status(tmp_neigh_node->real_bits, orig_node->last_real_seqno, batman_packet->seqno);
-
- if (compare_orig(tmp_neigh_node->addr, ethhdr->h_source) && (tmp_neigh_node->if_incoming == if_incoming))
- bit_get_packet(tmp_neigh_node->real_bits, batman_packet->seqno - orig_node->last_real_seqno, 1);
+ is_duplicate =
+ get_bit_status(tmp_neigh_node->real_bits,
+ orig_node->last_real_seqno,
+ batman_packet->seqno);
+ seq_diff = batman_packet->seqno - orig_node->last_real_seqno;
+ if (compare_orig(tmp_neigh_node->addr, ethhdr->h_source) &&
+ (tmp_neigh_node->if_incoming == if_incoming))
+ bit_get_packet(tmp_neigh_node->real_bits, seq_diff, 1);
else
- bit_get_packet(tmp_neigh_node->real_bits, batman_packet->seqno - orig_node->last_real_seqno, 0);
+ bit_get_packet(tmp_neigh_node->real_bits, seq_diff, 0);
- tmp_neigh_node->real_packet_count = bit_packet_count(tmp_neigh_node->real_bits);
+ tmp_neigh_node->real_packet_count =
+ bit_packet_count(tmp_neigh_node->real_bits);
}
if (!is_duplicate) {
@@ -403,24 +480,33 @@
return is_duplicate;
}
-void receive_bat_packet(struct ethhdr *ethhdr, struct batman_packet *batman_packet, unsigned char *hna_buff, int hna_buff_len, struct batman_if *if_incoming)
+void receive_bat_packet(struct ethhdr *ethhdr,
+ struct batman_packet *batman_packet,
+ unsigned char *hna_buff,
+ int hna_buff_len,
+ struct batman_if *if_incoming)
{
struct batman_if *batman_if;
struct orig_node *orig_neigh_node, *orig_node;
- char orig_str[ETH_STR_LEN], prev_sender_str[ETH_STR_LEN], neigh_str[ETH_STR_LEN];
+ char orig_str[ETH_STR_LEN], prev_sender_str[ETH_STR_LEN];
+ char neigh_str[ETH_STR_LEN];
char has_directlink_flag;
- char is_my_addr = 0, is_my_orig = 0, is_my_oldorig = 0, is_broadcast = 0, is_bidirectional, is_single_hop_neigh, is_duplicate;
+ char is_my_addr = 0, is_my_orig = 0, is_my_oldorig = 0;
+ char is_broadcast = 0, is_bidirectional, is_single_hop_neigh;
+ char is_duplicate;
unsigned short if_incoming_seqno;
- /* Silently drop when the batman packet is actually not a correct packet.
+ /* Silently drop when the batman packet is actually not a
+ * correct packet.
*
* This might happen if a packet is padded (e.g. Ethernet has a
* minimum frame length of 64 byte) and the aggregation interprets
* it as an additional length.
*
- * TODO: A more sane solution would be to have a bit in the batman_packet
- * to detect whether the packet is the last packet in an aggregation.
- * Here we expect that the padding is always zero (or not 0x01)
+ * TODO: A more sane solution would be to have a bit in the
+ * batman_packet to detect whether the packet is the last
+ * packet in an aggregation. Here we expect that the padding
+ * is always zero (or not 0x01)
*/
if (batman_packet->packet_type != BAT_PACKET)
return;
@@ -434,21 +520,29 @@
has_directlink_flag = (batman_packet->flags & DIRECTLINK ? 1 : 0);
- is_single_hop_neigh = (compare_orig(ethhdr->h_source, batman_packet->orig) ? 1 : 0);
+ is_single_hop_neigh = (compare_orig(ethhdr->h_source,
+ batman_packet->orig) ? 1 : 0);
- bat_dbg(DBG_BATMAN, "Received BATMAN packet via NB: %s, IF: %s [%s] (from OG: %s, via prev OG: %s, seqno %d, tq %d, TTL %d, V %d, IDF %d) \n", neigh_str, if_incoming->dev, if_incoming->addr_str, orig_str, prev_sender_str, batman_packet->seqno, batman_packet->tq, batman_packet->ttl, batman_packet->version, has_directlink_flag);
+ bat_dbg(DBG_BATMAN, "Received BATMAN packet via NB: %s, IF: %s [%s] (from OG: %s, via prev OG: %s, seqno %d, tq %d, TTL %d, V %d, IDF %d) \n",
+ neigh_str, if_incoming->dev, if_incoming->addr_str,
+ orig_str, prev_sender_str, batman_packet->seqno,
+ batman_packet->tq, batman_packet->ttl, batman_packet->version,
+ has_directlink_flag);
list_for_each_entry_rcu(batman_if, &if_list, list) {
if (batman_if->if_active != IF_ACTIVE)
continue;
- if (compare_orig(ethhdr->h_source, batman_if->net_dev->dev_addr))
+ if (compare_orig(ethhdr->h_source,
+ batman_if->net_dev->dev_addr))
is_my_addr = 1;
- if (compare_orig(batman_packet->orig, batman_if->net_dev->dev_addr))
+ if (compare_orig(batman_packet->orig,
+ batman_if->net_dev->dev_addr))
is_my_orig = 1;
- if (compare_orig(batman_packet->prev_sender, batman_if->net_dev->dev_addr))
+ if (compare_orig(batman_packet->prev_sender,
+ batman_if->net_dev->dev_addr))
is_my_oldorig = 1;
if (compare_orig(ethhdr->h_source, broadcastAddr))
@@ -456,12 +550,16 @@
}
if (batman_packet->version != COMPAT_VERSION) {
- bat_dbg(DBG_BATMAN, "Drop packet: incompatible batman version (%i) \n", batman_packet->version);
+ bat_dbg(DBG_BATMAN,
+ "Drop packet: incompatible batman version (%i)\n",
+ batman_packet->version);
return;
}
if (is_my_addr) {
- bat_dbg(DBG_BATMAN, "Drop packet: received my own broadcast (sender: %s) \n", neigh_str);
+ bat_dbg(DBG_BATMAN,
+ "Drop packet: received my own broadcast (sender: %s)\n",
+ neigh_str);
return;
}
@@ -471,14 +569,24 @@
}
if (is_my_orig) {
+ TYPE_OF_WORD *word;
+ int offset;
+
orig_neigh_node = get_orig_node(ethhdr->h_source);
- /* neighbour has to indicate direct link and it has to come via the corresponding interface */
- /* if received seqno equals last send seqno save new seqno for bidirectional check */
- if (has_directlink_flag && compare_orig(if_incoming->net_dev->dev_addr, batman_packet->orig) &&
- (batman_packet->seqno - if_incoming_seqno + 2 == 0)) {
- bit_mark((TYPE_OF_WORD *)&(orig_neigh_node->bcast_own[if_incoming->if_num * NUM_WORDS]), 0);
- orig_neigh_node->bcast_own_sum[if_incoming->if_num] = bit_packet_count((TYPE_OF_WORD *)&(orig_neigh_node->bcast_own[if_incoming->if_num * NUM_WORDS]));
+ /* neighbour has to indicate direct link and it has to
+ * come via the corresponding interface */
+ /* if received seqno equals last send seqno save new
+ * seqno for bidirectional check */
+ if (has_directlink_flag &&
+ compare_orig(if_incoming->net_dev->dev_addr,
+ batman_packet->orig) &&
+ (batman_packet->seqno - if_incoming_seqno + 2 == 0)) {
+ offset = if_incoming->if_num * NUM_WORDS;
+ word = &(orig_neigh_node->bcast_own[offset]);
+ bit_mark(word, 0);
+ orig_neigh_node->bcast_own_sum[if_incoming->if_num] =
+ bit_packet_count(word);
}
bat_dbg(DBG_BATMAN, "Drop packet: originator packet from myself (via neighbour) \n");
@@ -504,38 +612,50 @@
return;
/* avoid temporary routing loops */
- if ((orig_node->router) && (orig_node->router->orig_node->router) &&
- (compare_orig(orig_node->router->addr, batman_packet->prev_sender)) &&
+ if ((orig_node->router) &&
+ (orig_node->router->orig_node->router) &&
+ (compare_orig(orig_node->router->addr,
+ batman_packet->prev_sender)) &&
!(compare_orig(batman_packet->orig, batman_packet->prev_sender)) &&
- (compare_orig(orig_node->router->addr, orig_node->router->orig_node->router->addr))) {
+ (compare_orig(orig_node->router->addr,
+ orig_node->router->orig_node->router->addr))) {
bat_dbg(DBG_BATMAN, "Drop packet: ignoring all rebroadcast packets that may make me loop (sender: %s) \n", neigh_str);
return;
}
- /* if sender is a direct neighbor the sender mac equals originator mac */
- orig_neigh_node = (is_single_hop_neigh ? orig_node : get_orig_node(ethhdr->h_source));
+ /* if sender is a direct neighbor the sender mac equals
+ * originator mac */
+ orig_neigh_node = (is_single_hop_neigh ?
+ orig_node : get_orig_node(ethhdr->h_source));
if (orig_neigh_node == NULL)
return;
- /* drop packet if sender is not a direct neighbor and if we don't route towards it */
- if (!is_single_hop_neigh && (orig_neigh_node->router == NULL)) {
+ /* drop packet if sender is not a direct neighbor and if we
+ * don't route towards it */
+ if (!is_single_hop_neigh &&
+ (orig_neigh_node->router == NULL)) {
bat_dbg(DBG_BATMAN, "Drop packet: OGM via unknown neighbor!\n");
return;
}
- is_bidirectional = isBidirectionalNeigh(orig_node, orig_neigh_node, batman_packet, if_incoming);
+ is_bidirectional = isBidirectionalNeigh(orig_node, orig_neigh_node,
+ batman_packet, if_incoming);
- /* update ranking if it is not a duplicate or has the same seqno and similar ttl as the non-duplicate */
- if (is_bidirectional && (!is_duplicate ||
- ((orig_node->last_real_seqno == batman_packet->seqno) &&
- (orig_node->last_ttl - 3 <= batman_packet->ttl))))
- update_orig(orig_node, ethhdr, batman_packet, if_incoming, hna_buff, hna_buff_len, is_duplicate);
+ /* update ranking if it is not a duplicate or has the same
+ * seqno and similar ttl as the non-duplicate */
+ if (is_bidirectional &&
+ (!is_duplicate ||
+ ((orig_node->last_real_seqno == batman_packet->seqno) &&
+ (orig_node->last_ttl - 3 <= batman_packet->ttl))))
+ update_orig(orig_node, ethhdr, batman_packet,
+ if_incoming, hna_buff, hna_buff_len, is_duplicate);
/* is single hop (direct) neighbour */
if (is_single_hop_neigh) {
/* mark direct link on incoming interface */
- schedule_forward_packet(orig_node, ethhdr, batman_packet, 1, hna_buff_len, if_incoming);
+ schedule_forward_packet(orig_node, ethhdr, batman_packet,
+ 1, hna_buff_len, if_incoming);
bat_dbg(DBG_BATMAN, "Forwarding packet: rebroadcast neighbour packet with direct link flag\n");
return;
@@ -543,7 +663,8 @@
/* multihop originator */
if (!is_bidirectional) {
- bat_dbg(DBG_BATMAN, "Drop packet: not received via bidirectional link\n");
+ bat_dbg(DBG_BATMAN,
+ "Drop packet: not received via bidirectional link\n");
return;
}
@@ -552,65 +673,85 @@
return;
}
- bat_dbg(DBG_BATMAN, "Forwarding packet: rebroadcast originator packet\n");
- schedule_forward_packet(orig_node, ethhdr, batman_packet, 0, hna_buff_len, if_incoming);
+ bat_dbg(DBG_BATMAN,
+ "Forwarding packet: rebroadcast originator packet\n");
+ schedule_forward_packet(orig_node, ethhdr, batman_packet,
+ 0, hna_buff_len, if_incoming);
}
-void purge_orig(struct work_struct *work)
+static bool purge_orig_neigbours(struct orig_node *orig_node,
+ struct neigh_node **best_neigh_node)
{
struct list_head *list_pos, *list_pos_tmp;
- struct hash_it_t *hashit = NULL;
- struct orig_node *orig_node;
- struct neigh_node *neigh_node, *best_neigh_node;
- char orig_str[ETH_STR_LEN], neigh_str[ETH_STR_LEN], neigh_purged;
+ char neigh_str[ETH_STR_LEN], orig_str[ETH_STR_LEN];
+ struct neigh_node *neigh_node;
+ bool neigh_purged = false;
- spin_lock(&orig_hash_lock);
+ *best_neigh_node = NULL;
- /* for all origins... */
- while (NULL != (hashit = hash_iterate(orig_hash, hashit))) {
- orig_node = hashit->bucket->data;
- addr_to_string(orig_str, orig_node->orig);
+ /* for all neighbours towards this originator ... */
+ list_for_each_safe(list_pos, list_pos_tmp, &orig_node->neigh_list) {
+ neigh_node = list_entry(list_pos, struct neigh_node, list);
- if (time_after(jiffies, orig_node->last_valid + ((2 * PURGE_TIMEOUT * HZ) / 1000))) {
+ if (time_after(jiffies,
+ (neigh_node->last_valid +
+ ((PURGE_TIMEOUT * HZ) / 1000)))) {
- bat_dbg(DBG_BATMAN, "Originator timeout: originator %s, last_valid %lu\n", orig_str, (orig_node->last_valid / HZ));
+ addr_to_string(neigh_str, neigh_node->addr);
+ bat_dbg(DBG_BATMAN, "Neighbour timeout: originator %s, neighbour: %s, last_valid %lu\n", orig_str, neigh_str, (neigh_node->last_valid / HZ));
- hash_remove_bucket(orig_hash, hashit);
- free_orig_node(orig_node);
-
+ neigh_purged = true;
+ list_del(list_pos);
+ kfree(neigh_node);
} else {
+ if ((*best_neigh_node == NULL) ||
+ (neigh_node->tq_avg > (*best_neigh_node)->tq_avg))
+ *best_neigh_node = neigh_node;
+ }
+ }
+ return neigh_purged;
+}
- best_neigh_node = NULL;
- neigh_purged = 0;
+static bool purge_orig_node(struct orig_node *orig_node)
+{
+ struct neigh_node *best_neigh_node;
+ char orig_str[ETH_STR_LEN];
- /* for all neighbours towards this originator ... */
- list_for_each_safe(list_pos, list_pos_tmp, &orig_node->neigh_list) {
- neigh_node = list_entry(list_pos, struct neigh_node, list);
+ addr_to_string(orig_str, orig_node->orig);
- if (time_after(jiffies, neigh_node->last_valid + ((PURGE_TIMEOUT * HZ) / 1000))) {
+ if (time_after(jiffies,
+ (orig_node->last_valid +
+ ((2 * PURGE_TIMEOUT * HZ) / 1000)))) {
- addr_to_string(neigh_str, neigh_node->addr);
- bat_dbg(DBG_BATMAN, "Neighbour timeout: originator %s, neighbour: %s, last_valid %lu\n", orig_str, neigh_str, (neigh_node->last_valid / HZ));
+ bat_dbg(DBG_BATMAN,
+ "Originator timeout: originator %s, last_valid %lu\n",
+ orig_str, (orig_node->last_valid / HZ));
+ return true;
+ } else {
+ if (purge_orig_neigbours(orig_node, &best_neigh_node))
+ update_routes(orig_node, best_neigh_node,
+ orig_node->hna_buff,
+ orig_node->hna_buff_len);
+ }
+ return false;
+}
- neigh_purged = 1;
- list_del(list_pos);
- kfree(neigh_node);
- } else {
+void purge_orig(struct work_struct *work)
+{
+ struct hash_it_t *hashit = NULL;
+ struct orig_node *orig_node;
- if ((best_neigh_node == NULL) || (neigh_node->tq_avg > best_neigh_node->tq_avg))
- best_neigh_node = neigh_node;
+ spin_lock(&orig_hash_lock);
- }
-
- }
-
- if (neigh_purged)
- update_routes(orig_node, best_neigh_node, orig_node->hna_buff, orig_node->hna_buff_len);
-
+ /* for all origins... */
+ while (NULL != (hashit = hash_iterate(orig_hash, hashit))) {
+ orig_node = hashit->bucket->data;
+ if (purge_orig_node(orig_node)) {
+ hash_remove_bucket(orig_hash, hashit);
+ free_orig_node(orig_node);
}
-
}
spin_unlock(&orig_hash_lock);
@@ -618,7 +759,8 @@
start_purge_timer();
}
-static int receive_raw_packet(struct socket *raw_sock, unsigned char *packet_buff, int packet_buff_len)
+static int receive_raw_packet(struct socket *raw_sock,
+ unsigned char *packet_buff, int packet_buff_len)
{
struct kvec iov;
struct msghdr msg;
@@ -631,367 +773,495 @@
msg.msg_namelen = 0;
msg.msg_control = NULL;
- return kernel_recvmsg(raw_sock, &msg, &iov, 1, packet_buff_len, MSG_DONTWAIT);
+ return kernel_recvmsg(raw_sock, &msg, &iov, 1, packet_buff_len,
+ MSG_DONTWAIT);
}
-int packet_recv_thread(void *data)
+static void recv_bat_packet(struct ethhdr *ethhdr,
+ unsigned char *packet_buff,
+ int result,
+ struct batman_if *batman_if)
{
- struct batman_if *batman_if;
- struct ethhdr *ethhdr;
- struct batman_packet *batman_packet;
- struct unicast_packet *unicast_packet;
- struct bcast_packet *bcast_packet;
- struct icmp_packet *icmp_packet;
- struct vis_packet *vis_packet;
+ /* packet with broadcast indication but unicast recipient */
+ if (!is_bcast(ethhdr->h_dest))
+ return;
+
+ /* packet with broadcast sender address */
+ if (is_bcast(ethhdr->h_source))
+ return;
+
+ /* drop packet if it has not at least one batman packet as payload */
+ if (result < sizeof(struct ethhdr) + sizeof(struct batman_packet))
+ return;
+
+ spin_lock(&orig_hash_lock);
+ receive_aggr_bat_packet(ethhdr,
+ packet_buff + sizeof(struct ethhdr),
+ result - sizeof(struct ethhdr),
+ batman_if);
+ spin_unlock(&orig_hash_lock);
+}
+
+static void recv_my_icmp_packet(struct ethhdr *ethhdr,
+ struct icmp_packet *icmp_packet,
+ unsigned char *packet_buff,
+ int result)
+{
struct orig_node *orig_node;
- unsigned char *packet_buff, src_str[ETH_STR_LEN], dst_str[ETH_STR_LEN];
- int vis_info_len;
- int result;
- atomic_set(&data_ready_cond, 0);
- atomic_set(&exit_cond, 0);
- packet_buff = kmalloc(PACKBUFF_SIZE, GFP_KERNEL);
- if (!packet_buff) {
- printk(KERN_ERR "batman-adv:Could allocate memory for the packet buffer. :(\n");
- return -1;
+ /* add data to device queue */
+ if (icmp_packet->msg_type != ECHO_REQUEST) {
+ bat_device_receive_packet(icmp_packet);
+ return;
}
- while ((!kthread_should_stop()) && (!atomic_read(&exit_cond))) {
+ /* answer echo request (ping) */
+ /* get routing information */
+ spin_lock(&orig_hash_lock);
+ orig_node = ((struct orig_node *)hash_find(orig_hash,
+ icmp_packet->orig));
- wait_event_interruptible(thread_wait, (atomic_read(&data_ready_cond) || atomic_read(&exit_cond)));
+ if ((orig_node != NULL) &&
+ (orig_node->batman_if != NULL) &&
+ (orig_node->router != NULL)) {
+ memcpy(icmp_packet->dst, icmp_packet->orig, ETH_ALEN);
+ memcpy(icmp_packet->orig, ethhdr->h_dest, ETH_ALEN);
+ icmp_packet->msg_type = ECHO_REPLY;
+ icmp_packet->ttl = TTL;
- atomic_set(&data_ready_cond, 0);
+ send_raw_packet(packet_buff + sizeof(struct ethhdr),
+ result - sizeof(struct ethhdr),
+ orig_node->batman_if,
+ orig_node->router->addr);
+ }
- if (kthread_should_stop() || atomic_read(&exit_cond))
- break;
+ spin_unlock(&orig_hash_lock);
+ return;
+}
- /* we only want to safely traverse the list, hard-interfaces
- * won't be deleted anyway as long as this thread runs. */
+static void recv_icmp_ttl_exceeded(struct icmp_packet *icmp_packet,
+ struct ethhdr *ethhdr,
+ unsigned char *packet_buff,
+ int result,
+ struct batman_if *batman_if)
+{
+ unsigned char src_str[ETH_STR_LEN], dst_str[ETH_STR_LEN];
+ struct orig_node *orig_node;
- rcu_read_lock();
- list_for_each_entry_rcu(batman_if, &if_list, list) {
- rcu_read_unlock();
+ addr_to_string(src_str, icmp_packet->orig);
+ addr_to_string(dst_str, icmp_packet->dst);
- result = -1;
+ printk(KERN_WARNING "batman-adv:Warning - can't send packet from %s to %s: ttl exceeded\n", src_str, dst_str);
- while (1) {
- if (batman_if->if_active != IF_ACTIVE) {
- if (batman_if->if_active != IF_TO_BE_ACTIVATED)
- printk(KERN_WARNING
- "batman-adv:Could not read from deactivated interface %s!\n",
- batman_if->dev);
+ /* send TTL exceeded if packet is an echo request (traceroute) */
+ if (icmp_packet->msg_type != ECHO_REQUEST)
+ return;
- if (batman_if->raw_sock)
- receive_raw_packet(batman_if->raw_sock, packet_buff, PACKBUFF_SIZE);
- result = 0;
- break;
- }
+ /* get routing information */
+ spin_lock(&orig_hash_lock);
+ orig_node = ((struct orig_node *)
+ hash_find(orig_hash, icmp_packet->orig));
- result = receive_raw_packet(batman_if->raw_sock, packet_buff, PACKBUFF_SIZE);
- if (result <= 0)
- break;
+ if ((orig_node != NULL) &&
+ (orig_node->batman_if != NULL) &&
+ (orig_node->router != NULL)) {
+ memcpy(icmp_packet->dst, icmp_packet->orig, ETH_ALEN);
+ memcpy(icmp_packet->orig, ethhdr->h_dest, ETH_ALEN);
+ icmp_packet->msg_type = TTL_EXCEEDED;
+ icmp_packet->ttl = TTL;
- if (result < sizeof(struct ethhdr) + 2)
- continue;
+ send_raw_packet(packet_buff + sizeof(struct ethhdr),
+ result - sizeof(struct ethhdr),
+ orig_node->batman_if,
+ orig_node->router->addr);
- ethhdr = (struct ethhdr *)packet_buff;
- batman_packet = (struct batman_packet *)(packet_buff + sizeof(struct ethhdr));
+ }
- if (batman_packet->version != COMPAT_VERSION) {
- bat_dbg(DBG_BATMAN, "Drop packet: incompatible batman version (%i)\n", batman_packet->version);
- continue;
- }
+ spin_unlock(&orig_hash_lock);
+}
- switch (batman_packet->packet_type) {
- /* batman originator packet */
- case BAT_PACKET:
- /* packet with broadcast indication but unicast recipient */
- if (!is_bcast(ethhdr->h_dest))
- continue;
- /* packet with broadcast sender address */
- if (is_bcast(ethhdr->h_source))
- continue;
- /* drop packet if it has not at least one batman packet as payload */
- if (result < sizeof(struct ethhdr) + sizeof(struct batman_packet))
- continue;
+static void recv_icmp_packet(struct ethhdr *ethhdr,
+ unsigned char *packet_buff,
+ int result,
+ struct batman_if *batman_if)
+{
+ struct icmp_packet *icmp_packet;
+ struct orig_node *orig_node;
- spin_lock(&orig_hash_lock);
- receive_aggr_bat_packet(ethhdr,
- packet_buff + sizeof(struct ethhdr),
- result - sizeof(struct ethhdr),
- batman_if);
- spin_unlock(&orig_hash_lock);
+ /* packet with unicast indication but broadcast recipient */
+ if (is_bcast(ethhdr->h_dest))
+ return;
- break;
+ /* packet with broadcast sender address */
+ if (is_bcast(ethhdr->h_source))
+ return;
- /* batman icmp packet */
- case BAT_ICMP:
- /* packet with unicast indication but broadcast recipient */
- if (is_bcast(ethhdr->h_dest))
- continue;
+ /* not for me */
+ if (!is_my_mac(ethhdr->h_dest))
+ return;
- /* packet with broadcast sender address */
- if (is_bcast(ethhdr->h_source))
- continue;
+ /* drop packet if it has not necessary minimum size */
+ if (result < sizeof(struct ethhdr) + sizeof(struct icmp_packet))
+ return;
- /* not for me */
- if (!is_my_mac(ethhdr->h_dest))
- continue;
+ icmp_packet = (struct icmp_packet *)
+ (packet_buff + sizeof(struct ethhdr));
- /* drop packet if it has not necessary minimum size */
- if (result < sizeof(struct ethhdr) + sizeof(struct icmp_packet))
- continue;
+ /* packet for me */
+ if (is_my_mac(icmp_packet->dst))
+ recv_my_icmp_packet(ethhdr, icmp_packet, packet_buff, result);
- icmp_packet = (struct icmp_packet *)(packet_buff + sizeof(struct ethhdr));
+ /* TTL exceeded */
+ if (icmp_packet->ttl < 2) {
+ recv_icmp_ttl_exceeded(icmp_packet, ethhdr, packet_buff, result,
+ batman_if);
+ return;
- /* packet for me */
- if (is_my_mac(icmp_packet->dst)) {
+ }
- /* add data to device queue */
- if (icmp_packet->msg_type != ECHO_REQUEST) {
- bat_device_receive_packet(icmp_packet);
- continue;
- }
+ /* get routing information */
+ spin_lock(&orig_hash_lock);
+ orig_node = ((struct orig_node *)
+ hash_find(orig_hash, icmp_packet->dst));
- /* answer echo request (ping) */
- /* get routing information */
- spin_lock(&orig_hash_lock);
- orig_node = ((struct orig_node *)hash_find(orig_hash, icmp_packet->orig));
+ if ((orig_node != NULL) &&
+ (orig_node->batman_if != NULL) &&
+ (orig_node->router != NULL)) {
- if ((orig_node != NULL) && (orig_node->batman_if != NULL) && (orig_node->router != NULL)) {
+ /* decrement ttl */
+ icmp_packet->ttl--;
- memcpy(icmp_packet->dst, icmp_packet->orig, ETH_ALEN);
- memcpy(icmp_packet->orig, ethhdr->h_dest, ETH_ALEN);
- icmp_packet->msg_type = ECHO_REPLY;
- icmp_packet->ttl = TTL;
+ /* route it */
+ send_raw_packet(packet_buff + sizeof(struct ethhdr),
+ result - sizeof(struct ethhdr),
+ orig_node->batman_if,
+ orig_node->router->addr);
+ }
+ spin_unlock(&orig_hash_lock);
+}
- send_raw_packet(packet_buff + sizeof(struct ethhdr),
- result - sizeof(struct ethhdr),
- orig_node->batman_if,
- orig_node->router->addr);
+static void recv_unicast_packet(struct ethhdr *ethhdr,
+ unsigned char *packet_buff,
+ int result,
+ struct batman_if *batman_if)
+{
+ struct unicast_packet *unicast_packet;
+ unsigned char src_str[ETH_STR_LEN], dst_str[ETH_STR_LEN];
+ struct orig_node *orig_node;
+ int hdr_size = sizeof(struct ethhdr) + sizeof(struct unicast_packet);
- }
+ /* packet with unicast indication but broadcast recipient */
+ if (is_bcast(ethhdr->h_dest))
+ return;
- spin_unlock(&orig_hash_lock);
- continue;
+ /* packet with broadcast sender address */
+ if (is_bcast(ethhdr->h_source))
+ return;
- }
+ /* not for me */
+ if (!is_my_mac(ethhdr->h_dest))
+ return;
- /* TTL exceeded */
- if (icmp_packet->ttl < 2) {
+ /* drop packet if it has not necessary minimum size */
+ if (result < hdr_size)
+ return;
- addr_to_string(src_str, icmp_packet->orig);
- addr_to_string(dst_str, icmp_packet->dst);
+ unicast_packet = (struct unicast_packet *)
+ (packet_buff + sizeof(struct ethhdr));
- printk(KERN_WARNING "batman-adv:Warning - can't send packet from %s to %s: ttl exceeded\n", src_str, dst_str);
+ /* packet for me */
+ if (is_my_mac(unicast_packet->dest)) {
+ interface_rx(soft_device, packet_buff + hdr_size,
+ result - hdr_size);
+ return;
- /* send TTL exceeded if packet is an echo request (traceroute) */
- if (icmp_packet->msg_type != ECHO_REQUEST)
- continue;
+ }
- /* get routing information */
- spin_lock(&orig_hash_lock);
- orig_node = ((struct orig_node *)hash_find(orig_hash, icmp_packet->orig));
+ /* TTL exceeded */
+ if (unicast_packet->ttl < 2) {
+ addr_to_string(src_str, ((struct ethhdr *)
+ (unicast_packet + 1))->h_source);
+ addr_to_string(dst_str, unicast_packet->dest);
- if ((orig_node != NULL) && (orig_node->batman_if != NULL) && (orig_node->router != NULL)) {
+ printk(KERN_WARNING "batman-adv:Warning - can't send packet from %s to %s: ttl exceeded\n", src_str, dst_str);
+ return;
+ }
- memcpy(icmp_packet->dst, icmp_packet->orig, ETH_ALEN);
- memcpy(icmp_packet->orig, ethhdr->h_dest, ETH_ALEN);
- icmp_packet->msg_type = TTL_EXCEEDED;
- icmp_packet->ttl = TTL;
+ /* get routing information */
+ spin_lock(&orig_hash_lock);
+ orig_node = ((struct orig_node *)
+ hash_find(orig_hash, unicast_packet->dest));
- send_raw_packet(packet_buff + sizeof(struct ethhdr),
- result - sizeof(struct ethhdr),
- orig_node->batman_if,
- orig_node->router->addr);
+ if ((orig_node != NULL) &&
+ (orig_node->batman_if != NULL) &&
+ (orig_node->router != NULL)) {
+ /* decrement ttl */
+ unicast_packet->ttl--;
- }
+ /* route it */
+ send_raw_packet(packet_buff + sizeof(struct ethhdr),
+ result - sizeof(struct ethhdr),
+ orig_node->batman_if,
+ orig_node->router->addr);
+ }
+ spin_unlock(&orig_hash_lock);
+}
- spin_unlock(&orig_hash_lock);
- continue;
- }
+static void recv_bcast_packet(struct ethhdr *ethhdr,
+ unsigned char *packet_buff,
+ int result,
+ struct batman_if *batman_if)
+{
+ struct orig_node *orig_node;
+ struct bcast_packet *bcast_packet;
+ int hdr_size = sizeof(struct ethhdr) + sizeof(struct bcast_packet);
- /* get routing information */
- spin_lock(&orig_hash_lock);
- orig_node = ((struct orig_node *)hash_find(orig_hash, icmp_packet->dst));
+ /* packet with broadcast indication but unicast recipient */
+ if (!is_bcast(ethhdr->h_dest))
+ return;
- if ((orig_node != NULL) && (orig_node->batman_if != NULL) && (orig_node->router != NULL)) {
+ /* packet with broadcast sender address */
+ if (is_bcast(ethhdr->h_source))
+ return;
- /* decrement ttl */
- icmp_packet->ttl--;
+ /* drop packet if it has not necessary minimum size */
+ if (result < hdr_size)
+ return;
- /* route it */
- send_raw_packet(packet_buff + sizeof(struct ethhdr),
- result - sizeof(struct ethhdr),
- orig_node->batman_if,
- orig_node->router->addr);
- }
+ /* ignore broadcasts sent by myself */
+ if (is_my_mac(ethhdr->h_source))
+ return;
- spin_unlock(&orig_hash_lock);
- break;
+ bcast_packet = (struct bcast_packet *)
+ (packet_buff + sizeof(struct ethhdr));
- /* unicast packet */
- case BAT_UNICAST:
- /* packet with unicast indication but broadcast recipient */
- if (is_bcast(ethhdr->h_dest))
- continue;
+ /* ignore broadcasts originated by myself */
+ if (is_my_mac(bcast_packet->orig))
+ return;
- /* packet with broadcast sender address */
- if (is_bcast(ethhdr->h_source))
- continue;
+ spin_lock(&orig_hash_lock);
+ orig_node = ((struct orig_node *)
+ hash_find(orig_hash, bcast_packet->orig));
- /* not for me */
- if (!is_my_mac(ethhdr->h_dest))
- continue;
+ if (orig_node == NULL) {
+ spin_unlock(&orig_hash_lock);
+ return;
+ }
- /* drop packet if it has not necessary minimum size */
- if (result < sizeof(struct ethhdr) + sizeof(struct unicast_packet))
- continue;
+ /* check flood history */
+ if (get_bit_status(orig_node->bcast_bits,
+ orig_node->last_bcast_seqno,
+ ntohs(bcast_packet->seqno))) {
+ spin_unlock(&orig_hash_lock);
+ return;
+ }
- unicast_packet = (struct unicast_packet *)(packet_buff + sizeof(struct ethhdr));
+ /* mark broadcast in flood history */
+ if (bit_get_packet(orig_node->bcast_bits,
+ ntohs(bcast_packet->seqno) -
+ orig_node->last_bcast_seqno, 1))
+ orig_node->last_bcast_seqno = ntohs(bcast_packet->seqno);
- /* packet for me */
- if (is_my_mac(unicast_packet->dest)) {
+ spin_unlock(&orig_hash_lock);
- interface_rx(soft_device, packet_buff + sizeof(struct ethhdr) + sizeof(struct unicast_packet), result - sizeof(struct ethhdr) - sizeof(struct unicast_packet));
- continue;
+ /* broadcast for me */
+ interface_rx(soft_device, packet_buff + hdr_size, result - hdr_size);
- }
+ /* rebroadcast packet */
+ add_bcast_packet_to_list(packet_buff + sizeof(struct ethhdr),
+ result - sizeof(struct ethhdr));
+}
- /* TTL exceeded */
- if (unicast_packet->ttl < 2) {
- addr_to_string(src_str, ((struct ethhdr *)(unicast_packet + 1))->h_source);
- addr_to_string(dst_str, unicast_packet->dest);
+static void recv_vis_packet(struct ethhdr *ethhdr,
+ unsigned char *packet_buff,
+ int result)
+{
+ struct vis_packet *vis_packet;
+ int hdr_size = sizeof(struct ethhdr) + sizeof(struct vis_packet);
+ int vis_info_len;
- printk(KERN_WARNING "batman-adv:Warning - can't send packet from %s to %s: ttl exceeded\n", src_str, dst_str);
- continue;
- }
+ /* drop if too short. */
+ if (result < hdr_size)
+ return;
- /* get routing information */
- spin_lock(&orig_hash_lock);
- orig_node = ((struct orig_node *)hash_find(orig_hash, unicast_packet->dest));
+ /* not for me */
+ if (!is_my_mac(ethhdr->h_dest))
+ return;
- if ((orig_node != NULL) && (orig_node->batman_if != NULL) && (orig_node->router != NULL)) {
- /* decrement ttl */
- unicast_packet->ttl--;
+ vis_packet = (struct vis_packet *)(packet_buff + sizeof(struct ethhdr));
+ vis_info_len = result - hdr_size;
- /* route it */
- send_raw_packet(packet_buff + sizeof(struct ethhdr),
- result - sizeof(struct ethhdr),
- orig_node->batman_if,
- orig_node->router->addr);
- }
+ /* ignore own packets */
+ if (is_my_mac(vis_packet->vis_orig))
+ return;
- spin_unlock(&orig_hash_lock);
- break;
+ if (is_my_mac(vis_packet->sender_orig))
+ return;
- /* broadcast packet */
- case BAT_BCAST:
- /* packet with broadcast indication but unicast recipient */
- if (!is_bcast(ethhdr->h_dest))
- continue;
+ switch (vis_packet->vis_type) {
+ case VIS_TYPE_SERVER_SYNC:
+ receive_server_sync_packet(vis_packet, vis_info_len);
+ break;
- /* packet with broadcast sender address */
- if (is_bcast(ethhdr->h_source))
- continue;
+ case VIS_TYPE_CLIENT_UPDATE:
+ receive_client_update_packet(vis_packet, vis_info_len);
+ break;
- /* drop packet if it has not necessary minimum size */
- if (result < sizeof(struct ethhdr) + sizeof(struct bcast_packet))
- continue;
+ default: /* ignore unknown packet */
+ break;
+ }
+}
- /* ignore broadcasts sent by myself */
- if (is_my_mac(ethhdr->h_source))
- continue;
+static int recv_one_packet(struct batman_if *batman_if,
+ unsigned char *packet_buff)
+{
+ int result;
+ struct ethhdr *ethhdr;
+ struct batman_packet *batman_packet;
- bcast_packet = (struct bcast_packet *)(packet_buff + sizeof(struct ethhdr));
+ result = receive_raw_packet(batman_if->raw_sock, packet_buff,
+ PACKBUFF_SIZE);
+ if (result <= 0)
+ return result;
- /* ignore broadcasts originated by myself */
- if (is_my_mac(bcast_packet->orig))
- continue;
+ if (result < sizeof(struct ethhdr) + 2)
+ return 0;
- spin_lock(&orig_hash_lock);
- orig_node = ((struct orig_node *)hash_find(orig_hash, bcast_packet->orig));
+ ethhdr = (struct ethhdr *)packet_buff;
+ batman_packet = (struct batman_packet *)
+ (packet_buff + sizeof(struct ethhdr));
- if (orig_node == NULL) {
- spin_unlock(&orig_hash_lock);
- continue;
- }
+ if (batman_packet->version != COMPAT_VERSION) {
+ bat_dbg(DBG_BATMAN,
+ "Drop packet: incompatible batman version (%i)\n",
+ batman_packet->version);
+ return 0;
+ }
- /* check flood history */
- if (get_bit_status(orig_node->bcast_bits, orig_node->last_bcast_seqno, ntohs(bcast_packet->seqno))) {
- spin_unlock(&orig_hash_lock);
- continue;
- }
+ switch (batman_packet->packet_type) {
+ /* batman originator packet */
+ case BAT_PACKET:
+ recv_bat_packet(ethhdr, packet_buff, result, batman_if);
+ break;
- /* mark broadcast in flood history */
- if (bit_get_packet(orig_node->bcast_bits, ntohs(bcast_packet->seqno) - orig_node->last_bcast_seqno, 1))
- orig_node->last_bcast_seqno = ntohs(bcast_packet->seqno);
+ /* batman icmp packet */
+ case BAT_ICMP:
+ recv_icmp_packet(ethhdr, packet_buff, result, batman_if);
+ break;
- spin_unlock(&orig_hash_lock);
+ /* unicast packet */
+ case BAT_UNICAST:
+ recv_unicast_packet(ethhdr, packet_buff, result, batman_if);
+ break;
- /* broadcast for me */
- interface_rx(soft_device, packet_buff + sizeof(struct ethhdr) + sizeof(struct bcast_packet), result - sizeof(struct ethhdr) - sizeof(struct bcast_packet));
+ /* broadcast packet */
+ case BAT_BCAST:
+ recv_bcast_packet(ethhdr,
+ packet_buff, result, batman_if);
+ break;
- /* rebroadcast packet */
- add_bcast_packet_to_list(packet_buff + sizeof(struct ethhdr),
- result - sizeof(struct ethhdr));
+ /* vis packet */
+ case BAT_VIS:
+ recv_vis_packet(ethhdr, packet_buff, result);
+ break;
+ }
+ return 0;
+}
- break;
- /* vis packet */
- case BAT_VIS:
- /* drop if too short. */
- if (result < sizeof(struct ethhdr) + sizeof(struct vis_packet))
- continue;
+static int discard_one_packet(struct batman_if *batman_if,
+ unsigned char *packet_buff)
+{
+ int result = -EAGAIN;
- /* not for me */
- if (!is_my_mac(ethhdr->h_dest))
- continue;
+ if (batman_if->if_active != IF_TO_BE_ACTIVATED) {
+ printk(KERN_WARNING
+ "batman-adv:Could not read from deactivated interface %s!\n",
+ batman_if->dev);
+ } else {
+ if (batman_if->raw_sock)
+ result = receive_raw_packet(batman_if->raw_sock,
+ packet_buff,
+ PACKBUFF_SIZE);
+ }
+ return result;
+}
- vis_packet = (struct vis_packet *)(packet_buff + sizeof(struct ethhdr));
- vis_info_len = result - sizeof(struct ethhdr) - sizeof(struct vis_packet);
- /* ignore own packets */
- if (is_my_mac(vis_packet->vis_orig))
- continue;
+static bool is_interface_active(struct batman_if *batman_if)
+{
+ if (batman_if->if_active != IF_ACTIVE)
+ return false;
- if (is_my_mac(vis_packet->sender_orig))
- continue;
+ return true;
+}
- switch (vis_packet->vis_type) {
- case VIS_TYPE_SERVER_SYNC:
- receive_server_sync_packet(vis_packet, vis_info_len);
- break;
+static void service_interface(struct batman_if *batman_if,
+ unsigned char *packet_buff)
- case VIS_TYPE_CLIENT_UPDATE:
- receive_client_update_packet(vis_packet, vis_info_len);
- break;
+{
+ int result;
- default: /* ignore unknown packet */
- break;
- }
+ do {
+ if (is_interface_active(batman_if))
+ result = recv_one_packet(batman_if, packet_buff);
+ else
+ result = discard_one_packet(batman_if, packet_buff);
+ } while (result >= 0);
- break;
- }
+ /* we perform none blocking reads, so EAGAIN indicates there
+ are no more packets to read. Anything else is a real
+ error.*/
- }
+ if ((result < 0) && (result != -EAGAIN))
+ printk(KERN_ERR "batman-adv:Could not receive packet from interface %s: %i\n", batman_if->dev, result);
+}
- if ((result < 0) && (result != -EAGAIN))
- printk(KERN_ERR "batman-adv:Could not receive packet from interface %s: %i\n", batman_if->dev, result);
-
- /* lock for the next iteration */
- rcu_read_lock();
- }
+static void service_interfaces(unsigned char *packet_buffer)
+{
+ struct batman_if *batman_if;
+ rcu_read_lock();
+ list_for_each_entry_rcu(batman_if, &if_list, list) {
rcu_read_unlock();
+ service_interface(batman_if, packet_buffer);
+ rcu_read_lock();
+ }
+ rcu_read_unlock();
+}
+
+int packet_recv_thread(void *data)
+{
+ unsigned char *packet_buff;
+
+ atomic_set(&data_ready_cond, 0);
+ atomic_set(&exit_cond, 0);
+ packet_buff = kmalloc(PACKBUFF_SIZE, GFP_KERNEL);
+ if (!packet_buff) {
+ printk(KERN_ERR"batman-adv:Could allocate memory for the packet buffer. :(\n");
+ return -1;
}
+
+ while ((!kthread_should_stop()) && (!atomic_read(&exit_cond))) {
+
+ wait_event_interruptible(thread_wait,
+ (atomic_read(&data_ready_cond) ||
+ atomic_read(&exit_cond)));
+
+ atomic_set(&data_ready_cond, 0);
+
+ if (kthread_should_stop() || atomic_read(&exit_cond))
+ break;
+
+ service_interfaces(packet_buff);
+ }
kfree(packet_buff);
- /* do not exit until kthread_stop() is actually called, otherwise it will wait for us
- * forever. */
+ /* do not exit until kthread_stop() is actually called,
+ * otherwise it will wait for us forever. */
while (!kthread_should_stop())
schedule();
13 years, 2 months
r1485 - trunk/batman-experimental
by postmaster@open-mesh.net
Author: axel
Date: 2009-11-27 23:08:32 +0000 (Fri, 27 Nov 2009)
New Revision: 1485
Modified:
trunk/batman-experimental/batman.h
trunk/batman-experimental/control.h
trunk/batman-experimental/hna.c
trunk/batman-experimental/schedule.c
Log:
minor debug, and comments beautification
Modified: trunk/batman-experimental/batman.h
===================================================================
--- trunk/batman-experimental/batman.h 2009-11-27 14:42:32 UTC (rev 1484)
+++ trunk/batman-experimental/batman.h 2009-11-27 23:08:32 UTC (rev 1485)
@@ -149,7 +149,7 @@
#define WARNING_PERIOD 20000
#define MAX_PATH_SIZE 300
-#define MAX_ARG_SIZE 50
+#define MAX_ARG_SIZE 200
/* DEF_UDPD_SIZE should not be increased before all bmxds' of a mesh support this option!
Modified: trunk/batman-experimental/control.h
===================================================================
--- trunk/batman-experimental/control.h 2009-11-27 14:42:32 UTC (rev 1484)
+++ trunk/batman-experimental/control.h 2009-11-27 23:08:32 UTC (rev 1485)
@@ -298,50 +298,57 @@
enum opt_cmd {
+ // option handlers are registered, configured, and unregistered using primitives.
+ // for registration and unregistration the primitives OPT_REGISTER and OPT_UNREGISTER are used
+ // for configuration the primitives OPT_PATCH, OPT_ADJUST, OPT_CHECK, OPT_APPLY, OPT_SET_POST, OPT_POST are used
+
+
// called once for each option after registration
// Returns FAILURE or SUCCESS
OPT_REGISTER,
- OPT_PATCH,
-/*
- if applied values need to be adjusted to unified format it must be during OPT_ADJUST
- this has the following advantages:
- tracked and applied values are equal
- -> track knows about already configured values
- -> can prevent/warn reconfiguration of already configured values
- -> can reject resetting of non-configured values
-*/
+ OPT_PATCH,
+ // opt values are configured by creating, extending, adjusting and finally testing and applying a patch
+ // option handler usually dont care about the creation of the patch.
+ // they get a complete patch which includes
+ // the option type-value pair and optional child type-valued pairs.
+
+
OPT_ADJUST,
+ // patched type-values pairs can be adjusted to a unified format before being checked or applied
+ // this has the following advantages:
+ // tracked and applied values are equal (different value notations can be adjusted to a unified format)
+ // -> track knows about already configured values (even when given with different notation)
+ // -> can prevent/warn reconfiguration of already configured values
+ // -> can reject resetting of non-configured values
+
-
- // to test opt value!
+ OPT_CHECK,
+ // to test a give patch (type-value pair) !
// Returns FAILURE or n>=0 of processed bytes-1
- OPT_CHECK,
- // to set opt value!
+
+ OPT_APPLY,
+ // to apply a previously created and adjusted patch
// Returns FAILURE or n>=0 of processed bytes-1
- OPT_APPLY,
- /*
- // end of A_N section (after last opt_arg )
- // Returns FAILURE or SUCCESS
- OPT_TEST_END,
- OPT_SET_END,
- */
-
+ OPT_SET_POST,
+ // called whenever any option is changed and
// called ordered for each option and before next higher-order option
// Returns FAILURE or SUCCESS
- OPT_SET_POST,
+
+ OPT_POST,
+ // called whenever any option is changed and
// called ordered for each option after all options were (re-)set
// Returns FAILURE or SUCCESS
- OPT_POST,
+
+ OPT_UNREGISTER
// called once before an option is unregistered
// Returns FAILURE or SUCCESS
- OPT_UNREGISTER
};
Modified: trunk/batman-experimental/hna.c
===================================================================
--- trunk/batman-experimental/hna.c 2009-11-27 14:42:32 UTC (rev 1484)
+++ trunk/batman-experimental/hna.c 2009-11-27 23:08:32 UTC (rev 1485)
@@ -466,13 +466,13 @@
0, "\nHost and Network Announcement (HNA) options:"},
{ODI,5,0,ARG_UHNA, 'a',A_PMN,A_ADM,A_DYI,A_CFA,A_ANY, 0, 0, 0, 0, opt_hna,
- ARG_PREFIX_FORM, "perform host-network announcement (HNA) for defined ip range"},
+ ARG_PREFIX_FORM,"perform host-network announcement (HNA) for defined ip range"},
{ODI,5,ARG_UHNA,ARG_NETW, 'n',A_CS1,A_ADM,A_DYI,A_CFA,A_ANY, 0, 0, 0, 0, opt_hna,
ARG_NETW_FORM, "specify network of announcement"},
{ODI,5,ARG_UHNA,ARG_MASK, 'm',A_CS1,A_ADM,A_DYI,A_CFA,A_ANY, 0, 0, 0, 0, opt_hna,
- ARG_MASK_FORM, "specify network of announcement"},
+ ARG_MASK_FORM, "specify network prefix of announcement"},
{ODI,5,0,ARG_HNAS, 0, A_PS0,A_USR,A_DYN,A_ARG,A_ANY, 0, 0, 0, 0, opt_show_hnas,
Modified: trunk/batman-experimental/schedule.c
===================================================================
--- trunk/batman-experimental/schedule.c 2009-11-27 14:42:32 UTC (rev 1484)
+++ trunk/batman-experimental/schedule.c 2009-11-27 23:08:32 UTC (rev 1485)
@@ -419,7 +419,6 @@
//uint16_t aggr_interval = (my_ogi/aggr_p_ogi > 3*MIN_OGI) ? 3*MIN_OGI : (my_ogi/aggr_p_ogi);
register_task( (aggr_interval + rand_num( aggr_interval/2 )) - (aggr_interval/4), send_outstanding_ogms, NULL );
-
if ( list_empty( &send_list ) ||
GREAT_U32( (list_entry( (&send_list)->next, struct send_node, list ))->send_time, batman_time ) ) {
@@ -438,8 +437,8 @@
list_for_each_safe( send_pos, send_temp, &send_list ) {
send_node = list_entry( send_pos, struct send_node, list );
+
-
if ( GREAT_U32( send_node->send_time, batman_time ) )
break; // for now we are done,
@@ -1400,9 +1399,9 @@
send_node_new = batman_if->own_send_node;
memset( send_node_new, 0, sizeof( struct send_node) );
+
INIT_LIST_HEAD( &send_node_new->list );
-
-
+
send_node_new->send_time = batman_if->if_seqno_schedule + my_ogi;
if ( LESS_U32( send_node_new->send_time, batman_time ) ||
@@ -1460,16 +1459,12 @@
send_node_new->ogm_buff_len = ogm_len;
-
-
batman_if->own_ogm_out->ogm_seqno = htons( batman_if->if_seqno );
batman_if->own_ogm_out->bat_size = ogm_len/4;
batman_if->own_ogm_out->flags = 0;
- //batman_if->own_ogm_out->ogm_path_lounge = Signal_lounge; done in if_reconfigure_soft
batman_if->own_ogm_out->ogm_misc = MIN( s_curr_avg_cpu_load , 255 );
-
prev_list_head = (struct list_head *)&send_list;
list_for_each( list_pos, &send_list ) {
@@ -1503,6 +1498,7 @@
}
+
prof_stop( PROF_schedule_own_ogm );
}
13 years, 2 months
r1484 - in trunk/batman-experimental: . lib lib/bmx_gsf_map lib/bmx_howto_plugin lib/bmx_http_info lib/bmx_uci_config linux
by postmaster@open-mesh.net
Author: axel
Date: 2009-11-27 14:42:32 +0000 (Fri, 27 Nov 2009)
New Revision: 1484
Modified:
trunk/batman-experimental/batman.h
trunk/batman-experimental/control.c
trunk/batman-experimental/hna.c
trunk/batman-experimental/lib/Makefile
trunk/batman-experimental/lib/bmx_gsf_map/Makefile
trunk/batman-experimental/lib/bmx_howto_plugin/Makefile
trunk/batman-experimental/lib/bmx_http_info/Makefile
trunk/batman-experimental/lib/bmx_uci_config/Makefile
trunk/batman-experimental/linux/route.c
trunk/batman-experimental/originator.c
Log:
fix some 64bit linux issues
Modified: trunk/batman-experimental/batman.h
===================================================================
--- trunk/batman-experimental/batman.h 2009-11-14 06:11:37 UTC (rev 1483)
+++ trunk/batman-experimental/batman.h 2009-11-27 14:42:32 UTC (rev 1484)
@@ -458,8 +458,11 @@
int16_t send_bucket;
uint8_t iteration;
uint8_t own_if;
+ int32_t ogm_buff_len;
struct batman_if *if_outgoing;
- int32_t ogm_buff_len;
+
+ // the following ogm_buff array MUST be aligned with bit-range of the OS (64bit for 64-bit OS)
+ // having a pointer right before ensures this alignment.
unsigned char ogm_buff[]; // this is to access following ogm data
};
Modified: trunk/batman-experimental/control.c
===================================================================
--- trunk/batman-experimental/control.c 2009-11-14 06:11:37 UTC (rev 1483)
+++ trunk/batman-experimental/control.c 2009-11-27 14:42:32 UTC (rev 1484)
@@ -486,7 +486,7 @@
if ( cn->dbgl != DBGL_ALL ) {
syslog( LOG_ERR, "failed %d times writing %d instead of %d/%d bytes (%s)! Giving up: %s\n",
- i, w, strlen(s+out), strlen(s), strerror(errno), s+out );
+ i, (int)w, (int)strlen(s+out), (int)strlen(s), strerror(errno), s+out );
}
break;
@@ -1740,7 +1740,7 @@
p_track = NULL;
- dbgf_all( DBGT_INFO, "p_val:%s c:%x", patch->p_val, (uint32_t)c );
+ dbgf_all( DBGT_INFO, "p_val:%s", patch->p_val );
if ( (p_track = get_opt_parent_val( opt, val )) )
c_track = get_opt_child( c->c_opt, p_track );
@@ -2993,7 +2993,7 @@
} else {
- dbgf( DBGL_SYS, DBGT_ERR, "called with out %s and in %d %s", out, (uint32_t)in, in );
+ dbgf( DBGL_SYS, DBGT_ERR, "called with out: %s and in: %s", out, in );
cleanup_all( -500017 );
}
Modified: trunk/batman-experimental/hna.c
===================================================================
--- trunk/batman-experimental/hna.c 2009-11-14 06:11:37 UTC (rev 1483)
+++ trunk/batman-experimental/hna.c 2009-11-27 14:42:32 UTC (rev 1484)
@@ -246,8 +246,8 @@
{
dbgf( DBGL_SYS, DBGT_ERR,
"invalid hna information on %x, hal %d, ha %x, ohna_data %x ohal %d, oha %x!",
- (uint32_t)on, len, (uint32_t)array, (uint32_t)orig_hna,
- orig_hna?orig_hna->hna_array_len:0, (uint32_t)(orig_hna?orig_hna->hna_array:0) );
+ (uint64_t)on, len, (uint64_t)array, (uint64_t)orig_hna,
+ orig_hna?orig_hna->hna_array_len:0, (uint64_t)(orig_hna?orig_hna->hna_array:0) );
cleanup_all( -500024 );
}
Modified: trunk/batman-experimental/lib/Makefile
===================================================================
--- trunk/batman-experimental/lib/Makefile 2009-11-14 06:11:37 UTC (rev 1483)
+++ trunk/batman-experimental/lib/Makefile 2009-11-27 14:42:32 UTC (rev 1484)
@@ -1,5 +1,5 @@
-PLUGINS = $(shell find -maxdepth 1 -type d | grep -e '^./bmx_' )
+PLUGINS = $(shell find -maxdepth 1 -type d | grep -e '^./bmx_' | sort)
%:
for d in $(PLUGINS); do $(MAKE) -C $$d $@ || echo compiling $$d failed; echo;echo; done
Modified: trunk/batman-experimental/lib/bmx_gsf_map/Makefile
===================================================================
--- trunk/batman-experimental/lib/bmx_gsf_map/Makefile 2009-11-14 06:11:37 UTC (rev 1483)
+++ trunk/batman-experimental/lib/bmx_gsf_map/Makefile 2009-11-27 14:42:32 UTC (rev 1484)
@@ -1,5 +1,5 @@
-CFLAGS += -pedantic -Wall -W -Wno-unused-parameter -O1 -g3 -std=gnu99 -I../../
+CFLAGS += -fpic -pedantic -Wall -W -Wno-unused-parameter -O1 -g3 -std=gnu99 -I../../
LDFLAGS += -shared
#-Wl,-soname,bmxd_config
Modified: trunk/batman-experimental/lib/bmx_howto_plugin/Makefile
===================================================================
--- trunk/batman-experimental/lib/bmx_howto_plugin/Makefile 2009-11-14 06:11:37 UTC (rev 1483)
+++ trunk/batman-experimental/lib/bmx_howto_plugin/Makefile 2009-11-27 14:42:32 UTC (rev 1484)
@@ -1,5 +1,5 @@
-CFLAGS += -pedantic -Wall -W -Wno-unused-parameter -O1 -g3 -std=gnu99 -I../../
+CFLAGS += -fpic -pedantic -Wall -W -Wno-unused-parameter -O1 -g3 -std=gnu99 -I../../
LDFLAGS += -shared
#-Wl,-soname,bmxd_config
Modified: trunk/batman-experimental/lib/bmx_http_info/Makefile
===================================================================
--- trunk/batman-experimental/lib/bmx_http_info/Makefile 2009-11-14 06:11:37 UTC (rev 1483)
+++ trunk/batman-experimental/lib/bmx_http_info/Makefile 2009-11-27 14:42:32 UTC (rev 1484)
@@ -1,5 +1,5 @@
-CFLAGS += -pedantic -Wall -W -Wno-unused-parameter -O1 -g3 -std=gnu99 -I../../
+CFLAGS += -fpic -pedantic -Wall -W -Wno-unused-parameter -O1 -g3 -std=gnu99 -I../../
LDFLAGS += -shared
#-Wl,-soname,bmxd_config
Modified: trunk/batman-experimental/lib/bmx_uci_config/Makefile
===================================================================
--- trunk/batman-experimental/lib/bmx_uci_config/Makefile 2009-11-14 06:11:37 UTC (rev 1483)
+++ trunk/batman-experimental/lib/bmx_uci_config/Makefile 2009-11-27 14:42:32 UTC (rev 1484)
@@ -1,5 +1,5 @@
-CFLAGS += -pedantic -Wall -W -Wno-unused-parameter -O1 -g3 -std=gnu99 -I../../
+CFLAGS += -fpic -pedantic -Wall -W -Wno-unused-parameter -O1 -g3 -std=gnu99 -I../../
LDFLAGS += -shared -luci
#-Wl,-soname,bmx_config
Modified: trunk/batman-experimental/linux/route.c
===================================================================
--- trunk/batman-experimental/linux/route.c 2009-11-14 06:11:37 UTC (rev 1483)
+++ trunk/batman-experimental/linux/route.c 2009-11-27 14:42:32 UTC (rev 1484)
@@ -947,11 +947,17 @@
bif->if_conf_hard_changed = NO;
- //reschedule if_reconfigure_soft( bif ); done from check_interfaces()
bif->if_conf_soft_changed = YES;
-
+
bif->if_active = YES;
+
+ //reschedule if_reconfigure_soft( bif ) also called from check_interfaces()
+ // but should also be called here
+ // - before first schedule_own_ogm()
+ // - after if_active=YES
+ if_reconfigure_soft( bif );
+
if ( !bif->if_scheduling )
schedule_own_ogm( bif );
Modified: trunk/batman-experimental/originator.c
===================================================================
--- trunk/batman-experimental/originator.c 2009-11-14 06:11:37 UTC (rev 1483)
+++ trunk/batman-experimental/originator.c 2009-11-27 14:42:32 UTC (rev 1484)
@@ -1159,7 +1159,8 @@
if ( ogm->ogm_pws < MIN_PWS || ogm->ogm_pws > MAX_PWS ) {
- dbgf_all( DBGT_INFO, "drop OGM: unsopported path window size!" );
+ dbg_mute( 30, DBGL_SYS, DBGT_WARN, "drop OGM: %s unsopported path window size %d !",
+ ipStr( ogm->orig ), ogm->ogm_pws );
goto process_ogm_end;
}
@@ -1177,7 +1178,7 @@
if ( neigh == bif->if_broad ) {
- dbgf_all( DBGT_INFO, "drop OGM: ignoring all packets with broadcast source IP (sender: %s)",
+ dbg_mute( 30, DBGL_SYS, DBGT_WARN, "drop OGM: %s ignoring all packets with broadcast source IP",
mb->neigh_str );
goto process_ogm_end;
}
13 years, 2 months
r1483 - in trunk: batctl batman-adv-kernelland
by postmaster@open-mesh.net
Author: marek
Date: 2009-11-14 06:11:37 +0000 (Sat, 14 Nov 2009)
New Revision: 1483
Added:
trunk/batctl/sys.c
trunk/batctl/sys.h
Modified:
trunk/batctl/Makefile
trunk/batctl/functions.c
trunk/batctl/functions.h
trunk/batctl/main.c
trunk/batctl/main.h
trunk/batctl/proc.c
trunk/batctl/proc.h
trunk/batman-adv-kernelland/Makefile.kbuild
Log:
[batctl adapt batctl to the new logging mechanisms
Modified: trunk/batctl/Makefile
===================================================================
--- trunk/batctl/Makefile 2009-11-14 06:11:32 UTC (rev 1482)
+++ trunk/batctl/Makefile 2009-11-14 06:11:37 UTC (rev 1483)
@@ -26,7 +26,7 @@
endif
CC = gcc
-CFLAGS += -pedantic -Wall -W -g3 -std=gnu99
+CFLAGS += -pedantic -Wall -W -g3 -std=gnu99 -Os
EXTRA_CFLAGS = -DREVISION_VERSION=$(REVISION_VERSION)
LDFLAGS +=
@@ -39,8 +39,8 @@
EXTRA_MODULES_C := bisect.c
EXTRA_MODULES_H := bisect.h
-SRC_C = main.c bat-hosts.c functions.c proc.c ping.c traceroute.c tcpdump.c list-batman.c hash.c $(EXTRA_MODULES_C)
-SRC_H = main.h bat-hosts.h functions.h proc.h ping.h traceroute.h tcpdump.h list-batman.h hash.h allocate.h $(EXTRA_MODULES_H)
+SRC_C = main.c bat-hosts.c functions.c proc.c sys.c ping.c traceroute.c tcpdump.c list-batman.c hash.c $(EXTRA_MODULES_C)
+SRC_H = main.h bat-hosts.h functions.h proc.h sys.h ping.h traceroute.h tcpdump.h list-batman.h hash.h allocate.h $(EXTRA_MODULES_H)
SRC_O = $(SRC_C:.c=.o)
PACKAGE_NAME = batctl
Modified: trunk/batctl/functions.c
===================================================================
--- trunk/batctl/functions.c 2009-11-14 06:11:32 UTC (rev 1482)
+++ trunk/batctl/functions.c 2009-11-14 06:11:37 UTC (rev 1483)
@@ -1,4 +1,4 @@
-/*
+/*
* Copyright (C) 2007-2009 B.A.T.M.A.N. contributors:
*
* Andreas Langer <a.langer(a)q-dsl.de>, Marek Lindner <lindner_marek(a)yahoo.de>
@@ -38,6 +38,7 @@
static struct timeval start_time;
static char *host_name;
+char read_buff[10];
void start_timer(void)
{
@@ -98,43 +99,74 @@
return get_name_by_macaddr(mac_addr, read_opt);
}
-static int check_proc_dir(void)
+static int check_proc_dir(char *dir)
{
struct stat st;
- if (stat("/proc", &st) != 0) {
+ if (stat("/proc/", &st) != 0) {
printf("Error - the folder '/proc' was not found on the system\n");
printf("Please make sure that the proc filesystem is properly mounted\n");
return EXIT_FAILURE;
}
- if (stat(PROC_ROOT_PATH, &st) == 0)
- return EXIT_SUCCESS;
+ if (stat(dir, &st) == 0)
+ return EXIT_SUCCESS;
- printf("Error - the folder '%s' was not found within the proc filesystem\n", PROC_ROOT_PATH);
+ printf("Error - the folder '%s' was not found within the proc filesystem\n", dir);
printf("Please make sure that the batman-adv kernel module is loaded\n");
return EXIT_FAILURE;
}
-int read_proc_file(char *path, int read_opt)
+static int check_sys_dir(char *dir)
{
+ struct stat st;
+
+ if (stat("/sys/", &st) != 0) {
+ printf("Error - the folder '/sys/' was not found on the system\n");
+ printf("Please make sure that the sys filesystem is properly mounted\n");
+ return EXIT_FAILURE;
+ }
+
+ if (stat(dir, &st) == 0)
+ return EXIT_SUCCESS;
+
+ printf("Error - the folder '%s' was not found within the sys filesystem\n", dir);
+ printf("Please make sure that the batman-adv kernel module is loaded\n");
+ return EXIT_FAILURE;
+}
+
+int read_file(char *dir, char *fname, int read_opt)
+{
struct ether_addr *mac_addr;
struct bat_host *bat_host;
int fd = 0, res = EXIT_FAILURE, fd_opts;
- unsigned int bytes_written;
- char full_path[500], buff[1500], *buff_ptr, *cr_ptr, *space_ptr, extra_char;
- ssize_t read_len;
+ unsigned int bytes_written, read_len;
+ char full_path[500], *read_ptr, lbuff[1500], *buff_ptr, *cr_ptr, *space_ptr, extra_char;
+ ssize_t data_read_len;
if (read_opt & USE_BAT_HOSTS)
bat_hosts_init();
- if (check_proc_dir() != EXIT_SUCCESS)
- goto out;
+ if (strstr(dir, "/proc/")) {
+ if (check_proc_dir(dir) != EXIT_SUCCESS)
+ goto out;
+ } else if (strstr(dir, "/sys/")) {
+ if (check_sys_dir(dir) != EXIT_SUCCESS)
+ goto out;
+ }
- strncpy(full_path, PROC_ROOT_PATH, strlen(PROC_ROOT_PATH));
- full_path[strlen(PROC_ROOT_PATH)] = '\0';
- strncat(full_path, path, sizeof(full_path) - strlen(full_path));
+ strncpy(full_path, dir, strlen(dir));
+ full_path[strlen(dir)] = '\0';
+ strncat(full_path, fname, sizeof(full_path) - strlen(full_path));
+ if (read_opt & USE_READ_BUFF) {
+ read_ptr = read_buff;
+ read_len = sizeof(read_buff);
+ } else {
+ read_ptr = lbuff;
+ read_len = sizeof(lbuff);
+ }
+
open:
fd = open(full_path, O_RDONLY);
@@ -152,9 +184,9 @@
read:
while (1) {
- read_len = read(fd, buff, sizeof(buff));
+ data_read_len = read(fd, read_ptr, read_len);
- if (read_len < 0) {
+ if (data_read_len < 0) {
/* file was empty */
if ((errno == EAGAIN) || (errno == EWOULDBLOCK))
break;
@@ -163,18 +195,21 @@
goto out;
}
- if (read_len == 0)
+ if (data_read_len == 0)
break;
- buff[read_len] = '\0';
+ read_ptr[data_read_len] = '\0';
+ if (read_opt & USE_READ_BUFF)
+ break;
+
if (!(read_opt & USE_BAT_HOSTS)) {
- printf("%s", buff);
+ printf("%s", read_ptr);
goto check_eof;
}
/* replace mac addresses with bat host names */
- buff_ptr = buff;
+ buff_ptr = read_ptr;
bytes_written = 0;
while ((cr_ptr = strchr(buff_ptr, '\n')) != NULL) {
@@ -230,11 +265,11 @@
}
- if (bytes_written != (size_t)read_len)
+ if (bytes_written != (size_t)data_read_len)
printf("%s", buff_ptr);
check_eof:
- if (sizeof(buff) != (size_t)read_len)
+ if (read_len != (size_t)data_read_len)
break;
}
@@ -262,18 +297,23 @@
return res;
}
-int write_proc_file(char *path, char *value)
+int write_file(char *dir, char *fname, char *value)
{
int fd = 0, res = EXIT_FAILURE;
char full_path[500];
ssize_t write_len;
- if (check_proc_dir() != EXIT_SUCCESS)
- goto out;
+ if (strstr(dir, "/proc/")) {
+ if (check_proc_dir(dir) != EXIT_SUCCESS)
+ goto out;
+ } else if (strstr(dir, "/sys/")) {
+ if (check_sys_dir(dir) != EXIT_SUCCESS)
+ goto out;
+ }
- strncpy(full_path, PROC_ROOT_PATH, strlen(PROC_ROOT_PATH));
- full_path[strlen(PROC_ROOT_PATH)] = '\0';
- strncat(full_path, path, sizeof(full_path) - strlen(full_path));
+ strncpy(full_path, dir, strlen(dir));
+ full_path[strlen(dir)] = '\0';
+ strncat(full_path, fname, sizeof(full_path) - strlen(full_path));
fd = open(full_path, O_WRONLY);
Modified: trunk/batctl/functions.h
===================================================================
--- trunk/batctl/functions.h 2009-11-14 06:11:32 UTC (rev 1482)
+++ trunk/batctl/functions.h 2009-11-14 06:11:37 UTC (rev 1483)
@@ -1,4 +1,4 @@
-/*
+/*
* Copyright (C) 2007-2009 B.A.T.M.A.N. contributors:
*
* Andreas Langer <a.langer(a)q-dsl.de>, Marek Lindner <lindner_marek(a)yahoo.de>
@@ -32,13 +32,16 @@
char *ether_ntoa_long(const struct ether_addr *addr);
char *get_name_by_macaddr(struct ether_addr *mac_addr, int read_opt);
char *get_name_by_macstr(char *mac_str, int read_opt);
-int read_proc_file(char *path, int read_opt);
-int write_proc_file(char *path, char *value);
+int read_file(char *dir, char *path, int read_opt);
+int write_file(char *dir, char *path, char *value);
+extern char read_buff[10];
+
enum {
SINGLE_READ = 0x00,
CONT_READ = 0x01,
CLR_CONT_READ = 0x02,
USE_BAT_HOSTS = 0x04,
LOG_MODE = 0x08,
+ USE_READ_BUFF = 0x10,
};
Modified: trunk/batctl/main.c
===================================================================
--- trunk/batctl/main.c 2009-11-14 06:11:32 UTC (rev 1482)
+++ trunk/batctl/main.c 2009-11-14 06:11:37 UTC (rev 1483)
@@ -1,4 +1,4 @@
-/*
+/*
* Copyright (C) 2007-2009 B.A.T.M.A.N. contributors:
*
* Andreas Langer <a.langer(a)q-dsl.de>, Marek Lindner <lindner_marek(a)yahoo.de>
@@ -30,6 +30,7 @@
#include "main.h"
#include "proc.h"
+#include "sys.h"
#include "ping.h"
#include "traceroute.h"
#include "tcpdump.h"
@@ -108,7 +109,7 @@
} else if ((strcmp(argv[1], "loglevel") == 0) || (strcmp(argv[1], "ll") == 0)) {
- ret = handle_setting(argc - 1, argv + 1, PROC_LOG_LEVEL, log_level_usage);
+ ret = handle_loglevel(argc - 1, argv + 1);
} else if ((strcmp(argv[1], "log") == 0) || (strcmp(argv[1], "l") == 0)) {
@@ -116,15 +117,15 @@
} else if ((strcmp(argv[1], "interval") == 0) || (strcmp(argv[1], "it") == 0)) {
- ret = handle_setting(argc - 1, argv + 1, PROC_ORIG_INTERVAL, orig_interval_usage);
+ ret = handle_proc_setting(argc - 1, argv + 1, PROC_ORIG_INTERVAL, orig_interval_usage);
} else if ((strcmp(argv[1], "visformat") == 0) || (strcmp(argv[1], "vf") == 0)) {
- ret = handle_setting(argc - 1, argv + 1, PROC_VIS_FORMAT, vis_format_usage);
+ ret = handle_proc_setting(argc - 1, argv + 1, PROC_VIS_FORMAT, vis_format_usage);
} else if ((strcmp(argv[1], "aggregation") == 0) || (strcmp(argv[1], "ag") == 0)) {
- ret = handle_setting(argc - 1, argv + 1, PROC_AGGR, aggregation_usage);
+ ret = handle_proc_setting(argc - 1, argv + 1, PROC_AGGR, aggregation_usage);
} else if ((strcmp(argv[1], "bisect") == 0)) {
Modified: trunk/batctl/main.h
===================================================================
--- trunk/batctl/main.h 2009-11-14 06:11:32 UTC (rev 1482)
+++ trunk/batctl/main.h 2009-11-14 06:11:37 UTC (rev 1483)
@@ -1,4 +1,4 @@
-/*
+/*
* Copyright (C) 2007-2009 B.A.T.M.A.N. contributors:
*
* Andreas Langer <a.langer(a)q-dsl.de>, Marek Lindner <lindner_marek(a)yahoo.de>
@@ -24,4 +24,3 @@
#define SOURCE_VERSION "0.2.1-beta" /*put exactly one distinct word inside the string like "0.3-pre-alpha" or "0.3-rc1" or "0.3" */
#define BAT_DEVICE "/dev/batman-adv"
-#define PROC_ROOT_PATH "/proc/net/batman-adv/"
Modified: trunk/batctl/proc.c
===================================================================
--- trunk/batctl/proc.c 2009-11-14 06:11:32 UTC (rev 1482)
+++ trunk/batctl/proc.c 2009-11-14 06:11:37 UTC (rev 1483)
@@ -1,4 +1,4 @@
-/*
+/*
* Copyright (C) 2009 B.A.T.M.A.N. contributors:
*
* Marek Lindner <lindner_marek(a)yahoo.de>
@@ -20,7 +20,6 @@
*/
-
#include <sys/time.h>
#include <stdio.h>
#include <stdlib.h>
@@ -54,13 +53,13 @@
}
if (argc == 1)
- return read_proc_file(PROC_INTERFACES, SINGLE_READ);
+ return read_file(PROC_ROOT_PATH, PROC_INTERFACES, SINGLE_READ);
for (i = 1; i < argc; i++) {
if (strcmp(argv[i], "none") == 0)
- res = write_proc_file(PROC_INTERFACES, "");
+ res = write_file(PROC_ROOT_PATH, PROC_INTERFACES, "");
else
- res = write_proc_file(PROC_INTERFACES, argv[i]);
+ res = write_file(PROC_ROOT_PATH, PROC_INTERFACES, argv[i]);
if (res != EXIT_SUCCESS)
return res;
@@ -69,39 +68,6 @@
return EXIT_SUCCESS;
}
-static void log_usage(void)
-{
- printf("Usage: batctl [options] log \n");
- printf("options:\n");
- printf(" \t -b batch mode - read the log file once and quit\n");
- printf(" \t -h print this help\n");
- printf(" \t -n don't replace mac addresses with bat-host names\n");
-}
-
-int log_print(int argc, char **argv)
-{
- int optchar, read_opt = CONT_READ | USE_BAT_HOSTS | LOG_MODE;
-
- while ((optchar = getopt(argc, argv, "bhn")) != -1) {
- switch (optchar) {
- case 'b':
- read_opt &= ~CONT_READ;
- break;
- case 'h':
- log_usage();
- return EXIT_SUCCESS;
- case 'n':
- read_opt &= ~USE_BAT_HOSTS;
- break;
- default:
- log_usage();
- return EXIT_FAILURE;
- }
- }
-
- return read_proc_file(PROC_LOG, read_opt);
-}
-
void originators_usage(void)
{
printf("Usage: batctl [options] originators \n");
@@ -136,13 +102,6 @@
printf(" \t -h print this help\n");
}
-void log_level_usage(void)
-{
- printf("Usage: batctl [options] loglevel \n");
- printf("options:\n");
- printf(" \t -h print this help\n");
-}
-
void vis_format_usage(void)
{
printf("Usage: batctl [options] visformat \n");
@@ -178,10 +137,10 @@
}
}
- return read_proc_file(file_path, read_opt);
+ return read_file(PROC_ROOT_PATH, file_path, read_opt);
}
-int handle_setting(int argc, char **argv, char *file_path, void setting_usage(void))
+int handle_proc_setting(int argc, char **argv, char *file_path, void setting_usage(void))
{
int optchar;
@@ -197,7 +156,7 @@
}
if (argc == 1)
- return read_proc_file(file_path, SINGLE_READ);
+ return read_file(PROC_ROOT_PATH, file_path, SINGLE_READ);
- return write_proc_file(file_path, argv[1]);
+ return write_file(PROC_ROOT_PATH, file_path, argv[1]);
}
Modified: trunk/batctl/proc.h
===================================================================
--- trunk/batctl/proc.h 2009-11-14 06:11:32 UTC (rev 1482)
+++ trunk/batctl/proc.h 2009-11-14 06:11:37 UTC (rev 1483)
@@ -1,4 +1,4 @@
-/*
+/*
* Copyright (C) 2009 B.A.T.M.A.N. contributors:
*
* Marek Lindner <lindner_marek(a)yahoo.de>
@@ -21,11 +21,10 @@
+#define PROC_ROOT_PATH "/proc/net/batman-adv/"
#define PROC_INTERFACES "interfaces"
#define PROC_ORIGINATORS "originators"
#define PROC_ORIG_INTERVAL "orig_interval"
-#define PROC_LOG_LEVEL "log_level"
-#define PROC_LOG "log"
#define PROC_GATEWAYS "gateways"
#define PROC_TRANSTABLE_LOCAL "transtable_local"
#define PROC_TRANSTABLE_GLOBAL "transtable_global"
@@ -35,14 +34,12 @@
int interface(int argc, char **argv);
-int log_print(int argc, char **argv);
void originators_usage(void);
void trans_local_usage(void);
void trans_global_usage(void);
void orig_interval_usage(void);
-void log_level_usage(void);
void vis_format_usage(void);
void aggregation_usage(void);
int handle_table(int argc, char **argv, char *file_path, void table_usage(void));
-int handle_setting(int argc, char **argv, char *file_path, void setting_usage(void));
+int handle_proc_setting(int argc, char **argv, char *file_path, void setting_usage(void));
Added: trunk/batctl/sys.c
===================================================================
--- trunk/batctl/sys.c (rev 0)
+++ trunk/batctl/sys.c 2009-11-14 06:11:37 UTC (rev 1483)
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2009 B.A.T.M.A.N. contributors:
+ *
+ * Marek Lindner <lindner_marek(a)yahoo.de>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU General Public
+ * License as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ *
+ */
+
+
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+#include "main.h"
+#include "sys.h"
+#include "functions.h"
+
+
+static void log_usage(void)
+{
+ printf("Usage: batctl [options] log [logfile]\n");
+ printf("Note: if no logfile was specified stdin is read");
+ printf("options:\n");
+ printf(" \t -b batch mode - read the log file once and quit\n");
+ printf(" \t -h print this help\n");
+ printf(" \t -n don't replace mac addresses with bat-host names\n");
+}
+
+int log_print(int argc, char **argv)
+{
+ int optchar, read_opt = CONT_READ | USE_BAT_HOSTS | LOG_MODE;
+ int found_args = 1;
+
+ while ((optchar = getopt(argc, argv, "bhn")) != -1) {
+ switch (optchar) {
+ case 'b':
+ read_opt &= ~CONT_READ;
+ found_args += 1;
+ break;
+ case 'h':
+ log_usage();
+ return EXIT_SUCCESS;
+ case 'n':
+ read_opt &= ~USE_BAT_HOSTS;
+ found_args += 1;
+ break;
+ default:
+ log_usage();
+ return EXIT_FAILURE;
+ }
+ }
+
+ if (argc > found_args)
+ return read_file("", argv[found_args], read_opt);
+ else
+ return read_file("", "/dev/stdin", read_opt);
+}
+
+static void log_level_usage(void)
+{
+ printf("Usage: batctl [options] loglevel \n");
+ printf("options:\n");
+ printf(" \t -h print this help\n");
+}
+
+int handle_loglevel(int argc, char **argv)
+{
+ int optchar, res;
+
+ while ((optchar = getopt(argc, argv, "h")) != -1) {
+ switch (optchar) {
+ case 'h':
+ log_level_usage();
+ return EXIT_SUCCESS;
+ default:
+ log_level_usage();
+ return EXIT_FAILURE;
+ }
+ }
+
+ if (argc != 1) {
+ res = write_file(SYS_ROOT_PATH, SYS_LOG_LEVEL, argv[1]);
+ goto out;
+ }
+
+ res = read_file(SYS_ROOT_PATH, SYS_LOG_LEVEL, SINGLE_READ | USE_READ_BUFF);
+
+ if (res != EXIT_SUCCESS)
+ goto out;
+
+ printf("[%c] %s (%d)\n", (read_buff[0] == '0') ? 'x' : ' ',
+ "all debug output disabled", 0);
+ printf("[%c] %s (%d)\n", (read_buff[0] == '1') ? 'x' : ' ',
+ "messages related to routing / flooding / broadcasting", 1);
+ printf("[%c] %s (%d)\n", (read_buff[0] == '2') ? 'x' : ' ',
+ "messages related to route or hna added / changed / deleted", 2);
+ printf("[%c] %s (%d)\n", (read_buff[0] == '3') ? 'x' : ' ',
+ "all debug messages", 3);
+
+out:
+ if (errno == EBADF)
+ printf("To increase the log level you need to compile the module with debugging enabled (see the README)\n");
+
+ return res;
+}
Copied: trunk/batctl/sys.h (from rev 1482, trunk/batctl/main.h)
===================================================================
--- trunk/batctl/sys.h (rev 0)
+++ trunk/batctl/sys.h 2009-11-14 06:11:37 UTC (rev 1483)
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2009 B.A.T.M.A.N. contributors:
+ *
+ * Marek Lindner <lindner_marek(a)yahoo.de>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU General Public
+ * License as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ *
+ */
+
+
+#define SYS_ROOT_PATH "/sys/module/batman_adv/"
+#define SYS_LOG_LEVEL "parameters/debug"
+#define SYS_LOG "log"
+
+
+int log_print(int argc, char **argv);
+int handle_loglevel(int argc, char **argv);
Modified: trunk/batman-adv-kernelland/Makefile.kbuild
===================================================================
--- trunk/batman-adv-kernelland/Makefile.kbuild 2009-11-14 06:11:32 UTC (rev 1482)
+++ trunk/batman-adv-kernelland/Makefile.kbuild 2009-11-14 06:11:37 UTC (rev 1483)
@@ -25,7 +25,7 @@
-include $(TOPDIR)/Rules.make
endif
-#EXTRA_CFLAGS += -DCONFIG_BATMAN_DEBUG
+# EXTRA_CFLAGS += -DCONFIG_BATMAN_DEBUG
ifneq ($(REVISION),)
EXTRA_CFLAGS += -DREVISION_VERSION=\"r$(REVISION)\"
13 years, 2 months
r1482 - trunk/batman-adv-kernelland
by postmaster@open-mesh.net
Author: marek
Date: 2009-11-14 06:11:32 +0000 (Sat, 14 Nov 2009)
New Revision: 1482
Removed:
trunk/batman-adv-kernelland/log.c
trunk/batman-adv-kernelland/log.h
Modified:
trunk/batman-adv-kernelland/Makefile.kbuild
trunk/batman-adv-kernelland/README
trunk/batman-adv-kernelland/bitarray.c
trunk/batman-adv-kernelland/device.c
trunk/batman-adv-kernelland/hard-interface.c
trunk/batman-adv-kernelland/main.c
trunk/batman-adv-kernelland/main.h
trunk/batman-adv-kernelland/proc.c
trunk/batman-adv-kernelland/proc.h
trunk/batman-adv-kernelland/routing.c
trunk/batman-adv-kernelland/send.c
trunk/batman-adv-kernelland/soft-interface.c
trunk/batman-adv-kernelland/translation-table.c
trunk/batman-adv-kernelland/vis.c
Log:
[batman-adv] replace internal logging mechanism with standard kernel logging
Signed-off-by: Andrew Lunn <andrew.lunn(a)ascom.ch>
Modified: trunk/batman-adv-kernelland/Makefile.kbuild
===================================================================
--- trunk/batman-adv-kernelland/Makefile.kbuild 2009-11-09 20:09:12 UTC (rev 1481)
+++ trunk/batman-adv-kernelland/Makefile.kbuild 2009-11-14 06:11:32 UTC (rev 1482)
@@ -25,9 +25,11 @@
-include $(TOPDIR)/Rules.make
endif
+#EXTRA_CFLAGS += -DCONFIG_BATMAN_DEBUG
+
ifneq ($(REVISION),)
EXTRA_CFLAGS += -DREVISION_VERSION=\"r$(REVISION)\"
endif
obj-m += batman-adv.o
-batman-adv-objs := main.o proc.o send.o log.o routing.o soft-interface.o device.o translation-table.o bitarray.o hash.o ring_buffer.o vis.o hard-interface.o aggregation.o
+batman-adv-objs := main.o proc.o send.o routing.o soft-interface.o device.o translation-table.o bitarray.o hash.o ring_buffer.o vis.o hard-interface.o aggregation.o
Modified: trunk/batman-adv-kernelland/README
===================================================================
--- trunk/batman-adv-kernelland/README 2009-11-09 20:09:12 UTC (rev 1481)
+++ trunk/batman-adv-kernelland/README 2009-11-14 06:11:32 UTC (rev 1482)
@@ -1,4 +1,4 @@
-[state: 07-11-2009]
+[state: 13-11-2009]
BATMAN-ADV
----------
@@ -13,7 +13,7 @@
above B.A.T.M.A.N. Advanced, prominent examples are: IPv4, IPv6, DHCP, IPX.
This is batman-advanced implemented as Linux kernel driver. It does not depend
-on any network (other) driver, and can be used on wifi as well as ethernet,
+on any network (other) driver, and can be used on wifi as well as ethernet,
vpn, etc ... (anything with ethernet-style layer 2).
It compiles against and should work with Linux 2.6.20 - 2.6.31. Supporting older
versions is not planned, but it's probably easy to backport it. If you work on a
@@ -64,16 +64,16 @@
Each node is either configured as "server" or as "client" (default:
"client"). Clients send their topology data to the server next to them,
-and server synchronize with other servers. If there is no server
-configured (default) within the mesh, no topology information will be
-transmitted. With these "synchronizing servers", there can be 1 or
+and server synchronize with other servers. If there is no server
+configured (default) within the mesh, no topology information will be
+transmitted. With these "synchronizing servers", there can be 1 or
more vis servers sharing the same (or at least very similar) data.
When configured as server, you can get a topology snapshot of your mesh:
# cat /proc/net/batman-adv/vis
-This output format is a graphviz formatted text file which can be
+This output format is a graphviz formatted text file which can be
processed with graphviz-tools like dot.
The labels are similar/compatible to the ETX metric, 1.0 means perfect
connection (100%), 2.0 means 50%, 3.0 means 33% and so on.
@@ -84,7 +84,7 @@
echo "json" > /proc/net/batman-adv/vis_format
-In very mobile scenarios, you might want to adjust the originator
+In very mobile scenarios, you might want to adjust the originator
interval to a lower value. This will make the mesh more responsive to
topology changes, but will also increase the overhead. Please make sure
that all nodes in your mesh use the same interval. The default value
@@ -96,6 +96,54 @@
# echo "" > /proc/net/batman-adv/interfaces
+LOGGING/DEBUGGING
+-----------------
+
+All error messages, warnings and information messages are sent to the
+kernel log. Depending on your operating system distribution this can be
+read in one of a number of ways. Try using the commands: dmesg,
+logread, or looking in the files /var/log/kern.log or
+/var/log/syslog. All batman-adv messages are prefixed with
+"batman-adv:" So to see just these messages try
+
+dmesg | grep batman-adv
+
+When investigating problems with your mesh network it is sometimes
+necessary to see more detail debug messages. This must be enabled when
+compiling the batman-adv module. When building batman-adv as part of
+kernel, use "make menuconfig" and enable the option
+"B.A.T.M.A.N. debugging". When compiling outside of the kernel tree it
+is necessary to edit the file Makefile.kbuild and uncomment the line
+
+#EXTRA_CFLAGS += -DCONFIG_BATMAN_DEBUG
+
+The additional debug output is by default disabled. It can be enabled
+either at kernel modules load time or during run time. To enable debug
+output at module load time, add the module parameter debug=<value>.
+<value> can take one of four values.
+
+0 - All debug output disabled
+1 - Enable messages related to routing / flooding / broadcasting
+2 - Enable route or hna added / changed / deleted
+3 - Enable all messages
+
+e.g.
+
+modprobe batman-adv debug=2
+
+will load the module and enable debug messages for when routes or HNAs
+change.
+
+The debug output can also be changed at runtime using the file
+/sys/module/batman-adv/parameters/debug. e.g.
+
+echo 2 > /sys/module/batman-adv/parameters/debug
+
+enables debug messages for when routes or HNAs
+
+The debug output is sent to the kernel logs. So try dmesg, logread etc
+to see the debug messages.
+
BATCTL
------
@@ -103,10 +151,10 @@
pating in the virtual switch are completely transparent for all proto-
cols above layer 2. Therefore the common diagnosis tools do not work as
expected. To overcome these problems batctl was created. At the moment
-the batctl contains ping, traceroute, tcpdump and interfaces to the
+the batctl contains ping, traceroute, tcpdump and interfaces to the
kernel module settings.
-For more information, please see the manpage (man batctl).
+For more information, please see the manpage (man batctl).
batctl is available on http://www.open-mesh.net/
Modified: trunk/batman-adv-kernelland/bitarray.c
===================================================================
--- trunk/batman-adv-kernelland/bitarray.c 2009-11-09 20:09:12 UTC (rev 1481)
+++ trunk/batman-adv-kernelland/bitarray.c 2009-11-14 06:11:32 UTC (rev 1482)
@@ -21,7 +21,6 @@
#include "main.h"
#include "bitarray.h"
-#include "log.h"
/* returns true if the corresponding bit in the given seq_bits indicates true
* and curr_seqno is within range of last_seqno */
@@ -80,8 +79,8 @@
* from.
*
* left is high, right is low: FEDC BA98 7654 3210
- * ^^ ^^
- * vvvv
+ * ^^ ^^
+ * vvvv
* ^^^^ = from, vvvvv =to, we'd have word_num==1 and
* word_offset==WORD_BIT_SIZE/2 ????? in this example.
* (=24 bits)
@@ -133,13 +132,13 @@
(seq_num_diff < -TQ_LOCAL_WINDOW_SIZE)) {
if (seq_num_diff > TQ_LOCAL_WINDOW_SIZE)
- debug_log(LOG_TYPE_BATMAN,
- "We missed a lot of packets (%i) !\n",
- seq_num_diff-1);
+ bat_dbg(DBG_BATMAN,
+ "We missed a lot of packets (%i) !\n",
+ seq_num_diff-1);
if (-seq_num_diff > TQ_LOCAL_WINDOW_SIZE)
- debug_log(LOG_TYPE_BATMAN,
- "Other host probably restarted !\n");
+ bat_dbg(DBG_BATMAN,
+ "Other host probably restarted !\n");
for (i = 0; i < NUM_WORDS; i++)
seq_bits[i] = 0;
Modified: trunk/batman-adv-kernelland/device.c
===================================================================
--- trunk/batman-adv-kernelland/device.c 2009-11-09 20:09:12 UTC (rev 1481)
+++ trunk/batman-adv-kernelland/device.c 2009-11-14 06:11:32 UTC (rev 1482)
@@ -21,7 +21,6 @@
#include "main.h"
#include "device.h"
-#include "log.h"
#include "send.h"
#include "types.h"
#include "hash.h"
@@ -60,7 +59,7 @@
/* register our device - kernel assigns a free major number */
tmp_major = register_chrdev(0, DRIVER_DEVICE, &fops);
if (tmp_major < 0) {
- debug_log(LOG_TYPE_WARN, "Registering the character device failed with %d\n",
+ printk(KERN_ERR "batman-adv:Registering the character device failed with %d\n",
tmp_major);
return 0;
}
@@ -68,7 +67,7 @@
batman_class = class_create(THIS_MODULE, "batman-adv");
if (IS_ERR(batman_class)) {
- debug_log(LOG_TYPE_WARN, "Could not register class 'batman-adv' \n");
+ printk(KERN_ERR "batman-adv:Could not register class 'batman-adv' \n");
return 0;
}
@@ -111,7 +110,7 @@
}
if (device_client_hash[i] != device_client) {
- debug_log(LOG_TYPE_WARN, "Error - can't add another packet client: maximum number of clients reached \n");
+ printk(KERN_ERR "batman-adv:Error - can't add another packet client: maximum number of clients reached \n");
kfree(device_client);
return -EXFULL;
}
@@ -208,7 +207,7 @@
struct batman_if *batman_if;
if (len < sizeof(struct icmp_packet)) {
- debug_log(LOG_TYPE_NOTICE, "Error - can't send packet from char device: invalid packet size\n");
+ printk(KERN_DEBUG "batman-adv:Error - can't send packet from char device: invalid packet size\n");
return -EINVAL;
}
@@ -219,12 +218,12 @@
return -EFAULT;
if (icmp_packet.packet_type != BAT_ICMP) {
- debug_log(LOG_TYPE_NOTICE, "Error - can't send packet from char device: got bogus packet type (expected: BAT_ICMP)\n");
+ printk(KERN_DEBUG "batman-adv:Error - can't send packet from char device: got bogus packet type (expected: BAT_ICMP)\n");
return -EINVAL;
}
if (icmp_packet.msg_type != ECHO_REQUEST) {
- debug_log(LOG_TYPE_NOTICE, "Error - can't send packet from char device: got bogus message type (expected: ECHO_REQUEST)\n");
+ printk(KERN_DEBUG "batman-adv:Error - can't send packet from char device: got bogus message type (expected: ECHO_REQUEST)\n");
return -EINVAL;
}
Modified: trunk/batman-adv-kernelland/hard-interface.c
===================================================================
--- trunk/batman-adv-kernelland/hard-interface.c 2009-11-09 20:09:12 UTC (rev 1481)
+++ trunk/batman-adv-kernelland/hard-interface.c 2009-11-14 06:11:32 UTC (rev 1482)
@@ -21,7 +21,6 @@
#include "main.h"
#include "hard-interface.h"
-#include "log.h"
#include "soft-interface.h"
#include "send.h"
#include "translation-table.h"
@@ -87,9 +86,9 @@
continue;
addr_to_string(mac_string, addr);
- debug_log(LOG_TYPE_WARN, "The newly added mac address (%s) already exists on: %s\n",
- mac_string, batman_if->dev);
- debug_log(LOG_TYPE_WARN, "It is strongly recommended to keep mac addresses unique to avoid problems!\n");
+ printk(KERN_WARNING "batman-adv:The newly added mac address (%s) already exists on: %s\n",
+ mac_string, batman_if->dev);
+ printk(KERN_WARNING "batman-adv:It is strongly recommended to keep mac addresses unique to avoid problems!\n");
}
rcu_read_unlock();
}
@@ -171,8 +170,8 @@
batman_if->if_active = IF_INACTIVE;
active_ifs--;
- debug_log(LOG_TYPE_NOTICE, "Interface deactivated: %s\n",
- batman_if->dev);
+ printk(KERN_INFO "batman-adv:Interface deactivated: %s\n",
+ batman_if->dev);
}
/* (re)activate given interface. */
@@ -197,7 +196,7 @@
&batman_if->raw_sock);
if (retval < 0) {
- debug_log(LOG_TYPE_WARN, "Can't create raw socket: %i\n",
+ printk(KERN_ERR "batman-adv:Can't create raw socket: %i\n",
retval);
goto sock_err;
}
@@ -210,7 +209,7 @@
(struct sockaddr *)&bind_addr, sizeof(bind_addr));
if (retval < 0) {
- debug_log(LOG_TYPE_WARN, "Can't create bind raw socket: %i\n",
+ printk(KERN_ERR "batman-adv:Can't create bind raw socket: %i\n",
retval);
goto bind_err;
}
@@ -235,8 +234,8 @@
if (batman_if->if_num == 0)
set_main_if_addr(batman_if->net_dev->dev_addr);
- debug_log(LOG_TYPE_NOTICE, "Interface activated: %s\n",
- batman_if->dev);
+ printk(KERN_INFO "batman-adv:Interface activated: %s\n",
+ batman_if->dev);
return;
@@ -290,7 +289,7 @@
data_ptr = kmalloc((if_num + 1) * sizeof(TYPE_OF_WORD) * NUM_WORDS,
GFP_ATOMIC);
if (!data_ptr) {
- debug_log(LOG_TYPE_WARN, "Can't resize orig: out of memory\n");
+ printk(KERN_ERR "batman-adv:Can't resize orig: out of memory\n");
return -1;
}
@@ -301,7 +300,7 @@
data_ptr = kmalloc((if_num + 1) * sizeof(uint8_t), GFP_ATOMIC);
if (!data_ptr) {
- debug_log(LOG_TYPE_WARN, "Can't resize orig: out of memory\n");
+ printk(KERN_ERR "batman-adv:Can't resize orig: out of memory\n");
return -1;
}
@@ -324,7 +323,7 @@
batman_if = kmalloc(sizeof(struct batman_if), GFP_KERNEL);
if (!batman_if) {
- debug_log(LOG_TYPE_WARN, "Can't add interface (%s): out of memory\n", dev);
+ printk(KERN_ERR "batman-adv:Can't add interface (%s): out of memory\n", dev);
return -1;
}
@@ -339,7 +338,7 @@
batman_if->packet_buff = kmalloc(batman_if->packet_len, GFP_KERNEL);
if (!batman_if->packet_buff) {
- debug_log(LOG_TYPE_WARN, "Can't add interface packet (%s): out of memory\n", dev);
+ printk(KERN_ERR "batman-adv:Can't add interface packet (%s): out of memory\n", dev);
goto out;
}
@@ -348,7 +347,7 @@
batman_if->if_active = IF_INACTIVE;
INIT_RCU_HEAD(&batman_if->rcu);
- debug_log(LOG_TYPE_NOTICE, "Adding interface: %s\n", dev);
+ printk(KERN_INFO "batman-adv:Adding interface: %s\n", dev);
avail_ifs++;
INIT_LIST_HEAD(&batman_if->list);
@@ -389,7 +388,7 @@
spin_unlock(&orig_hash_lock);
if (!hardif_is_interface_up(batman_if->dev))
- debug_log(LOG_TYPE_WARN, "Not using interface %s (retrying later): interface not active\n", batman_if->dev);
+ printk(KERN_ERR "batman-adv:Not using interface %s (retrying later): interface not active\n", batman_if->dev);
else
hardif_activate_interface(batman_if);
@@ -413,7 +412,7 @@
}
static int hard_if_event(struct notifier_block *this,
- unsigned long event, void *ptr)
+ unsigned long event, void *ptr)
{
struct net_device *dev = (struct net_device *)ptr;
struct batman_if *batman_if = get_batman_if_by_name(dev->name);
@@ -436,7 +435,6 @@
break;
/* NETDEV_CHANGEADDR - mac address change - what are we doing here ? */
default:
- /* debug_log(LOG_TYPE_CRIT, "hard_if_event: %s %i\n", dev->name, event); */
break;
};
@@ -447,5 +445,5 @@
}
struct notifier_block hard_if_notifier = {
- .notifier_call = hard_if_event,
+ .notifier_call = hard_if_event,
};
Deleted: trunk/batman-adv-kernelland/log.c
===================================================================
--- trunk/batman-adv-kernelland/log.c 2009-11-09 20:09:12 UTC (rev 1481)
+++ trunk/batman-adv-kernelland/log.c 2009-11-14 06:11:32 UTC (rev 1482)
@@ -1,179 +0,0 @@
-/*
- * Copyright (C) 2007-2009 B.A.T.M.A.N. contributors:
- *
- * Marek Lindner, Simon Wunderlich
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA
- *
- */
-
-#include "main.h"
-#include "log.h"
-
-#define LOG_BUF_MASK (log_buf_len-1)
-#define LOG_BUF(idx) (log_buf[(idx) & LOG_BUF_MASK])
-
-static char log_buf[LOG_BUF_LEN];
-static int log_buf_len = LOG_BUF_LEN;
-static unsigned long log_start;
-static unsigned long log_end;
-uint8_t log_level;
-
-static DEFINE_SPINLOCK(logbuf_lock);
-
-const struct file_operations proc_log_operations = {
- .open = log_open,
- .release = log_release,
- .read = log_read,
- .write = log_write,
- .poll = log_poll,
-};
-
-static DECLARE_WAIT_QUEUE_HEAD(log_wait);
-
-static void emit_log_char(char c)
-{
- LOG_BUF(log_end) = c;
- log_end++;
-
- if (log_end - log_start > log_buf_len)
- log_start = log_end - log_buf_len;
-}
-
-static int fdebug_log(char *fmt, ...)
-{
- int printed_len;
- char *p;
- va_list args;
- static char debug_log_buf[256];
- unsigned long flags;
-
- spin_lock_irqsave(&logbuf_lock, flags);
- va_start(args, fmt);
- printed_len = vscnprintf(debug_log_buf, sizeof(debug_log_buf), fmt,
- args);
- va_end(args);
-
- for (p = debug_log_buf; *p != 0; p++)
- emit_log_char(*p);
-
- spin_unlock_irqrestore(&logbuf_lock, flags);
-
- wake_up(&log_wait);
-
- return 0;
-}
-
-int debug_log(int type, char *fmt, ...)
-{
- va_list args;
- int retval = 0;
- char tmp_log_buf[256];
-
- /* only critical information get into the official kernel log */
- if (type == LOG_TYPE_CRIT) {
- va_start(args, fmt);
- vscnprintf(tmp_log_buf, sizeof(tmp_log_buf), fmt, args);
- printk(KERN_ERR "batman-adv: %s", tmp_log_buf);
- va_end(args);
- }
-
- if ((type == LOG_TYPE_CRIT) || (log_level & type)) {
- va_start(args, fmt);
- vscnprintf(tmp_log_buf, sizeof(tmp_log_buf), fmt, args);
- fdebug_log("[%10u] %s", (jiffies / HZ), tmp_log_buf);
- va_end(args);
- }
-
- return retval;
-}
-
-int log_open(struct inode *inode, struct file *file)
-{
- inc_module_count();
- return 0;
-}
-
-int log_release(struct inode *inode, struct file *file)
-{
- dec_module_count();
- return 0;
-}
-
-ssize_t log_read(struct file *file, char __user *buf, size_t count,
- loff_t *ppos)
-{
- int error, i = 0;
- char c;
- unsigned long flags;
-
- if ((file->f_flags & O_NONBLOCK) && !(log_end - log_start))
- return -EAGAIN;
-
- if ((!buf) || (count < 0))
- return -EINVAL;
-
- if (count == 0)
- return 0;
-
- if (!access_ok(VERIFY_WRITE, buf, count))
- return -EFAULT;
-
- error = wait_event_interruptible(log_wait, (log_start - log_end));
-
- if (error)
- return error;
-
- spin_lock_irqsave(&logbuf_lock, flags);
-
- while ((!error) && (log_start != log_end) && (i < count)) {
- c = LOG_BUF(log_start);
-
- log_start++;
-
- spin_unlock_irqrestore(&logbuf_lock, flags);
-
- error = __put_user(c, buf);
-
- spin_lock_irqsave(&logbuf_lock, flags);
-
- buf++;
- i++;
-
- }
-
- spin_unlock_irqrestore(&logbuf_lock, flags);
-
- if (!error)
- return i;
-
- return error;
-}
-
-ssize_t log_write(struct file *file, const char __user *buf, size_t count,
- loff_t *ppos)
-{
- return count;
-}
-
-unsigned int log_poll(struct file *file, poll_table *wait)
-{
- poll_wait(file, &log_wait, wait);
-
- if (log_end - log_start)
- return POLLIN | POLLRDNORM;
-
- return 0;
-}
Deleted: trunk/batman-adv-kernelland/log.h
===================================================================
--- trunk/batman-adv-kernelland/log.h 2009-11-09 20:09:12 UTC (rev 1481)
+++ trunk/batman-adv-kernelland/log.h 2009-11-14 06:11:32 UTC (rev 1482)
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2007-2009 B.A.T.M.A.N. contributors:
- *
- * Marek Lindner, Simon Wunderlich
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA
- *
- */
-
-extern const struct file_operations proc_log_operations;
-extern uint8_t log_level;
-
-int debug_log(int type, char *fmt, ...);
-int log_open(struct inode *inode, struct file *file);
-int log_release(struct inode *inode, struct file *file);
-ssize_t log_read(struct file *file, char __user *buf, size_t count,
- loff_t *ppos);
-ssize_t log_write(struct file *file, const char __user *buf, size_t count,
- loff_t *ppos);
-unsigned int log_poll(struct file *file, poll_table *wait);
Modified: trunk/batman-adv-kernelland/main.c
===================================================================
--- trunk/batman-adv-kernelland/main.c 2009-11-09 20:09:12 UTC (rev 1481)
+++ trunk/batman-adv-kernelland/main.c 2009-11-14 06:11:32 UTC (rev 1482)
@@ -21,7 +21,6 @@
#include "main.h"
#include "proc.h"
-#include "log.h"
#include "routing.h"
#include "send.h"
#include "soft-interface.h"
@@ -57,6 +56,17 @@
struct workqueue_struct *bat_event_workqueue;
+#ifdef CONFIG_BATMAN_DEBUG
+int debug;
+
+module_param(debug, int, 0644);
+
+int bat_debug_type(int type)
+{
+ return debug & type;
+}
+#endif
+
int init_module(void)
{
int retval;
@@ -90,21 +100,21 @@
interface_setup);
if (!soft_device) {
- debug_log(LOG_TYPE_CRIT, "Unable to allocate the batman interface\n");
+ printk(KERN_ERR "batman-adv:Unable to allocate the batman interface\n");
goto end;
}
retval = register_netdev(soft_device);
if (retval < 0) {
- debug_log(LOG_TYPE_CRIT, "Unable to register the batman interface: %i\n", retval);
+ printk(KERN_ERR "batman-adv:Unable to register the batman interface: %i\n", retval);
goto free_soft_device;
}
register_netdevice_notifier(&hard_if_notifier);
- debug_log(LOG_TYPE_CRIT, "B.A.T.M.A.N. advanced %s%s (compatibility version %i) loaded \n",
- SOURCE_VERSION, REVISION_VERSION_STR, COMPAT_VERSION);
+ printk(KERN_INFO "batman-adv:B.A.T.M.A.N. advanced %s%s (compatibility version %i) loaded \n",
+ SOURCE_VERSION, REVISION_VERSION_STR, COMPAT_VERSION);
return 0;
@@ -156,7 +166,7 @@
kthread_task = kthread_run(packet_recv_thread, NULL, "batman-adv");
if (IS_ERR(kthread_task)) {
- debug_log(LOG_TYPE_CRIT, "Unable to start packet receive thread\n");
+ printk(KERN_ERR "batman-adv:Unable to start packet receive thread\n");
kthread_task = NULL;
}
}
@@ -166,7 +176,7 @@
goto end;
err:
- debug_log(LOG_TYPE_CRIT, "Unable to allocate memory for mesh information structures: out of mem ?\n");
+ printk(KERN_ERR "batman-adv:Unable to allocate memory for mesh information structures: out of mem ?\n");
shutdown_module();
end:
return;
Modified: trunk/batman-adv-kernelland/main.h
===================================================================
--- trunk/batman-adv-kernelland/main.h 2009-11-09 20:09:12 UTC (rev 1481)
+++ trunk/batman-adv-kernelland/main.h 2009-11-14 06:11:32 UTC (rev 1482)
@@ -33,16 +33,16 @@
#define TQ_MAX_VALUE 255
#define JITTER 20
-#define TTL 50 /* Time To Live of broadcast messages */
-#define MAX_ADDR 16 /* number of interfaces which can be added to
+#define TTL 50 /* Time To Live of broadcast messages */
+#define MAX_ADDR 16 /* number of interfaces which can be added to
* batman. */
-#define PURGE_TIMEOUT 200000 /* purge originators after time in ms if no
+#define PURGE_TIMEOUT 200000 /* purge originators after time in ms if no
* valid packet comes in -> TODO: check
* influence on TQ_LOCAL_WINDOW_SIZE */
#define LOCAL_HNA_TIMEOUT 3600000
-#define TQ_LOCAL_WINDOW_SIZE 64 /* sliding packet range of received originator
+#define TQ_LOCAL_WINDOW_SIZE 64 /* sliding packet range of received originator
* messages in squence numbers (should be a
* multiple of our word size) */
#define TQ_GLOBAL_WINDOW_SIZE 5
@@ -69,25 +69,28 @@
/*
- * Logging
+ * Debug Messages
*/
-#define LOG_TYPE_CRIT 0 /* highest priority for fatal errors such as
- * blocked sockets / failed packet delivery /
- * programming errors */
-#define LOG_TYPE_WARN 1 /* warnings for small errors like wrong user
- * input / damaged packets / etc */
-#define LOG_TYPE_NOTICE 2 /* notice information for new interfaces /
- * changed settings / new originators / etc */
-#define LOG_TYPE_BATMAN 4 /* all messages related to routing / flooding /
- * broadcasting / etc */
-#define LOG_TYPE_ROUTES 8 /* route or hna added / changed / deleted */
-#define LOG_TYPE_CRIT_NAME "critical"
-#define LOG_TYPE_WARN_NAME "warnings"
-#define LOG_TYPE_NOTICE_NAME "notices"
-#define LOG_TYPE_BATMAN_NAME "batman"
-#define LOG_TYPE_ROUTES_NAME "routes"
+#define DBG_BATMAN 1 /* all messages related to routing / flooding /
+ * broadcasting / etc */
+#define DBG_ROUTES 2 /* route or hna added / changed / deleted */
+#ifdef CONFIG_BATMAN_DEBUG
+extern int debug;
+
+extern int bat_debug_type(int type);
+#define bat_dbg(type, fmt, arg...) do { \
+ if (bat_debug_type(type)) \
+ printk(KERN_DEBUG "batman-adv:" fmt, ## arg); \
+ } \
+ while (0)
+#else /* !CONFIG_BATMAN_DEBUG */
+#define bat_dbg(type, fmt, arg...) do { \
+ } \
+ while (0)
+#endif
+
/*
* Vis
*/
@@ -147,5 +150,3 @@
int is_my_mac(uint8_t *addr);
int is_bcast(uint8_t *addr);
int is_mcast(uint8_t *addr);
-
-
Modified: trunk/batman-adv-kernelland/proc.c
===================================================================
--- trunk/batman-adv-kernelland/proc.c 2009-11-09 20:09:12 UTC (rev 1481)
+++ trunk/batman-adv-kernelland/proc.c 2009-11-14 06:11:32 UTC (rev 1482)
@@ -21,7 +21,6 @@
#include "main.h"
#include "proc.h"
-#include "log.h"
#include "routing.h"
#include "translation-table.h"
#include "hard-interface.h"
@@ -34,7 +33,6 @@
static struct proc_dir_entry *proc_batman_dir, *proc_interface_file;
static struct proc_dir_entry *proc_orig_interval_file, *proc_originators_file;
-static struct proc_dir_entry *proc_log_file, *proc_log_level_file;
static struct proc_dir_entry *proc_transt_local_file;
static struct proc_dir_entry *proc_transt_global_file;
static struct proc_dir_entry *proc_vis_file, *proc_vis_format_file;
@@ -77,8 +75,7 @@
return -ENOMEM;
if (count > IFNAMSIZ - 1) {
- debug_log(LOG_TYPE_WARN,
- "Can't add interface: device name is too long\n");
+ printk(KERN_WARNING "batman-adv:Can't add interface: device name is too long\n");
goto end;
}
@@ -105,7 +102,7 @@
rcu_read_lock();
list_for_each_entry_rcu(batman_if, &if_list, list) {
if (strncmp(batman_if->dev, if_string, count) == 0) {
- debug_log(LOG_TYPE_WARN, "Given interface is already active: %s\n", if_string);
+ printk(KERN_ERR "batman-adv:Given interface is already active: %s\n", if_string);
rcu_read_unlock();
goto end;
@@ -162,20 +159,18 @@
retval = strict_strtoul(interval_string, 10, &originator_interval_tmp);
if (retval) {
- debug_log(LOG_TYPE_WARN, "New originator interval invalid\n");
+ printk(KERN_ERR "batman-adv:New originator interval invalid\n");
goto end;
}
if (originator_interval_tmp <= JITTER * 2) {
- debug_log(LOG_TYPE_WARN,
- "New originator interval too small: %i (min: %i)\n",
- originator_interval_tmp, JITTER * 2);
+ printk(KERN_WARNING "batman-adv:New originator interval too small: %li (min: %i)\n",
+ originator_interval_tmp, JITTER * 2);
goto end;
}
- debug_log(LOG_TYPE_NOTICE,
- "Changing originator interval from: %i to: %i\n",
- atomic_read(&originator_interval), originator_interval_tmp);
+ printk(KERN_INFO "batman-adv:Changing originator interval from: %i to: %li\n",
+ atomic_read(&originator_interval), originator_interval_tmp);
atomic_set(&originator_interval, originator_interval_tmp);
@@ -235,7 +230,7 @@
addr_to_string(orig_str, orig_node->orig);
addr_to_string(router_str, orig_node->router->addr);
- seq_printf(seq, "%-17s (%3i) %17s [%10s]:",
+ seq_printf(seq, "%-17s (%3i) %17s [%10s]:",
orig_str, orig_node->router->tq_avg,
router_str, orig_node->router->if_incoming->dev);
@@ -263,84 +258,6 @@
return single_open(file, proc_originators_read, NULL);
}
-static int proc_log_level_read(struct seq_file *seq, void *offset)
-{
-
- seq_printf(seq, "[x] %s (%d)\n", LOG_TYPE_CRIT_NAME, LOG_TYPE_CRIT);
- seq_printf(seq, "[%c] %s (%d)\n",
- (LOG_TYPE_WARN & log_level) ? 'x' : ' ',
- LOG_TYPE_WARN_NAME, LOG_TYPE_WARN);
- seq_printf(seq, "[%c] %s (%d)\n",
- (LOG_TYPE_NOTICE & log_level) ? 'x' : ' ',
- LOG_TYPE_NOTICE_NAME, LOG_TYPE_NOTICE);
- seq_printf(seq, "[%c] %s (%d)\n",
- (LOG_TYPE_BATMAN & log_level) ? 'x' : ' ',
- LOG_TYPE_BATMAN_NAME, LOG_TYPE_BATMAN);
- seq_printf(seq, "[%c] %s (%d)\n",
- (LOG_TYPE_ROUTES & log_level) ? 'x' : ' ',
- LOG_TYPE_ROUTES_NAME, LOG_TYPE_ROUTES);
- return 0;
-}
-
-static int proc_log_level_open(struct inode *inode, struct file *file)
-{
- return single_open(file, proc_log_level_read, NULL);
-}
-
-static ssize_t proc_log_level_write(struct file *instance,
- const char __user *userbuffer,
- size_t count, loff_t *data)
-{
- char *log_level_string, *tokptr, *cp;
- int finished, not_copied = 0;
- unsigned long log_level_tmp = 0;
-
- log_level_string = kmalloc(count, GFP_KERNEL);
-
- if (!log_level_string)
- return -ENOMEM;
-
- not_copied = copy_from_user(log_level_string, userbuffer, count);
- log_level_string[count - not_copied - 1] = 0;
-
- if (strict_strtoul(log_level_string, 10, &log_level_tmp) < 0) {
- /* was not a number, doing textual parsing */
- log_level_tmp = 0;
- tokptr = log_level_string;
-
- for (cp = log_level_string, finished = 0; !finished; cp++) {
- switch (*cp) {
- case 0:
- finished = 1;
- case ' ':
- case '\n':
- case '\t':
- *cp = 0;
- /* compare */
- if (strcmp(tokptr, LOG_TYPE_WARN_NAME) == 0)
- log_level_tmp |= LOG_TYPE_WARN;
- if (strcmp(tokptr, LOG_TYPE_NOTICE_NAME) == 0)
- log_level_tmp |= LOG_TYPE_NOTICE;
- if (strcmp(tokptr, LOG_TYPE_BATMAN_NAME) == 0)
- log_level_tmp |= LOG_TYPE_BATMAN;
- if (strcmp(tokptr, LOG_TYPE_ROUTES_NAME) == 0)
- log_level_tmp |= LOG_TYPE_ROUTES;
- tokptr = cp + 1;
- break;
- default:
- ;
- }
- }
- }
-
- debug_log(LOG_TYPE_CRIT, "Changing log_level from: %i to: %i\n",
- log_level, log_level_tmp);
- log_level = log_level_tmp;
-
- kfree(log_level_string);
- return count;
-}
-
static int proc_transt_local_read(struct seq_file *seq, void *offset)
{
char *buf;
@@ -412,7 +329,7 @@
bool primary)
{
/* Did we get an empty list? (then insert imediately) */
- if(*if_entry == NULL) {
+ if (*if_entry == NULL) {
*if_entry = kmalloc(sizeof(struct vis_if_list), GFP_KERNEL);
if (*if_entry == NULL)
return;
@@ -585,14 +502,14 @@
vis_mode_string[count - not_copied - 1] = 0;
if (strcmp(vis_mode_string, "client") == 0) {
- debug_log(LOG_TYPE_NOTICE, "Setting VIS mode to client\n");
+ printk(KERN_INFO "batman-adv:Setting VIS mode to client\n");
vis_set_mode(VIS_TYPE_CLIENT_UPDATE);
} else if (strcmp(vis_mode_string, "server") == 0) {
- debug_log(LOG_TYPE_NOTICE, "Setting VIS mode to server\n");
+ printk(KERN_INFO "batman-adv:Setting VIS mode to server\n");
vis_set_mode(VIS_TYPE_SERVER_SYNC);
} else
- debug_log(LOG_TYPE_WARN, "Unknown VIS mode: %s\n",
- vis_mode_string);
+ printk(KERN_ERR "batman-adv:Unknown VIS mode: %s\n",
+ vis_mode_string);
kfree(vis_mode_string);
return count;
@@ -637,16 +554,16 @@
vis_format_string[count - not_copied - 1] = 0;
if (strcmp(vis_format_string, VIS_FORMAT_DD_NAME) == 0) {
- debug_log(LOG_TYPE_NOTICE, "Setting VIS output format to: %s\n",
- VIS_FORMAT_DD_NAME);
+ printk(KERN_INFO "batman-adv:Setting VIS output format to: %s\n",
+ VIS_FORMAT_DD_NAME);
vis_format = DOT_DRAW;
} else if (strcmp(vis_format_string, VIS_FORMAT_JSON_NAME) == 0) {
- debug_log(LOG_TYPE_NOTICE, "Setting VIS output format to: %s\n",
- VIS_FORMAT_JSON_NAME);
+ printk(KERN_INFO "batman-adv:Setting VIS output format to: %s\n",
+ VIS_FORMAT_JSON_NAME);
vis_format = JSON;
} else
- debug_log(LOG_TYPE_WARN, "Unknown VIS output format: %s\n",
- vis_format_string);
+ printk(KERN_ERR "batman-adv:Unknown VIS output format: %s\n",
+ vis_format_string);
kfree(vis_format_string);
return count;
@@ -677,16 +594,16 @@
strict_strtoul(aggr_string, 10, &aggregation_enabled_tmp);
if ((aggregation_enabled_tmp != 0) && (aggregation_enabled_tmp != 1)) {
- debug_log(LOG_TYPE_WARN, "Aggregation can only be enabled (1) or disabled (0), given value: %li\n", aggregation_enabled_tmp);
+ printk(KERN_ERR "batman-adv:Aggregation can only be enabled (1) or disabled (0), given value: %li\n", aggregation_enabled_tmp);
goto end;
}
- debug_log(LOG_TYPE_NOTICE, "Changing aggregation from: %s (%i) to: %s (%li)\n",
- (atomic_read(&aggregation_enabled) == 1 ?
- "enabled" : "disabled"),
- atomic_read(&aggregation_enabled),
- (aggregation_enabled_tmp == 1 ? "enabled" : "disabled"),
- aggregation_enabled_tmp);
+ printk(KERN_INFO "batman-adv:Changing aggregation from: %s (%i) to: %s (%li)\n",
+ (atomic_read(&aggregation_enabled) == 1 ?
+ "enabled" : "disabled"),
+ atomic_read(&aggregation_enabled),
+ (aggregation_enabled_tmp == 1 ? "enabled" : "disabled"),
+ aggregation_enabled_tmp);
atomic_set(&aggregation_enabled, (unsigned)aggregation_enabled_tmp);
end:
@@ -760,15 +677,6 @@
.release = single_release,
};
-static const struct file_operations proc_log_level_fops = {
- .owner = THIS_MODULE,
- .open = proc_log_level_open,
- .read = seq_read,
- .write = proc_log_level_write,
- .llseek = seq_lseek,
- .release = single_release,
-};
-
static const struct file_operations proc_interfaces_fops = {
.owner = THIS_MODULE,
.open = proc_interfaces_open,
@@ -795,12 +703,6 @@
if (proc_transt_local_file)
remove_proc_entry(PROC_FILE_TRANST_LOCAL, proc_batman_dir);
- if (proc_log_file)
- remove_proc_entry(PROC_FILE_LOG, proc_batman_dir);
-
- if (proc_log_level_file)
- remove_proc_entry(PROC_FILE_LOG_LEVEL, proc_batman_dir);
-
if (proc_originators_file)
remove_proc_entry(PROC_FILE_ORIGINATORS, proc_batman_dir);
@@ -862,17 +764,6 @@
return -EFAULT;
}
- proc_log_level_file = create_proc_entry(PROC_FILE_LOG_LEVEL,
- S_IWUSR | S_IRUGO,
- proc_batman_dir);
- if (proc_log_level_file) {
- proc_log_level_file->proc_fops = &proc_log_level_fops;
- } else {
- printk(KERN_ERR "batman-adv: Registering the '/proc/net/%s/%s' file failed\n", PROC_ROOT_DIR, PROC_FILE_LOG_LEVEL);
- cleanup_procfs();
- return -EFAULT;
- }
-
proc_originators_file = create_proc_entry(PROC_FILE_ORIGINATORS,
S_IRUGO, proc_batman_dir);
if (proc_originators_file) {
@@ -883,16 +774,6 @@
return -EFAULT;
}
- proc_log_file = create_proc_entry(PROC_FILE_LOG,
- S_IRUGO, proc_batman_dir);
- if (proc_log_file) {
- proc_log_file->proc_fops = &proc_log_operations;
- } else {
- printk(KERN_ERR "batman-adv: Registering the '/proc/net/%s/%s' file failed\n", PROC_FILE_LOG, PROC_FILE_GATEWAYS);
- cleanup_procfs();
- return -EFAULT;
- }
-
proc_transt_local_file = create_proc_entry(PROC_FILE_TRANST_LOCAL,
S_IRUGO, proc_batman_dir);
if (proc_transt_local_file) {
Modified: trunk/batman-adv-kernelland/proc.h
===================================================================
--- trunk/batman-adv-kernelland/proc.h 2009-11-09 20:09:12 UTC (rev 1481)
+++ trunk/batman-adv-kernelland/proc.h 2009-11-14 06:11:32 UTC (rev 1482)
@@ -39,7 +39,7 @@
int setup_procfs(void);
/* While scanning for vis-entries of a particular vis-originator
- * this list collects its interfaces to create a subgraph/cluster
+ * this list collects its interfaces to create a subgraph/cluster
* out of them later
*/
struct vis_if_list {
Modified: trunk/batman-adv-kernelland/routing.c
===================================================================
--- trunk/batman-adv-kernelland/routing.c 2009-11-09 20:09:12 UTC (rev 1481)
+++ trunk/batman-adv-kernelland/routing.c 2009-11-14 06:11:32 UTC (rev 1482)
@@ -25,7 +25,6 @@
#include "main.h"
#include "routing.h"
-#include "log.h"
#include "send.h"
#include "soft-interface.h"
#include "hard-interface.h"
@@ -88,7 +87,7 @@
{
struct neigh_node *neigh_node;
- debug_log(LOG_TYPE_BATMAN, "Creating new last-hop neighbour of originator\n");
+ bat_dbg(DBG_BATMAN, "Creating new last-hop neighbour of originator\n");
neigh_node = kmalloc(sizeof(struct neigh_node), GFP_ATOMIC);
memset(neigh_node, 0, sizeof(struct neigh_node));
@@ -136,7 +135,7 @@
return orig_node;
addr_to_string(orig_str, addr);
- debug_log(LOG_TYPE_BATMAN, "Creating new originator: %s \n", orig_str);
+ bat_dbg(DBG_BATMAN, "Creating new originator: %s \n", orig_str);
orig_node = kmalloc(sizeof(struct orig_node), GFP_ATOMIC);
memset(orig_node, 0, sizeof(struct orig_node));
@@ -159,7 +158,7 @@
swaphash = hash_resize(orig_hash, orig_hash->size * 2);
if (swaphash == NULL)
- debug_log(LOG_TYPE_CRIT, "Couldn't resize orig hash table \n");
+ printk(KERN_ERR "batman-adv:Couldn't resize orig hash table \n");
else
orig_hash = swaphash;
}
@@ -196,15 +195,15 @@
/* route deleted */
if ((orig_node->router != NULL) && (neigh_node == NULL)) {
-
- debug_log(LOG_TYPE_ROUTES, "Deleting route towards: %s\n", orig_str);
+ bat_dbg(DBG_ROUTES, "Deleting route towards: %s\n",
+ orig_str);
hna_global_del_orig(orig_node, "originator timed out");
/* route added */
} else if ((orig_node->router == NULL) && (neigh_node != NULL)) {
addr_to_string(neigh_str, neigh_node->addr);
- debug_log(LOG_TYPE_ROUTES, "Adding route towards: %s (via %s)\n", orig_str, neigh_str);
+ bat_dbg(DBG_ROUTES, "Adding route towards: %s (via %s)\n", orig_str, neigh_str);
hna_global_add_orig(orig_node, hna_buff, hna_buff_len);
/* route changed */
@@ -212,7 +211,7 @@
addr_to_string(neigh_str, neigh_node->addr);
addr_to_string(router_str, orig_node->router->addr);
- debug_log(LOG_TYPE_ROUTES, "Changing route towards: %s (now via %s - was via %s)\n", orig_str, neigh_str, router_str);
+ bat_dbg(DBG_ROUTES, "Changing route towards: %s (now via %s - was via %s)\n", orig_str, neigh_str, router_str);
}
@@ -296,9 +295,9 @@
(TQ_LOCAL_WINDOW_SIZE - neigh_node->real_packet_count)) /
(TQ_LOCAL_WINDOW_SIZE * TQ_LOCAL_WINDOW_SIZE * TQ_LOCAL_WINDOW_SIZE);
- batman_packet->tq = ((batman_packet->tq * orig_neigh_node->tq_own * orig_neigh_node->tq_asym_penalty) / (TQ_MAX_VALUE * TQ_MAX_VALUE));
+ batman_packet->tq = ((batman_packet->tq * orig_neigh_node->tq_own * orig_neigh_node->tq_asym_penalty) / (TQ_MAX_VALUE * TQ_MAX_VALUE));
- debug_log(LOG_TYPE_BATMAN, "bidirectional: orig = %-15s neigh = %-15s => own_bcast = %2i, real recv = %2i, local tq: %3i, asym_penalty: %3i, total tq: %3i \n",
+ bat_dbg(DBG_BATMAN, "bidirectional: orig = %-15s neigh = %-15s => own_bcast = %2i, real recv = %2i, local tq: %3i, asym_penalty: %3i, total tq: %3i \n",
orig_str, neigh_str, total_count, neigh_node->real_packet_count, orig_neigh_node->tq_own, orig_neigh_node->tq_asym_penalty, batman_packet->tq);
/* if link has the minimum required transmission quality consider it bidirectional */
@@ -313,7 +312,7 @@
struct neigh_node *neigh_node = NULL, *tmp_neigh_node = NULL;
int tmp_hna_buff_len;
- debug_log(LOG_TYPE_BATMAN, "update_originator(): Searching and updating originator entry of received packet \n");
+ bat_dbg(DBG_BATMAN, "update_originator(): Searching and updating originator entry of received packet \n");
list_for_each_entry(tmp_neigh_node, &orig_node->neigh_list, list) {
if (compare_orig(tmp_neigh_node->addr, ethhdr->h_source) && (tmp_neigh_node->if_incoming == if_incoming)) {
@@ -331,7 +330,7 @@
if (neigh_node == NULL)
neigh_node = create_neighbor(orig_node, get_orig_node(ethhdr->h_source), ethhdr->h_source, if_incoming);
else
- debug_log(LOG_TYPE_BATMAN, "Updating existing last-hop neighbour of originator\n");
+ bat_dbg(DBG_BATMAN, "Updating existing last-hop neighbour of originator\n");
orig_node->flags = batman_packet->flags;
neigh_node->last_valid = jiffies;
@@ -396,7 +395,8 @@
}
if (!is_duplicate) {
- debug_log(LOG_TYPE_BATMAN, "updating last_seqno: old %d, new %d \n", orig_node->last_real_seqno, batman_packet->seqno);
+ bat_dbg(DBG_BATMAN, "updating last_seqno: old %d, new %d \n",
+ orig_node->last_real_seqno, batman_packet->seqno);
orig_node->last_real_seqno = batman_packet->seqno;
}
@@ -436,7 +436,7 @@
is_single_hop_neigh = (compare_orig(ethhdr->h_source, batman_packet->orig) ? 1 : 0);
- debug_log(LOG_TYPE_BATMAN, "Received BATMAN packet via NB: %s, IF: %s [%s] (from OG: %s, via prev OG: %s, seqno %d, tq %d, TTL %d, V %d, IDF %d) \n", neigh_str, if_incoming->dev, if_incoming->addr_str, orig_str, prev_sender_str, batman_packet->seqno, batman_packet->tq, batman_packet->ttl, batman_packet->version, has_directlink_flag);
+ bat_dbg(DBG_BATMAN, "Received BATMAN packet via NB: %s, IF: %s [%s] (from OG: %s, via prev OG: %s, seqno %d, tq %d, TTL %d, V %d, IDF %d) \n", neigh_str, if_incoming->dev, if_incoming->addr_str, orig_str, prev_sender_str, batman_packet->seqno, batman_packet->tq, batman_packet->ttl, batman_packet->version, has_directlink_flag);
list_for_each_entry_rcu(batman_if, &if_list, list) {
if (batman_if->if_active != IF_ACTIVE)
@@ -456,17 +456,17 @@
}
if (batman_packet->version != COMPAT_VERSION) {
- debug_log(LOG_TYPE_BATMAN, "Drop packet: incompatible batman version (%i) \n", batman_packet->version);
+ bat_dbg(DBG_BATMAN, "Drop packet: incompatible batman version (%i) \n", batman_packet->version);
return;
}
if (is_my_addr) {
- debug_log(LOG_TYPE_BATMAN, "Drop packet: received my own broadcast (sender: %s) \n", neigh_str);
+ bat_dbg(DBG_BATMAN, "Drop packet: received my own broadcast (sender: %s) \n", neigh_str);
return;
}
if (is_broadcast) {
- debug_log(LOG_TYPE_BATMAN, "Drop packet: ignoring all packets with broadcast source addr (sender: %s) \n", neigh_str);
+ bat_dbg(DBG_BATMAN, "Drop packet: ignoring all packets with broadcast source addr (sender: %s) \n", neigh_str);
return;
}
@@ -481,19 +481,19 @@
orig_neigh_node->bcast_own_sum[if_incoming->if_num] = bit_packet_count((TYPE_OF_WORD *)&(orig_neigh_node->bcast_own[if_incoming->if_num * NUM_WORDS]));
}
- debug_log(LOG_TYPE_BATMAN, "Drop packet: originator packet from myself (via neighbour) \n");
+ bat_dbg(DBG_BATMAN, "Drop packet: originator packet from myself (via neighbour) \n");
return;
}
if (batman_packet->tq == 0) {
count_real_packets(ethhdr, batman_packet, if_incoming);
- debug_log(LOG_TYPE_BATMAN, "Drop packet: originator packet with tq equal 0 \n");
+ bat_dbg(DBG_BATMAN, "Drop packet: originator packet with tq equal 0 \n");
return;
}
if (is_my_oldorig) {
- debug_log(LOG_TYPE_BATMAN, "Drop packet: ignoring all rebroadcast echos (sender: %s) \n", neigh_str);
+ bat_dbg(DBG_BATMAN, "Drop packet: ignoring all rebroadcast echos (sender: %s) \n", neigh_str);
return;
}
@@ -508,7 +508,7 @@
(compare_orig(orig_node->router->addr, batman_packet->prev_sender)) &&
!(compare_orig(batman_packet->orig, batman_packet->prev_sender)) &&
(compare_orig(orig_node->router->addr, orig_node->router->orig_node->router->addr))) {
- debug_log(LOG_TYPE_BATMAN, "Drop packet: ignoring all rebroadcast packets that may make me loop (sender: %s) \n", neigh_str);
+ bat_dbg(DBG_BATMAN, "Drop packet: ignoring all rebroadcast packets that may make me loop (sender: %s) \n", neigh_str);
return;
}
@@ -519,7 +519,7 @@
/* drop packet if sender is not a direct neighbor and if we don't route towards it */
if (!is_single_hop_neigh && (orig_neigh_node->router == NULL)) {
- debug_log(LOG_TYPE_BATMAN, "Drop packet: OGM via unknown neighbor! \n");
+ bat_dbg(DBG_BATMAN, "Drop packet: OGM via unknown neighbor!\n");
return;
}
@@ -537,22 +537,22 @@
/* mark direct link on incoming interface */
schedule_forward_packet(orig_node, ethhdr, batman_packet, 1, hna_buff_len, if_incoming);
- debug_log(LOG_TYPE_BATMAN, "Forwarding packet: rebroadcast neighbour packet with direct link flag \n");
+ bat_dbg(DBG_BATMAN, "Forwarding packet: rebroadcast neighbour packet with direct link flag\n");
return;
}
/* multihop originator */
if (!is_bidirectional) {
- debug_log(LOG_TYPE_BATMAN, "Drop packet: not received via bidirectional link\n");
+ bat_dbg(DBG_BATMAN, "Drop packet: not received via bidirectional link\n");
return;
}
if (is_duplicate) {
- debug_log(LOG_TYPE_BATMAN, "Drop packet: duplicate packet received\n");
+ bat_dbg(DBG_BATMAN, "Drop packet: duplicate packet received\n");
return;
}
- debug_log(LOG_TYPE_BATMAN, "Forwarding packet: rebroadcast originator packet \n");
+ bat_dbg(DBG_BATMAN, "Forwarding packet: rebroadcast originator packet\n");
schedule_forward_packet(orig_node, ethhdr, batman_packet, 0, hna_buff_len, if_incoming);
}
@@ -574,7 +574,7 @@
if (time_after(jiffies, orig_node->last_valid + ((2 * PURGE_TIMEOUT * HZ) / 1000))) {
- debug_log(LOG_TYPE_BATMAN, "Originator timeout: originator %s, last_valid %u \n", orig_str, (orig_node->last_valid / HZ));
+ bat_dbg(DBG_BATMAN, "Originator timeout: originator %s, last_valid %lu\n", orig_str, (orig_node->last_valid / HZ));
hash_remove_bucket(orig_hash, hashit);
free_orig_node(orig_node);
@@ -591,7 +591,7 @@
if (time_after(jiffies, neigh_node->last_valid + ((PURGE_TIMEOUT * HZ) / 1000))) {
addr_to_string(neigh_str, neigh_node->addr);
- debug_log(LOG_TYPE_BATMAN, "Neighbour timeout: originator %s, neighbour: %s, last_valid %u \n", orig_str, neigh_str, (neigh_node->last_valid / HZ));
+ bat_dbg(DBG_BATMAN, "Neighbour timeout: originator %s, neighbour: %s, last_valid %lu\n", orig_str, neigh_str, (neigh_node->last_valid / HZ));
neigh_purged = 1;
list_del(list_pos);
@@ -652,7 +652,7 @@
atomic_set(&exit_cond, 0);
packet_buff = kmalloc(PACKBUFF_SIZE, GFP_KERNEL);
if (!packet_buff) {
- debug_log(LOG_TYPE_CRIT, "Could allocate memory for the packet buffer. :(\n");
+ printk(KERN_ERR "batman-adv:Could allocate memory for the packet buffer. :(\n");
return -1;
}
@@ -677,9 +677,9 @@
while (1) {
if (batman_if->if_active != IF_ACTIVE) {
if (batman_if->if_active != IF_TO_BE_ACTIVATED)
- debug_log(LOG_TYPE_NOTICE,
- "Could not read from deactivated interface %s!\n",
- batman_if->dev);
+ printk(KERN_WARNING
+ "batman-adv:Could not read from deactivated interface %s!\n",
+ batman_if->dev);
if (batman_if->raw_sock)
receive_raw_packet(batman_if->raw_sock, packet_buff, PACKBUFF_SIZE);
@@ -698,7 +698,7 @@
batman_packet = (struct batman_packet *)(packet_buff + sizeof(struct ethhdr));
if (batman_packet->version != COMPAT_VERSION) {
- debug_log(LOG_TYPE_BATMAN, "Drop packet: incompatible batman version (%i) \n", batman_packet->version);
+ bat_dbg(DBG_BATMAN, "Drop packet: incompatible batman version (%i)\n", batman_packet->version);
continue;
}
@@ -719,9 +719,9 @@
spin_lock(&orig_hash_lock);
receive_aggr_bat_packet(ethhdr,
- packet_buff + sizeof(struct ethhdr),
- result - sizeof(struct ethhdr),
- batman_if);
+ packet_buff + sizeof(struct ethhdr),
+ result - sizeof(struct ethhdr),
+ batman_if);
spin_unlock(&orig_hash_lock);
break;
@@ -768,9 +768,9 @@
icmp_packet->ttl = TTL;
send_raw_packet(packet_buff + sizeof(struct ethhdr),
- result - sizeof(struct ethhdr),
- orig_node->batman_if,
- orig_node->router->addr);
+ result - sizeof(struct ethhdr),
+ orig_node->batman_if,
+ orig_node->router->addr);
}
@@ -785,7 +785,7 @@
addr_to_string(src_str, icmp_packet->orig);
addr_to_string(dst_str, icmp_packet->dst);
- debug_log(LOG_TYPE_NOTICE, "Error - can't send packet from %s to %s: ttl exceeded\n", src_str, dst_str);
+ printk(KERN_WARNING "batman-adv:Warning - can't send packet from %s to %s: ttl exceeded\n", src_str, dst_str);
/* send TTL exceeded if packet is an echo request (traceroute) */
if (icmp_packet->msg_type != ECHO_REQUEST)
@@ -803,9 +803,9 @@
icmp_packet->ttl = TTL;
send_raw_packet(packet_buff + sizeof(struct ethhdr),
- result - sizeof(struct ethhdr),
- orig_node->batman_if,
- orig_node->router->addr);
+ result - sizeof(struct ethhdr),
+ orig_node->batman_if,
+ orig_node->router->addr);
}
@@ -825,9 +825,9 @@
/* route it */
send_raw_packet(packet_buff + sizeof(struct ethhdr),
- result - sizeof(struct ethhdr),
- orig_node->batman_if,
- orig_node->router->addr);
+ result - sizeof(struct ethhdr),
+ orig_node->batman_if,
+ orig_node->router->addr);
}
spin_unlock(&orig_hash_lock);
@@ -866,7 +866,7 @@
addr_to_string(src_str, ((struct ethhdr *)(unicast_packet + 1))->h_source);
addr_to_string(dst_str, unicast_packet->dest);
- debug_log(LOG_TYPE_NOTICE, "Error - can't send packet from %s to %s: ttl exceeded\n", src_str, dst_str);
+ printk(KERN_WARNING "batman-adv:Warning - can't send packet from %s to %s: ttl exceeded\n", src_str, dst_str);
continue;
}
@@ -880,9 +880,9 @@
/* route it */
send_raw_packet(packet_buff + sizeof(struct ethhdr),
- result - sizeof(struct ethhdr),
- orig_node->batman_if,
- orig_node->router->addr);
+ result - sizeof(struct ethhdr),
+ orig_node->batman_if,
+ orig_node->router->addr);
}
spin_unlock(&orig_hash_lock);
@@ -980,7 +980,7 @@
}
if ((result < 0) && (result != -EAGAIN))
- debug_log(LOG_TYPE_CRIT, "Could not receive packet from interface %s: %i\n", batman_if->dev, result);
+ printk(KERN_ERR "batman-adv:Could not receive packet from interface %s: %i\n", batman_if->dev, result);
/* lock for the next iteration */
rcu_read_lock();
Modified: trunk/batman-adv-kernelland/send.c
===================================================================
--- trunk/batman-adv-kernelland/send.c 2009-11-09 20:09:12 UTC (rev 1481)
+++ trunk/batman-adv-kernelland/send.c 2009-11-14 06:11:32 UTC (rev 1482)
@@ -21,7 +21,6 @@
#include "main.h"
#include "send.h"
-#include "log.h"
#include "routing.h"
#include "translation-table.h"
#include "hard-interface.h"
@@ -72,9 +71,9 @@
return;
if (!(batman_if->net_dev->flags & IFF_UP)) {
- debug_log(LOG_TYPE_WARN,
- "Interface %s is not up - can't send packet via that interface (IF_TO_BE_DEACTIVATED was here) !\n",
- batman_if->dev);
+ printk(KERN_WARNING
+ "batman-adv:Interface %s is not up - can't send packet via that interface!\n",
+ batman_if->dev);
return;
}
@@ -101,9 +100,9 @@
* (which is > 0). This will not be treated as an error. */
retval = dev_queue_xmit(skb);
if (retval < 0)
- debug_log(LOG_TYPE_CRIT,
- "Can't write to raw socket (IF_TO_BE_DEACTIVATED was here): %i\n",
- retval);
+ printk(KERN_WARNING
+ "batman-adv:Can't write to raw socket: %i\n",
+ retval);
}
/* Send a packet to a given interface */
@@ -140,15 +139,15 @@
fwd_str = (packet_num > 0 ? "Forwarding" : (forw_packet->own ?
"Sending own" :
"Forwarding"));
- debug_log(LOG_TYPE_BATMAN,
- "%s %spacket (originator %s, seqno %d, TQ %d, TTL %d, IDF %s) on interface %s [%s]\n",
- fwd_str,
- (packet_num > 0 ? "aggregated " : ""),
- orig_str, ntohs(batman_packet->seqno),
- batman_packet->tq, batman_packet->ttl,
- (batman_packet->flags & DIRECTLINK ?
- "on" : "off"),
- batman_if->dev, batman_if->addr_str);
+ bat_dbg(DBG_BATMAN,
+ "%s %spacket (originator %s, seqno %d, TQ %d, TTL %d, IDF %s) on interface %s [%s]\n",
+ fwd_str,
+ (packet_num > 0 ? "aggregated " : ""),
+ orig_str, ntohs(batman_packet->seqno),
+ batman_packet->tq, batman_packet->ttl,
+ (batman_packet->flags & DIRECTLINK ?
+ "on" : "off"),
+ batman_if->dev, batman_if->addr_str);
buff_pos += sizeof(struct batman_packet) +
(batman_packet->num_hna * ETH_ALEN);
@@ -172,8 +171,7 @@
unsigned char directlink = (batman_packet->flags & DIRECTLINK ? 1 : 0);
if (!forw_packet->if_incoming) {
- debug_log(LOG_TYPE_CRIT,
- "Error - can't forward packet: incoming iface not specified\n");
+ printk(KERN_ERR "batman-adv: Error - can't forward packet: incoming iface not specified\n");
return;
}
@@ -188,12 +186,12 @@
(forw_packet->own && (forw_packet->if_incoming->if_num > 0))) {
/* FIXME: what about aggregated packets ? */
- debug_log(LOG_TYPE_BATMAN,
- "%s packet (originator %s, seqno %d, TTL %d) on interface %s [%s]\n",
- (forw_packet->own ? "Sending own" : "Forwarding"),
- orig_str, ntohs(batman_packet->seqno),
- batman_packet->ttl, forw_packet->if_incoming->dev,
- forw_packet->if_incoming->addr_str);
+ bat_dbg(DBG_BATMAN,
+ "%s packet (originator %s, seqno %d, TTL %d) on interface %s [%s]\n",
+ (forw_packet->own ? "Sending own" : "Forwarding"),
+ orig_str, ntohs(batman_packet->seqno),
+ batman_packet->ttl, forw_packet->if_incoming->dev,
+ forw_packet->if_incoming->addr_str);
send_raw_packet(forw_packet->packet_buff,
forw_packet->packet_len,
@@ -286,7 +284,7 @@
unsigned long send_time;
if (batman_packet->ttl <= 1) {
- debug_log(LOG_TYPE_BATMAN, "ttl exceeded \n");
+ bat_dbg(DBG_BATMAN, "ttl exceeded \n");
return;
}
@@ -314,9 +312,9 @@
/* apply hop penalty */
batman_packet->tq = hop_penalty(batman_packet->tq);
- debug_log(LOG_TYPE_BATMAN, "Forwarding packet: tq_orig: %i, tq_avg: %i, tq_forw: %i, ttl_orig: %i, ttl_forw: %i \n",
- in_tq, tq_avg, batman_packet->tq, in_ttl - 1,
- batman_packet->ttl);
+ bat_dbg(DBG_BATMAN, "Forwarding packet: tq_orig: %i, tq_avg: %i, tq_forw: %i, ttl_orig: %i, ttl_forw: %i \n",
+ in_tq, tq_avg, batman_packet->tq, in_ttl - 1,
+ batman_packet->ttl);
batman_packet->seqno = htons(batman_packet->seqno);
@@ -437,7 +435,7 @@
struct forw_packet *forw_packet;
struct hlist_node *tmp_node, *safe_tmp_node;
- debug_log(LOG_TYPE_BATMAN, "purge_outstanding_packets()\n");
+ bat_dbg(DBG_BATMAN, "purge_outstanding_packets()\n");
/* free bcast list */
spin_lock(&forw_bcast_list_lock);
Modified: trunk/batman-adv-kernelland/soft-interface.c
===================================================================
--- trunk/batman-adv-kernelland/soft-interface.c 2009-11-09 20:09:12 UTC (rev 1481)
+++ trunk/batman-adv-kernelland/soft-interface.c 2009-11-14 06:11:32 UTC (rev 1482)
@@ -24,7 +24,6 @@
#include "hard-interface.h"
#include "send.h"
#include "translation-table.h"
-#include "log.h"
#include "types.h"
#include "hash.h"
#include <linux/ethtool.h>
@@ -212,7 +211,7 @@
* dropping */
if (!spin_trylock(&orig_hash_lock)) {
lock_dropped++;
- debug_log(LOG_TYPE_NOTICE, "%d packets dropped because lock was hold\n", lock_dropped);
+ printk(KERN_WARNING "batman-adv:%d packets dropped because lock was hold\n", lock_dropped);
goto dropped;
}
Modified: trunk/batman-adv-kernelland/translation-table.c
===================================================================
--- trunk/batman-adv-kernelland/translation-table.c 2009-11-09 20:09:12 UTC (rev 1481)
+++ trunk/batman-adv-kernelland/translation-table.c 2009-11-14 06:11:32 UTC (rev 1482)
@@ -21,7 +21,6 @@
#include "main.h"
#include "translation-table.h"
-#include "log.h"
#include "soft-interface.h"
#include "types.h"
#include "hash.h"
@@ -82,12 +81,12 @@
MAC-flooding. */
if ((num_hna + 1 > (ETH_DATA_LEN - BAT_PACKET_LEN) / ETH_ALEN) ||
(num_hna + 1 > 255)) {
- debug_log(LOG_TYPE_ROUTES, "Can't add new local hna entry (%s): number of local hna entries exceeds packet size \n", hna_str);
+ bat_dbg(DBG_ROUTES, "Can't add new local hna entry (%s): number of local hna entries exceeds packet size \n", hna_str);
return;
}
- debug_log(LOG_TYPE_ROUTES, "Creating new local hna entry: %s \n",
- hna_str);
+ bat_dbg(DBG_ROUTES, "Creating new local hna entry: %s \n",
+ hna_str);
hna_local_entry = kmalloc(sizeof(struct hna_local_entry), GFP_ATOMIC);
if (!hna_local_entry)
@@ -113,7 +112,7 @@
hna_local_hash->size * 2);
if (swaphash == NULL)
- debug_log(LOG_TYPE_CRIT, "Couldn't resize local hna hash table \n");
+ printk(KERN_ERR "batman-adv:Couldn't resize local hna hash table \n");
else
hna_local_hash = swaphash;
}
@@ -205,8 +204,8 @@
char hna_str[ETH_STR_LEN];
addr_to_string(hna_str, hna_local_entry->addr);
- debug_log(LOG_TYPE_ROUTES, "Deleting local hna entry (%s): %s \n",
- hna_str, message);
+ bat_dbg(DBG_ROUTES, "Deleting local hna entry (%s): %s \n",
+ hna_str, message);
hash_remove(hna_local_hash, hna_local_entry->addr);
_hna_local_del(hna_local_entry);
@@ -291,7 +290,9 @@
memcpy(hna_global_entry->addr, hna_ptr, ETH_ALEN);
addr_to_string(hna_str, hna_global_entry->addr);
- debug_log(LOG_TYPE_ROUTES, "Creating new global hna entry: %s (via %s)\n", hna_str, orig_str);
+ bat_dbg(DBG_ROUTES,
+ "Creating new global hna entry: %s (via %s)\n",
+ hna_str, orig_str);
spin_lock_irqsave(&hna_global_hash_lock, flags);
hash_add(hna_global_hash, hna_global_entry);
@@ -333,7 +334,7 @@
hna_global_hash->size * 2);
if (swaphash == NULL)
- debug_log(LOG_TYPE_CRIT, "Couldn't resize global hna hash table \n");
+ printk(KERN_ERR "batman-adv:Couldn't resize global hna hash table \n");
else
hna_global_hash = swaphash;
}
@@ -386,7 +387,8 @@
addr_to_string(orig_str, hna_global_entry->orig_node->orig);
addr_to_string(hna_str, hna_global_entry->addr);
- debug_log(LOG_TYPE_ROUTES, "Deleting global hna entry %s (via %s): %s \n", hna_str, orig_str, message);
+ bat_dbg(DBG_ROUTES, "Deleting global hna entry %s (via %s): %s \n",
+ hna_str, orig_str, message);
hash_remove(hna_global_hash, hna_global_entry->addr);
kfree(hna_global_entry);
Modified: trunk/batman-adv-kernelland/vis.c
===================================================================
--- trunk/batman-adv-kernelland/vis.c 2009-11-09 20:09:12 UTC (rev 1481)
+++ trunk/batman-adv-kernelland/vis.c 2009-11-14 06:11:32 UTC (rev 1482)
@@ -23,7 +23,6 @@
#include "send.h"
#include "translation-table.h"
#include "vis.h"
-#include "log.h"
#include "soft-interface.h"
#include "hard-interface.h"
#include "hash.h"
@@ -445,8 +444,7 @@
int packet_length;
if (info->packet.ttl < 2) {
- debug_log(LOG_TYPE_NOTICE,
- "Error - can't send vis packet: ttl exceeded\n");
+ printk(KERN_WARNING "batman-adv: Error - can't send vis packet: ttl exceeded\n");
return;
}
@@ -495,13 +493,13 @@
vis_hash = hash_new(256, vis_info_cmp, vis_info_choose);
if (!vis_hash) {
- debug_log(LOG_TYPE_CRIT, "Can't initialize vis_hash\n");
+ printk(KERN_ERR "batman-adv:Can't initialize vis_hash\n");
goto err;
}
my_vis_info = kmalloc(1000, GFP_ATOMIC);
if (!my_vis_info) {
- debug_log(LOG_TYPE_CRIT, "Can't initialize vis packet\n");
+ printk(KERN_ERR "batman-adv:Can't initialize vis packet\n");
goto err;
}
@@ -522,8 +520,8 @@
memcpy(my_vis_info->packet.sender_orig, mainIfAddr, ETH_ALEN);
if (hash_add(vis_hash, my_vis_info) < 0) {
- debug_log(LOG_TYPE_CRIT,
- "Can't add own vis packet into hash\n");
+ printk(KERN_ERR
+ "batman-adv:Can't add own vis packet into hash\n");
free_info(my_vis_info); /* not in hash, need to remove it
* manually. */
goto err;
13 years, 2 months
r1481 - trunk/batman-adv-kernelland
by postmaster@open-mesh.net
Author: simon
Date: 2009-11-09 20:09:12 +0000 (Mon, 09 Nov 2009)
New Revision: 1481
Modified:
trunk/batman-adv-kernelland/routing.c
Log:
avoid (or at least decrease) route flapping in perfect environments
Modified: trunk/batman-adv-kernelland/routing.c
===================================================================
--- trunk/batman-adv-kernelland/routing.c 2009-11-08 14:27:43 UTC (rev 1480)
+++ trunk/batman-adv-kernelland/routing.c 2009-11-09 20:09:12 UTC (rev 1481)
@@ -358,7 +358,7 @@
/* if the TQ is the same and the link not more symetric we won't consider it either */
if ((orig_node->router) &&
((neigh_node->tq_avg == orig_node->router->tq_avg) &&
- (orig_node->router->orig_node->bcast_own_sum[if_incoming->if_num] >
+ (orig_node->router->orig_node->bcast_own_sum[if_incoming->if_num] >=
neigh_node->orig_node->bcast_own_sum[if_incoming->if_num])))
goto update_hna;
13 years, 3 months
[git] batman-adv branch, linux, updated. 31791c214a69092cb9feb5a6198a695a21fa0b24
by postmaster@open-mesh.net
The following commit has been merged in the linux branch:
commit 31791c214a69092cb9feb5a6198a695a21fa0b24
Merge: ed9666d30f0e07f5c58eaf8deb01c87150f03f6a 5ff6d9f73e1a8751740bc537732d05a99dfbc01b
Author: Andrew Lunn <lunn(a)lunn.ch>
Date: Mon Nov 9 06:36:05 2009 +0100
Merge branch 'linux' of batman-git:/srv/git/batman-adv into linux
--
batman-adv
13 years, 3 months