Commit | Line | Data |
---|---|---|
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 | ||
36 | struct 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 | */ |
65 | struct 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 |
94 | struct 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 | ||
109 | struct 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 | 123 | struct 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; | |
129 | }; | |
130 | ||
c4121432 | 131 | struct socket_packet { |
5beef3c9 | 132 | struct list_head list; |
e4cb3720 DS |
133 | size_t icmp_len; |
134 | struct icmp_packet_rr icmp_packet; | |
5beef3c9 AL |
135 | }; |
136 | ||
137 | struct hna_local_entry { | |
138 | uint8_t addr[ETH_ALEN]; | |
139 | unsigned long last_seen; | |
140 | char never_purge; | |
141 | }; | |
142 | ||
143 | struct hna_global_entry { | |
144 | uint8_t addr[ETH_ALEN]; | |
145 | struct orig_node *orig_node; | |
146 | }; | |
147 | ||
6d45d8df SE |
148 | /** |
149 | * forw_packet - structure for forw_list maintaining packets to be | |
150 | * send/forwarded | |
151 | */ | |
152 | struct forw_packet { | |
5beef3c9 AL |
153 | struct hlist_node list; |
154 | unsigned long send_time; | |
155 | uint8_t own; | |
e7017195 | 156 | struct sk_buff *skb; |
5beef3c9 AL |
157 | unsigned char *packet_buff; |
158 | uint16_t packet_len; | |
159 | uint32_t direct_link_flags; | |
160 | uint8_t num_packets; | |
161 | struct delayed_work delayed_work; | |
162 | struct batman_if *if_incoming; | |
163 | }; | |
164 | ||
e9b76450 ML |
165 | /* While scanning for vis-entries of a particular vis-originator |
166 | * this list collects its interfaces to create a subgraph/cluster | |
167 | * out of them later | |
168 | */ | |
169 | struct if_list_entry { | |
170 | uint8_t addr[ETH_ALEN]; | |
171 | bool primary; | |
172 | struct hlist_node list; | |
173 | }; | |
174 | ||
84ec0864 ML |
175 | struct debug_log { |
176 | char log_buff[LOG_BUF_LEN]; | |
177 | unsigned long log_start; | |
178 | unsigned long log_end; | |
179 | spinlock_t lock; | |
180 | wait_queue_head_t queue_wait; | |
181 | }; | |
182 | ||
62c20720 | 183 | #endif /* _NET_BATMAN_ADV_TYPES_H_ */ |