brintos

brintos / linux-shallow public Read only

0
0
Text · 21.1 KiB · 6e25753 Raw
667 lines · c
1/* SPDX-License-Identifier: (GPL-2.0 WITH Linux-syscall-note) */2/* Copyright (C) B.A.T.M.A.N. contributors:3 *4 * Marek Lindner, Simon Wunderlich5 */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 error16 * @n: throughput meter return code17 *18 * Return: 0 when not error was detected, != 0 otherwise19 */20#define batadv_tp_is_error(n) ((__u8)(n) > 127 ? 1 : 0)21 22/**23 * enum batadv_packettype - types for batman-adv encapsulated packets24 * @BATADV_IV_OGM: originator messages for B.A.T.M.A.N. IV25 * @BATADV_BCAST: broadcast packets carrying broadcast payload26 * @BATADV_CODED: network coded packets27 * @BATADV_ELP: echo location packets for B.A.T.M.A.N. V28 * @BATADV_OGM2: originator messages for B.A.T.M.A.N. V29 * @BATADV_MCAST: multicast packet with multiple destination addresses30 *31 * @BATADV_UNICAST: unicast packets carrying unicast payload traffic32 * @BATADV_UNICAST_FRAG: unicast packets carrying a fragment of the original33 *     payload packet34 * @BATADV_UNICAST_4ADDR: unicast packet including the originator address of35 *     the sender36 * @BATADV_ICMP: unicast packet like IP ICMP used for ping or traceroute37 * @BATADV_UNICAST_TVLV: unicast packet carrying TVLV containers38 */39enum batadv_packettype {40	/* 0x00 - 0x3f: local packets or special rules for handling */41	BATADV_IV_OGM           = 0x00,42	BATADV_BCAST            = 0x01,43	BATADV_CODED            = 0x02,44	BATADV_ELP		= 0x03,45	BATADV_OGM2		= 0x04,46	BATADV_MCAST            = 0x05,47	/* 0x40 - 0x7f: unicast */48#define BATADV_UNICAST_MIN     0x4049	BATADV_UNICAST          = 0x40,50	BATADV_UNICAST_FRAG     = 0x41,51	BATADV_UNICAST_4ADDR    = 0x42,52	BATADV_ICMP             = 0x43,53	BATADV_UNICAST_TVLV     = 0x44,54#define BATADV_UNICAST_MAX     0x7f55	/* 0x80 - 0xff: reserved */56};57 58/**59 * enum batadv_subtype - packet subtype for unicast4addr60 * @BATADV_P_DATA: user payload61 * @BATADV_P_DAT_DHT_GET: DHT request message62 * @BATADV_P_DAT_DHT_PUT: DHT store message63 * @BATADV_P_DAT_CACHE_REPLY: ARP reply generated by DAT64 */65enum batadv_subtype {66	BATADV_P_DATA			= 0x01,67	BATADV_P_DAT_DHT_GET		= 0x02,68	BATADV_P_DAT_DHT_PUT		= 0x03,69	BATADV_P_DAT_CACHE_REPLY	= 0x04,70};71 72/* this file is included by batctl which needs these defines */73#define BATADV_COMPAT_VERSION 1574 75/**76 * enum batadv_iv_flags - flags used in B.A.T.M.A.N. IV OGM packets77 * @BATADV_NOT_BEST_NEXT_HOP: flag is set when the ogm packet is forwarded and78 *  was previously received from someone other than the best neighbor.79 * @BATADV_PRIMARIES_FIRST_HOP: flag unused.80 * @BATADV_DIRECTLINK: flag is for the first hop or if rebroadcasted from a81 *     one hop neighbor on the interface where it was originally received.82 */83enum batadv_iv_flags {84	BATADV_NOT_BEST_NEXT_HOP   = 1UL << 0,85	BATADV_PRIMARIES_FIRST_HOP = 1UL << 1,86	BATADV_DIRECTLINK          = 1UL << 2,87};88 89/**90 * enum batadv_icmp_packettype - ICMP message types91 * @BATADV_ECHO_REPLY: success reply to BATADV_ECHO_REQUEST92 * @BATADV_DESTINATION_UNREACHABLE: failure when route to destination not found93 * @BATADV_ECHO_REQUEST: request BATADV_ECHO_REPLY from destination94 * @BATADV_TTL_EXCEEDED: error after BATADV_ECHO_REQUEST traversed too many hops95 * @BATADV_PARAMETER_PROBLEM: return code for malformed messages96 * @BATADV_TP: throughput meter packet97 */98enum batadv_icmp_packettype {99	BATADV_ECHO_REPLY	       = 0,100	BATADV_DESTINATION_UNREACHABLE = 3,101	BATADV_ECHO_REQUEST	       = 8,102	BATADV_TTL_EXCEEDED	       = 11,103	BATADV_PARAMETER_PROBLEM       = 12,104	BATADV_TP		       = 15,105};106 107/**108 * enum batadv_mcast_flags - flags for multicast capabilities and settings109 * @BATADV_MCAST_WANT_ALL_UNSNOOPABLES: we want all packets destined for110 *  224.0.0.0/24 or ff02::1111 * @BATADV_MCAST_WANT_ALL_IPV4: we want all IPv4 multicast packets112 *  (both link-local and routable ones)113 * @BATADV_MCAST_WANT_ALL_IPV6: we want all IPv6 multicast packets114 *  (both link-local and routable ones)115 * @BATADV_MCAST_WANT_NO_RTR4: we have no IPv4 multicast router and therefore116 * only need routable IPv4 multicast packets we signed up for explicitly117 * @BATADV_MCAST_WANT_NO_RTR6: we have no IPv6 multicast router and therefore118 * only need routable IPv6 multicast packets we signed up for explicitly119 * @BATADV_MCAST_HAVE_MC_PTYPE_CAPA: we can parse, receive and forward120 * batman-adv multicast packets with a multicast tracker TVLV. And all our121 * hard interfaces have an MTU of at least 1280 bytes.122 */123enum batadv_mcast_flags {124	BATADV_MCAST_WANT_ALL_UNSNOOPABLES	= 1UL << 0,125	BATADV_MCAST_WANT_ALL_IPV4		= 1UL << 1,126	BATADV_MCAST_WANT_ALL_IPV6		= 1UL << 2,127	BATADV_MCAST_WANT_NO_RTR4		= 1UL << 3,128	BATADV_MCAST_WANT_NO_RTR6		= 1UL << 4,129	BATADV_MCAST_HAVE_MC_PTYPE_CAPA		= 1UL << 5,130};131 132/* tt data subtypes */133#define BATADV_TT_DATA_TYPE_MASK 0x0F134 135/**136 * enum batadv_tt_data_flags - flags for tt data tvlv137 * @BATADV_TT_OGM_DIFF: TT diff propagated through OGM138 * @BATADV_TT_REQUEST: TT request message139 * @BATADV_TT_RESPONSE: TT response message140 * @BATADV_TT_FULL_TABLE: contains full table to replace existing table141 */142enum batadv_tt_data_flags {143	BATADV_TT_OGM_DIFF   = 1UL << 0,144	BATADV_TT_REQUEST    = 1UL << 1,145	BATADV_TT_RESPONSE   = 1UL << 2,146	BATADV_TT_FULL_TABLE = 1UL << 4,147};148 149/**150 * enum batadv_vlan_flags - flags for the four MSB of any vlan ID field151 * @BATADV_VLAN_HAS_TAG: whether the field contains a valid vlan tag or not152 */153enum batadv_vlan_flags {154	BATADV_VLAN_HAS_TAG	= 1UL << 15,155};156 157/**158 * enum batadv_bla_claimframe - claim frame types for the bridge loop avoidance159 * @BATADV_CLAIM_TYPE_CLAIM: claim of a client mac address160 * @BATADV_CLAIM_TYPE_UNCLAIM: unclaim of a client mac address161 * @BATADV_CLAIM_TYPE_ANNOUNCE: announcement of backbone with current crc162 * @BATADV_CLAIM_TYPE_REQUEST: request of full claim table163 * @BATADV_CLAIM_TYPE_LOOPDETECT: mesh-traversing loop detect packet164 */165enum batadv_bla_claimframe {166	BATADV_CLAIM_TYPE_CLAIM		= 0x00,167	BATADV_CLAIM_TYPE_UNCLAIM	= 0x01,168	BATADV_CLAIM_TYPE_ANNOUNCE	= 0x02,169	BATADV_CLAIM_TYPE_REQUEST	= 0x03,170	BATADV_CLAIM_TYPE_LOOPDETECT	= 0x04,171};172 173/**174 * enum batadv_tvlv_type - tvlv type definitions175 * @BATADV_TVLV_GW: gateway tvlv176 * @BATADV_TVLV_DAT: distributed arp table tvlv177 * @BATADV_TVLV_NC: network coding tvlv178 * @BATADV_TVLV_TT: translation table tvlv179 * @BATADV_TVLV_ROAM: roaming advertisement tvlv180 * @BATADV_TVLV_MCAST: multicast capability tvlv181 * @BATADV_TVLV_MCAST_TRACKER: multicast tracker tvlv182 */183enum batadv_tvlv_type {184	BATADV_TVLV_GW			= 0x01,185	BATADV_TVLV_DAT			= 0x02,186	BATADV_TVLV_NC			= 0x03,187	BATADV_TVLV_TT			= 0x04,188	BATADV_TVLV_ROAM		= 0x05,189	BATADV_TVLV_MCAST		= 0x06,190	BATADV_TVLV_MCAST_TRACKER	= 0x07,191};192 193#pragma pack(2)194/* the destination hardware field in the ARP frame is used to195 * transport the claim type and the group id196 */197struct batadv_bla_claim_dst {198	__u8   magic[3];	/* FF:43:05 */199	__u8   type;		/* bla_claimframe */200	__be16 group;		/* group id */201};202 203/**204 * struct batadv_ogm_packet - ogm (routing protocol) packet205 * @packet_type: batman-adv packet type, part of the general header206 * @version: batman-adv protocol version, part of the general header207 * @ttl: time to live for this packet, part of the general header208 * @flags: contains routing relevant flags - see enum batadv_iv_flags209 * @seqno: sequence identification210 * @orig: address of the source node211 * @prev_sender: address of the previous sender212 * @reserved: reserved byte for alignment213 * @tq: transmission quality214 * @tvlv_len: length of tvlv data following the ogm header215 */216struct batadv_ogm_packet {217	__u8   packet_type;218	__u8   version;219	__u8   ttl;220	__u8   flags;221	__be32 seqno;222	__u8   orig[ETH_ALEN];223	__u8   prev_sender[ETH_ALEN];224	__u8   reserved;225	__u8   tq;226	__be16 tvlv_len;227};228 229#define BATADV_OGM_HLEN sizeof(struct batadv_ogm_packet)230 231/**232 * struct batadv_ogm2_packet - ogm2 (routing protocol) packet233 * @packet_type: batman-adv packet type, part of the general header234 * @version: batman-adv protocol version, part of the general header235 * @ttl: time to live for this packet, part of the general header236 * @flags: reserved for routing relevant flags - currently always 0237 * @seqno: sequence number238 * @orig: originator mac address239 * @tvlv_len: length of the appended tvlv buffer (in bytes)240 * @throughput: the currently flooded path throughput241 */242struct batadv_ogm2_packet {243	__u8   packet_type;244	__u8   version;245	__u8   ttl;246	__u8   flags;247	__be32 seqno;248	__u8   orig[ETH_ALEN];249	__be16 tvlv_len;250	__be32 throughput;251};252 253#define BATADV_OGM2_HLEN sizeof(struct batadv_ogm2_packet)254 255/**256 * struct batadv_elp_packet - elp (neighbor discovery) packet257 * @packet_type: batman-adv packet type, part of the general header258 * @version: batman-adv protocol version, part of the general header259 * @orig: originator mac address260 * @seqno: sequence number261 * @elp_interval: currently used ELP sending interval in ms262 */263struct batadv_elp_packet {264	__u8   packet_type;265	__u8   version;266	__u8   orig[ETH_ALEN];267	__be32 seqno;268	__be32 elp_interval;269};270 271#define BATADV_ELP_HLEN sizeof(struct batadv_elp_packet)272 273/**274 * struct batadv_icmp_header - common members among all the ICMP packets275 * @packet_type: batman-adv packet type, part of the general header276 * @version: batman-adv protocol version, part of the general header277 * @ttl: time to live for this packet, part of the general header278 * @msg_type: ICMP packet type279 * @dst: address of the destination node280 * @orig: address of the source node281 * @uid: local ICMP socket identifier282 * @align: not used - useful for alignment purposes only283 *284 * This structure is used for ICMP packet parsing only and it is never sent285 * over the wire. The alignment field at the end is there to ensure that286 * members are padded the same way as they are in real packets.287 */288struct batadv_icmp_header {289	__u8 packet_type;290	__u8 version;291	__u8 ttl;292	__u8 msg_type; /* see ICMP message types above */293	__u8 dst[ETH_ALEN];294	__u8 orig[ETH_ALEN];295	__u8 uid;296	__u8 align[3];297};298 299/**300 * struct batadv_icmp_packet - ICMP packet301 * @packet_type: batman-adv packet type, part of the general header302 * @version: batman-adv protocol version, part of the general header303 * @ttl: time to live for this packet, part of the general header304 * @msg_type: ICMP packet type305 * @dst: address of the destination node306 * @orig: address of the source node307 * @uid: local ICMP socket identifier308 * @reserved: not used - useful for alignment309 * @seqno: ICMP sequence number310 */311struct batadv_icmp_packet {312	__u8   packet_type;313	__u8   version;314	__u8   ttl;315	__u8   msg_type; /* see ICMP message types above */316	__u8   dst[ETH_ALEN];317	__u8   orig[ETH_ALEN];318	__u8   uid;319	__u8   reserved;320	__be16 seqno;321};322 323/**324 * struct batadv_icmp_tp_packet - ICMP TP Meter packet325 * @packet_type: batman-adv packet type, part of the general header326 * @version: batman-adv protocol version, part of the general header327 * @ttl: time to live for this packet, part of the general header328 * @msg_type: ICMP packet type329 * @dst: address of the destination node330 * @orig: address of the source node331 * @uid: local ICMP socket identifier332 * @subtype: TP packet subtype (see batadv_icmp_tp_subtype)333 * @session: TP session identifier334 * @seqno: the TP sequence number335 * @timestamp: time when the packet has been sent. This value is filled in a336 *  TP_MSG and echoed back in the next TP_ACK so that the sender can compute the337 *  RTT. Since it is read only by the host which wrote it, there is no need to338 *  store it using network order339 */340struct batadv_icmp_tp_packet {341	__u8   packet_type;342	__u8   version;343	__u8   ttl;344	__u8   msg_type; /* see ICMP message types above */345	__u8   dst[ETH_ALEN];346	__u8   orig[ETH_ALEN];347	__u8   uid;348	__u8   subtype;349	__u8   session[2];350	__be32 seqno;351	__be32 timestamp;352};353 354/**355 * enum batadv_icmp_tp_subtype - ICMP TP Meter packet subtypes356 * @BATADV_TP_MSG: Msg from sender to receiver357 * @BATADV_TP_ACK: acknowledgment from receiver to sender358 */359enum batadv_icmp_tp_subtype {360	BATADV_TP_MSG	= 0,361	BATADV_TP_ACK,362};363 364#define BATADV_RR_LEN 16365 366/**367 * struct batadv_icmp_packet_rr - ICMP RouteRecord packet368 * @packet_type: batman-adv packet type, part of the general header369 * @version: batman-adv protocol version, part of the general header370 * @ttl: time to live for this packet, part of the general header371 * @msg_type: ICMP packet type372 * @dst: address of the destination node373 * @orig: address of the source node374 * @uid: local ICMP socket identifier375 * @rr_cur: number of entries the rr array376 * @seqno: ICMP sequence number377 * @rr: route record array378 */379struct batadv_icmp_packet_rr {380	__u8   packet_type;381	__u8   version;382	__u8   ttl;383	__u8   msg_type; /* see ICMP message types above */384	__u8   dst[ETH_ALEN];385	__u8   orig[ETH_ALEN];386	__u8   uid;387	__u8   rr_cur;388	__be16 seqno;389	__u8   rr[BATADV_RR_LEN][ETH_ALEN];390};391 392#define BATADV_ICMP_MAX_PACKET_SIZE	sizeof(struct batadv_icmp_packet_rr)393 394/* All packet headers in front of an ethernet header have to be completely395 * divisible by 2 but not by 4 to make the payload after the ethernet396 * header again 4 bytes boundary aligned.397 *398 * A packing of 2 is necessary to avoid extra padding at the end of the struct399 * caused by a structure member which is larger than two bytes. Otherwise400 * the structure would not fulfill the previously mentioned rule to avoid the401 * misalignment of the payload after the ethernet header. It may also lead to402 * leakage of information when the padding it not initialized before sending.403 */404 405/**406 * struct batadv_unicast_packet - unicast packet for network payload407 * @packet_type: batman-adv packet type, part of the general header408 * @version: batman-adv protocol version, part of the general header409 * @ttl: time to live for this packet, part of the general header410 * @ttvn: translation table version number411 * @dest: originator destination of the unicast packet412 */413struct batadv_unicast_packet {414	__u8 packet_type;415	__u8 version;416	__u8 ttl;417	__u8 ttvn; /* destination translation table version number */418	__u8 dest[ETH_ALEN];419	/* "4 bytes boundary + 2 bytes" long to make the payload after the420	 * following ethernet header again 4 bytes boundary aligned421	 */422};423 424/**425 * struct batadv_unicast_4addr_packet - extended unicast packet426 * @u: common unicast packet header427 * @src: address of the source428 * @subtype: packet subtype429 * @reserved: reserved byte for alignment430 */431struct batadv_unicast_4addr_packet {432	struct batadv_unicast_packet u;433	__u8 src[ETH_ALEN];434	__u8 subtype;435	__u8 reserved;436	/* "4 bytes boundary + 2 bytes" long to make the payload after the437	 * following ethernet header again 4 bytes boundary aligned438	 */439};440 441/**442 * struct batadv_frag_packet - fragmented packet443 * @packet_type: batman-adv packet type, part of the general header444 * @version: batman-adv protocol version, part of the general header445 * @ttl: time to live for this packet, part of the general header446 * @dest: final destination used when routing fragments447 * @orig: originator of the fragment used when merging the packet448 * @no: fragment number within this sequence449 * @priority: priority of frame, from ToS IP precedence or 802.1p450 * @reserved: reserved byte for alignment451 * @seqno: sequence identification452 * @total_size: size of the merged packet453 */454struct batadv_frag_packet {455	__u8   packet_type;456	__u8   version;  /* batman version field */457	__u8   ttl;458#if defined(__BIG_ENDIAN_BITFIELD)459	__u8   no:4;460	__u8   priority:3;461	__u8   reserved:1;462#elif defined(__LITTLE_ENDIAN_BITFIELD)463	__u8   reserved:1;464	__u8   priority:3;465	__u8   no:4;466#else467#error "unknown bitfield endianness"468#endif469	__u8   dest[ETH_ALEN];470	__u8   orig[ETH_ALEN];471	__be16 seqno;472	__be16 total_size;473};474 475/**476 * struct batadv_bcast_packet - broadcast packet for network payload477 * @packet_type: batman-adv packet type, part of the general header478 * @version: batman-adv protocol version, part of the general header479 * @ttl: time to live for this packet, part of the general header480 * @reserved: reserved byte for alignment481 * @seqno: sequence identification482 * @orig: originator of the broadcast packet483 */484struct batadv_bcast_packet {485	__u8   packet_type;486	__u8   version;  /* batman version field */487	__u8   ttl;488	__u8   reserved;489	__be32 seqno;490	__u8   orig[ETH_ALEN];491	/* "4 bytes boundary + 2 bytes" long to make the payload after the492	 * following ethernet header again 4 bytes boundary aligned493	 */494};495 496/**497 * struct batadv_mcast_packet - multicast packet for network payload498 * @packet_type: batman-adv packet type, part of the general header499 * @version: batman-adv protocol version, part of the general header500 * @ttl: time to live for this packet, part of the general header501 * @reserved: reserved byte for alignment502 * @tvlv_len: length of the appended tvlv buffer (in bytes)503 */504struct batadv_mcast_packet {505	__u8 packet_type;506	__u8 version;507	__u8 ttl;508	__u8 reserved;509	__be16 tvlv_len;510	/* "4 bytes boundary + 2 bytes" long to make the payload after the511	 * following ethernet header again 4 bytes boundary aligned512	 */513};514 515/**516 * struct batadv_coded_packet - network coded packet517 * @packet_type: batman-adv packet type, part of the general header518 * @version: batman-adv protocol version, part of the general header519 * @ttl: time to live for this packet, part of the general header520 * @first_source: original source of first included packet521 * @first_orig_dest: original destination of first included packet522 * @first_crc: checksum of first included packet523 * @first_ttvn: tt-version number of first included packet524 * @second_ttl: ttl of second packet525 * @second_dest: second receiver of this coded packet526 * @second_source: original source of second included packet527 * @second_orig_dest: original destination of second included packet528 * @second_crc: checksum of second included packet529 * @second_ttvn: tt version number of second included packet530 * @coded_len: length of network coded part of the payload531 */532struct batadv_coded_packet {533	__u8   packet_type;534	__u8   version;  /* batman version field */535	__u8   ttl;536	__u8   first_ttvn;537	/* __u8 first_dest[ETH_ALEN]; - saved in mac header destination */538	__u8   first_source[ETH_ALEN];539	__u8   first_orig_dest[ETH_ALEN];540	__be32 first_crc;541	__u8   second_ttl;542	__u8   second_ttvn;543	__u8   second_dest[ETH_ALEN];544	__u8   second_source[ETH_ALEN];545	__u8   second_orig_dest[ETH_ALEN];546	__be32 second_crc;547	__be16 coded_len;548};549 550/**551 * struct batadv_unicast_tvlv_packet - generic unicast packet with tvlv payload552 * @packet_type: batman-adv packet type, part of the general header553 * @version: batman-adv protocol version, part of the general header554 * @ttl: time to live for this packet, part of the general header555 * @reserved: reserved field (for packet alignment)556 * @src: address of the source557 * @dst: address of the destination558 * @tvlv_len: length of tvlv data following the unicast tvlv header559 * @align: 2 bytes to align the header to a 4 byte boundary560 */561struct batadv_unicast_tvlv_packet {562	__u8   packet_type;563	__u8   version;  /* batman version field */564	__u8   ttl;565	__u8   reserved;566	__u8   dst[ETH_ALEN];567	__u8   src[ETH_ALEN];568	__be16 tvlv_len;569	__u16  align;570};571 572/**573 * struct batadv_tvlv_hdr - base tvlv header struct574 * @type: tvlv container type (see batadv_tvlv_type)575 * @version: tvlv container version576 * @len: tvlv container length577 */578struct batadv_tvlv_hdr {579	__u8   type;580	__u8   version;581	__be16 len;582};583 584/**585 * struct batadv_tvlv_gateway_data - gateway data propagated through gw tvlv586 *  container587 * @bandwidth_down: advertised uplink download bandwidth588 * @bandwidth_up: advertised uplink upload bandwidth589 */590struct batadv_tvlv_gateway_data {591	__be32 bandwidth_down;592	__be32 bandwidth_up;593};594 595/**596 * struct batadv_tvlv_tt_data - tt data propagated through the tt tvlv container597 * @flags: translation table flags (see batadv_tt_data_flags)598 * @ttvn: translation table version number599 * @num_vlan: number of announced VLANs. In the TVLV this struct is followed by600 *  one batadv_tvlv_tt_vlan_data object per announced vlan601 */602struct batadv_tvlv_tt_data {603	__u8   flags;604	__u8   ttvn;605	__be16 num_vlan;606};607 608/**609 * struct batadv_tvlv_tt_vlan_data - vlan specific tt data propagated through610 *  the tt tvlv container611 * @crc: crc32 checksum of the entries belonging to this vlan612 * @vid: vlan identifier613 * @reserved: unused, useful for alignment purposes614 */615struct batadv_tvlv_tt_vlan_data {616	__be32 crc;617	__be16 vid;618	__u16  reserved;619};620 621/**622 * struct batadv_tvlv_tt_change - translation table diff data623 * @flags: status indicators concerning the non-mesh client (see624 *  batadv_tt_client_flags)625 * @reserved: reserved field - useful for alignment purposes only626 * @addr: mac address of non-mesh client that triggered this tt change627 * @vid: VLAN identifier628 */629struct batadv_tvlv_tt_change {630	__u8   flags;631	__u8   reserved[3];632	__u8   addr[ETH_ALEN];633	__be16 vid;634};635 636/**637 * struct batadv_tvlv_roam_adv - roaming advertisement638 * @client: mac address of roaming client639 * @vid: VLAN identifier640 */641struct batadv_tvlv_roam_adv {642	__u8   client[ETH_ALEN];643	__be16 vid;644};645 646/**647 * struct batadv_tvlv_mcast_data - payload of a multicast tvlv648 * @flags: multicast flags announced by the orig node649 * @reserved: reserved field650 */651struct batadv_tvlv_mcast_data {652	__u8 flags;653	__u8 reserved[3];654};655 656/**657 * struct batadv_tvlv_mcast_tracker - payload of a multicast tracker tvlv658 * @num_dests: number of subsequent destination originator MAC addresses659 */660struct batadv_tvlv_mcast_tracker {661	__be16	num_dests;662};663 664#pragma pack()665 666#endif /* _UAPI_LINUX_BATADV_PACKET_H_ */667