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