diff options
author | Sven Eckelmann <sven@narfation.org> | 2010-12-13 06:19:28 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-12-16 16:44:24 -0500 |
commit | c6c8fea29769d998d94fcec9b9f14d4b52b349d3 (patch) | |
tree | 2c8dc8d1a64d48c5737a5745e3c510ff53a23047 /net/batman-adv/main.h | |
parent | b236da6931e2482bfe44a7865dd4e7bb036f3496 (diff) |
net: Add batman-adv meshing protocol
B.A.T.M.A.N. (better approach to mobile ad-hoc networking) is a routing
protocol for multi-hop ad-hoc mesh networks. The networks may be wired or
wireless. See http://www.open-mesh.org/ for more information and user space
tools.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/batman-adv/main.h')
-rw-r--r-- | net/batman-adv/main.h | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/net/batman-adv/main.h b/net/batman-adv/main.h new file mode 100644 index 000000000000..d4d9926c2201 --- /dev/null +++ b/net/batman-adv/main.h | |||
@@ -0,0 +1,183 @@ | |||
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 | #ifndef _NET_BATMAN_ADV_MAIN_H_ | ||
23 | #define _NET_BATMAN_ADV_MAIN_H_ | ||
24 | |||
25 | /* Kernel Programming */ | ||
26 | #define LINUX | ||
27 | |||
28 | #define DRIVER_AUTHOR "Marek Lindner <lindner_marek@yahoo.de>, " \ | ||
29 | "Simon Wunderlich <siwu@hrz.tu-chemnitz.de>" | ||
30 | #define DRIVER_DESC "B.A.T.M.A.N. advanced" | ||
31 | #define DRIVER_DEVICE "batman-adv" | ||
32 | |||
33 | #define SOURCE_VERSION "next" | ||
34 | |||
35 | |||
36 | /* B.A.T.M.A.N. parameters */ | ||
37 | |||
38 | #define TQ_MAX_VALUE 255 | ||
39 | #define JITTER 20 | ||
40 | #define TTL 50 /* Time To Live of broadcast messages */ | ||
41 | |||
42 | #define PURGE_TIMEOUT 200 /* purge originators after time in seconds if no | ||
43 | * valid packet comes in -> TODO: check | ||
44 | * influence on TQ_LOCAL_WINDOW_SIZE */ | ||
45 | #define LOCAL_HNA_TIMEOUT 3600 /* in seconds */ | ||
46 | |||
47 | #define TQ_LOCAL_WINDOW_SIZE 64 /* sliding packet range of received originator | ||
48 | * messages in squence numbers (should be a | ||
49 | * multiple of our word size) */ | ||
50 | #define TQ_GLOBAL_WINDOW_SIZE 5 | ||
51 | #define TQ_LOCAL_BIDRECT_SEND_MINIMUM 1 | ||
52 | #define TQ_LOCAL_BIDRECT_RECV_MINIMUM 1 | ||
53 | #define TQ_TOTAL_BIDRECT_LIMIT 1 | ||
54 | |||
55 | #define NUM_WORDS (TQ_LOCAL_WINDOW_SIZE / WORD_BIT_SIZE) | ||
56 | |||
57 | #define PACKBUFF_SIZE 2000 | ||
58 | #define LOG_BUF_LEN 8192 /* has to be a power of 2 */ | ||
59 | |||
60 | #define VIS_INTERVAL 5000 /* 5 seconds */ | ||
61 | |||
62 | /* how much worse secondary interfaces may be to | ||
63 | * to be considered as bonding candidates */ | ||
64 | |||
65 | #define BONDING_TQ_THRESHOLD 50 | ||
66 | |||
67 | #define MAX_AGGREGATION_BYTES 512 /* should not be bigger than 512 bytes or | ||
68 | * change the size of | ||
69 | * forw_packet->direct_link_flags */ | ||
70 | #define MAX_AGGREGATION_MS 100 | ||
71 | |||
72 | #define SOFTIF_NEIGH_TIMEOUT 180000 /* 3 minutes */ | ||
73 | |||
74 | #define RESET_PROTECTION_MS 30000 | ||
75 | #define EXPECTED_SEQNO_RANGE 65536 | ||
76 | /* don't reset again within 30 seconds */ | ||
77 | |||
78 | #define MESH_INACTIVE 0 | ||
79 | #define MESH_ACTIVE 1 | ||
80 | #define MESH_DEACTIVATING 2 | ||
81 | |||
82 | #define BCAST_QUEUE_LEN 256 | ||
83 | #define BATMAN_QUEUE_LEN 256 | ||
84 | |||
85 | /* | ||
86 | * Debug Messages | ||
87 | */ | ||
88 | #ifdef pr_fmt | ||
89 | #undef pr_fmt | ||
90 | #endif | ||
91 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt /* Append 'batman-adv: ' before | ||
92 | * kernel messages */ | ||
93 | |||
94 | #define DBG_BATMAN 1 /* all messages related to routing / flooding / | ||
95 | * broadcasting / etc */ | ||
96 | #define DBG_ROUTES 2 /* route or hna added / changed / deleted */ | ||
97 | #define DBG_ALL 3 | ||
98 | |||
99 | #define LOG_BUF_LEN 8192 /* has to be a power of 2 */ | ||
100 | |||
101 | |||
102 | /* | ||
103 | * Vis | ||
104 | */ | ||
105 | |||
106 | /* #define VIS_SUBCLUSTERS_DISABLED */ | ||
107 | |||
108 | /* | ||
109 | * Kernel headers | ||
110 | */ | ||
111 | |||
112 | #include <linux/mutex.h> /* mutex */ | ||
113 | #include <linux/module.h> /* needed by all modules */ | ||
114 | #include <linux/netdevice.h> /* netdevice */ | ||
115 | #include <linux/etherdevice.h> /* ethernet address classifaction */ | ||
116 | #include <linux/if_ether.h> /* ethernet header */ | ||
117 | #include <linux/poll.h> /* poll_table */ | ||
118 | #include <linux/kthread.h> /* kernel threads */ | ||
119 | #include <linux/pkt_sched.h> /* schedule types */ | ||
120 | #include <linux/workqueue.h> /* workqueue */ | ||
121 | #include <linux/slab.h> | ||
122 | #include <net/sock.h> /* struct sock */ | ||
123 | #include <linux/jiffies.h> | ||
124 | #include <linux/seq_file.h> | ||
125 | #include "types.h" | ||
126 | |||
127 | #ifndef REVISION_VERSION | ||
128 | #define REVISION_VERSION_STR "" | ||
129 | #else | ||
130 | #define REVISION_VERSION_STR " "REVISION_VERSION | ||
131 | #endif | ||
132 | |||
133 | extern struct list_head if_list; | ||
134 | |||
135 | extern unsigned char broadcast_addr[]; | ||
136 | extern struct workqueue_struct *bat_event_workqueue; | ||
137 | |||
138 | int mesh_init(struct net_device *soft_iface); | ||
139 | void mesh_free(struct net_device *soft_iface); | ||
140 | void inc_module_count(void); | ||
141 | void dec_module_count(void); | ||
142 | int is_my_mac(uint8_t *addr); | ||
143 | |||
144 | #ifdef CONFIG_BATMAN_ADV_DEBUG | ||
145 | int debug_log(struct bat_priv *bat_priv, char *fmt, ...); | ||
146 | |||
147 | #define bat_dbg(type, bat_priv, fmt, arg...) \ | ||
148 | do { \ | ||
149 | if (atomic_read(&bat_priv->log_level) & type) \ | ||
150 | debug_log(bat_priv, fmt, ## arg); \ | ||
151 | } \ | ||
152 | while (0) | ||
153 | #else /* !CONFIG_BATMAN_ADV_DEBUG */ | ||
154 | static inline void bat_dbg(char type __attribute__((unused)), | ||
155 | struct bat_priv *bat_priv __attribute__((unused)), | ||
156 | char *fmt __attribute__((unused)), ...) | ||
157 | { | ||
158 | } | ||
159 | #endif | ||
160 | |||
161 | #define bat_warning(net_dev, fmt, arg...) \ | ||
162 | do { \ | ||
163 | struct net_device *_netdev = (net_dev); \ | ||
164 | struct bat_priv *_batpriv = netdev_priv(_netdev); \ | ||
165 | bat_dbg(DBG_ALL, _batpriv, fmt, ## arg); \ | ||
166 | pr_warning("%s: " fmt, _netdev->name, ## arg); \ | ||
167 | } while (0) | ||
168 | #define bat_info(net_dev, fmt, arg...) \ | ||
169 | do { \ | ||
170 | struct net_device *_netdev = (net_dev); \ | ||
171 | struct bat_priv *_batpriv = netdev_priv(_netdev); \ | ||
172 | bat_dbg(DBG_ALL, _batpriv, fmt, ## arg); \ | ||
173 | pr_info("%s: " fmt, _netdev->name, ## arg); \ | ||
174 | } while (0) | ||
175 | #define bat_err(net_dev, fmt, arg...) \ | ||
176 | do { \ | ||
177 | struct net_device *_netdev = (net_dev); \ | ||
178 | struct bat_priv *_batpriv = netdev_priv(_netdev); \ | ||
179 | bat_dbg(DBG_ALL, _batpriv, fmt, ## arg); \ | ||
180 | pr_err("%s: " fmt, _netdev->name, ## arg); \ | ||
181 | } while (0) | ||
182 | |||
183 | #endif /* _NET_BATMAN_ADV_MAIN_H_ */ | ||