Commit bad2239e authored by Andrew Lunn's avatar Andrew Lunn Committed by Greg Kroah-Hartman

Staging: batman-adv: replace internal logging mechanism.

batman-adv used its own logging infrastructure. Replace this with
standard kernel logging, printk(), with compile time and runtime
options to enable/disable different debug levels.
Signed-off-by: default avatarAndrew Lunn <andrew@lunn.ch>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent e89230ec
...@@ -19,4 +19,4 @@ ...@@ -19,4 +19,4 @@
# #
obj-m += batman-adv.o 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 log.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
[state: 07-11-2009] [state: 13-11-2009]
BATMAN-ADV BATMAN-ADV
---------- ----------
...@@ -96,6 +96,54 @@ To deactivate batman, do: ...@@ -96,6 +96,54 @@ To deactivate batman, do:
# echo "" > /proc/net/batman-adv/interfaces # 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 BATCTL
------ ------
......
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
#include "main.h" #include "main.h"
#include "bitarray.h" #include "bitarray.h"
#include "log.h"
/* returns true if the corresponding bit in the given seq_bits indicates true /* returns true if the corresponding bit in the given seq_bits indicates true
* and curr_seqno is within range of last_seqno */ * and curr_seqno is within range of last_seqno */
...@@ -80,8 +79,8 @@ void bit_shift(TYPE_OF_WORD *seq_bits, int32_t n) ...@@ -80,8 +79,8 @@ void bit_shift(TYPE_OF_WORD *seq_bits, int32_t n)
* from. * from.
* *
* left is high, right is low: FEDC BA98 7654 3210 * left is high, right is low: FEDC BA98 7654 3210
* ^^ ^^ * ^^ ^^
* vvvv * vvvv
* ^^^^ = from, vvvvv =to, we'd have word_num==1 and * ^^^^ = from, vvvvv =to, we'd have word_num==1 and
* word_offset==WORD_BIT_SIZE/2 ????? in this example. * word_offset==WORD_BIT_SIZE/2 ????? in this example.
* (=24 bits) * (=24 bits)
...@@ -133,13 +132,13 @@ char bit_get_packet(TYPE_OF_WORD *seq_bits, int16_t seq_num_diff, ...@@ -133,13 +132,13 @@ char bit_get_packet(TYPE_OF_WORD *seq_bits, int16_t seq_num_diff,
(seq_num_diff < -TQ_LOCAL_WINDOW_SIZE)) { (seq_num_diff < -TQ_LOCAL_WINDOW_SIZE)) {
if (seq_num_diff > TQ_LOCAL_WINDOW_SIZE) if (seq_num_diff > TQ_LOCAL_WINDOW_SIZE)
debug_log(LOG_TYPE_BATMAN, bat_dbg(DBG_BATMAN,
"We missed a lot of packets (%i) !\n", "We missed a lot of packets (%i) !\n",
seq_num_diff-1); seq_num_diff-1);
if (-seq_num_diff > TQ_LOCAL_WINDOW_SIZE) if (-seq_num_diff > TQ_LOCAL_WINDOW_SIZE)
debug_log(LOG_TYPE_BATMAN, bat_dbg(DBG_BATMAN,
"Other host probably restarted !\n"); "Other host probably restarted !\n");
for (i = 0; i < NUM_WORDS; i++) for (i = 0; i < NUM_WORDS; i++)
seq_bits[i] = 0; seq_bits[i] = 0;
......
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
#include "main.h" #include "main.h"
#include "device.h" #include "device.h"
#include "log.h"
#include "send.h" #include "send.h"
#include "types.h" #include "types.h"
#include "hash.h" #include "hash.h"
...@@ -60,7 +59,7 @@ int bat_device_setup(void) ...@@ -60,7 +59,7 @@ int bat_device_setup(void)
/* register our device - kernel assigns a free major number */ /* register our device - kernel assigns a free major number */
tmp_major = register_chrdev(0, DRIVER_DEVICE, &fops); tmp_major = register_chrdev(0, DRIVER_DEVICE, &fops);
if (tmp_major < 0) { 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); tmp_major);
return 0; return 0;
} }
...@@ -68,7 +67,7 @@ int bat_device_setup(void) ...@@ -68,7 +67,7 @@ int bat_device_setup(void)
batman_class = class_create(THIS_MODULE, "batman-adv"); batman_class = class_create(THIS_MODULE, "batman-adv");
if (IS_ERR(batman_class)) { 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; return 0;
} }
...@@ -111,7 +110,7 @@ int bat_device_open(struct inode *inode, struct file *file) ...@@ -111,7 +110,7 @@ int bat_device_open(struct inode *inode, struct file *file)
} }
if (device_client_hash[i] != device_client) { 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); kfree(device_client);
return -EXFULL; return -EXFULL;
} }
...@@ -208,7 +207,7 @@ ssize_t bat_device_write(struct file *file, const char __user *buff, ...@@ -208,7 +207,7 @@ ssize_t bat_device_write(struct file *file, const char __user *buff,
struct batman_if *batman_if; struct batman_if *batman_if;
if (len < sizeof(struct icmp_packet)) { 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; return -EINVAL;
} }
...@@ -219,12 +218,12 @@ ssize_t bat_device_write(struct file *file, const char __user *buff, ...@@ -219,12 +218,12 @@ ssize_t bat_device_write(struct file *file, const char __user *buff,
return -EFAULT; return -EFAULT;
if (icmp_packet.packet_type != BAT_ICMP) { 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; return -EINVAL;
} }
if (icmp_packet.msg_type != ECHO_REQUEST) { 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; return -EINVAL;
} }
......
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
#include "main.h" #include "main.h"
#include "hard-interface.h" #include "hard-interface.h"
#include "log.h"
#include "soft-interface.h" #include "soft-interface.h"
#include "send.h" #include "send.h"
#include "translation-table.h" #include "translation-table.h"
...@@ -87,9 +86,9 @@ static void check_known_mac_addr(uint8_t *addr) ...@@ -87,9 +86,9 @@ static void check_known_mac_addr(uint8_t *addr)
continue; continue;
addr_to_string(mac_string, addr); addr_to_string(mac_string, addr);
debug_log(LOG_TYPE_WARN, "The newly added mac address (%s) already exists on: %s\n", printk(KERN_WARNING "batman-adv:The newly added mac address (%s) already exists on: %s\n",
mac_string, batman_if->dev); 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:It is strongly recommended to keep mac addresses unique to avoid problems!\n");
} }
rcu_read_unlock(); rcu_read_unlock();
} }
...@@ -171,8 +170,8 @@ void hardif_deactivate_interface(struct batman_if *batman_if) ...@@ -171,8 +170,8 @@ void hardif_deactivate_interface(struct batman_if *batman_if)
batman_if->if_active = IF_INACTIVE; batman_if->if_active = IF_INACTIVE;
active_ifs--; active_ifs--;
debug_log(LOG_TYPE_NOTICE, "Interface deactivated: %s\n", printk(KERN_INFO "batman-adv:Interface deactivated: %s\n",
batman_if->dev); batman_if->dev);
} }
/* (re)activate given interface. */ /* (re)activate given interface. */
...@@ -197,7 +196,7 @@ static void hardif_activate_interface(struct batman_if *batman_if) ...@@ -197,7 +196,7 @@ static void hardif_activate_interface(struct batman_if *batman_if)
&batman_if->raw_sock); &batman_if->raw_sock);
if (retval < 0) { 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); retval);
goto sock_err; goto sock_err;
} }
...@@ -210,7 +209,7 @@ static void hardif_activate_interface(struct batman_if *batman_if) ...@@ -210,7 +209,7 @@ static void hardif_activate_interface(struct batman_if *batman_if)
(struct sockaddr *)&bind_addr, sizeof(bind_addr)); (struct sockaddr *)&bind_addr, sizeof(bind_addr));
if (retval < 0) { 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); retval);
goto bind_err; goto bind_err;
} }
...@@ -235,8 +234,8 @@ static void hardif_activate_interface(struct batman_if *batman_if) ...@@ -235,8 +234,8 @@ static void hardif_activate_interface(struct batman_if *batman_if)
if (batman_if->if_num == 0) if (batman_if->if_num == 0)
set_main_if_addr(batman_if->net_dev->dev_addr); set_main_if_addr(batman_if->net_dev->dev_addr);
debug_log(LOG_TYPE_NOTICE, "Interface activated: %s\n", printk(KERN_INFO "batman-adv:Interface activated: %s\n",
batman_if->dev); batman_if->dev);
return; return;
...@@ -290,7 +289,7 @@ static int resize_orig(struct orig_node *orig_node, int if_num) ...@@ -290,7 +289,7 @@ static int resize_orig(struct orig_node *orig_node, int if_num)
data_ptr = kmalloc((if_num + 1) * sizeof(TYPE_OF_WORD) * NUM_WORDS, data_ptr = kmalloc((if_num + 1) * sizeof(TYPE_OF_WORD) * NUM_WORDS,
GFP_ATOMIC); GFP_ATOMIC);
if (!data_ptr) { 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; return -1;
} }
...@@ -301,7 +300,7 @@ static int resize_orig(struct orig_node *orig_node, int if_num) ...@@ -301,7 +300,7 @@ static int resize_orig(struct orig_node *orig_node, int if_num)
data_ptr = kmalloc((if_num + 1) * sizeof(uint8_t), GFP_ATOMIC); data_ptr = kmalloc((if_num + 1) * sizeof(uint8_t), GFP_ATOMIC);
if (!data_ptr) { 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; return -1;
} }
...@@ -324,7 +323,7 @@ int hardif_add_interface(char *dev, int if_num) ...@@ -324,7 +323,7 @@ int hardif_add_interface(char *dev, int if_num)
batman_if = kmalloc(sizeof(struct batman_if), GFP_KERNEL); batman_if = kmalloc(sizeof(struct batman_if), GFP_KERNEL);
if (!batman_if) { 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; return -1;
} }
...@@ -339,7 +338,7 @@ int hardif_add_interface(char *dev, int if_num) ...@@ -339,7 +338,7 @@ int hardif_add_interface(char *dev, int if_num)
batman_if->packet_buff = kmalloc(batman_if->packet_len, GFP_KERNEL); batman_if->packet_buff = kmalloc(batman_if->packet_len, GFP_KERNEL);
if (!batman_if->packet_buff) { 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; goto out;
} }
...@@ -348,7 +347,7 @@ int hardif_add_interface(char *dev, int if_num) ...@@ -348,7 +347,7 @@ int hardif_add_interface(char *dev, int if_num)
batman_if->if_active = IF_INACTIVE; batman_if->if_active = IF_INACTIVE;
INIT_RCU_HEAD(&batman_if->rcu); 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++; avail_ifs++;
INIT_LIST_HEAD(&batman_if->list); INIT_LIST_HEAD(&batman_if->list);
...@@ -389,7 +388,7 @@ int hardif_add_interface(char *dev, int if_num) ...@@ -389,7 +388,7 @@ int hardif_add_interface(char *dev, int if_num)
spin_unlock(&orig_hash_lock); spin_unlock(&orig_hash_lock);
if (!hardif_is_interface_up(batman_if->dev)) 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 else
hardif_activate_interface(batman_if); hardif_activate_interface(batman_if);
...@@ -413,7 +412,7 @@ char hardif_get_active_if_num(void) ...@@ -413,7 +412,7 @@ char hardif_get_active_if_num(void)
} }
static int hard_if_event(struct notifier_block *this, 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 net_device *dev = (struct net_device *)ptr;
struct batman_if *batman_if = get_batman_if_by_name(dev->name); struct batman_if *batman_if = get_batman_if_by_name(dev->name);
...@@ -436,7 +435,6 @@ static int hard_if_event(struct notifier_block *this, ...@@ -436,7 +435,6 @@ static int hard_if_event(struct notifier_block *this,
break; break;
/* NETDEV_CHANGEADDR - mac address change - what are we doing here ? */ /* NETDEV_CHANGEADDR - mac address change - what are we doing here ? */
default: default:
/* debug_log(LOG_TYPE_CRIT, "hard_if_event: %s %i\n", dev->name, event); */
break; break;
}; };
...@@ -447,5 +445,5 @@ static int hard_if_event(struct notifier_block *this, ...@@ -447,5 +445,5 @@ static int hard_if_event(struct notifier_block *this,
} }
struct notifier_block hard_if_notifier = { struct notifier_block hard_if_notifier = {
.notifier_call = hard_if_event, .notifier_call = hard_if_event,
}; };
/*
* 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;
}
/*
* 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);
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
#include "main.h" #include "main.h"
#include "proc.h" #include "proc.h"
#include "log.h"
#include "routing.h" #include "routing.h"
#include "send.h" #include "send.h"
#include "soft-interface.h" #include "soft-interface.h"
...@@ -57,6 +56,17 @@ atomic_t module_state; ...@@ -57,6 +56,17 @@ atomic_t module_state;
struct workqueue_struct *bat_event_workqueue; 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 init_module(void)
{ {
int retval; int retval;
...@@ -90,21 +100,21 @@ int init_module(void) ...@@ -90,21 +100,21 @@ int init_module(void)
interface_setup); interface_setup);
if (!soft_device) { 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; goto end;
} }
retval = register_netdev(soft_device); retval = register_netdev(soft_device);
if (retval < 0) { 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; goto free_soft_device;
} }
register_netdevice_notifier(&hard_if_notifier); 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", 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); SOURCE_VERSION, REVISION_VERSION_STR, COMPAT_VERSION);
return 0; return 0;
...@@ -156,7 +166,7 @@ void activate_module(void) ...@@ -156,7 +166,7 @@ void activate_module(void)
kthread_task = kthread_run(packet_recv_thread, NULL, "batman-adv"); kthread_task = kthread_run(packet_recv_thread, NULL, "batman-adv");
if (IS_ERR(kthread_task)) { 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; kthread_task = NULL;
} }
} }
...@@ -166,7 +176,7 @@ void activate_module(void) ...@@ -166,7 +176,7 @@ void activate_module(void)
goto end; goto end;
err: 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(); shutdown_module();
end: end:
return; return;
......
...@@ -33,16 +33,16 @@ ...@@ -33,16 +33,16 @@
#define TQ_MAX_VALUE 255 #define TQ_MAX_VALUE 255
#define JITTER 20 #define JITTER 20
#define TTL 50 /* Time To Live of broadcast messages */ #define TTL 50 /* Time To Live of broadcast messages */
#define MAX_ADDR 16 /* number of interfaces which can be added to #define MAX_ADDR 16 /* number of interfaces which can be added to
* batman. */ * 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 * valid packet comes in -> TODO: check
* influence on TQ_LOCAL_WINDOW_SIZE */ * influence on TQ_LOCAL_WINDOW_SIZE */
#define LOCAL_HNA_TIMEOUT 3600000 #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 * messages in squence numbers (should be a
* multiple of our word size) */ * multiple of our word size) */
#define TQ_GLOBAL_WINDOW_SIZE 5 #define TQ_GLOBAL_WINDOW_SIZE 5
...@@ -69,24 +69,27 @@ ...@@ -69,24 +69,27 @@
/* /*
* Logging * Debug Messages
*/ */
#define LOG_TYPE_CRIT 0 /* highest priority for fatal errors such as #define DBG_BATMAN 1 /* all messages related to routing / flooding /
* blocked sockets / failed packet delivery / * broadcasting / etc */
* programming errors */ #define DBG_ROUTES 2 /* route or hna added / changed / deleted */
#define LOG_TYPE_WARN 1 /* warnings for small errors like wrong user
* input / damaged packets / etc */ #ifdef CONFIG_BATMAN_DEBUG
#define LOG_TYPE_NOTICE 2 /* notice information for new interfaces / extern int debug;
* changed settings / new originators / etc */
#define LOG_TYPE_BATMAN 4 /* all messages related to routing / flooding / extern int bat_debug_type(int type);
* broadcasting / etc */ #define bat_dbg(type, fmt, arg...) do { \
#define LOG_TYPE_ROUTES 8 /* route or hna added / changed / deleted */ if (bat_debug_type(type)) \
#define LOG_TYPE_CRIT_NAME "critical" printk(KERN_DEBUG "batman-adv:" fmt, ## arg); \
#define LOG_TYPE_WARN_NAME "warnings" } \
#define LOG_TYPE_NOTICE_NAME "notices" while (0)
#define LOG_TYPE_BATMAN_NAME "batman" #else /* !CONFIG_BATMAN_DEBUG */
#define LOG_TYPE_ROUTES_NAME "routes" #define bat_dbg(type, fmt, arg...) do { \
} \
while (0)
#endif
/* /*
* Vis * Vis
...@@ -147,5 +150,3 @@ int choose_orig(void *data, int32_t size); ...@@ -147,5 +150,3 @@ int choose_orig(void *data, int32_t size);
int is_my_mac(uint8_t *addr); int is_my_mac(uint8_t *addr);
int is_bcast(uint8_t *addr); int is_bcast(uint8_t *addr);
int is_mcast(uint8_t *addr); int is_mcast(uint8_t *addr);
This diff is collapsed.
This diff is collapsed.
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
#include "main.h" #include "main.h"
#include "send.h" #include "send.h"
#include "log.h"
#include "routing.h" #include "routing.h"
#include "translation-table.h" #include "translation-table.h"
#include "hard-interface.h" #include "hard-interface.h"
...@@ -72,9 +71,9 @@ void send_raw_packet(unsigned char *pack_buff, int pack_buff_len, ...@@ -72,9 +71,9 @@ void send_raw_packet(unsigned char *pack_buff, int pack_buff_len,
return; return;
if (!(batman_if->net_dev->flags & IFF_UP)) { if (!(batman_if->net_dev->flags & IFF_UP)) {
debug_log(LOG_TYPE_WARN, printk(KERN_WARNING
"Interface %s is not up - can't send packet via that interface (IF_TO_BE_DEACTIVATED was here) !\n", "batman-adv:Interface %s is not up - can't send packet via that interface!\n",
batman_if->dev); batman_if->dev);
return; return;
} }
...@@ -101,9 +100,9 @@ void send_raw_packet(unsigned char *pack_buff, int pack_buff_len, ...@@ -101,9 +100,9 @@ void send_raw_packet(unsigned char *pack_buff, int pack_buff_len,
* (which is > 0). This will not be treated as an error. */ * (which is > 0). This will not be treated as an error. */
retval = dev_queue_xmit(skb); retval = dev_queue_xmit(skb);
if (retval < 0) if (retval < 0)
debug_log(LOG_TYPE_CRIT, printk(KERN_WARNING
"Can't write to raw socket (IF_TO_BE_DEACTIVATED was here): %i\n", "batman-adv:Can't write to raw socket: %i\n",
retval); retval);
} }
/* Send a packet to a given interface */ /* Send a packet to a given interface */
...@@ -140,15 +139,15 @@ static void send_packet_to_if(struct forw_packet *forw_packet, ...@@ -140,15 +139,15 @@ static void send_packet_to_if(struct forw_packet *forw_packet,
fwd_str = (packet_num > 0 ? "Forwarding" : (forw_packet->own ? fwd_str = (packet_num > 0 ? "Forwarding" : (forw_packet->own ?
"Sending own" : "Sending own" :
"Forwarding")); "Forwarding"));
debug_log(LOG_TYPE_BATMAN, bat_dbg(DBG_BATMAN,
"%s %spacket (originator %s, seqno %d, TQ %d, TTL %d, IDF %s) on interface %s [%s]\n", "%s %spacket (originator %s, seqno %d, TQ %d, TTL %d, IDF %s) on interface %s [%s]\n",
fwd_str, fwd_str,
(packet_num > 0 ? "aggregated " : ""), (packet_num > 0 ? "aggregated " : ""),
orig_str, ntohs(batman_packet->seqno), orig_str, ntohs(batman_packet->seqno),
batman_packet->tq, batman_packet->ttl, batman_packet->tq, batman_packet->ttl,
(batman_packet->flags & DIRECTLINK ? (batman_packet->flags & DIRECTLINK ?
"on" : "off"), "on" : "off"),
batman_if->dev, batman_if->addr_str); batman_if->dev, batman_if->addr_str);
buff_pos += sizeof(struct batman_packet) + buff_pos += sizeof(struct batman_packet) +
(batman_packet->num_hna * ETH_ALEN); (batman_packet->num_hna * ETH_ALEN);
...@@ -172,8 +171,7 @@ static void send_packet(struct forw_packet *forw_packet) ...@@ -172,8 +171,7 @@ static void send_packet(struct forw_packet *forw_packet)
unsigned char directlink = (batman_packet->flags & DIRECTLINK ? 1 : 0); unsigned char directlink = (batman_packet->flags & DIRECTLINK ? 1 : 0);
if (!forw_packet->if_incoming) { if (!forw_packet->if_incoming) {
debug_log(LOG_TYPE_CRIT, printk(KERN_ERR "batman-adv: Error - can't forward packet: incoming iface not specified\n");
"Error - can't forward packet: incoming iface not specified\n");
return; return;
} }
...@@ -188,12 +186,12 @@ static void send_packet(struct forw_packet *forw_packet) ...@@ -188,12 +186,12 @@ static void send_packet(struct forw_packet *forw_packet)
(forw_packet->own && (forw_packet->if_incoming->if_num > 0))) { (forw_packet->own && (forw_packet->if_incoming->if_num > 0))) {
/* FIXME: what about aggregated packets ? */ /* FIXME: what about aggregated packets ? */
debug_log(LOG_TYPE_BATMAN, bat_dbg(DBG_BATMAN,
"%s packet (originator %s, seqno %d, TTL %d) on interface %s [%s]\n", "%s packet (originator %s, seqno %d, TTL %d) on interface %s [%s]\n",
(forw_packet->own ? "Sending own" : "Forwarding"), (forw_packet->own ? "Sending own" : "Forwarding"),
orig_str, ntohs(batman_packet->seqno), orig_str, ntohs(batman_packet->seqno),
batman_packet->ttl, forw_packet->if_incoming->dev, batman_packet->ttl, forw_packet->if_incoming->dev,
forw_packet->if_incoming->addr_str); forw_packet->if_incoming->addr_str);
send_raw_packet(forw_packet->packet_buff, send_raw_packet(forw_packet->packet_buff,
forw_packet->packet_len, forw_packet->packet_len,
...@@ -286,7 +284,7 @@ void schedule_forward_packet(struct orig_node *orig_node, ...@@ -286,7 +284,7 @@ void schedule_forward_packet(struct orig_node *orig_node,
unsigned long send_time; unsigned long send_time;
if (batman_packet->ttl <= 1) { if (batman_packet->ttl <= 1) {
debug_log(LOG_TYPE_BATMAN, "ttl exceeded \n"); bat_dbg(DBG_BATMAN, "ttl exceeded \n");
return; return;
} }
...@@ -314,9 +312,9 @@ void schedule_forward_packet(struct orig_node *orig_node, ...@@ -314,9 +312,9 @@ void schedule_forward_packet(struct orig_node *orig_node,
/* apply hop penalty */ /* apply hop penalty */
batman_packet->tq = hop_penalty(batman_packet->tq); 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", 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, in_tq, tq_avg, batman_packet->tq, in_ttl - 1,
batman_packet->ttl); batman_packet->ttl);
batman_packet->seqno = htons(batman_packet->seqno); batman_packet->seqno = htons(batman_packet->seqno);
...@@ -439,7 +437,7 @@ void purge_outstanding_packets(void) ...@@ -439,7 +437,7 @@ void purge_outstanding_packets(void)
struct forw_packet *forw_packet; struct forw_packet *forw_packet;
struct hlist_node *tmp_node, *safe_tmp_node; 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 */ /* free bcast list */
spin_lock(&forw_bcast_list_lock); spin_lock(&forw_bcast_list_lock);
......
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
#include "hard-interface.h" #include "hard-interface.h"
#include "send.h" #include "send.h"
#include "translation-table.h" #include "translation-table.h"
#include "log.h"
#include "types.h" #include "types.h"
#include "hash.h" #include "hash.h"
#include <linux/ethtool.h> #include <linux/ethtool.h>
...@@ -212,7 +211,7 @@ int interface_tx(struct sk_buff *skb, struct net_device *dev) ...@@ -212,7 +211,7 @@ int interface_tx(struct sk_buff *skb, struct net_device *dev)
* dropping */ * dropping */
if (!spin_trylock(&orig_hash_lock)) { if (!spin_trylock(&orig_hash_lock)) {
lock_dropped++; 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; goto dropped;
} }
......
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
#include "main.h" #include "main.h"
#include "translation-table.h" #include "translation-table.h"
#include "log.h"
#include "soft-interface.h" #include "soft-interface.h"
#include "types.h" #include "types.h"
#include "hash.h" #include "hash.h"
...@@ -82,12 +81,12 @@ void hna_local_add(uint8_t *addr) ...@@ -82,12 +81,12 @@ void hna_local_add(uint8_t *addr)
MAC-flooding. */ MAC-flooding. */
if ((num_hna + 1 > (ETH_DATA_LEN - BAT_PACKET_LEN) / ETH_ALEN) || if ((num_hna + 1 > (ETH_DATA_LEN - BAT_PACKET_LEN) / ETH_ALEN) ||
(num_hna + 1 > 255)) { (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; return;
} }
debug_log(LOG_TYPE_ROUTES, "Creating new local hna entry: %s \n", bat_dbg(DBG_ROUTES, "Creating new local hna entry: %s \n",
hna_str); hna_str);
hna_local_entry = kmalloc(sizeof(struct hna_local_entry), GFP_ATOMIC); hna_local_entry = kmalloc(sizeof(struct hna_local_entry), GFP_ATOMIC);
if (!hna_local_entry) if (!hna_local_entry)
...@@ -113,7 +112,7 @@ void hna_local_add(uint8_t *addr) ...@@ -113,7 +112,7 @@ void hna_local_add(uint8_t *addr)
hna_local_hash->size * 2); hna_local_hash->size * 2);
if (swaphash == NULL) 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 else
hna_local_hash = swaphash; hna_local_hash = swaphash;
} }
...@@ -205,8 +204,8 @@ static void hna_local_del(struct hna_local_entry *hna_local_entry, ...@@ -205,8 +204,8 @@ static void hna_local_del(struct hna_local_entry *hna_local_entry,
char hna_str[ETH_STR_LEN]; char hna_str[ETH_STR_LEN];
addr_to_string(hna_str, hna_local_entry->addr); addr_to_string(hna_str, hna_local_entry->addr);
debug_log(LOG_TYPE_ROUTES, "Deleting local hna entry (%s): %s \n", bat_dbg(DBG_ROUTES, "Deleting local hna entry (%s): %s \n",
hna_str, message); hna_str, message);
hash_remove(hna_local_hash, hna_local_entry->addr); hash_remove(hna_local_hash, hna_local_entry->addr);
_hna_local_del(hna_local_entry); _hna_local_del(hna_local_entry);
...@@ -291,7 +290,9 @@ void hna_global_add_orig(struct orig_node *orig_node, ...@@ -291,7 +290,9 @@ void hna_global_add_orig(struct orig_node *orig_node,
memcpy(hna_global_entry->addr, hna_ptr, ETH_ALEN); memcpy(hna_global_entry->addr, hna_ptr, ETH_ALEN);
addr_to_string(hna_str, hna_global_entry->addr); 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); spin_lock_irqsave(&hna_global_hash_lock, flags);
hash_add(hna_global_hash, hna_global_entry); hash_add(hna_global_hash, hna_global_entry);
...@@ -333,7 +334,7 @@ void hna_global_add_orig(struct orig_node *orig_node, ...@@ -333,7 +334,7 @@ void hna_global_add_orig(struct orig_node *orig_node,
hna_global_hash->size * 2); hna_global_hash->size * 2);
if (swaphash == NULL) 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 else
hna_global_hash = swaphash; hna_global_hash = swaphash;
} }
...@@ -386,7 +387,8 @@ void _hna_global_del_orig(struct hna_global_entry *hna_global_entry, ...@@ -386,7 +387,8 @@ void _hna_global_del_orig(struct hna_global_entry *hna_global_entry,
addr_to_string(orig_str, hna_global_entry->orig_node->orig); addr_to_string(orig_str, hna_global_entry->orig_node->orig);
addr_to_string(hna_str, hna_global_entry->addr); 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); hash_remove(hna_global_hash, hna_global_entry->addr);
kfree(hna_global_entry); kfree(hna_global_entry);
......
...@@ -23,7 +23,6 @@ ...@@ -23,7 +23,6 @@
#include "send.h" #include "send.h"
#include "translation-table.h" #include "translation-table.h"
#include "vis.h" #include "vis.h"
#include "log.h"
#include "soft-interface.h" #include "soft-interface.h"
#include "hard-interface.h" #include "hard-interface.h"
#include "hash.h" #include "hash.h"
...@@ -445,8 +444,7 @@ static void send_vis_packet(struct vis_info *info) ...@@ -445,8 +444,7 @@ static void send_vis_packet(struct vis_info *info)
int packet_length; int packet_length;
if (info->packet.ttl < 2) { if (info->packet.ttl < 2) {
debug_log(LOG_TYPE_NOTICE, printk(KERN_WARNING "batman-adv: Error - can't send vis packet: ttl exceeded\n");
"Error - can't send vis packet: ttl exceeded\n");
return; return;
} }
...@@ -495,13 +493,13 @@ int vis_init(void) ...@@ -495,13 +493,13 @@ int vis_init(void)
vis_hash = hash_new(256, vis_info_cmp, vis_info_choose); vis_hash = hash_new(256, vis_info_cmp, vis_info_choose);
if (!vis_hash) { 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; goto err;
} }
my_vis_info = kmalloc(1000, GFP_ATOMIC); my_vis_info = kmalloc(1000, GFP_ATOMIC);
if (!my_vis_info) { 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; goto err;
} }
...@@ -522,8 +520,8 @@ int vis_init(void) ...@@ -522,8 +520,8 @@ int vis_init(void)
memcpy(my_vis_info->packet.sender_orig, mainIfAddr, ETH_ALEN); memcpy(my_vis_info->packet.sender_orig, mainIfAddr, ETH_ALEN);
if (hash_add(vis_hash, my_vis_info) < 0) { if (hash_add(vis_hash, my_vis_info) < 0) {
debug_log(LOG_TYPE_CRIT, printk(KERN_ERR
"Can't add own vis packet into hash\n"); "batman-adv:Can't add own vis packet into hash\n");
free_info(my_vis_info); /* not in hash, need to remove it free_info(my_vis_info); /* not in hash, need to remove it
* manually. */ * manually. */
goto err; goto err;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment