Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
net
batman-adv
types.h
Go to the documentation of this file.
1
/* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors:
2
*
3
* Marek Lindner, Simon Wunderlich
4
*
5
* This program is free software; you can redistribute it and/or
6
* modify it under the terms of version 2 of the GNU General Public
7
* License as published by the Free Software Foundation.
8
*
9
* This program is distributed in the hope that it will be useful, but
10
* WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
* General Public License for more details.
13
*
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write to the Free Software
16
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17
* 02110-1301, USA
18
*/
19
20
#ifndef _NET_BATMAN_ADV_TYPES_H_
21
#define _NET_BATMAN_ADV_TYPES_H_
22
23
#include "
packet.h
"
24
#include "
bitarray.h
"
25
#include <linux/kernel.h>
26
27
#define BATADV_HEADER_LEN \
28
(ETH_HLEN + max(sizeof(struct batadv_unicast_packet), \
29
sizeof(struct batadv_bcast_packet)))
30
31
struct
batadv_hard_iface
{
32
struct
list_head
list
;
33
int16_t
if_num
;
34
char
if_status
;
35
struct
net_device
*
net_dev
;
36
atomic_t
seqno
;
37
atomic_t
frag_seqno
;
38
unsigned
char
*
packet_buff
;
39
int
packet_len
;
40
struct
kobject
*
hardif_obj
;
41
atomic_t
refcount
;
42
struct
packet_type
batman_adv_ptype
;
43
struct
net_device
*
soft_iface
;
44
struct
rcu_head
rcu
;
45
};
46
62
struct
batadv_orig_node
{
63
uint8_t
orig
[
ETH_ALEN
];
64
uint8_t
primary_addr
[
ETH_ALEN
];
65
struct
batadv_neigh_node
__rcu
*
router
;
/* rcu protected pointer */
66
unsigned
long
*
bcast_own
;
67
uint8_t
*
bcast_own_sum
;
68
unsigned
long
last_seen
;
69
unsigned
long
bcast_seqno_reset
;
70
unsigned
long
batman_seqno_reset
;
71
uint8_t
gw_flags
;
72
uint8_t
flags
;
73
atomic_t
last_ttvn
;
/* last seen translation table version number */
74
uint16_t
tt_crc
;
75
unsigned
char
*
tt_buff
;
76
int16_t
tt_buff_len
;
77
spinlock_t
tt_buff_lock
;
/* protects tt_buff */
78
atomic_t
tt_size
;
79
bool
tt_initialised
;
80
/* The tt_poss_change flag is used to detect an ongoing roaming phase.
81
* If true, then I sent a Roaming_adv to this orig_node and I have to
82
* inspect every packet directed to it to check whether it is still
83
* the true destination or not. This flag will be reset to false as
84
* soon as I receive a new TTVN from this orig_node
85
*/
86
bool
tt_poss_change
;
87
uint32_t
last_real_seqno
;
88
uint8_t
last_ttl
;
89
DECLARE_BITMAP
(bcast_bits,
BATADV_TQ_LOCAL_WINDOW_SIZE
);
90
uint32_t
last_bcast_seqno
;
91
struct
hlist_head
neigh_list
;
92
struct
list_head
frag_list
;
93
spinlock_t
neigh_list_lock
;
/* protects neigh_list and router */
94
atomic_t
refcount
;
95
struct
rcu_head
rcu
;
96
struct
hlist_node
hash_entry
;
97
struct
batadv_priv
*
bat_priv
;
98
unsigned
long
last_frag_packet
;
99
/* ogm_cnt_lock protects: bcast_own, bcast_own_sum,
100
* neigh_node->real_bits, neigh_node->real_packet_count
101
*/
102
spinlock_t
ogm_cnt_lock
;
103
/* bcast_seqno_lock protects bcast_bits, last_bcast_seqno */
104
spinlock_t
bcast_seqno_lock
;
105
spinlock_t
tt_list_lock
;
/* protects tt_list */
106
atomic_t
bond_candidates
;
107
struct
list_head
bond_list
;
108
};
109
110
struct
batadv_gw_node
{
111
struct
hlist_node
list
;
112
struct
batadv_orig_node
*
orig_node
;
113
unsigned
long
deleted
;
114
atomic_t
refcount
;
115
struct
rcu_head
rcu
;
116
};
117
118
/* batadv_neigh_node
119
* @last_seen: when last packet via this neighbor was received
120
*/
121
struct
batadv_neigh_node
{
122
struct
hlist_node
list
;
123
uint8_t
addr
[
ETH_ALEN
];
124
uint8_t
real_packet_count
;
125
uint8_t
tq_recv
[
BATADV_TQ_GLOBAL_WINDOW_SIZE
];
126
uint8_t
tq_index
;
127
uint8_t
tq_avg
;
128
uint8_t
last_ttl
;
129
struct
list_head
bonding_list
;
130
unsigned
long
last_seen
;
131
DECLARE_BITMAP
(real_bits,
BATADV_TQ_LOCAL_WINDOW_SIZE
);
132
atomic_t
refcount
;
133
struct
rcu_head
rcu
;
134
struct
batadv_orig_node
*
orig_node
;
135
struct
batadv_hard_iface
*
if_incoming
;
136
spinlock_t
lq_update_lock
;
/* protects: tq_recv, tq_index */
137
};
138
139
#ifdef CONFIG_BATMAN_ADV_BLA
140
struct
batadv_bcast_duplist_entry {
141
uint8_t
orig[
ETH_ALEN
];
142
uint16_t
crc
;
143
unsigned
long
entrytime;
144
};
145
#endif
146
147
enum
batadv_counters
{
148
BATADV_CNT_TX
,
149
BATADV_CNT_TX_BYTES
,
150
BATADV_CNT_TX_DROPPED
,
151
BATADV_CNT_RX
,
152
BATADV_CNT_RX_BYTES
,
153
BATADV_CNT_FORWARD
,
154
BATADV_CNT_FORWARD_BYTES
,
155
BATADV_CNT_MGMT_TX
,
156
BATADV_CNT_MGMT_TX_BYTES
,
157
BATADV_CNT_MGMT_RX
,
158
BATADV_CNT_MGMT_RX_BYTES
,
159
BATADV_CNT_TT_REQUEST_TX
,
160
BATADV_CNT_TT_REQUEST_RX
,
161
BATADV_CNT_TT_RESPONSE_TX
,
162
BATADV_CNT_TT_RESPONSE_RX
,
163
BATADV_CNT_TT_ROAM_ADV_TX
,
164
BATADV_CNT_TT_ROAM_ADV_RX
,
165
BATADV_CNT_NUM
,
166
};
167
180
struct
batadv_priv_tt
{
181
atomic_t
vn
;
182
atomic_t
ogm_append_cnt
;
183
atomic_t
local_changes
;
184
bool
poss_change
;
185
struct
list_head
changes_list
;
186
struct
batadv_hashtable
*
local_hash
;
187
struct
batadv_hashtable
*
global_hash
;
188
struct
list_head
req_list
;
189
struct
list_head
roam_list
;
190
spinlock_t
changes_list_lock
;
/* protects changes */
191
spinlock_t
req_list_lock
;
/* protects req_list */
192
spinlock_t
roam_list_lock
;
/* protects roam_list */
193
atomic_t
local_entry_num
;
194
uint16_t
local_crc
;
195
unsigned
char
*
last_changeset
;
196
int16_t
last_changeset_len
;
197
spinlock_t
last_changeset_lock
;
/* protects last_changeset */
198
struct
delayed_work
work
;
199
};
200
201
#ifdef CONFIG_BATMAN_ADV_BLA
202
struct
batadv_priv_bla {
203
atomic_t
num_requests;
/* number of bla requests in flight */
204
struct
batadv_hashtable
*claim_hash;
205
struct
batadv_hashtable
*backbone_hash;
206
struct
batadv_bcast_duplist_entry bcast_duplist[
BATADV_DUPLIST_SIZE
];
207
int
bcast_duplist_curr;
208
/* protects bcast_duplist and bcast_duplist_curr */
209
spinlock_t
bcast_duplist_lock;
210
struct
batadv_bla_claim_dst
claim_dest;
211
struct
delayed_work
work
;
212
};
213
#endif
214
215
struct
batadv_priv_gw
{
216
struct
hlist_head
list
;
217
spinlock_t
list_lock
;
/* protects gw_list and curr_gw */
218
struct
batadv_gw_node
__rcu
*
curr_gw
;
/* rcu protected pointer */
219
atomic_t
reselect
;
220
};
221
222
struct
batadv_priv_vis
{
223
struct
list_head
send_list
;
224
struct
batadv_hashtable
*
hash
;
225
spinlock_t
hash_lock
;
/* protects hash */
226
spinlock_t
list_lock
;
/* protects info::recv_list */
227
struct
delayed_work
work
;
228
struct
batadv_vis_info
*
my_info
;
229
};
230
231
struct
batadv_priv
{
232
atomic_t
mesh_state
;
233
struct
net_device_stats
stats
;
234
uint64_t
__percpu
*
bat_counters
;
/* Per cpu counters */
235
atomic_t
aggregated_ogms
;
/* boolean */
236
atomic_t
bonding
;
/* boolean */
237
atomic_t
fragmentation
;
/* boolean */
238
atomic_t
ap_isolation
;
/* boolean */
239
atomic_t
bridge_loop_avoidance
;
/* boolean */
240
atomic_t
vis_mode
;
/* VIS_TYPE_* */
241
atomic_t
gw_mode
;
/* GW_MODE_* */
242
atomic_t
gw_sel_class
;
/* uint */
243
atomic_t
gw_bandwidth
;
/* gw bandwidth */
244
atomic_t
orig_interval
;
/* uint */
245
atomic_t
hop_penalty
;
/* uint */
246
atomic_t
log_level
;
/* uint */
247
atomic_t
bcast_seqno
;
248
atomic_t
bcast_queue_left
;
249
atomic_t
batman_queue_left
;
250
char
num_ifaces
;
251
struct
batadv_debug_log
*
debug_log
;
252
struct
kobject
*
mesh_obj
;
253
struct
dentry
*
debug_dir
;
254
struct
hlist_head
forw_bat_list
;
255
struct
hlist_head
forw_bcast_list
;
256
struct
batadv_hashtable
*
orig_hash
;
257
spinlock_t
forw_bat_list_lock
;
/* protects forw_bat_list */
258
spinlock_t
forw_bcast_list_lock
;
/* protects */
259
struct
delayed_work
orig_work
;
260
struct
batadv_hard_iface
__rcu
*
primary_if
;
/* rcu protected pointer */
261
struct
batadv_algo_ops
*
bat_algo_ops
;
262
#ifdef CONFIG_BATMAN_ADV_BLA
263
struct
batadv_priv_bla bla;
264
#endif
265
struct
batadv_priv_gw
gw
;
266
struct
batadv_priv_tt
tt
;
267
struct
batadv_priv_vis
vis
;
268
};
269
270
struct
batadv_socket_client
{
271
struct
list_head
queue_list
;
272
unsigned
int
queue_len
;
273
unsigned
char
index
;
274
spinlock_t
lock
;
/* protects queue_list, queue_len, index */
275
wait_queue_head_t
queue_wait
;
276
struct
batadv_priv
*
bat_priv
;
277
};
278
279
struct
batadv_socket_packet
{
280
struct
list_head
list
;
281
size_t
icmp_len
;
282
struct
batadv_icmp_packet_rr
icmp_packet
;
283
};
284
285
struct
batadv_tt_common_entry
{
286
uint8_t
addr
[
ETH_ALEN
];
287
struct
hlist_node
hash_entry
;
288
uint16_t
flags
;
289
unsigned
long
added_at
;
290
atomic_t
refcount
;
291
struct
rcu_head
rcu
;
292
};
293
294
struct
batadv_tt_local_entry
{
295
struct
batadv_tt_common_entry
common
;
296
unsigned
long
last_seen
;
297
};
298
299
struct
batadv_tt_global_entry
{
300
struct
batadv_tt_common_entry
common
;
301
struct
hlist_head
orig_list
;
302
spinlock_t
list_lock
;
/* protects the list */
303
unsigned
long
roam_at
;
/* time at which TT_GLOBAL_ROAM was set */
304
};
305
306
struct
batadv_tt_orig_list_entry
{
307
struct
batadv_orig_node
*
orig_node
;
308
uint8_t
ttvn
;
309
atomic_t
refcount
;
310
struct
rcu_head
rcu
;
311
struct
hlist_node
list
;
312
};
313
314
#ifdef CONFIG_BATMAN_ADV_BLA
315
struct
batadv_backbone_gw {
316
uint8_t
orig[
ETH_ALEN
];
317
short
vid
;
/* used VLAN ID */
318
struct
hlist_node
hash_entry;
319
struct
batadv_priv
*bat_priv;
320
unsigned
long
lasttime;
/* last time we heard of this backbone gw */
321
atomic_t
request_sent;
322
atomic_t
refcount
;
323
struct
rcu_head
rcu;
324
uint16_t
crc
;
/* crc checksum over all claims */
325
};
326
327
struct
batadv_claim {
328
uint8_t
addr
[
ETH_ALEN
];
329
short
vid
;
330
struct
batadv_backbone_gw *backbone_gw;
331
unsigned
long
lasttime;
/* last time we heard of claim (locals only) */
332
struct
rcu_head
rcu;
333
atomic_t
refcount
;
334
struct
hlist_node
hash_entry;
335
};
336
#endif
337
338
struct
batadv_tt_change_node
{
339
struct
list_head
list
;
340
struct
batadv_tt_change
change
;
341
};
342
343
struct
batadv_tt_req_node
{
344
uint8_t
addr
[
ETH_ALEN
];
345
unsigned
long
issued_at
;
346
struct
list_head
list
;
347
};
348
349
struct
batadv_tt_roam_node
{
350
uint8_t
addr
[
ETH_ALEN
];
351
atomic_t
counter
;
352
unsigned
long
first_time
;
353
struct
list_head
list
;
354
};
355
356
/* forw_packet - structure for forw_list maintaining packets to be
357
* send/forwarded
358
*/
359
struct
batadv_forw_packet
{
360
struct
hlist_node
list
;
361
unsigned
long
send_time
;
362
uint8_t
own
;
363
struct
sk_buff
*
skb
;
364
uint16_t
packet_len
;
365
uint32_t
direct_link_flags
;
366
uint8_t
num_packets
;
367
struct
delayed_work
delayed_work
;
368
struct
batadv_hard_iface
*
if_incoming
;
369
};
370
371
/* While scanning for vis-entries of a particular vis-originator
372
* this list collects its interfaces to create a subgraph/cluster
373
* out of them later
374
*/
375
struct
batadv_if_list_entry
{
376
uint8_t
addr
[
ETH_ALEN
];
377
bool
primary
;
378
struct
hlist_node
list
;
379
};
380
381
struct
batadv_debug_log
{
382
char
log_buff
[
BATADV_LOG_BUF_LEN
];
383
unsigned
long
log_start
;
384
unsigned
long
log_end
;
385
spinlock_t
lock
;
/* protects log_buff, log_start and log_end */
386
wait_queue_head_t
queue_wait
;
387
};
388
389
struct
batadv_frag_packet_list_entry
{
390
struct
list_head
list
;
391
uint16_t
seqno
;
392
struct
sk_buff
*
skb
;
393
};
394
395
struct
batadv_vis_info
{
396
unsigned
long
first_seen
;
397
/* list of server-neighbors we received a vis-packet
398
* from. we should not reply to them.
399
*/
400
struct
list_head
recv_list
;
401
struct
list_head
send_list
;
402
struct
kref
refcount
;
403
struct
hlist_node
hash_entry
;
404
struct
batadv_priv
*
bat_priv
;
405
/* this packet might be part of the vis send queue. */
406
struct
sk_buff
*
skb_packet
;
407
/* vis_info may follow here */
408
}
__packed
;
409
410
struct
batadv_vis_info_entry
{
411
uint8_t
src
[
ETH_ALEN
];
412
uint8_t
dest
[
ETH_ALEN
];
413
uint8_t
quality
;
/* quality = 0 client */
414
}
__packed
;
415
416
struct
batadv_recvlist_node
{
417
struct
list_head
list
;
418
uint8_t
mac
[
ETH_ALEN
];
419
};
420
421
struct
batadv_algo_ops
{
422
struct
hlist_node
list
;
423
char
*
name
;
424
/* init routing info when hard-interface is enabled */
425
int
(*
bat_iface_enable
)(
struct
batadv_hard_iface
*hard_iface);
426
/* de-init routing info when hard-interface is disabled */
427
void
(*
bat_iface_disable
)(
struct
batadv_hard_iface
*hard_iface);
428
/* (re-)init mac addresses of the protocol information
429
* belonging to this hard-interface
430
*/
431
void
(*
bat_iface_update_mac
)(
struct
batadv_hard_iface
*hard_iface);
432
/* called when primary interface is selected / changed */
433
void
(*
bat_primary_iface_set
)(
struct
batadv_hard_iface
*hard_iface);
434
/* prepare a new outgoing OGM for the send queue */
435
void
(*
bat_ogm_schedule
)(
struct
batadv_hard_iface
*hard_iface);
436
/* send scheduled OGM */
437
void
(*
bat_ogm_emit
)(
struct
batadv_forw_packet
*forw_packet);
438
};
439
440
#endif
/* _NET_BATMAN_ADV_TYPES_H_ */
Generated on Thu Jan 10 2013 12:50:44 for Linux Kernel by
1.8.2