1/* 2 * Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: 3 * 4 * Marek Lindner, Simon Wunderlich 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of version 2 of the GNU General Public 8 * License as published by the Free Software Foundation. 9 * 10 * This program is distributed in the hope that it will be useful, but 11 * WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 18 * 02110-1301, USA 19 * 20 */ 21 22/* Kernel Programming */ 23#define LINUX 24 25#define DRIVER_AUTHOR "Marek Lindner <lindner_marek@yahoo.de>, " \ 26 "Simon Wunderlich <siwu@hrz.tu-chemnitz.de>" 27#define DRIVER_DESC "B.A.T.M.A.N. advanced" 28#define DRIVER_DEVICE "batman-adv" 29 30#define SOURCE_VERSION "0.2.2-beta" 31 32 33/* B.A.T.M.A.N. parameters */ 34 35#define TQ_MAX_VALUE 255 36#define JITTER 20 37#define TTL 50 /* Time To Live of broadcast messages */ 38 39#define PURGE_TIMEOUT 200000 /* purge originators after time in ms if no 40 * valid packet comes in -> TODO: check 41 * influence on TQ_LOCAL_WINDOW_SIZE */ 42#define LOCAL_HNA_TIMEOUT 3600000 43 44#define TQ_LOCAL_WINDOW_SIZE 64 /* sliding packet range of received originator 45 * messages in squence numbers (should be a 46 * multiple of our word size) */ 47#define TQ_GLOBAL_WINDOW_SIZE 5 48#define TQ_LOCAL_BIDRECT_SEND_MINIMUM 1 49#define TQ_LOCAL_BIDRECT_RECV_MINIMUM 1 50#define TQ_TOTAL_BIDRECT_LIMIT 1 51 52#define TQ_HOP_PENALTY 10 53 54#define NUM_WORDS (TQ_LOCAL_WINDOW_SIZE / WORD_BIT_SIZE) 55 56#define PACKBUFF_SIZE 2000 57#define LOG_BUF_LEN 8192 /* has to be a power of 2 */ 58#define ETH_STR_LEN 20 59 60#define MAX_AGGREGATION_BYTES 512 /* should not be bigger than 512 bytes or 61 * change the size of 62 * forw_packet->direct_link_flags */ 63#define MAX_AGGREGATION_MS 100 64 65#define RESET_PROTECTION_MS 30000 66#define EXPECTED_SEQNO_RANGE 4096 67/* don't reset again within 30 seconds */ 68 69#define MODULE_INACTIVE 0 70#define MODULE_ACTIVE 1 71#define MODULE_DEACTIVATING 2 72 73#define BCAST_QUEUE_LEN 256 74#define BATMAN_QUEUE_LEN 256 75 76/* 77 * Debug Messages 78 */ 79 80#define DBG_BATMAN 1 /* all messages related to routing / flooding / 81 * broadcasting / etc */ 82#define DBG_ROUTES 2 /* route or hna added / changed / deleted */ 83 84#ifdef CONFIG_BATMAN_ADV_DEBUG 85extern int debug; 86 87extern int bat_debug_type(int type); 88#define bat_dbg(type, fmt, arg...) do { \ 89 if (bat_debug_type(type)) \ 90 printk(KERN_DEBUG "batman-adv:" fmt, ## arg); \ 91 } \ 92 while (0) 93#else /* !CONFIG_BATMAN_ADV_DEBUG */ 94#define bat_dbg(type, fmt, arg...) do { \ 95 } \ 96 while (0) 97#endif 98 99/* 100 * Vis 101 */ 102 103/* #define VIS_SUBCLUSTERS_DISABLED */ 104 105/* 106 * Kernel headers 107 */ 108 109#include <linux/mutex.h> /* mutex */ 110#include <linux/module.h> /* needed by all modules */ 111#include <linux/netdevice.h> /* netdevice */ 112#include <linux/if_ether.h> /* ethernet header */ 113#include <linux/poll.h> /* poll_table */ 114#include <linux/kthread.h> /* kernel threads */ 115#include <linux/pkt_sched.h> /* schedule types */ 116#include <linux/workqueue.h> /* workqueue */ 117#include <linux/slab.h> 118#include <net/sock.h> /* struct sock */ 119#include <linux/jiffies.h> 120#include "types.h" 121 122#ifndef REVISION_VERSION 123#define REVISION_VERSION_STR "" 124#else 125#define REVISION_VERSION_STR " "REVISION_VERSION 126#endif 127 128extern struct list_head if_list; 129extern struct hlist_head forw_bat_list; 130extern struct hlist_head forw_bcast_list; 131extern struct hashtable_t *orig_hash; 132 133extern spinlock_t orig_hash_lock; 134extern spinlock_t forw_bat_list_lock; 135extern spinlock_t forw_bcast_list_lock; 136 137extern atomic_t vis_interval; 138extern atomic_t bcast_queue_left; 139extern atomic_t batman_queue_left; 140extern int16_t num_hna; 141 142extern struct net_device *soft_device; 143 144extern unsigned char broadcastAddr[]; 145extern atomic_t module_state; 146extern struct workqueue_struct *bat_event_workqueue; 147 148void activate_module(void); 149void deactivate_module(void); 150void inc_module_count(void); 151void dec_module_count(void); 152int addr_to_string(char *buff, uint8_t *addr); 153int compare_orig(void *data1, void *data2); 154int choose_orig(void *data, int32_t size); 155int is_my_mac(uint8_t *addr); 156int is_bcast(uint8_t *addr); 157int is_mcast(uint8_t *addr); 158

