2014-01-04 18:04:25 +01:00
/* Copyright (C) 2007-2014 B.A.T.M.A.N. contributors:
2010-12-13 11:19:28 +00:00
*
* Marek Lindner , Simon Wunderlich
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of version 2 of the GNU General Public
* License as published by the Free Software Foundation .
*
* This program is distributed in the hope that it will be useful , but
* WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
* General Public License for more details .
*
* You should have received a copy of the GNU General Public License
2013-11-03 20:40:48 +01:00
* along with this program ; if not , see < http : //www.gnu.org/licenses/>.
2010-12-13 11:19:28 +00:00
*/
# ifndef _NET_BATMAN_ADV_PACKET_H_
# define _NET_BATMAN_ADV_PACKET_H_
2013-04-23 21:39:57 +08:00
/**
* enum batadv_packettype - types for batman - adv encapsulated packets
2013-04-25 10:37:23 +02:00
* @ BATADV_IV_OGM : originator messages for B . A . T . M . A . N . IV
* @ BATADV_BCAST : broadcast packets carrying broadcast payload
* @ BATADV_CODED : network coded packets
*
* @ BATADV_UNICAST : unicast packets carrying unicast payload traffic
* @ BATADV_UNICAST_FRAG : unicast packets carrying a fragment of the original
* payload packet
* @ BATADV_UNICAST_4ADDR : unicast packet including the originator address of
* the sender
* @ BATADV_ICMP : unicast packet like IP ICMP used for ping or traceroute
2013-04-23 21:39:57 +08:00
* @ BATADV_UNICAST_TVLV : unicast packet carrying TVLV containers
*/
2012-06-03 22:19:21 +02:00
enum batadv_packettype {
2013-04-25 10:37:23 +02:00
/* 0x00 - 0x3f: local packets or special rules for handling */
BATADV_IV_OGM = 0x00 ,
BATADV_BCAST = 0x01 ,
BATADV_CODED = 0x02 ,
/* 0x40 - 0x7f: unicast */
# define BATADV_UNICAST_MIN 0x40
BATADV_UNICAST = 0x40 ,
BATADV_UNICAST_FRAG = 0x41 ,
BATADV_UNICAST_4ADDR = 0x42 ,
BATADV_ICMP = 0x43 ,
BATADV_UNICAST_TVLV = 0x44 ,
# define BATADV_UNICAST_MAX 0x7f
/* 0x80 - 0xff: reserved */
2012-10-01 09:57:35 +02:00
} ;
/**
* enum batadv_subtype - packet subtype for unicast4addr
* @ BATADV_P_DATA : user payload
2011-06-02 12:29:51 +02:00
* @ BATADV_P_DAT_DHT_GET : DHT request message
* @ BATADV_P_DAT_DHT_PUT : DHT store message
* @ BATADV_P_DAT_CACHE_REPLY : ARP reply generated by DAT
2012-10-01 09:57:35 +02:00
*/
enum batadv_subtype {
2011-06-02 12:29:51 +02:00
BATADV_P_DATA = 0x01 ,
BATADV_P_DAT_DHT_GET = 0x02 ,
BATADV_P_DAT_DHT_PUT = 0x03 ,
BATADV_P_DAT_CACHE_REPLY = 0x04 ,
2011-06-04 11:26:00 +02:00
} ;
2010-12-13 11:19:28 +00:00
/* this file is included by batctl which needs these defines */
2013-04-20 15:59:13 +02:00
# define BATADV_COMPAT_VERSION 15
2011-06-04 11:26:00 +02:00
2013-04-25 10:37:25 +02:00
/**
* enum batadv_iv_flags - flags used in B . A . T . M . A . N . IV OGM packets
* @ BATADV_NOT_BEST_NEXT_HOP : flag is set when ogm packet is forwarded and was
* previously received from someone else than the best neighbor .
* @ BATADV_PRIMARIES_FIRST_HOP : flag is set when the primary interface address
* is used , and the packet travels its first hop .
* @ BATADV_DIRECTLINK : flag is for the first hop or if rebroadcasted from a
* one hop neighbor on the interface where it was originally received .
*/
2012-06-03 22:19:21 +02:00
enum batadv_iv_flags {
2013-04-25 10:37:25 +02:00
BATADV_NOT_BEST_NEXT_HOP = BIT ( 0 ) ,
BATADV_PRIMARIES_FIRST_HOP = BIT ( 1 ) ,
BATADV_DIRECTLINK = BIT ( 2 ) ,
2011-06-04 11:26:00 +02:00
} ;
2010-12-13 11:19:28 +00:00
/* ICMP message types */
2012-06-03 22:19:21 +02:00
enum batadv_icmp_packettype {
BATADV_ECHO_REPLY = 0 ,
BATADV_DESTINATION_UNREACHABLE = 3 ,
BATADV_ECHO_REQUEST = 8 ,
BATADV_TTL_EXCEEDED = 11 ,
BATADV_PARAMETER_PROBLEM = 12 ,
2011-06-04 11:26:00 +02:00
} ;
2010-12-13 11:19:28 +00:00
2014-02-15 17:47:53 +01:00
/**
* enum batadv_mcast_flags - flags for multicast capabilities and settings
* @ BATADV_MCAST_WANT_ALL_UNSNOOPABLES : we want all packets destined for
* 224.0 .0 .0 / 24 or ff02 : : 1
2014-02-15 17:47:54 +01:00
* @ BATADV_MCAST_WANT_ALL_IPV4 : we want all IPv4 multicast packets
* @ BATADV_MCAST_WANT_ALL_IPV6 : we want all IPv6 multicast packets
2014-02-15 17:47:53 +01:00
*/
enum batadv_mcast_flags {
BATADV_MCAST_WANT_ALL_UNSNOOPABLES = BIT ( 0 ) ,
2014-02-15 17:47:54 +01:00
BATADV_MCAST_WANT_ALL_IPV4 = BIT ( 1 ) ,
BATADV_MCAST_WANT_ALL_IPV6 = BIT ( 2 ) ,
2014-02-15 17:47:53 +01:00
} ;
2013-04-23 21:40:01 +08:00
/* tt data subtypes */
# define BATADV_TT_DATA_TYPE_MASK 0x0F
2011-04-27 14:27:44 +02:00
2013-04-23 21:40:01 +08:00
/**
* enum batadv_tt_data_flags - flags for tt data tvlv
* @ BATADV_TT_OGM_DIFF : TT diff propagated through OGM
* @ BATADV_TT_REQUEST : TT request message
* @ BATADV_TT_RESPONSE : TT response message
* @ BATADV_TT_FULL_TABLE : contains full table to replace existing table
*/
enum batadv_tt_data_flags {
BATADV_TT_OGM_DIFF = BIT ( 0 ) ,
BATADV_TT_REQUEST = BIT ( 1 ) ,
BATADV_TT_RESPONSE = BIT ( 2 ) ,
BATADV_TT_FULL_TABLE = BIT ( 4 ) ,
2011-04-27 14:27:44 +02:00
} ;
2014-02-22 16:48:14 +01:00
/**
* enum batadv_tt_client_flags - TT client specific flags
* @ BATADV_TT_CLIENT_DEL : the client has to be deleted from the table
* @ BATADV_TT_CLIENT_ROAM : the client roamed to / from another node and the new
* update telling its new real location has not been received / sent yet
* @ BATADV_TT_CLIENT_WIFI : this client is connected through a wifi interface .
* This information is used by the " AP Isolation " feature
* @ BATADV_TT_CLIENT_ISOLA : this client is considered " isolated " . This
* information is used by the Extended Isolation feature
* @ BATADV_TT_CLIENT_NOPURGE : this client should never be removed from the table
* @ BATADV_TT_CLIENT_NEW : this client has been added to the local table but has
* not been announced yet
* @ BATADV_TT_CLIENT_PENDING : this client is marked for removal but it is kept
* in the table for one more originator interval for consistency purposes
* @ BATADV_TT_CLIENT_TEMP : this global client has been detected to be part of
* the network but no nnode has already announced it
*
* Bits from 0 to 7 are called _remote flags_ because they are sent on the wire .
* Bits from 8 to 15 are called _local flags_ because they are used for local
* computations only .
*
* Bits from 4 to 7 - a subset of remote flags - are ensured to be in sync with
* the other nodes in the network . To achieve this goal these flags are included
* in the TT CRC computation .
2012-05-12 02:09:43 +02:00
*/
2012-06-03 22:19:21 +02:00
enum batadv_tt_client_flags {
2012-07-08 16:32:09 +02:00
BATADV_TT_CLIENT_DEL = BIT ( 0 ) ,
BATADV_TT_CLIENT_ROAM = BIT ( 1 ) ,
2013-10-13 02:50:20 +02:00
BATADV_TT_CLIENT_WIFI = BIT ( 4 ) ,
2013-11-16 12:03:48 +01:00
BATADV_TT_CLIENT_ISOLA = BIT ( 5 ) ,
2012-07-08 16:32:09 +02:00
BATADV_TT_CLIENT_NOPURGE = BIT ( 8 ) ,
BATADV_TT_CLIENT_NEW = BIT ( 9 ) ,
BATADV_TT_CLIENT_PENDING = BIT ( 10 ) ,
2013-04-24 16:37:52 +02:00
BATADV_TT_CLIENT_TEMP = BIT ( 11 ) ,
2011-04-27 14:27:44 +02:00
} ;
2013-06-04 12:11:39 +02:00
/**
* batadv_vlan_flags - flags for the four MSB of any vlan ID field
* @ BATADV_VLAN_HAS_TAG : whether the field contains a valid vlan tag or not
*/
enum batadv_vlan_flags {
BATADV_VLAN_HAS_TAG = BIT ( 15 ) ,
} ;
2012-01-22 20:00:19 +01:00
/* claim frame types for the bridge loop avoidance */
2012-06-03 22:19:21 +02:00
enum batadv_bla_claimframe {
2012-06-23 12:34:18 +02:00
BATADV_CLAIM_TYPE_CLAIM = 0x00 ,
BATADV_CLAIM_TYPE_UNCLAIM = 0x01 ,
2012-06-03 22:19:21 +02:00
BATADV_CLAIM_TYPE_ANNOUNCE = 0x02 ,
BATADV_CLAIM_TYPE_REQUEST = 0x03 ,
2012-01-22 20:00:19 +01:00
} ;
2013-04-23 21:39:58 +08:00
/**
* enum batadv_tvlv_type - tvlv type definitions
* @ BATADV_TVLV_GW : gateway tvlv
2013-04-23 21:39:59 +08:00
* @ BATADV_TVLV_DAT : distributed arp table tvlv
2013-04-23 21:40:00 +08:00
* @ BATADV_TVLV_NC : network coding tvlv
2013-04-23 21:40:01 +08:00
* @ BATADV_TVLV_TT : translation table tvlv
2013-04-23 21:40:03 +08:00
* @ BATADV_TVLV_ROAM : roaming advertisement tvlv
2014-02-15 17:47:51 +01:00
* @ BATADV_TVLV_MCAST : multicast capability tvlv
2013-04-23 21:39:58 +08:00
*/
enum batadv_tvlv_type {
BATADV_TVLV_GW = 0x01 ,
2013-04-23 21:39:59 +08:00
BATADV_TVLV_DAT = 0x02 ,
2013-04-23 21:40:00 +08:00
BATADV_TVLV_NC = 0x03 ,
2013-04-23 21:40:01 +08:00
BATADV_TVLV_TT = 0x04 ,
2013-04-23 21:40:03 +08:00
BATADV_TVLV_ROAM = 0x05 ,
2014-02-15 17:47:51 +01:00
BATADV_TVLV_MCAST = 0x06 ,
2013-04-23 21:39:58 +08:00
} ;
2013-12-02 20:38:33 +01:00
# pragma pack(2)
2012-01-22 20:00:19 +01:00
/* the destination hardware field in the ARP frame is used to
* transport the claim type and the group id
*/
2012-06-05 22:31:30 +02:00
struct batadv_bla_claim_dst {
2012-01-22 20:00:19 +01:00
uint8_t magic [ 3 ] ; /* FF:43:05 */
uint8_t type ; /* bla_claimframe */
2012-04-22 07:47:50 +01:00
__be16 group ; /* group id */
2012-11-05 21:25:26 +01:00
} ;
2013-12-02 20:38:33 +01:00
# pragma pack()
2012-01-22 20:00:19 +01:00
2013-04-23 21:39:57 +08:00
/**
* struct batadv_ogm_packet - ogm ( routing protocol ) packet
2013-12-02 20:38:31 +01:00
* @ packet_type : batman - adv packet type , part of the general header
* @ version : batman - adv protocol version , part of the genereal header
* @ ttl : time to live for this packet , part of the genereal header
2013-04-25 10:37:25 +02:00
* @ flags : contains routing relevant flags - see enum batadv_iv_flags
2013-04-23 21:39:57 +08:00
* @ tvlv_len : length of tvlv data following the ogm header
*/
2012-06-05 22:31:30 +02:00
struct batadv_ogm_packet {
2013-12-02 20:38:31 +01:00
uint8_t packet_type ;
uint8_t version ;
uint8_t ttl ;
2013-04-25 10:37:25 +02:00
uint8_t flags ;
2012-04-22 07:46:29 +01:00
__be32 seqno ;
2012-01-30 20:59:17 +01:00
uint8_t orig [ ETH_ALEN ] ;
uint8_t prev_sender [ ETH_ALEN ] ;
2013-04-23 21:39:58 +08:00
uint8_t reserved ;
2011-05-28 14:51:06 +02:00
uint8_t tq ;
2013-04-23 21:39:57 +08:00
__be16 tvlv_len ;
2013-04-25 10:37:24 +02:00
/* __packed is not needed as the struct size is divisible by 4,
* and the largest data type in this struct has a size of 4.
*/
} ;
2010-12-13 11:19:28 +00:00
2012-06-05 22:31:30 +02:00
# define BATADV_OGM_HLEN sizeof(struct batadv_ogm_packet)
2010-12-13 11:19:28 +00:00
2013-05-18 14:56:57 +02:00
/**
2013-12-05 15:33:00 +01:00
* batadv_icmp_header - common members among all the ICMP packets
2013-12-02 20:38:31 +01:00
* @ packet_type : batman - adv packet type , part of the general header
* @ version : batman - adv protocol version , part of the genereal header
* @ ttl : time to live for this packet , part of the genereal header
2013-05-18 14:56:57 +02:00
* @ msg_type : ICMP packet type
* @ dst : address of the destination node
* @ orig : address of the source node
* @ uid : local ICMP socket identifier
2013-12-05 15:33:00 +01:00
* @ align : not used - useful for alignment purposes only
*
* This structure is used for ICMP packets parsing only and it is never sent
* over the wire . The alignment field at the end is there to ensure that
* members are padded the same way as they are in real packets .
2013-05-18 14:56:57 +02:00
*/
struct batadv_icmp_header {
2013-12-02 20:38:31 +01:00
uint8_t packet_type ;
uint8_t version ;
uint8_t ttl ;
2011-05-28 14:51:06 +02:00
uint8_t msg_type ; /* see ICMP message types above */
2012-01-30 20:59:17 +01:00
uint8_t dst [ ETH_ALEN ] ;
uint8_t orig [ ETH_ALEN ] ;
2010-12-13 11:19:28 +00:00
uint8_t uid ;
2013-12-05 15:33:00 +01:00
uint8_t align [ 3 ] ;
2013-05-18 14:56:57 +02:00
} ;
/**
* batadv_icmp_packet - ICMP packet
2013-12-05 15:33:00 +01:00
* @ packet_type : batman - adv packet type , part of the general header
* @ version : batman - adv protocol version , part of the genereal header
* @ ttl : time to live for this packet , part of the genereal header
* @ msg_type : ICMP packet type
* @ dst : address of the destination node
* @ orig : address of the source node
* @ uid : local ICMP socket identifier
2013-05-18 14:56:57 +02:00
* @ reserved : not used - useful for alignment
* @ seqno : ICMP sequence number
*/
struct batadv_icmp_packet {
2013-12-05 15:33:00 +01:00
uint8_t packet_type ;
uint8_t version ;
uint8_t ttl ;
uint8_t msg_type ; /* see ICMP message types above */
uint8_t dst [ ETH_ALEN ] ;
uint8_t orig [ ETH_ALEN ] ;
uint8_t uid ;
2011-05-28 14:51:06 +02:00
uint8_t reserved ;
2013-05-18 14:56:57 +02:00
__be16 seqno ;
2012-11-05 21:25:26 +01:00
} ;
2010-12-13 11:19:28 +00:00
2012-06-03 22:19:13 +02:00
# define BATADV_RR_LEN 16
2010-12-13 11:19:28 +00:00
2013-05-18 14:56:57 +02:00
/**
* batadv_icmp_packet_rr - ICMP RouteRecord packet
2013-12-05 15:33:00 +01:00
* @ packet_type : batman - adv packet type , part of the general header
* @ version : batman - adv protocol version , part of the genereal header
* @ ttl : time to live for this packet , part of the genereal header
* @ msg_type : ICMP packet type
* @ dst : address of the destination node
* @ orig : address of the source node
* @ uid : local ICMP socket identifier
2013-05-18 14:56:57 +02:00
* @ rr_cur : number of entries the rr array
* @ seqno : ICMP sequence number
* @ rr : route record array
2012-05-12 02:09:43 +02:00
*/
2012-06-05 22:31:30 +02:00
struct batadv_icmp_packet_rr {
2013-12-05 15:33:00 +01:00
uint8_t packet_type ;
uint8_t version ;
uint8_t ttl ;
uint8_t msg_type ; /* see ICMP message types above */
uint8_t dst [ ETH_ALEN ] ;
uint8_t orig [ ETH_ALEN ] ;
uint8_t uid ;
2010-12-13 11:19:28 +00:00
uint8_t rr_cur ;
2013-05-18 14:56:57 +02:00
__be16 seqno ;
2012-06-03 22:19:13 +02:00
uint8_t rr [ BATADV_RR_LEN ] [ ETH_ALEN ] ;
2012-11-05 21:25:26 +01:00
} ;
2010-12-13 11:19:28 +00:00
2013-10-22 22:50:09 +02:00
# define BATADV_ICMP_MAX_PACKET_SIZE sizeof(struct batadv_icmp_packet_rr)
2012-11-05 21:25:27 +01:00
/* All packet headers in front of an ethernet header have to be completely
* divisible by 2 but not by 4 to make the payload after the ethernet
* header again 4 bytes boundary aligned .
*
* A packing of 2 is necessary to avoid extra padding at the end of the struct
* caused by a structure member which is larger than two bytes . Otherwise
* the structure would not fulfill the previously mentioned rule to avoid the
* misalignment of the payload after the ethernet header . It may also lead to
* leakage of information when the padding it not initialized before sending .
*/
# pragma pack(2)
2013-12-02 20:38:31 +01:00
/**
* struct batadv_unicast_packet - unicast packet for network payload
* @ packet_type : batman - adv packet type , part of the general header
* @ version : batman - adv protocol version , part of the genereal header
* @ ttl : time to live for this packet , part of the genereal header
* @ ttvn : translation table version number
* @ dest : originator destination of the unicast packet
*/
2012-06-05 22:31:30 +02:00
struct batadv_unicast_packet {
2013-12-02 20:38:31 +01:00
uint8_t packet_type ;
uint8_t version ;
uint8_t ttl ;
2011-04-27 14:27:44 +02:00
uint8_t ttvn ; /* destination translation table version number */
2012-01-30 20:59:17 +01:00
uint8_t dest [ ETH_ALEN ] ;
2012-11-05 21:25:26 +01:00
/* "4 bytes boundary + 2 bytes" long to make the payload after the
* following ethernet header again 4 bytes boundary aligned
*/
} ;
2010-12-13 11:19:28 +00:00
2012-10-01 09:57:35 +02:00
/**
* struct batadv_unicast_4addr_packet - extended unicast packet
* @ u : common unicast packet header
* @ src : address of the source
* @ subtype : packet subtype
*/
struct batadv_unicast_4addr_packet {
struct batadv_unicast_packet u ;
uint8_t src [ ETH_ALEN ] ;
uint8_t subtype ;
uint8_t reserved ;
/* "4 bytes boundary + 2 bytes" long to make the payload after the
* following ethernet header again 4 bytes boundary aligned
*/
} ;
2013-05-23 16:53:02 +02:00
/**
* struct batadv_frag_packet - fragmented packet
2013-12-02 20:38:31 +01:00
* @ packet_type : batman - adv packet type , part of the general header
* @ version : batman - adv protocol version , part of the genereal header
* @ ttl : time to live for this packet , part of the genereal header
2013-05-23 16:53:02 +02:00
* @ dest : final destination used when routing fragments
* @ orig : originator of the fragment used when merging the packet
* @ no : fragment number within this sequence
* @ reserved : reserved byte for alignment
* @ seqno : sequence identification
* @ total_size : size of the merged packet
*/
struct batadv_frag_packet {
2013-12-02 20:38:31 +01:00
uint8_t packet_type ;
uint8_t version ; /* batman version field */
uint8_t ttl ;
2013-05-23 16:53:02 +02:00
# if defined(__BIG_ENDIAN_BITFIELD)
uint8_t no : 4 ;
uint8_t reserved : 4 ;
# elif defined(__LITTLE_ENDIAN_BITFIELD)
uint8_t reserved : 4 ;
uint8_t no : 4 ;
# else
# error "unknown bitfield endianess"
# endif
uint8_t dest [ ETH_ALEN ] ;
uint8_t orig [ ETH_ALEN ] ;
__be16 seqno ;
__be16 total_size ;
} ;
2013-12-02 20:38:31 +01:00
/**
* struct batadv_bcast_packet - broadcast packet for network payload
* @ packet_type : batman - adv packet type , part of the general header
* @ version : batman - adv protocol version , part of the genereal header
* @ ttl : time to live for this packet , part of the genereal header
* @ reserved : reserved byte for alignment
* @ seqno : sequence identification
* @ orig : originator of the broadcast packet
*/
2012-06-05 22:31:30 +02:00
struct batadv_bcast_packet {
2013-12-02 20:38:31 +01:00
uint8_t packet_type ;
uint8_t version ; /* batman version field */
uint8_t ttl ;
2011-05-28 14:51:06 +02:00
uint8_t reserved ;
2012-04-22 07:47:50 +01:00
__be32 seqno ;
2012-01-30 20:59:17 +01:00
uint8_t orig [ ETH_ALEN ] ;
2012-11-05 21:25:26 +01:00
/* "4 bytes boundary + 2 bytes" long to make the payload after the
* following ethernet header again 4 bytes boundary aligned
*/
2012-11-05 21:25:27 +01:00
} ;
2013-01-25 11:12:41 +01:00
/**
* struct batadv_coded_packet - network coded packet
2013-12-02 20:38:31 +01:00
* @ packet_type : batman - adv packet type , part of the general header
* @ version : batman - adv protocol version , part of the genereal header
* @ ttl : time to live for this packet , part of the genereal header
2013-01-25 11:12:41 +01:00
* @ reserved : Align following fields to 2 - byte boundaries
* @ first_source : original source of first included packet
* @ first_orig_dest : original destinal of first included packet
* @ first_crc : checksum of first included packet
* @ first_ttvn : tt - version number of first included packet
* @ second_ttl : ttl of second packet
* @ second_dest : second receiver of this coded packet
* @ second_source : original source of second included packet
* @ second_orig_dest : original destination of second included packet
* @ second_crc : checksum of second included packet
* @ second_ttvn : tt version number of second included packet
* @ coded_len : length of network coded part of the payload
*/
struct batadv_coded_packet {
2013-12-02 20:38:31 +01:00
uint8_t packet_type ;
uint8_t version ; /* batman version field */
uint8_t ttl ;
2013-01-25 11:12:41 +01:00
uint8_t first_ttvn ;
/* uint8_t first_dest[ETH_ALEN]; - saved in mac header destination */
uint8_t first_source [ ETH_ALEN ] ;
uint8_t first_orig_dest [ ETH_ALEN ] ;
__be32 first_crc ;
uint8_t second_ttl ;
uint8_t second_ttvn ;
uint8_t second_dest [ ETH_ALEN ] ;
uint8_t second_source [ ETH_ALEN ] ;
uint8_t second_orig_dest [ ETH_ALEN ] ;
__be32 second_crc ;
2013-03-14 21:30:21 +01:00
__be16 coded_len ;
2013-01-25 11:12:41 +01:00
} ;
2013-12-02 20:38:30 +01:00
# pragma pack()
2013-04-23 21:39:57 +08:00
/**
* struct batadv_unicast_tvlv - generic unicast packet with tvlv payload
2013-12-02 20:38:31 +01:00
* @ packet_type : batman - adv packet type , part of the general header
* @ version : batman - adv protocol version , part of the genereal header
* @ ttl : time to live for this packet , part of the genereal header
2013-04-23 21:39:57 +08:00
* @ reserved : reserved field ( for packet alignment )
* @ src : address of the source
* @ dst : address of the destination
* @ tvlv_len : length of tvlv data following the unicast tvlv header
* @ align : 2 bytes to align the header to a 4 byte boundry
*/
struct batadv_unicast_tvlv_packet {
2013-12-02 20:38:31 +01:00
uint8_t packet_type ;
uint8_t version ; /* batman version field */
uint8_t ttl ;
2013-04-23 21:39:57 +08:00
uint8_t reserved ;
uint8_t dst [ ETH_ALEN ] ;
uint8_t src [ ETH_ALEN ] ;
__be16 tvlv_len ;
uint16_t align ;
} ;
/**
* struct batadv_tvlv_hdr - base tvlv header struct
* @ type : tvlv container type ( see batadv_tvlv_type )
* @ version : tvlv container version
* @ len : tvlv container length
*/
struct batadv_tvlv_hdr {
uint8_t type ;
uint8_t version ;
__be16 len ;
} ;
2013-04-23 21:39:58 +08:00
/**
* struct batadv_tvlv_gateway_data - gateway data propagated through gw tvlv
* container
* @ bandwidth_down : advertised uplink download bandwidth
* @ bandwidth_up : advertised uplink upload bandwidth
*/
struct batadv_tvlv_gateway_data {
__be32 bandwidth_down ;
__be32 bandwidth_up ;
} ;
2013-04-23 21:40:01 +08:00
/**
* struct batadv_tvlv_tt_data - tt data propagated through the tt tvlv container
* @ flags : translation table flags ( see batadv_tt_data_flags )
* @ ttvn : translation table version number
2013-07-30 22:16:25 +02:00
* @ vlan_num : number of announced VLANs . In the TVLV this struct is followed by
* one batadv_tvlv_tt_vlan_data object per announced vlan
2013-04-23 21:40:01 +08:00
*/
struct batadv_tvlv_tt_data {
uint8_t flags ;
uint8_t ttvn ;
2013-07-30 22:16:25 +02:00
__be16 num_vlan ;
} ;
/**
* struct batadv_tvlv_tt_vlan_data - vlan specific tt data propagated through
* the tt tvlv container
* @ crc : crc32 checksum of the entries belonging to this vlan
* @ vid : vlan identifier
* @ reserved : unused , useful for alignment purposes
*/
struct batadv_tvlv_tt_vlan_data {
__be32 crc ;
__be16 vid ;
2013-04-24 16:37:51 +02:00
uint16_t reserved ;
2013-04-23 21:40:01 +08:00
} ;
/**
* struct batadv_tvlv_tt_change - translation table diff data
* @ flags : status indicators concerning the non - mesh client ( see
* batadv_tt_client_flags )
2013-12-15 13:26:55 +01:00
* @ reserved : reserved field - useful for alignment purposes only
2013-04-23 21:40:01 +08:00
* @ addr : mac address of non - mesh client that triggered this tt change
2013-06-04 12:11:39 +02:00
* @ vid : VLAN identifier
2013-04-23 21:40:01 +08:00
*/
struct batadv_tvlv_tt_change {
uint8_t flags ;
2013-12-15 13:26:55 +01:00
uint8_t reserved [ 3 ] ;
2013-04-23 21:40:01 +08:00
uint8_t addr [ ETH_ALEN ] ;
2013-06-04 12:11:39 +02:00
__be16 vid ;
2013-04-23 21:40:01 +08:00
} ;
2013-04-23 21:40:03 +08:00
/**
* struct batadv_tvlv_roam_adv - roaming advertisement
* @ client : mac address of roaming client
2013-06-04 12:11:39 +02:00
* @ vid : VLAN identifier
2013-04-23 21:40:03 +08:00
*/
struct batadv_tvlv_roam_adv {
uint8_t client [ ETH_ALEN ] ;
2013-06-04 12:11:39 +02:00
__be16 vid ;
2013-04-23 21:40:03 +08:00
} ;
2014-02-15 17:47:51 +01:00
/**
* struct batadv_tvlv_mcast_data - payload of a multicast tvlv
* @ flags : multicast flags announced by the orig node
* @ reserved : reserved field
*/
struct batadv_tvlv_mcast_data {
uint8_t flags ;
uint8_t reserved [ 3 ] ;
} ;
2010-12-13 11:19:28 +00:00
# endif /* _NET_BATMAN_ADV_PACKET_H_ */