Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
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 
32  struct list_head list;
34  char if_status;
38  unsigned char *packet_buff;
44  struct rcu_head rcu;
45 };
46 
65  struct batadv_neigh_node __rcu *router; /* rcu protected pointer */
66  unsigned long *bcast_own;
68  unsigned long last_seen;
69  unsigned long bcast_seqno_reset;
70  unsigned long batman_seqno_reset;
73  atomic_t last_ttvn; /* last seen translation table version number */
75  unsigned char *tt_buff;
77  spinlock_t tt_buff_lock; /* protects tt_buff */
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  */
93  spinlock_t neigh_list_lock; /* protects neigh_list and router */
95  struct rcu_head rcu;
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  */
103  /* bcast_seqno_lock protects bcast_bits, last_bcast_seqno */
105  spinlock_t tt_list_lock; /* protects tt_list */
108 };
109 
111  struct hlist_node list;
113  unsigned long deleted;
115  struct rcu_head rcu;
116 };
117 
118 /* batadv_neigh_node
119  * @last_seen: when last packet via this neighbor was received
120  */
122  struct hlist_node list;
130  unsigned long last_seen;
133  struct rcu_head rcu;
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 
166 };
167 
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 */
195  unsigned char *last_changeset;
197  spinlock_t last_changeset_lock; /* protects last_changeset */
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 
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 */
220 };
221 
225  spinlock_t hash_lock; /* protects hash */
226  spinlock_t list_lock; /* protects info::recv_list */
229 };
230 
231 struct batadv_priv {
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 */
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 */
245  atomic_t hop_penalty; /* uint */
246  atomic_t log_level; /* uint */
252  struct kobject *mesh_obj;
253  struct dentry *debug_dir;
257  spinlock_t forw_bat_list_lock; /* protects forw_bat_list */
260  struct batadv_hard_iface __rcu *primary_if; /* rcu protected pointer */
262 #ifdef CONFIG_BATMAN_ADV_BLA
263  struct batadv_priv_bla bla;
264 #endif
268 };
269 
272  unsigned int queue_len;
273  unsigned char index;
274  spinlock_t lock; /* protects queue_list, queue_len, index */
277 };
278 
280  struct list_head list;
281  size_t icmp_len;
283 };
284 
289  unsigned long added_at;
291  struct rcu_head rcu;
292 };
293 
296  unsigned long last_seen;
297 };
298 
302  spinlock_t list_lock; /* protects the list */
303  unsigned long roam_at; /* time at which TT_GLOBAL_ROAM was set */
304 };
305 
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;
323  struct rcu_head rcu;
324  uint16_t crc; /* crc checksum over all claims */
325 };
326 
327 struct batadv_claim {
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;
334  struct hlist_node hash_entry;
335 };
336 #endif
337 
339  struct list_head list;
341 };
342 
345  unsigned long issued_at;
346  struct list_head list;
347 };
348 
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  */
360  struct hlist_node list;
361  unsigned long send_time;
363  struct sk_buff *skb;
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  */
377  bool primary;
378  struct hlist_node list;
379 };
380 
383  unsigned long log_start;
384  unsigned long log_end;
385  spinlock_t lock; /* protects log_buff, log_start and log_end */
387 };
388 
390  struct list_head list;
392  struct sk_buff *skb;
393 };
394 
396  unsigned long first_seen;
397  /* list of server-neighbors we received a vis-packet
398  * from. we should not reply to them.
399  */
402  struct kref refcount;
405  /* this packet might be part of the vis send queue. */
407  /* vis_info may follow here */
408 } __packed;
409 
413  uint8_t quality; /* quality = 0 client */
414 } __packed;
415 
417  struct list_head list;
419 };
420 
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  */
432  /* called when primary interface is selected / changed */
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_ */