diff options
Diffstat (limited to 'include/uapi/linux/batadv_packet.h')
-rw-r--r-- | include/uapi/linux/batadv_packet.h | 644 |
1 files changed, 644 insertions, 0 deletions
diff --git a/include/uapi/linux/batadv_packet.h b/include/uapi/linux/batadv_packet.h new file mode 100644 index 000000000000..5cb360be2a11 --- /dev/null +++ b/include/uapi/linux/batadv_packet.h | |||
@@ -0,0 +1,644 @@ | |||
1 | /* SPDX-License-Identifier: (GPL-2.0 WITH Linux-syscall-note) */ | ||
2 | /* Copyright (C) 2007-2017 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, see <http://www.gnu.org/licenses/>. | ||
17 | */ | ||
18 | |||
19 | #ifndef _UAPI_LINUX_BATADV_PACKET_H_ | ||
20 | #define _UAPI_LINUX_BATADV_PACKET_H_ | ||
21 | |||
22 | #include <asm/byteorder.h> | ||
23 | #include <linux/if_ether.h> | ||
24 | #include <linux/types.h> | ||
25 | |||
26 | /** | ||
27 | * batadv_tp_is_error() - Check throughput meter return code for error | ||
28 | * @n: throughput meter return code | ||
29 | * | ||
30 | * Return: 0 when not error was detected, != 0 otherwise | ||
31 | */ | ||
32 | #define batadv_tp_is_error(n) ((__u8)(n) > 127 ? 1 : 0) | ||
33 | |||
34 | /** | ||
35 | * enum batadv_packettype - types for batman-adv encapsulated packets | ||
36 | * @BATADV_IV_OGM: originator messages for B.A.T.M.A.N. IV | ||
37 | * @BATADV_BCAST: broadcast packets carrying broadcast payload | ||
38 | * @BATADV_CODED: network coded packets | ||
39 | * @BATADV_ELP: echo location packets for B.A.T.M.A.N. V | ||
40 | * @BATADV_OGM2: originator messages for B.A.T.M.A.N. V | ||
41 | * | ||
42 | * @BATADV_UNICAST: unicast packets carrying unicast payload traffic | ||
43 | * @BATADV_UNICAST_FRAG: unicast packets carrying a fragment of the original | ||
44 | * payload packet | ||
45 | * @BATADV_UNICAST_4ADDR: unicast packet including the originator address of | ||
46 | * the sender | ||
47 | * @BATADV_ICMP: unicast packet like IP ICMP used for ping or traceroute | ||
48 | * @BATADV_UNICAST_TVLV: unicast packet carrying TVLV containers | ||
49 | */ | ||
50 | enum batadv_packettype { | ||
51 | /* 0x00 - 0x3f: local packets or special rules for handling */ | ||
52 | BATADV_IV_OGM = 0x00, | ||
53 | BATADV_BCAST = 0x01, | ||
54 | BATADV_CODED = 0x02, | ||
55 | BATADV_ELP = 0x03, | ||
56 | BATADV_OGM2 = 0x04, | ||
57 | /* 0x40 - 0x7f: unicast */ | ||
58 | #define BATADV_UNICAST_MIN 0x40 | ||
59 | BATADV_UNICAST = 0x40, | ||
60 | BATADV_UNICAST_FRAG = 0x41, | ||
61 | BATADV_UNICAST_4ADDR = 0x42, | ||
62 | BATADV_ICMP = 0x43, | ||
63 | BATADV_UNICAST_TVLV = 0x44, | ||
64 | #define BATADV_UNICAST_MAX 0x7f | ||
65 | /* 0x80 - 0xff: reserved */ | ||
66 | }; | ||
67 | |||
68 | /** | ||
69 | * enum batadv_subtype - packet subtype for unicast4addr | ||
70 | * @BATADV_P_DATA: user payload | ||
71 | * @BATADV_P_DAT_DHT_GET: DHT request message | ||
72 | * @BATADV_P_DAT_DHT_PUT: DHT store message | ||
73 | * @BATADV_P_DAT_CACHE_REPLY: ARP reply generated by DAT | ||
74 | */ | ||
75 | enum batadv_subtype { | ||
76 | BATADV_P_DATA = 0x01, | ||
77 | BATADV_P_DAT_DHT_GET = 0x02, | ||
78 | BATADV_P_DAT_DHT_PUT = 0x03, | ||
79 | BATADV_P_DAT_CACHE_REPLY = 0x04, | ||
80 | }; | ||
81 | |||
82 | /* this file is included by batctl which needs these defines */ | ||
83 | #define BATADV_COMPAT_VERSION 15 | ||
84 | |||
85 | /** | ||
86 | * enum batadv_iv_flags - flags used in B.A.T.M.A.N. IV OGM packets | ||
87 | * @BATADV_NOT_BEST_NEXT_HOP: flag is set when ogm packet is forwarded and was | ||
88 | * previously received from someone else than the best neighbor. | ||
89 | * @BATADV_PRIMARIES_FIRST_HOP: flag unused. | ||
90 | * @BATADV_DIRECTLINK: flag is for the first hop or if rebroadcasted from a | ||
91 | * one hop neighbor on the interface where it was originally received. | ||
92 | */ | ||
93 | enum batadv_iv_flags { | ||
94 | BATADV_NOT_BEST_NEXT_HOP = 1UL << 0, | ||
95 | BATADV_PRIMARIES_FIRST_HOP = 1UL << 1, | ||
96 | BATADV_DIRECTLINK = 1UL << 2, | ||
97 | }; | ||
98 | |||
99 | /** | ||
100 | * enum batadv_icmp_packettype - ICMP message types | ||
101 | * @BATADV_ECHO_REPLY: success reply to BATADV_ECHO_REQUEST | ||
102 | * @BATADV_DESTINATION_UNREACHABLE: failure when route to destination not found | ||
103 | * @BATADV_ECHO_REQUEST: request BATADV_ECHO_REPLY from destination | ||
104 | * @BATADV_TTL_EXCEEDED: error after BATADV_ECHO_REQUEST traversed too many hops | ||
105 | * @BATADV_PARAMETER_PROBLEM: return code for malformed messages | ||
106 | * @BATADV_TP: throughput meter packet | ||
107 | */ | ||
108 | enum batadv_icmp_packettype { | ||
109 | BATADV_ECHO_REPLY = 0, | ||
110 | BATADV_DESTINATION_UNREACHABLE = 3, | ||
111 | BATADV_ECHO_REQUEST = 8, | ||
112 | BATADV_TTL_EXCEEDED = 11, | ||
113 | BATADV_PARAMETER_PROBLEM = 12, | ||
114 | BATADV_TP = 15, | ||
115 | }; | ||
116 | |||
117 | /** | ||
118 | * enum batadv_mcast_flags - flags for multicast capabilities and settings | ||
119 | * @BATADV_MCAST_WANT_ALL_UNSNOOPABLES: we want all packets destined for | ||
120 | * 224.0.0.0/24 or ff02::1 | ||
121 | * @BATADV_MCAST_WANT_ALL_IPV4: we want all IPv4 multicast packets | ||
122 | * @BATADV_MCAST_WANT_ALL_IPV6: we want all IPv6 multicast packets | ||
123 | */ | ||
124 | enum batadv_mcast_flags { | ||
125 | BATADV_MCAST_WANT_ALL_UNSNOOPABLES = 1UL << 0, | ||
126 | BATADV_MCAST_WANT_ALL_IPV4 = 1UL << 1, | ||
127 | BATADV_MCAST_WANT_ALL_IPV6 = 1UL << 2, | ||
128 | }; | ||
129 | |||
130 | /* tt data subtypes */ | ||
131 | #define BATADV_TT_DATA_TYPE_MASK 0x0F | ||
132 | |||
133 | /** | ||
134 | * enum batadv_tt_data_flags - flags for tt data tvlv | ||
135 | * @BATADV_TT_OGM_DIFF: TT diff propagated through OGM | ||
136 | * @BATADV_TT_REQUEST: TT request message | ||
137 | * @BATADV_TT_RESPONSE: TT response message | ||
138 | * @BATADV_TT_FULL_TABLE: contains full table to replace existing table | ||
139 | */ | ||
140 | enum batadv_tt_data_flags { | ||
141 | BATADV_TT_OGM_DIFF = 1UL << 0, | ||
142 | BATADV_TT_REQUEST = 1UL << 1, | ||
143 | BATADV_TT_RESPONSE = 1UL << 2, | ||
144 | BATADV_TT_FULL_TABLE = 1UL << 4, | ||
145 | }; | ||
146 | |||
147 | /** | ||
148 | * enum batadv_vlan_flags - flags for the four MSB of any vlan ID field | ||
149 | * @BATADV_VLAN_HAS_TAG: whether the field contains a valid vlan tag or not | ||
150 | */ | ||
151 | enum batadv_vlan_flags { | ||
152 | BATADV_VLAN_HAS_TAG = 1UL << 15, | ||
153 | }; | ||
154 | |||
155 | /** | ||
156 | * enum batadv_bla_claimframe - claim frame types for the bridge loop avoidance | ||
157 | * @BATADV_CLAIM_TYPE_CLAIM: claim of a client mac address | ||
158 | * @BATADV_CLAIM_TYPE_UNCLAIM: unclaim of a client mac address | ||
159 | * @BATADV_CLAIM_TYPE_ANNOUNCE: announcement of backbone with current crc | ||
160 | * @BATADV_CLAIM_TYPE_REQUEST: request of full claim table | ||
161 | * @BATADV_CLAIM_TYPE_LOOPDETECT: mesh-traversing loop detect packet | ||
162 | */ | ||
163 | enum batadv_bla_claimframe { | ||
164 | BATADV_CLAIM_TYPE_CLAIM = 0x00, | ||
165 | BATADV_CLAIM_TYPE_UNCLAIM = 0x01, | ||
166 | BATADV_CLAIM_TYPE_ANNOUNCE = 0x02, | ||
167 | BATADV_CLAIM_TYPE_REQUEST = 0x03, | ||
168 | BATADV_CLAIM_TYPE_LOOPDETECT = 0x04, | ||
169 | }; | ||
170 | |||
171 | /** | ||
172 | * enum batadv_tvlv_type - tvlv type definitions | ||
173 | * @BATADV_TVLV_GW: gateway tvlv | ||
174 | * @BATADV_TVLV_DAT: distributed arp table tvlv | ||
175 | * @BATADV_TVLV_NC: network coding tvlv | ||
176 | * @BATADV_TVLV_TT: translation table tvlv | ||
177 | * @BATADV_TVLV_ROAM: roaming advertisement tvlv | ||
178 | * @BATADV_TVLV_MCAST: multicast capability tvlv | ||
179 | */ | ||
180 | enum batadv_tvlv_type { | ||
181 | BATADV_TVLV_GW = 0x01, | ||
182 | BATADV_TVLV_DAT = 0x02, | ||
183 | BATADV_TVLV_NC = 0x03, | ||
184 | BATADV_TVLV_TT = 0x04, | ||
185 | BATADV_TVLV_ROAM = 0x05, | ||
186 | BATADV_TVLV_MCAST = 0x06, | ||
187 | }; | ||
188 | |||
189 | #pragma pack(2) | ||
190 | /* the destination hardware field in the ARP frame is used to | ||
191 | * transport the claim type and the group id | ||
192 | */ | ||
193 | struct batadv_bla_claim_dst { | ||
194 | __u8 magic[3]; /* FF:43:05 */ | ||
195 | __u8 type; /* bla_claimframe */ | ||
196 | __be16 group; /* group id */ | ||
197 | }; | ||
198 | |||
199 | #pragma pack() | ||
200 | |||
201 | /** | ||
202 | * struct batadv_ogm_packet - ogm (routing protocol) packet | ||
203 | * @packet_type: batman-adv packet type, part of the general header | ||
204 | * @version: batman-adv protocol version, part of the genereal header | ||
205 | * @ttl: time to live for this packet, part of the genereal header | ||
206 | * @flags: contains routing relevant flags - see enum batadv_iv_flags | ||
207 | * @seqno: sequence identification | ||
208 | * @orig: address of the source node | ||
209 | * @prev_sender: address of the previous sender | ||
210 | * @reserved: reserved byte for alignment | ||
211 | * @tq: transmission quality | ||
212 | * @tvlv_len: length of tvlv data following the ogm header | ||
213 | */ | ||
214 | struct batadv_ogm_packet { | ||
215 | __u8 packet_type; | ||
216 | __u8 version; | ||
217 | __u8 ttl; | ||
218 | __u8 flags; | ||
219 | __be32 seqno; | ||
220 | __u8 orig[ETH_ALEN]; | ||
221 | __u8 prev_sender[ETH_ALEN]; | ||
222 | __u8 reserved; | ||
223 | __u8 tq; | ||
224 | __be16 tvlv_len; | ||
225 | /* __packed is not needed as the struct size is divisible by 4, | ||
226 | * and the largest data type in this struct has a size of 4. | ||
227 | */ | ||
228 | }; | ||
229 | |||
230 | #define BATADV_OGM_HLEN sizeof(struct batadv_ogm_packet) | ||
231 | |||
232 | /** | ||
233 | * struct batadv_ogm2_packet - ogm2 (routing protocol) packet | ||
234 | * @packet_type: batman-adv packet type, part of the general header | ||
235 | * @version: batman-adv protocol version, part of the general header | ||
236 | * @ttl: time to live for this packet, part of the general header | ||
237 | * @flags: reseved for routing relevant flags - currently always 0 | ||
238 | * @seqno: sequence number | ||
239 | * @orig: originator mac address | ||
240 | * @tvlv_len: length of the appended tvlv buffer (in bytes) | ||
241 | * @throughput: the currently flooded path throughput | ||
242 | */ | ||
243 | struct batadv_ogm2_packet { | ||
244 | __u8 packet_type; | ||
245 | __u8 version; | ||
246 | __u8 ttl; | ||
247 | __u8 flags; | ||
248 | __be32 seqno; | ||
249 | __u8 orig[ETH_ALEN]; | ||
250 | __be16 tvlv_len; | ||
251 | __be32 throughput; | ||
252 | /* __packed is not needed as the struct size is divisible by 4, | ||
253 | * and the largest data type in this struct has a size of 4. | ||
254 | */ | ||
255 | }; | ||
256 | |||
257 | #define BATADV_OGM2_HLEN sizeof(struct batadv_ogm2_packet) | ||
258 | |||
259 | /** | ||
260 | * struct batadv_elp_packet - elp (neighbor discovery) packet | ||
261 | * @packet_type: batman-adv packet type, part of the general header | ||
262 | * @version: batman-adv protocol version, part of the genereal header | ||
263 | * @orig: originator mac address | ||
264 | * @seqno: sequence number | ||
265 | * @elp_interval: currently used ELP sending interval in ms | ||
266 | */ | ||
267 | struct batadv_elp_packet { | ||
268 | __u8 packet_type; | ||
269 | __u8 version; | ||
270 | __u8 orig[ETH_ALEN]; | ||
271 | __be32 seqno; | ||
272 | __be32 elp_interval; | ||
273 | }; | ||
274 | |||
275 | #define BATADV_ELP_HLEN sizeof(struct batadv_elp_packet) | ||
276 | |||
277 | /** | ||
278 | * struct batadv_icmp_header - common members among all the ICMP packets | ||
279 | * @packet_type: batman-adv packet type, part of the general header | ||
280 | * @version: batman-adv protocol version, part of the genereal header | ||
281 | * @ttl: time to live for this packet, part of the genereal header | ||
282 | * @msg_type: ICMP packet type | ||
283 | * @dst: address of the destination node | ||
284 | * @orig: address of the source node | ||
285 | * @uid: local ICMP socket identifier | ||
286 | * @align: not used - useful for alignment purposes only | ||
287 | * | ||
288 | * This structure is used for ICMP packets parsing only and it is never sent | ||
289 | * over the wire. The alignment field at the end is there to ensure that | ||
290 | * members are padded the same way as they are in real packets. | ||
291 | */ | ||
292 | struct batadv_icmp_header { | ||
293 | __u8 packet_type; | ||
294 | __u8 version; | ||
295 | __u8 ttl; | ||
296 | __u8 msg_type; /* see ICMP message types above */ | ||
297 | __u8 dst[ETH_ALEN]; | ||
298 | __u8 orig[ETH_ALEN]; | ||
299 | __u8 uid; | ||
300 | __u8 align[3]; | ||
301 | }; | ||
302 | |||
303 | /** | ||
304 | * struct batadv_icmp_packet - ICMP packet | ||
305 | * @packet_type: batman-adv packet type, part of the general header | ||
306 | * @version: batman-adv protocol version, part of the genereal header | ||
307 | * @ttl: time to live for this packet, part of the genereal header | ||
308 | * @msg_type: ICMP packet type | ||
309 | * @dst: address of the destination node | ||
310 | * @orig: address of the source node | ||
311 | * @uid: local ICMP socket identifier | ||
312 | * @reserved: not used - useful for alignment | ||
313 | * @seqno: ICMP sequence number | ||
314 | */ | ||
315 | struct batadv_icmp_packet { | ||
316 | __u8 packet_type; | ||
317 | __u8 version; | ||
318 | __u8 ttl; | ||
319 | __u8 msg_type; /* see ICMP message types above */ | ||
320 | __u8 dst[ETH_ALEN]; | ||
321 | __u8 orig[ETH_ALEN]; | ||
322 | __u8 uid; | ||
323 | __u8 reserved; | ||
324 | __be16 seqno; | ||
325 | }; | ||
326 | |||
327 | /** | ||
328 | * struct batadv_icmp_tp_packet - ICMP TP Meter packet | ||
329 | * @packet_type: batman-adv packet type, part of the general header | ||
330 | * @version: batman-adv protocol version, part of the genereal header | ||
331 | * @ttl: time to live for this packet, part of the genereal header | ||
332 | * @msg_type: ICMP packet type | ||
333 | * @dst: address of the destination node | ||
334 | * @orig: address of the source node | ||
335 | * @uid: local ICMP socket identifier | ||
336 | * @subtype: TP packet subtype (see batadv_icmp_tp_subtype) | ||
337 | * @session: TP session identifier | ||
338 | * @seqno: the TP sequence number | ||
339 | * @timestamp: time when the packet has been sent. This value is filled in a | ||
340 | * TP_MSG and echoed back in the next TP_ACK so that the sender can compute the | ||
341 | * RTT. Since it is read only by the host which wrote it, there is no need to | ||
342 | * store it using network order | ||
343 | */ | ||
344 | struct batadv_icmp_tp_packet { | ||
345 | __u8 packet_type; | ||
346 | __u8 version; | ||
347 | __u8 ttl; | ||
348 | __u8 msg_type; /* see ICMP message types above */ | ||
349 | __u8 dst[ETH_ALEN]; | ||
350 | __u8 orig[ETH_ALEN]; | ||
351 | __u8 uid; | ||
352 | __u8 subtype; | ||
353 | __u8 session[2]; | ||
354 | __be32 seqno; | ||
355 | __be32 timestamp; | ||
356 | }; | ||
357 | |||
358 | /** | ||
359 | * enum batadv_icmp_tp_subtype - ICMP TP Meter packet subtypes | ||
360 | * @BATADV_TP_MSG: Msg from sender to receiver | ||
361 | * @BATADV_TP_ACK: acknowledgment from receiver to sender | ||
362 | */ | ||
363 | enum batadv_icmp_tp_subtype { | ||
364 | BATADV_TP_MSG = 0, | ||
365 | BATADV_TP_ACK, | ||
366 | }; | ||
367 | |||
368 | #define BATADV_RR_LEN 16 | ||
369 | |||
370 | /** | ||
371 | * struct batadv_icmp_packet_rr - ICMP RouteRecord packet | ||
372 | * @packet_type: batman-adv packet type, part of the general header | ||
373 | * @version: batman-adv protocol version, part of the genereal header | ||
374 | * @ttl: time to live for this packet, part of the genereal header | ||
375 | * @msg_type: ICMP packet type | ||
376 | * @dst: address of the destination node | ||
377 | * @orig: address of the source node | ||
378 | * @uid: local ICMP socket identifier | ||
379 | * @rr_cur: number of entries the rr array | ||
380 | * @seqno: ICMP sequence number | ||
381 | * @rr: route record array | ||
382 | */ | ||
383 | struct batadv_icmp_packet_rr { | ||
384 | __u8 packet_type; | ||
385 | __u8 version; | ||
386 | __u8 ttl; | ||
387 | __u8 msg_type; /* see ICMP message types above */ | ||
388 | __u8 dst[ETH_ALEN]; | ||
389 | __u8 orig[ETH_ALEN]; | ||
390 | __u8 uid; | ||
391 | __u8 rr_cur; | ||
392 | __be16 seqno; | ||
393 | __u8 rr[BATADV_RR_LEN][ETH_ALEN]; | ||
394 | }; | ||
395 | |||
396 | #define BATADV_ICMP_MAX_PACKET_SIZE sizeof(struct batadv_icmp_packet_rr) | ||
397 | |||
398 | /* All packet headers in front of an ethernet header have to be completely | ||
399 | * divisible by 2 but not by 4 to make the payload after the ethernet | ||
400 | * header again 4 bytes boundary aligned. | ||
401 | * | ||
402 | * A packing of 2 is necessary to avoid extra padding at the end of the struct | ||
403 | * caused by a structure member which is larger than two bytes. Otherwise | ||
404 | * the structure would not fulfill the previously mentioned rule to avoid the | ||
405 | * misalignment of the payload after the ethernet header. It may also lead to | ||
406 | * leakage of information when the padding it not initialized before sending. | ||
407 | */ | ||
408 | #pragma pack(2) | ||
409 | |||
410 | /** | ||
411 | * struct batadv_unicast_packet - unicast packet for network payload | ||
412 | * @packet_type: batman-adv packet type, part of the general header | ||
413 | * @version: batman-adv protocol version, part of the genereal header | ||
414 | * @ttl: time to live for this packet, part of the genereal header | ||
415 | * @ttvn: translation table version number | ||
416 | * @dest: originator destination of the unicast packet | ||
417 | */ | ||
418 | struct batadv_unicast_packet { | ||
419 | __u8 packet_type; | ||
420 | __u8 version; | ||
421 | __u8 ttl; | ||
422 | __u8 ttvn; /* destination translation table version number */ | ||
423 | __u8 dest[ETH_ALEN]; | ||
424 | /* "4 bytes boundary + 2 bytes" long to make the payload after the | ||
425 | * following ethernet header again 4 bytes boundary aligned | ||
426 | */ | ||
427 | }; | ||
428 | |||
429 | /** | ||
430 | * struct batadv_unicast_4addr_packet - extended unicast packet | ||
431 | * @u: common unicast packet header | ||
432 | * @src: address of the source | ||
433 | * @subtype: packet subtype | ||
434 | * @reserved: reserved byte for alignment | ||
435 | */ | ||
436 | struct batadv_unicast_4addr_packet { | ||
437 | struct batadv_unicast_packet u; | ||
438 | __u8 src[ETH_ALEN]; | ||
439 | __u8 subtype; | ||
440 | __u8 reserved; | ||
441 | /* "4 bytes boundary + 2 bytes" long to make the payload after the | ||
442 | * following ethernet header again 4 bytes boundary aligned | ||
443 | */ | ||
444 | }; | ||
445 | |||
446 | /** | ||
447 | * struct batadv_frag_packet - fragmented packet | ||
448 | * @packet_type: batman-adv packet type, part of the general header | ||
449 | * @version: batman-adv protocol version, part of the genereal header | ||
450 | * @ttl: time to live for this packet, part of the genereal header | ||
451 | * @dest: final destination used when routing fragments | ||
452 | * @orig: originator of the fragment used when merging the packet | ||
453 | * @no: fragment number within this sequence | ||
454 | * @priority: priority of frame, from ToS IP precedence or 802.1p | ||
455 | * @reserved: reserved byte for alignment | ||
456 | * @seqno: sequence identification | ||
457 | * @total_size: size of the merged packet | ||
458 | */ | ||
459 | struct batadv_frag_packet { | ||
460 | __u8 packet_type; | ||
461 | __u8 version; /* batman version field */ | ||
462 | __u8 ttl; | ||
463 | #if defined(__BIG_ENDIAN_BITFIELD) | ||
464 | __u8 no:4; | ||
465 | __u8 priority:3; | ||
466 | __u8 reserved:1; | ||
467 | #elif defined(__LITTLE_ENDIAN_BITFIELD) | ||
468 | __u8 reserved:1; | ||
469 | __u8 priority:3; | ||
470 | __u8 no:4; | ||
471 | #else | ||
472 | #error "unknown bitfield endianness" | ||
473 | #endif | ||
474 | __u8 dest[ETH_ALEN]; | ||
475 | __u8 orig[ETH_ALEN]; | ||
476 | __be16 seqno; | ||
477 | __be16 total_size; | ||
478 | }; | ||
479 | |||
480 | /** | ||
481 | * struct batadv_bcast_packet - broadcast packet for network payload | ||
482 | * @packet_type: batman-adv packet type, part of the general header | ||
483 | * @version: batman-adv protocol version, part of the genereal header | ||
484 | * @ttl: time to live for this packet, part of the genereal header | ||
485 | * @reserved: reserved byte for alignment | ||
486 | * @seqno: sequence identification | ||
487 | * @orig: originator of the broadcast packet | ||
488 | */ | ||
489 | struct batadv_bcast_packet { | ||
490 | __u8 packet_type; | ||
491 | __u8 version; /* batman version field */ | ||
492 | __u8 ttl; | ||
493 | __u8 reserved; | ||
494 | __be32 seqno; | ||
495 | __u8 orig[ETH_ALEN]; | ||
496 | /* "4 bytes boundary + 2 bytes" long to make the payload after the | ||
497 | * following ethernet header again 4 bytes boundary aligned | ||
498 | */ | ||
499 | }; | ||
500 | |||
501 | /** | ||
502 | * struct batadv_coded_packet - network coded packet | ||
503 | * @packet_type: batman-adv packet type, part of the general header | ||
504 | * @version: batman-adv protocol version, part of the genereal header | ||
505 | * @ttl: time to live for this packet, part of the genereal header | ||
506 | * @first_source: original source of first included packet | ||
507 | * @first_orig_dest: original destinal of first included packet | ||
508 | * @first_crc: checksum of first included packet | ||
509 | * @first_ttvn: tt-version number of first included packet | ||
510 | * @second_ttl: ttl of second packet | ||
511 | * @second_dest: second receiver of this coded packet | ||
512 | * @second_source: original source of second included packet | ||
513 | * @second_orig_dest: original destination of second included packet | ||
514 | * @second_crc: checksum of second included packet | ||
515 | * @second_ttvn: tt version number of second included packet | ||
516 | * @coded_len: length of network coded part of the payload | ||
517 | */ | ||
518 | struct batadv_coded_packet { | ||
519 | __u8 packet_type; | ||
520 | __u8 version; /* batman version field */ | ||
521 | __u8 ttl; | ||
522 | __u8 first_ttvn; | ||
523 | /* __u8 first_dest[ETH_ALEN]; - saved in mac header destination */ | ||
524 | __u8 first_source[ETH_ALEN]; | ||
525 | __u8 first_orig_dest[ETH_ALEN]; | ||
526 | __be32 first_crc; | ||
527 | __u8 second_ttl; | ||
528 | __u8 second_ttvn; | ||
529 | __u8 second_dest[ETH_ALEN]; | ||
530 | __u8 second_source[ETH_ALEN]; | ||
531 | __u8 second_orig_dest[ETH_ALEN]; | ||
532 | __be32 second_crc; | ||
533 | __be16 coded_len; | ||
534 | }; | ||
535 | |||
536 | #pragma pack() | ||
537 | |||
538 | /** | ||
539 | * struct batadv_unicast_tvlv_packet - generic unicast packet with tvlv payload | ||
540 | * @packet_type: batman-adv packet type, part of the general header | ||
541 | * @version: batman-adv protocol version, part of the genereal header | ||
542 | * @ttl: time to live for this packet, part of the genereal header | ||
543 | * @reserved: reserved field (for packet alignment) | ||
544 | * @src: address of the source | ||
545 | * @dst: address of the destination | ||
546 | * @tvlv_len: length of tvlv data following the unicast tvlv header | ||
547 | * @align: 2 bytes to align the header to a 4 byte boundary | ||
548 | */ | ||
549 | struct batadv_unicast_tvlv_packet { | ||
550 | __u8 packet_type; | ||
551 | __u8 version; /* batman version field */ | ||
552 | __u8 ttl; | ||
553 | __u8 reserved; | ||
554 | __u8 dst[ETH_ALEN]; | ||
555 | __u8 src[ETH_ALEN]; | ||
556 | __be16 tvlv_len; | ||
557 | __u16 align; | ||
558 | }; | ||
559 | |||
560 | /** | ||
561 | * struct batadv_tvlv_hdr - base tvlv header struct | ||
562 | * @type: tvlv container type (see batadv_tvlv_type) | ||
563 | * @version: tvlv container version | ||
564 | * @len: tvlv container length | ||
565 | */ | ||
566 | struct batadv_tvlv_hdr { | ||
567 | __u8 type; | ||
568 | __u8 version; | ||
569 | __be16 len; | ||
570 | }; | ||
571 | |||
572 | /** | ||
573 | * struct batadv_tvlv_gateway_data - gateway data propagated through gw tvlv | ||
574 | * container | ||
575 | * @bandwidth_down: advertised uplink download bandwidth | ||
576 | * @bandwidth_up: advertised uplink upload bandwidth | ||
577 | */ | ||
578 | struct batadv_tvlv_gateway_data { | ||
579 | __be32 bandwidth_down; | ||
580 | __be32 bandwidth_up; | ||
581 | }; | ||
582 | |||
583 | /** | ||
584 | * struct batadv_tvlv_tt_data - tt data propagated through the tt tvlv container | ||
585 | * @flags: translation table flags (see batadv_tt_data_flags) | ||
586 | * @ttvn: translation table version number | ||
587 | * @num_vlan: number of announced VLANs. In the TVLV this struct is followed by | ||
588 | * one batadv_tvlv_tt_vlan_data object per announced vlan | ||
589 | */ | ||
590 | struct batadv_tvlv_tt_data { | ||
591 | __u8 flags; | ||
592 | __u8 ttvn; | ||
593 | __be16 num_vlan; | ||
594 | }; | ||
595 | |||
596 | /** | ||
597 | * struct batadv_tvlv_tt_vlan_data - vlan specific tt data propagated through | ||
598 | * the tt tvlv container | ||
599 | * @crc: crc32 checksum of the entries belonging to this vlan | ||
600 | * @vid: vlan identifier | ||
601 | * @reserved: unused, useful for alignment purposes | ||
602 | */ | ||
603 | struct batadv_tvlv_tt_vlan_data { | ||
604 | __be32 crc; | ||
605 | __be16 vid; | ||
606 | __u16 reserved; | ||
607 | }; | ||
608 | |||
609 | /** | ||
610 | * struct batadv_tvlv_tt_change - translation table diff data | ||
611 | * @flags: status indicators concerning the non-mesh client (see | ||
612 | * batadv_tt_client_flags) | ||
613 | * @reserved: reserved field - useful for alignment purposes only | ||
614 | * @addr: mac address of non-mesh client that triggered this tt change | ||
615 | * @vid: VLAN identifier | ||
616 | */ | ||
617 | struct batadv_tvlv_tt_change { | ||
618 | __u8 flags; | ||
619 | __u8 reserved[3]; | ||
620 | __u8 addr[ETH_ALEN]; | ||
621 | __be16 vid; | ||
622 | }; | ||
623 | |||
624 | /** | ||
625 | * struct batadv_tvlv_roam_adv - roaming advertisement | ||
626 | * @client: mac address of roaming client | ||
627 | * @vid: VLAN identifier | ||
628 | */ | ||
629 | struct batadv_tvlv_roam_adv { | ||
630 | __u8 client[ETH_ALEN]; | ||
631 | __be16 vid; | ||
632 | }; | ||
633 | |||
634 | /** | ||
635 | * struct batadv_tvlv_mcast_data - payload of a multicast tvlv | ||
636 | * @flags: multicast flags announced by the orig node | ||
637 | * @reserved: reserved field | ||
638 | */ | ||
639 | struct batadv_tvlv_mcast_data { | ||
640 | __u8 flags; | ||
641 | __u8 reserved[3]; | ||
642 | }; | ||
643 | |||
644 | #endif /* _UAPI_LINUX_BATADV_PACKET_H_ */ | ||