--- batman-adv_next.packet.h 2013-09-19 00:15:01.142844021 +0200
+++ batctl_next.packet.h 2013-09-19 00:15:01.226842715 +0200
@@ -20,34 +20,17 @@
#ifndef _NET_BATMAN_ADV_PACKET_H_
#define _NET_BATMAN_ADV_PACKET_H_
-/**
- * enum batadv_packettype - types for batman-adv encapsulated packets
- * @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
- * @BATADV_UNICAST_TVLV: unicast packet carrying TVLV containers
- */
enum batadv_packettype {
- /* 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 */
+ BATADV_IV_OGM = 0x01,
+ BATADV_ICMP = 0x02,
+ BATADV_UNICAST = 0x03,
+ BATADV_BCAST = 0x04,
+ BATADV_VIS = 0x05,
+ BATADV_UNICAST_FRAG = 0x06,
+ BATADV_TT_QUERY = 0x07,
+ BATADV_ROAM_ADV = 0x08,
+ BATADV_UNICAST_4ADDR = 0x09,
+ BATADV_CODED = 0x0a,
};
/**
@@ -65,21 +48,13 @@
};
/* this file is included by batctl which needs these defines */
-#define BATADV_COMPAT_VERSION 15
+#define BATADV_COMPAT_VERSION 14
-/**
- * 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.
- */
enum batadv_iv_flags {
- BATADV_NOT_BEST_NEXT_HOP = BIT(0),
- BATADV_PRIMARIES_FIRST_HOP = BIT(1),
- BATADV_DIRECTLINK = BIT(2),
+ BATADV_NOT_BEST_NEXT_HOP = BIT(3),
+ BATADV_PRIMARIES_FIRST_HOP = BIT(4),
+ BATADV_VIS_SERVER = BIT(5),
+ BATADV_DIRECTLINK = BIT(6),
};
/* ICMP message types */
@@ -91,21 +66,29 @@
BATADV_PARAMETER_PROBLEM = 12,
};
-/* tt data subtypes */
-#define BATADV_TT_DATA_TYPE_MASK 0x0F
+/* vis defines */
+enum batadv_vis_packettype {
+ BATADV_VIS_TYPE_SERVER_SYNC = 0,
+ BATADV_VIS_TYPE_CLIENT_UPDATE = 1,
+};
-/**
- * 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),
+/* fragmentation defines */
+enum batadv_unicast_frag_flags {
+ BATADV_UNI_FRAG_HEAD = BIT(0),
+ BATADV_UNI_FRAG_LARGETAIL = BIT(1),
+};
+
+/* TT_QUERY subtypes */
+#define BATADV_TT_QUERY_TYPE_MASK 0x3
+
+enum batadv_tt_query_packettype {
+ BATADV_TT_REQUEST = 0,
+ BATADV_TT_RESPONSE = 1,
+};
+
+/* TT_QUERY flags */
+enum batadv_tt_query_flags {
+ BATADV_TT_FULL_TABLE = BIT(2),
};
/* BATADV_TT_CLIENT flags.
@@ -116,18 +99,10 @@
BATADV_TT_CLIENT_DEL = BIT(0),
BATADV_TT_CLIENT_ROAM = BIT(1),
BATADV_TT_CLIENT_WIFI = BIT(2),
+ BATADV_TT_CLIENT_TEMP = BIT(3),
BATADV_TT_CLIENT_NOPURGE = BIT(8),
BATADV_TT_CLIENT_NEW = BIT(9),
BATADV_TT_CLIENT_PENDING = BIT(10),
- BATADV_TT_CLIENT_TEMP = BIT(11),
-};
-
-/**
- * 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),
};
/* claim frame types for the bridge loop avoidance */
@@ -138,22 +113,6 @@
BATADV_CLAIM_TYPE_REQUEST = 0x03,
};
-/**
- * enum batadv_tvlv_type - tvlv type definitions
- * @BATADV_TVLV_GW: gateway tvlv
- * @BATADV_TVLV_DAT: distributed arp table tvlv
- * @BATADV_TVLV_NC: network coding tvlv
- * @BATADV_TVLV_TT: translation table tvlv
- * @BATADV_TVLV_ROAM: roaming advertisement tvlv
- */
-enum batadv_tvlv_type {
- BATADV_TVLV_GW = 0x01,
- BATADV_TVLV_DAT = 0x02,
- BATADV_TVLV_NC = 0x03,
- BATADV_TVLV_TT = 0x04,
- BATADV_TVLV_ROAM = 0x05,
-};
-
/* the destination hardware field in the ARP frame is used to
* transport the claim type and the group id
*/
@@ -172,69 +131,44 @@
*/
};
-/**
- * struct batadv_ogm_packet - ogm (routing protocol) packet
- * @header: common batman packet header
- * @flags: contains routing relevant flags - see enum batadv_iv_flags
- * @tvlv_len: length of tvlv data following the ogm header
- */
struct batadv_ogm_packet {
struct batadv_header header;
- uint8_t flags;
+ uint8_t flags; /* 0x40: DIRECTLINK flag, 0x20 VIS_SERVER flag... */
__be32 seqno;
uint8_t orig[ETH_ALEN];
uint8_t prev_sender[ETH_ALEN];
- uint8_t reserved;
+ uint8_t gw_flags; /* flags related to gateway class */
uint8_t tq;
- __be16 tvlv_len;
- /* __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.
- */
-};
+ uint8_t tt_num_changes;
+ uint8_t ttvn; /* translation table version number */
+ __be16 tt_crc;
+} __packed;
#define BATADV_OGM_HLEN sizeof(struct batadv_ogm_packet)
-/**
- * batadc_icmp_header - common ICMP header
- * @header: common batman header
- * @msg_type: ICMP packet type
- * @dst: address of the destination node
- * @orig: address of the source node
- * @uid: local ICMP socket identifier
- */
-struct batadv_icmp_header {
+struct batadv_icmp_packet {
struct batadv_header header;
uint8_t msg_type; /* see ICMP message types above */
uint8_t dst[ETH_ALEN];
uint8_t orig[ETH_ALEN];
+ __be16 seqno;
uint8_t uid;
-};
-
-/**
- * batadv_icmp_packet - ICMP packet
- * @icmph: common ICMP header
- * @reserved: not used - useful for alignment
- * @seqno: ICMP sequence number
- */
-struct batadv_icmp_packet {
- struct batadv_icmp_header icmph;
uint8_t reserved;
- __be16 seqno;
};
#define BATADV_RR_LEN 16
-/**
- * batadv_icmp_packet_rr - ICMP RouteRecord packet
- * @icmph: common ICMP header
- * @rr_cur: number of entries the rr array
- * @seqno: ICMP sequence number
- * @rr: route record array
+/* icmp_packet_rr must start with all fields from imcp_packet
+ * as this is assumed by code that handles ICMP packets
*/
struct batadv_icmp_packet_rr {
- struct batadv_icmp_header icmph;
- uint8_t rr_cur;
+ struct batadv_header header;
+ uint8_t msg_type; /* see ICMP message types above */
+ uint8_t dst[ETH_ALEN];
+ uint8_t orig[ETH_ALEN];
__be16 seqno;
+ uint8_t uid;
+ uint8_t rr_cur;
uint8_t rr[BATADV_RR_LEN][ETH_ALEN];
};
@@ -275,32 +209,15 @@
*/
};
-/**
- * struct batadv_frag_packet - fragmented packet
- * @header: common batman packet header with type, compatversion, and ttl
- * @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 {
- struct batadv_header header;
-#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;
-};
+struct batadv_unicast_frag_packet {
+ struct batadv_header header;
+ uint8_t ttvn; /* destination translation table version number */
+ uint8_t dest[ETH_ALEN];
+ uint8_t flags;
+ uint8_t align;
+ uint8_t orig[ETH_ALEN];
+ __be16 seqno;
+} __packed;
struct batadv_bcast_packet {
struct batadv_header header;
@@ -314,6 +231,54 @@
#pragma pack()
+struct batadv_vis_packet {
+ struct batadv_header header;
+ uint8_t vis_type; /* which type of vis-participant sent this? */
+ __be32 seqno; /* sequence number */
+ uint8_t entries; /* number of entries behind this struct */
+ uint8_t reserved;
+ uint8_t vis_orig[ETH_ALEN]; /* originator reporting its neighbors */
+ uint8_t target_orig[ETH_ALEN]; /* who should receive this packet */
+ uint8_t sender_orig[ETH_ALEN]; /* who sent or forwarded this packet */
+};
+
+struct batadv_tt_query_packet {
+ struct batadv_header header;
+ /* the flag field is a combination of:
+ * - TT_REQUEST or TT_RESPONSE
+ * - TT_FULL_TABLE
+ */
+ uint8_t flags;
+ uint8_t dst[ETH_ALEN];
+ uint8_t src[ETH_ALEN];
+ /* the ttvn field is:
+ * if TT_REQUEST: ttvn that triggered the
+ * request
+ * if TT_RESPONSE: new ttvn for the src
+ * orig_node
+ */
+ uint8_t ttvn;
+ /* tt_data field is:
+ * if TT_REQUEST: crc associated with the
+ * ttvn
+ * if TT_RESPONSE: table_size
+ */
+ __be16 tt_data;
+} __packed;
+
+struct batadv_roam_adv_packet {
+ struct batadv_header header;
+ uint8_t reserved;
+ uint8_t dst[ETH_ALEN];
+ uint8_t src[ETH_ALEN];
+ uint8_t client[ETH_ALEN];
+} __packed;
+
+struct batadv_tt_change {
+ uint8_t flags;
+ uint8_t addr[ETH_ALEN];
+} __packed;
+
/**
* struct batadv_coded_packet - network coded packet
* @header: common batman packet header and ttl of first included packet
@@ -346,96 +311,4 @@
__be16 coded_len;
};
-/**
- * struct batadv_unicast_tvlv - generic unicast packet with tvlv payload
- * @header: common batman packet header
- * @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 {
- struct batadv_header header;
- 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;
-};
-
-/**
- * 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;
-};
-
-/**
- * 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
- * @vlan_num: number of announced VLANs. In the TVLV this struct is followed by
- * one batadv_tvlv_tt_vlan_data object per announced vlan
- */
-struct batadv_tvlv_tt_data {
- uint8_t flags;
- uint8_t ttvn;
- __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;
- uint16_t reserved;
-};
-
-/**
- * struct batadv_tvlv_tt_change - translation table diff data
- * @flags: status indicators concerning the non-mesh client (see
- * batadv_tt_client_flags)
- * @reserved: reserved field
- * @addr: mac address of non-mesh client that triggered this tt change
- * @vid: VLAN identifier
- */
-struct batadv_tvlv_tt_change {
- uint8_t flags;
- uint8_t reserved;
- uint8_t addr[ETH_ALEN];
- __be16 vid;
-};
-
-/**
- * struct batadv_tvlv_roam_adv - roaming advertisement
- * @client: mac address of roaming client
- * @vid: VLAN identifier
- */
-struct batadv_tvlv_roam_adv {
- uint8_t client[ETH_ALEN];
- __be16 vid;
-};
-
#endif /* _NET_BATMAN_ADV_PACKET_H_ */