linux/net/batman-adv/packet.h
<<
>>
Prefs
   1/* Copyright (C) 2007-2017  B.A.T.M.A.N. contributors:
   2 *
   3 * Marek Lindner, Simon Wunderlich
   4 *
   5 * This program is free software; you can redistribute it and/or
   6 * modify it under the terms of version 2 of the GNU General Public
   7 * License as published by the Free Software Foundation.
   8 *
   9 * This program is distributed in the hope that it will be useful, but
  10 * WITHOUT ANY WARRANTY; without even the implied warranty of
  11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12 * General Public License for more details.
  13 *
  14 * You should have received a copy of the GNU General Public License
  15 * along with this program; if not, see <http://www.gnu.org/licenses/>.
  16 */
  17
  18#ifndef _NET_BATMAN_ADV_PACKET_H_
  19#define _NET_BATMAN_ADV_PACKET_H_
  20
  21#include <asm/byteorder.h>
  22#include <linux/types.h>
  23
  24#define batadv_tp_is_error(n) ((u8)(n) > 127 ? 1 : 0)
  25
  26/**
  27 * enum batadv_packettype - types for batman-adv encapsulated packets
  28 * @BATADV_IV_OGM: originator messages for B.A.T.M.A.N. IV
  29 * @BATADV_BCAST: broadcast packets carrying broadcast payload
  30 * @BATADV_CODED: network coded packets
  31 * @BATADV_ELP: echo location packets for B.A.T.M.A.N. V
  32 * @BATADV_OGM2: originator messages for B.A.T.M.A.N. V
  33 *
  34 * @BATADV_UNICAST: unicast packets carrying unicast payload traffic
  35 * @BATADV_UNICAST_FRAG: unicast packets carrying a fragment of the original
  36 *     payload packet
  37 * @BATADV_UNICAST_4ADDR: unicast packet including the originator address of
  38 *     the sender
  39 * @BATADV_ICMP: unicast packet like IP ICMP used for ping or traceroute
  40 * @BATADV_UNICAST_TVLV: unicast packet carrying TVLV containers
  41 */
  42enum batadv_packettype {
  43        /* 0x00 - 0x3f: local packets or special rules for handling */
  44        BATADV_IV_OGM           = 0x00,
  45        BATADV_BCAST            = 0x01,
  46        BATADV_CODED            = 0x02,
  47        BATADV_ELP              = 0x03,
  48        BATADV_OGM2             = 0x04,
  49        /* 0x40 - 0x7f: unicast */
  50#define BATADV_UNICAST_MIN     0x40
  51        BATADV_UNICAST          = 0x40,
  52        BATADV_UNICAST_FRAG     = 0x41,
  53        BATADV_UNICAST_4ADDR    = 0x42,
  54        BATADV_ICMP             = 0x43,
  55        BATADV_UNICAST_TVLV     = 0x44,
  56#define BATADV_UNICAST_MAX     0x7f
  57        /* 0x80 - 0xff: reserved */
  58};
  59
  60/**
  61 * enum batadv_subtype - packet subtype for unicast4addr
  62 * @BATADV_P_DATA: user payload
  63 * @BATADV_P_DAT_DHT_GET: DHT request message
  64 * @BATADV_P_DAT_DHT_PUT: DHT store message
  65 * @BATADV_P_DAT_CACHE_REPLY: ARP reply generated by DAT
  66 */
  67enum batadv_subtype {
  68        BATADV_P_DATA                   = 0x01,
  69        BATADV_P_DAT_DHT_GET            = 0x02,
  70        BATADV_P_DAT_DHT_PUT            = 0x03,
  71        BATADV_P_DAT_CACHE_REPLY        = 0x04,
  72};
  73
  74/* this file is included by batctl which needs these defines */
  75#define BATADV_COMPAT_VERSION 15
  76
  77/**
  78 * enum batadv_iv_flags - flags used in B.A.T.M.A.N. IV OGM packets
  79 * @BATADV_NOT_BEST_NEXT_HOP: flag is set when ogm packet is forwarded and was
  80 *     previously received from someone else than the best neighbor.
  81 * @BATADV_PRIMARIES_FIRST_HOP: flag unused.
  82 * @BATADV_DIRECTLINK: flag is for the first hop or if rebroadcasted from a
  83 *     one hop neighbor on the interface where it was originally received.
  84 */
  85enum batadv_iv_flags {
  86        BATADV_NOT_BEST_NEXT_HOP   = BIT(0),
  87        BATADV_PRIMARIES_FIRST_HOP = BIT(1),
  88        BATADV_DIRECTLINK          = BIT(2),
  89};
  90
  91/* ICMP message types */
  92enum batadv_icmp_packettype {
  93        BATADV_ECHO_REPLY              = 0,
  94        BATADV_DESTINATION_UNREACHABLE = 3,
  95        BATADV_ECHO_REQUEST            = 8,
  96        BATADV_TTL_EXCEEDED            = 11,
  97        BATADV_PARAMETER_PROBLEM       = 12,
  98        BATADV_TP                      = 15,
  99};
 100
 101/**
 102 * enum batadv_mcast_flags - flags for multicast capabilities and settings
 103 * @BATADV_MCAST_WANT_ALL_UNSNOOPABLES: we want all packets destined for
 104 *  224.0.0.0/24 or ff02::1
 105 * @BATADV_MCAST_WANT_ALL_IPV4: we want all IPv4 multicast packets
 106 * @BATADV_MCAST_WANT_ALL_IPV6: we want all IPv6 multicast packets
 107 */
 108enum batadv_mcast_flags {
 109        BATADV_MCAST_WANT_ALL_UNSNOOPABLES      = BIT(0),
 110        BATADV_MCAST_WANT_ALL_IPV4              = BIT(1),
 111        BATADV_MCAST_WANT_ALL_IPV6              = BIT(2),
 112};
 113
 114/* tt data subtypes */
 115#define BATADV_TT_DATA_TYPE_MASK 0x0F
 116
 117/**
 118 * enum batadv_tt_data_flags - flags for tt data tvlv
 119 * @BATADV_TT_OGM_DIFF: TT diff propagated through OGM
 120 * @BATADV_TT_REQUEST: TT request message
 121 * @BATADV_TT_RESPONSE: TT response message
 122 * @BATADV_TT_FULL_TABLE: contains full table to replace existing table
 123 */
 124enum batadv_tt_data_flags {
 125        BATADV_TT_OGM_DIFF   = BIT(0),
 126        BATADV_TT_REQUEST    = BIT(1),
 127        BATADV_TT_RESPONSE   = BIT(2),
 128        BATADV_TT_FULL_TABLE = BIT(4),
 129};
 130
 131/**
 132 * enum batadv_vlan_flags - flags for the four MSB of any vlan ID field
 133 * @BATADV_VLAN_HAS_TAG: whether the field contains a valid vlan tag or not
 134 */
 135enum batadv_vlan_flags {
 136        BATADV_VLAN_HAS_TAG     = BIT(15),
 137};
 138
 139/* claim frame types for the bridge loop avoidance */
 140enum batadv_bla_claimframe {
 141        BATADV_CLAIM_TYPE_CLAIM         = 0x00,
 142        BATADV_CLAIM_TYPE_UNCLAIM       = 0x01,
 143        BATADV_CLAIM_TYPE_ANNOUNCE      = 0x02,
 144        BATADV_CLAIM_TYPE_REQUEST       = 0x03,
 145        BATADV_CLAIM_TYPE_LOOPDETECT    = 0x04,
 146};
 147
 148/**
 149 * enum batadv_tvlv_type - tvlv type definitions
 150 * @BATADV_TVLV_GW: gateway tvlv
 151 * @BATADV_TVLV_DAT: distributed arp table tvlv
 152 * @BATADV_TVLV_NC: network coding tvlv
 153 * @BATADV_TVLV_TT: translation table tvlv
 154 * @BATADV_TVLV_ROAM: roaming advertisement tvlv
 155 * @BATADV_TVLV_MCAST: multicast capability tvlv
 156 */
 157enum batadv_tvlv_type {
 158        BATADV_TVLV_GW          = 0x01,
 159        BATADV_TVLV_DAT         = 0x02,
 160        BATADV_TVLV_NC          = 0x03,
 161        BATADV_TVLV_TT          = 0x04,
 162        BATADV_TVLV_ROAM        = 0x05,
 163        BATADV_TVLV_MCAST       = 0x06,
 164};
 165
 166#pragma pack(2)
 167/* the destination hardware field in the ARP frame is used to
 168 * transport the claim type and the group id
 169 */
 170struct batadv_bla_claim_dst {
 171        u8     magic[3];        /* FF:43:05 */
 172        u8     type;            /* bla_claimframe */
 173        __be16 group;           /* group id */
 174};
 175
 176#pragma pack()
 177
 178/**
 179 * struct batadv_ogm_packet - ogm (routing protocol) packet
 180 * @packet_type: batman-adv packet type, part of the general header
 181 * @version: batman-adv protocol version, part of the genereal header
 182 * @ttl: time to live for this packet, part of the genereal header
 183 * @flags: contains routing relevant flags - see enum batadv_iv_flags
 184 * @seqno: sequence identification
 185 * @orig: address of the source node
 186 * @prev_sender: address of the previous sender
 187 * @reserved: reserved byte for alignment
 188 * @tq: transmission quality
 189 * @tvlv_len: length of tvlv data following the ogm header
 190 */
 191struct batadv_ogm_packet {
 192        u8     packet_type;
 193        u8     version;
 194        u8     ttl;
 195        u8     flags;
 196        __be32 seqno;
 197        u8     orig[ETH_ALEN];
 198        u8     prev_sender[ETH_ALEN];
 199        u8     reserved;
 200        u8     tq;
 201        __be16 tvlv_len;
 202        /* __packed is not needed as the struct size is divisible by 4,
 203         * and the largest data type in this struct has a size of 4.
 204         */
 205};
 206
 207#define BATADV_OGM_HLEN sizeof(struct batadv_ogm_packet)
 208
 209/**
 210 * struct batadv_ogm2_packet - ogm2 (routing protocol) packet
 211 * @packet_type: batman-adv packet type, part of the general header
 212 * @version: batman-adv protocol version, part of the general header
 213 * @ttl: time to live for this packet, part of the general header
 214 * @flags: reseved for routing relevant flags - currently always 0
 215 * @seqno: sequence number
 216 * @orig: originator mac address
 217 * @tvlv_len: length of the appended tvlv buffer (in bytes)
 218 * @throughput: the currently flooded path throughput
 219 */
 220struct batadv_ogm2_packet {
 221        u8     packet_type;
 222        u8     version;
 223        u8     ttl;
 224        u8     flags;
 225        __be32 seqno;
 226        u8     orig[ETH_ALEN];
 227        __be16 tvlv_len;
 228        __be32 throughput;
 229        /* __packed is not needed as the struct size is divisible by 4,
 230         * and the largest data type in this struct has a size of 4.
 231         */
 232};
 233
 234#define BATADV_OGM2_HLEN sizeof(struct batadv_ogm2_packet)
 235
 236/**
 237 * struct batadv_elp_packet - elp (neighbor discovery) packet
 238 * @packet_type: batman-adv packet type, part of the general header
 239 * @version: batman-adv protocol version, part of the genereal header
 240 * @orig: originator mac address
 241 * @seqno: sequence number
 242 * @elp_interval: currently used ELP sending interval in ms
 243 */
 244struct batadv_elp_packet {
 245        u8     packet_type;
 246        u8     version;
 247        u8     orig[ETH_ALEN];
 248        __be32 seqno;
 249        __be32 elp_interval;
 250};
 251
 252#define BATADV_ELP_HLEN sizeof(struct batadv_elp_packet)
 253
 254/**
 255 * struct batadv_icmp_header - common members among all the ICMP packets
 256 * @packet_type: batman-adv packet type, part of the general header
 257 * @version: batman-adv protocol version, part of the genereal header
 258 * @ttl: time to live for this packet, part of the genereal header
 259 * @msg_type: ICMP packet type
 260 * @dst: address of the destination node
 261 * @orig: address of the source node
 262 * @uid: local ICMP socket identifier
 263 * @align: not used - useful for alignment purposes only
 264 *
 265 * This structure is used for ICMP packets parsing only and it is never sent
 266 * over the wire. The alignment field at the end is there to ensure that
 267 * members are padded the same way as they are in real packets.
 268 */
 269struct batadv_icmp_header {
 270        u8 packet_type;
 271        u8 version;
 272        u8 ttl;
 273        u8 msg_type; /* see ICMP message types above */
 274        u8 dst[ETH_ALEN];
 275        u8 orig[ETH_ALEN];
 276        u8 uid;
 277        u8 align[3];
 278};
 279
 280/**
 281 * struct batadv_icmp_packet - ICMP packet
 282 * @packet_type: batman-adv packet type, part of the general header
 283 * @version: batman-adv protocol version, part of the genereal header
 284 * @ttl: time to live for this packet, part of the genereal header
 285 * @msg_type: ICMP packet type
 286 * @dst: address of the destination node
 287 * @orig: address of the source node
 288 * @uid: local ICMP socket identifier
 289 * @reserved: not used - useful for alignment
 290 * @seqno: ICMP sequence number
 291 */
 292struct batadv_icmp_packet {
 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     reserved;
 301        __be16 seqno;
 302};
 303
 304/**
 305 * struct batadv_icmp_tp_packet - ICMP TP Meter packet
 306 * @packet_type: batman-adv packet type, part of the general header
 307 * @version: batman-adv protocol version, part of the genereal header
 308 * @ttl: time to live for this packet, part of the genereal header
 309 * @msg_type: ICMP packet type
 310 * @dst: address of the destination node
 311 * @orig: address of the source node
 312 * @uid: local ICMP socket identifier
 313 * @subtype: TP packet subtype (see batadv_icmp_tp_subtype)
 314 * @session: TP session identifier
 315 * @seqno: the TP sequence number
 316 * @timestamp: time when the packet has been sent. This value is filled in a
 317 *  TP_MSG and echoed back in the next TP_ACK so that the sender can compute the
 318 *  RTT. Since it is read only by the host which wrote it, there is no need to
 319 *  store it using network order
 320 */
 321struct batadv_icmp_tp_packet {
 322        u8  packet_type;
 323        u8  version;
 324        u8  ttl;
 325        u8  msg_type; /* see ICMP message types above */
 326        u8  dst[ETH_ALEN];
 327        u8  orig[ETH_ALEN];
 328        u8  uid;
 329        u8  subtype;
 330        u8  session[2];
 331        __be32 seqno;
 332        __be32 timestamp;
 333};
 334
 335/**
 336 * enum batadv_icmp_tp_subtype - ICMP TP Meter packet subtypes
 337 * @BATADV_TP_MSG: Msg from sender to receiver
 338 * @BATADV_TP_ACK: acknowledgment from receiver to sender
 339 */
 340enum batadv_icmp_tp_subtype {
 341        BATADV_TP_MSG   = 0,
 342        BATADV_TP_ACK,
 343};
 344
 345#define BATADV_RR_LEN 16
 346
 347/**
 348 * struct batadv_icmp_packet_rr - ICMP RouteRecord packet
 349 * @packet_type: batman-adv packet type, part of the general header
 350 * @version: batman-adv protocol version, part of the genereal header
 351 * @ttl: time to live for this packet, part of the genereal header
 352 * @msg_type: ICMP packet type
 353 * @dst: address of the destination node
 354 * @orig: address of the source node
 355 * @uid: local ICMP socket identifier
 356 * @rr_cur: number of entries the rr array
 357 * @seqno: ICMP sequence number
 358 * @rr: route record array
 359 */
 360struct batadv_icmp_packet_rr {
 361        u8     packet_type;
 362        u8     version;
 363        u8     ttl;
 364        u8     msg_type; /* see ICMP message types above */
 365        u8     dst[ETH_ALEN];
 366        u8     orig[ETH_ALEN];
 367        u8     uid;
 368        u8     rr_cur;
 369        __be16 seqno;
 370        u8     rr[BATADV_RR_LEN][ETH_ALEN];
 371};
 372
 373#define BATADV_ICMP_MAX_PACKET_SIZE     sizeof(struct batadv_icmp_packet_rr)
 374
 375/* All packet headers in front of an ethernet header have to be completely
 376 * divisible by 2 but not by 4 to make the payload after the ethernet
 377 * header again 4 bytes boundary aligned.
 378 *
 379 * A packing of 2 is necessary to avoid extra padding at the end of the struct
 380 * caused by a structure member which is larger than two bytes. Otherwise
 381 * the structure would not fulfill the previously mentioned rule to avoid the
 382 * misalignment of the payload after the ethernet header. It may also lead to
 383 * leakage of information when the padding it not initialized before sending.
 384 */
 385#pragma pack(2)
 386
 387/**
 388 * struct batadv_unicast_packet - unicast packet for network payload
 389 * @packet_type: batman-adv packet type, part of the general header
 390 * @version: batman-adv protocol version, part of the genereal header
 391 * @ttl: time to live for this packet, part of the genereal header
 392 * @ttvn: translation table version number
 393 * @dest: originator destination of the unicast packet
 394 */
 395struct batadv_unicast_packet {
 396        u8 packet_type;
 397        u8 version;
 398        u8 ttl;
 399        u8 ttvn; /* destination translation table version number */
 400        u8 dest[ETH_ALEN];
 401        /* "4 bytes boundary + 2 bytes" long to make the payload after the
 402         * following ethernet header again 4 bytes boundary aligned
 403         */
 404};
 405
 406/**
 407 * struct batadv_unicast_4addr_packet - extended unicast packet
 408 * @u: common unicast packet header
 409 * @src: address of the source
 410 * @subtype: packet subtype
 411 * @reserved: reserved byte for alignment
 412 */
 413struct batadv_unicast_4addr_packet {
 414        struct batadv_unicast_packet u;
 415        u8 src[ETH_ALEN];
 416        u8 subtype;
 417        u8 reserved;
 418        /* "4 bytes boundary + 2 bytes" long to make the payload after the
 419         * following ethernet header again 4 bytes boundary aligned
 420         */
 421};
 422
 423/**
 424 * struct batadv_frag_packet - fragmented packet
 425 * @packet_type: batman-adv packet type, part of the general header
 426 * @version: batman-adv protocol version, part of the genereal header
 427 * @ttl: time to live for this packet, part of the genereal header
 428 * @dest: final destination used when routing fragments
 429 * @orig: originator of the fragment used when merging the packet
 430 * @no: fragment number within this sequence
 431 * @priority: priority of frame, from ToS IP precedence or 802.1p
 432 * @reserved: reserved byte for alignment
 433 * @seqno: sequence identification
 434 * @total_size: size of the merged packet
 435 */
 436struct batadv_frag_packet {
 437        u8     packet_type;
 438        u8     version;  /* batman version field */
 439        u8     ttl;
 440#if defined(__BIG_ENDIAN_BITFIELD)
 441        u8     no:4;
 442        u8     priority:3;
 443        u8     reserved:1;
 444#elif defined(__LITTLE_ENDIAN_BITFIELD)
 445        u8     reserved:1;
 446        u8     priority:3;
 447        u8     no:4;
 448#else
 449#error "unknown bitfield endianness"
 450#endif
 451        u8     dest[ETH_ALEN];
 452        u8     orig[ETH_ALEN];
 453        __be16 seqno;
 454        __be16 total_size;
 455};
 456
 457/**
 458 * struct batadv_bcast_packet - broadcast packet for network payload
 459 * @packet_type: batman-adv packet type, part of the general header
 460 * @version: batman-adv protocol version, part of the genereal header
 461 * @ttl: time to live for this packet, part of the genereal header
 462 * @reserved: reserved byte for alignment
 463 * @seqno: sequence identification
 464 * @orig: originator of the broadcast packet
 465 */
 466struct batadv_bcast_packet {
 467        u8     packet_type;
 468        u8     version;  /* batman version field */
 469        u8     ttl;
 470        u8     reserved;
 471        __be32 seqno;
 472        u8     orig[ETH_ALEN];
 473        /* "4 bytes boundary + 2 bytes" long to make the payload after the
 474         * following ethernet header again 4 bytes boundary aligned
 475         */
 476};
 477
 478/**
 479 * struct batadv_coded_packet - network coded packet
 480 * @packet_type: batman-adv packet type, part of the general header
 481 * @version: batman-adv protocol version, part of the genereal header
 482 * @ttl: time to live for this packet, part of the genereal header
 483 * @first_source: original source of first included packet
 484 * @first_orig_dest: original destinal of first included packet
 485 * @first_crc: checksum of first included packet
 486 * @first_ttvn: tt-version number of first included packet
 487 * @second_ttl: ttl of second packet
 488 * @second_dest: second receiver of this coded packet
 489 * @second_source: original source of second included packet
 490 * @second_orig_dest: original destination of second included packet
 491 * @second_crc: checksum of second included packet
 492 * @second_ttvn: tt version number of second included packet
 493 * @coded_len: length of network coded part of the payload
 494 */
 495struct batadv_coded_packet {
 496        u8     packet_type;
 497        u8     version;  /* batman version field */
 498        u8     ttl;
 499        u8     first_ttvn;
 500        /* u8  first_dest[ETH_ALEN]; - saved in mac header destination */
 501        u8     first_source[ETH_ALEN];
 502        u8     first_orig_dest[ETH_ALEN];
 503        __be32 first_crc;
 504        u8     second_ttl;
 505        u8     second_ttvn;
 506        u8     second_dest[ETH_ALEN];
 507        u8     second_source[ETH_ALEN];
 508        u8     second_orig_dest[ETH_ALEN];
 509        __be32 second_crc;
 510        __be16 coded_len;
 511};
 512
 513#pragma pack()
 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#endif /* _NET_BATMAN_ADV_PACKET_H_ */
 622