]> bbs.cooldavid.org Git - net-next-2.6.git/blame - drivers/staging/batman-adv/types.h
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
[net-next-2.6.git] / drivers / staging / batman-adv / types.h
CommitLineData
5beef3c9 1/*
9b6d10b7 2 * Copyright (C) 2007-2010 B.A.T.M.A.N. contributors:
5beef3c9
AL
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
23
62c20720
SE
24#ifndef _NET_BATMAN_ADV_TYPES_H_
25#define _NET_BATMAN_ADV_TYPES_H_
5beef3c9
AL
26
27#include "packet.h"
28#include "bitarray.h"
29
6d45d8df
SE
30#define BAT_HEADER_LEN (sizeof(struct ethhdr) + \
31 ((sizeof(struct unicast_packet) > sizeof(struct bcast_packet) ? \
32 sizeof(struct unicast_packet) : \
33 sizeof(struct bcast_packet))))
5beef3c9
AL
34
35
36struct batman_if {
37 struct list_head list;
38 int16_t if_num;
39 char *dev;
208e13e4 40 char if_status;
5beef3c9
AL
41 char addr_str[ETH_STR_LEN];
42 struct net_device *net_dev;
5beef3c9
AL
43 atomic_t seqno;
44 unsigned char *packet_buff;
45 int packet_len;
208e13e4 46 struct kobject *hardif_obj;
5beef3c9
AL
47 struct rcu_head rcu;
48
49};
50
6d45d8df
SE
51/**
52 * orig_node - structure for orig_list maintaining nodes of mesh
e35fd5ec 53 * @primary_addr: hosts primary interface address
6d45d8df
SE
54 * @last_valid: when last packet from this node was received
55 * @bcast_seqno_reset: time when the broadcast seqno window was reset
56 * @batman_seqno_reset: time when the batman seqno window was reset
57 * @flags: for now only VIS_SERVER flag
58 * @last_real_seqno: last and best known squence number
59 * @last_ttl: ttl of last received packet
60 * @last_bcast_seqno: last broadcast sequence number received by this host
e35fd5ec
SW
61 *
62 * @candidates: how many candidates are available
63 * @selected: next bonding candidate
6d45d8df
SE
64 */
65struct orig_node {
5beef3c9 66 uint8_t orig[ETH_ALEN];
e35fd5ec 67 uint8_t primary_addr[ETH_ALEN];
5beef3c9 68 struct neigh_node *router;
5beef3c9
AL
69 TYPE_OF_WORD *bcast_own;
70 uint8_t *bcast_own_sum;
71 uint8_t tq_own;
72 int tq_asym_penalty;
6d45d8df
SE
73 unsigned long last_valid;
74 unsigned long bcast_seqno_reset;
75 unsigned long batman_seqno_reset;
76 uint8_t flags;
5beef3c9 77 unsigned char *hna_buff;
cf2d72ec
SW
78 int16_t hna_buff_len;
79 uint32_t last_real_seqno;
6d45d8df 80 uint8_t last_ttl;
5beef3c9 81 TYPE_OF_WORD bcast_bits[NUM_WORDS];
cf2d72ec 82 uint32_t last_bcast_seqno;
5beef3c9 83 struct list_head neigh_list;
e35fd5ec
SW
84 struct {
85 uint8_t candidates;
86 struct neigh_node *selected;
87 } bond;
5beef3c9
AL
88};
89
6d45d8df
SE
90/**
91 * neigh_node
92 * @last_valid: when last packet via this neighbor was received
93 */
5beef3c9
AL
94struct neigh_node {
95 struct list_head list;
96 uint8_t addr[ETH_ALEN];
97 uint8_t real_packet_count;
98 uint8_t tq_recv[TQ_GLOBAL_WINDOW_SIZE];
99 uint8_t tq_index;
100 uint8_t tq_avg;
101 uint8_t last_ttl;
e35fd5ec 102 struct neigh_node *next_bond_candidate;
6d45d8df 103 unsigned long last_valid;
5beef3c9
AL
104 TYPE_OF_WORD real_bits[NUM_WORDS];
105 struct orig_node *orig_node;
106 struct batman_if *if_incoming;
107};
108
109struct bat_priv {
110 struct net_device_stats stats;
47fdf097 111 atomic_t aggregation_enabled;
e35fd5ec 112 atomic_t bonding_enabled;
14741240 113 atomic_t vis_mode;
1d59f82c 114 atomic_t orig_interval;
84ec0864 115 atomic_t log_level;
208e13e4 116 char num_ifaces;
84ec0864 117 struct debug_log *debug_log;
208e13e4 118 struct batman_if *primary_if;
47fdf097 119 struct kobject *mesh_obj;
c4121432 120 struct dentry *debug_dir;
5beef3c9
AL
121};
122
c4121432 123struct socket_client {
5beef3c9
AL
124 struct list_head queue_list;
125 unsigned int queue_len;
126 unsigned char index;
127 spinlock_t lock;
128 wait_queue_head_t queue_wait;
13334d48 129 struct bat_priv *bat_priv;
5beef3c9
AL
130};
131
c4121432 132struct socket_packet {
5beef3c9 133 struct list_head list;
e4cb3720
DS
134 size_t icmp_len;
135 struct icmp_packet_rr icmp_packet;
5beef3c9
AL
136};
137
138struct hna_local_entry {
139 uint8_t addr[ETH_ALEN];
140 unsigned long last_seen;
141 char never_purge;
142};
143
144struct hna_global_entry {
145 uint8_t addr[ETH_ALEN];
146 struct orig_node *orig_node;
147};
148
6d45d8df
SE
149/**
150 * forw_packet - structure for forw_list maintaining packets to be
151 * send/forwarded
152 */
153struct forw_packet {
5beef3c9
AL
154 struct hlist_node list;
155 unsigned long send_time;
156 uint8_t own;
e7017195 157 struct sk_buff *skb;
5beef3c9
AL
158 unsigned char *packet_buff;
159 uint16_t packet_len;
160 uint32_t direct_link_flags;
161 uint8_t num_packets;
162 struct delayed_work delayed_work;
163 struct batman_if *if_incoming;
164};
165
e9b76450
ML
166/* While scanning for vis-entries of a particular vis-originator
167 * this list collects its interfaces to create a subgraph/cluster
168 * out of them later
169 */
170struct if_list_entry {
171 uint8_t addr[ETH_ALEN];
172 bool primary;
173 struct hlist_node list;
174};
175
84ec0864
ML
176struct debug_log {
177 char log_buff[LOG_BUF_LEN];
178 unsigned long log_start;
179 unsigned long log_end;
180 spinlock_t lock;
181 wait_queue_head_t queue_wait;
182};
183
62c20720 184#endif /* _NET_BATMAN_ADV_TYPES_H_ */