122851890Sopenharmony_ci/****************************************************************************
222851890Sopenharmony_ci ****************************************************************************
322851890Sopenharmony_ci ***
422851890Sopenharmony_ci ***   This header was automatically generated from a Linux kernel header
522851890Sopenharmony_ci ***   of the same name, to make information necessary for userspace to
622851890Sopenharmony_ci ***   call into the kernel available to libc.  It contains only constants,
722851890Sopenharmony_ci ***   structures, and macros generated from the original header, and thus,
822851890Sopenharmony_ci ***   contains no copyrightable information.
922851890Sopenharmony_ci ***
1022851890Sopenharmony_ci ***   To edit the content of this header, modify the corresponding
1122851890Sopenharmony_ci ***   source file (e.g. under external/kernel-headers/original/) then
1222851890Sopenharmony_ci ***   run bionic/libc/kernel/tools/update_all.py
1322851890Sopenharmony_ci ***
1422851890Sopenharmony_ci ***   Any manual change here will be lost the next time this script will
1522851890Sopenharmony_ci ***   be run. You've been warned!
1622851890Sopenharmony_ci ***
1722851890Sopenharmony_ci ****************************************************************************
1822851890Sopenharmony_ci ****************************************************************************/
1922851890Sopenharmony_ci#ifndef _UAPI_LINUX_BATADV_PACKET_H_
2022851890Sopenharmony_ci#define _UAPI_LINUX_BATADV_PACKET_H_
2122851890Sopenharmony_ci#include <asm/byteorder.h>
2222851890Sopenharmony_ci#include <linux/if_ether.h>
2322851890Sopenharmony_ci#include <linux/types.h>
2422851890Sopenharmony_ci#define batadv_tp_is_error(n) ((__u8) (n) > 127 ? 1 : 0)
2522851890Sopenharmony_cienum batadv_packettype {
2622851890Sopenharmony_ci  BATADV_IV_OGM = 0x00,
2722851890Sopenharmony_ci  BATADV_BCAST = 0x01,
2822851890Sopenharmony_ci  BATADV_CODED = 0x02,
2922851890Sopenharmony_ci  BATADV_ELP = 0x03,
3022851890Sopenharmony_ci  BATADV_OGM2 = 0x04,
3122851890Sopenharmony_ci#define BATADV_UNICAST_MIN 0x40
3222851890Sopenharmony_ci  BATADV_UNICAST = 0x40,
3322851890Sopenharmony_ci  BATADV_UNICAST_FRAG = 0x41,
3422851890Sopenharmony_ci  BATADV_UNICAST_4ADDR = 0x42,
3522851890Sopenharmony_ci  BATADV_ICMP = 0x43,
3622851890Sopenharmony_ci  BATADV_UNICAST_TVLV = 0x44,
3722851890Sopenharmony_ci#define BATADV_UNICAST_MAX 0x7f
3822851890Sopenharmony_ci};
3922851890Sopenharmony_cienum batadv_subtype {
4022851890Sopenharmony_ci  BATADV_P_DATA = 0x01,
4122851890Sopenharmony_ci  BATADV_P_DAT_DHT_GET = 0x02,
4222851890Sopenharmony_ci  BATADV_P_DAT_DHT_PUT = 0x03,
4322851890Sopenharmony_ci  BATADV_P_DAT_CACHE_REPLY = 0x04,
4422851890Sopenharmony_ci};
4522851890Sopenharmony_ci#define BATADV_COMPAT_VERSION 15
4622851890Sopenharmony_cienum batadv_iv_flags {
4722851890Sopenharmony_ci  BATADV_NOT_BEST_NEXT_HOP = 1UL << 0,
4822851890Sopenharmony_ci  BATADV_PRIMARIES_FIRST_HOP = 1UL << 1,
4922851890Sopenharmony_ci  BATADV_DIRECTLINK = 1UL << 2,
5022851890Sopenharmony_ci};
5122851890Sopenharmony_cienum batadv_icmp_packettype {
5222851890Sopenharmony_ci  BATADV_ECHO_REPLY = 0,
5322851890Sopenharmony_ci  BATADV_DESTINATION_UNREACHABLE = 3,
5422851890Sopenharmony_ci  BATADV_ECHO_REQUEST = 8,
5522851890Sopenharmony_ci  BATADV_TTL_EXCEEDED = 11,
5622851890Sopenharmony_ci  BATADV_PARAMETER_PROBLEM = 12,
5722851890Sopenharmony_ci  BATADV_TP = 15,
5822851890Sopenharmony_ci};
5922851890Sopenharmony_cienum batadv_mcast_flags {
6022851890Sopenharmony_ci  BATADV_MCAST_WANT_ALL_UNSNOOPABLES = 1UL << 0,
6122851890Sopenharmony_ci  BATADV_MCAST_WANT_ALL_IPV4 = 1UL << 1,
6222851890Sopenharmony_ci  BATADV_MCAST_WANT_ALL_IPV6 = 1UL << 2,
6322851890Sopenharmony_ci  BATADV_MCAST_WANT_NO_RTR4 = 1UL << 3,
6422851890Sopenharmony_ci  BATADV_MCAST_WANT_NO_RTR6 = 1UL << 4,
6522851890Sopenharmony_ci};
6622851890Sopenharmony_ci#define BATADV_TT_DATA_TYPE_MASK 0x0F
6722851890Sopenharmony_cienum batadv_tt_data_flags {
6822851890Sopenharmony_ci  BATADV_TT_OGM_DIFF = 1UL << 0,
6922851890Sopenharmony_ci  BATADV_TT_REQUEST = 1UL << 1,
7022851890Sopenharmony_ci  BATADV_TT_RESPONSE = 1UL << 2,
7122851890Sopenharmony_ci  BATADV_TT_FULL_TABLE = 1UL << 4,
7222851890Sopenharmony_ci};
7322851890Sopenharmony_cienum batadv_vlan_flags {
7422851890Sopenharmony_ci  BATADV_VLAN_HAS_TAG = 1UL << 15,
7522851890Sopenharmony_ci};
7622851890Sopenharmony_cienum batadv_bla_claimframe {
7722851890Sopenharmony_ci  BATADV_CLAIM_TYPE_CLAIM = 0x00,
7822851890Sopenharmony_ci  BATADV_CLAIM_TYPE_UNCLAIM = 0x01,
7922851890Sopenharmony_ci  BATADV_CLAIM_TYPE_ANNOUNCE = 0x02,
8022851890Sopenharmony_ci  BATADV_CLAIM_TYPE_REQUEST = 0x03,
8122851890Sopenharmony_ci  BATADV_CLAIM_TYPE_LOOPDETECT = 0x04,
8222851890Sopenharmony_ci};
8322851890Sopenharmony_cienum batadv_tvlv_type {
8422851890Sopenharmony_ci  BATADV_TVLV_GW = 0x01,
8522851890Sopenharmony_ci  BATADV_TVLV_DAT = 0x02,
8622851890Sopenharmony_ci  BATADV_TVLV_NC = 0x03,
8722851890Sopenharmony_ci  BATADV_TVLV_TT = 0x04,
8822851890Sopenharmony_ci  BATADV_TVLV_ROAM = 0x05,
8922851890Sopenharmony_ci  BATADV_TVLV_MCAST = 0x06,
9022851890Sopenharmony_ci};
9122851890Sopenharmony_ci#pragma pack(2)
9222851890Sopenharmony_cistruct batadv_bla_claim_dst {
9322851890Sopenharmony_ci  __u8 magic[3];
9422851890Sopenharmony_ci  __u8 type;
9522851890Sopenharmony_ci  __be16 group;
9622851890Sopenharmony_ci};
9722851890Sopenharmony_cistruct batadv_ogm_packet {
9822851890Sopenharmony_ci  __u8 packet_type;
9922851890Sopenharmony_ci  __u8 version;
10022851890Sopenharmony_ci  __u8 ttl;
10122851890Sopenharmony_ci  __u8 flags;
10222851890Sopenharmony_ci  __be32 seqno;
10322851890Sopenharmony_ci  __u8 orig[ETH_ALEN];
10422851890Sopenharmony_ci  __u8 prev_sender[ETH_ALEN];
10522851890Sopenharmony_ci  __u8 reserved;
10622851890Sopenharmony_ci  __u8 tq;
10722851890Sopenharmony_ci  __be16 tvlv_len;
10822851890Sopenharmony_ci};
10922851890Sopenharmony_ci#define BATADV_OGM_HLEN sizeof(struct batadv_ogm_packet)
11022851890Sopenharmony_cistruct batadv_ogm2_packet {
11122851890Sopenharmony_ci  __u8 packet_type;
11222851890Sopenharmony_ci  __u8 version;
11322851890Sopenharmony_ci  __u8 ttl;
11422851890Sopenharmony_ci  __u8 flags;
11522851890Sopenharmony_ci  __be32 seqno;
11622851890Sopenharmony_ci  __u8 orig[ETH_ALEN];
11722851890Sopenharmony_ci  __be16 tvlv_len;
11822851890Sopenharmony_ci  __be32 throughput;
11922851890Sopenharmony_ci};
12022851890Sopenharmony_ci#define BATADV_OGM2_HLEN sizeof(struct batadv_ogm2_packet)
12122851890Sopenharmony_cistruct batadv_elp_packet {
12222851890Sopenharmony_ci  __u8 packet_type;
12322851890Sopenharmony_ci  __u8 version;
12422851890Sopenharmony_ci  __u8 orig[ETH_ALEN];
12522851890Sopenharmony_ci  __be32 seqno;
12622851890Sopenharmony_ci  __be32 elp_interval;
12722851890Sopenharmony_ci};
12822851890Sopenharmony_ci#define BATADV_ELP_HLEN sizeof(struct batadv_elp_packet)
12922851890Sopenharmony_cistruct batadv_icmp_header {
13022851890Sopenharmony_ci  __u8 packet_type;
13122851890Sopenharmony_ci  __u8 version;
13222851890Sopenharmony_ci  __u8 ttl;
13322851890Sopenharmony_ci  __u8 msg_type;
13422851890Sopenharmony_ci  __u8 dst[ETH_ALEN];
13522851890Sopenharmony_ci  __u8 orig[ETH_ALEN];
13622851890Sopenharmony_ci  __u8 uid;
13722851890Sopenharmony_ci  __u8 align[3];
13822851890Sopenharmony_ci};
13922851890Sopenharmony_cistruct batadv_icmp_packet {
14022851890Sopenharmony_ci  __u8 packet_type;
14122851890Sopenharmony_ci  __u8 version;
14222851890Sopenharmony_ci  __u8 ttl;
14322851890Sopenharmony_ci  __u8 msg_type;
14422851890Sopenharmony_ci  __u8 dst[ETH_ALEN];
14522851890Sopenharmony_ci  __u8 orig[ETH_ALEN];
14622851890Sopenharmony_ci  __u8 uid;
14722851890Sopenharmony_ci  __u8 reserved;
14822851890Sopenharmony_ci  __be16 seqno;
14922851890Sopenharmony_ci};
15022851890Sopenharmony_cistruct batadv_icmp_tp_packet {
15122851890Sopenharmony_ci  __u8 packet_type;
15222851890Sopenharmony_ci  __u8 version;
15322851890Sopenharmony_ci  __u8 ttl;
15422851890Sopenharmony_ci  __u8 msg_type;
15522851890Sopenharmony_ci  __u8 dst[ETH_ALEN];
15622851890Sopenharmony_ci  __u8 orig[ETH_ALEN];
15722851890Sopenharmony_ci  __u8 uid;
15822851890Sopenharmony_ci  __u8 subtype;
15922851890Sopenharmony_ci  __u8 session[2];
16022851890Sopenharmony_ci  __be32 seqno;
16122851890Sopenharmony_ci  __be32 timestamp;
16222851890Sopenharmony_ci};
16322851890Sopenharmony_cienum batadv_icmp_tp_subtype {
16422851890Sopenharmony_ci  BATADV_TP_MSG = 0,
16522851890Sopenharmony_ci  BATADV_TP_ACK,
16622851890Sopenharmony_ci};
16722851890Sopenharmony_ci#define BATADV_RR_LEN 16
16822851890Sopenharmony_cistruct batadv_icmp_packet_rr {
16922851890Sopenharmony_ci  __u8 packet_type;
17022851890Sopenharmony_ci  __u8 version;
17122851890Sopenharmony_ci  __u8 ttl;
17222851890Sopenharmony_ci  __u8 msg_type;
17322851890Sopenharmony_ci  __u8 dst[ETH_ALEN];
17422851890Sopenharmony_ci  __u8 orig[ETH_ALEN];
17522851890Sopenharmony_ci  __u8 uid;
17622851890Sopenharmony_ci  __u8 rr_cur;
17722851890Sopenharmony_ci  __be16 seqno;
17822851890Sopenharmony_ci  __u8 rr[BATADV_RR_LEN][ETH_ALEN];
17922851890Sopenharmony_ci};
18022851890Sopenharmony_ci#define BATADV_ICMP_MAX_PACKET_SIZE sizeof(struct batadv_icmp_packet_rr)
18122851890Sopenharmony_cistruct batadv_unicast_packet {
18222851890Sopenharmony_ci  __u8 packet_type;
18322851890Sopenharmony_ci  __u8 version;
18422851890Sopenharmony_ci  __u8 ttl;
18522851890Sopenharmony_ci  __u8 ttvn;
18622851890Sopenharmony_ci  __u8 dest[ETH_ALEN];
18722851890Sopenharmony_ci};
18822851890Sopenharmony_cistruct batadv_unicast_4addr_packet {
18922851890Sopenharmony_ci  struct batadv_unicast_packet u;
19022851890Sopenharmony_ci  __u8 src[ETH_ALEN];
19122851890Sopenharmony_ci  __u8 subtype;
19222851890Sopenharmony_ci  __u8 reserved;
19322851890Sopenharmony_ci};
19422851890Sopenharmony_cistruct batadv_frag_packet {
19522851890Sopenharmony_ci  __u8 packet_type;
19622851890Sopenharmony_ci  __u8 version;
19722851890Sopenharmony_ci  __u8 ttl;
19822851890Sopenharmony_ci#ifdef __BIG_ENDIAN_BITFIELD
19922851890Sopenharmony_ci  __u8 no : 4;
20022851890Sopenharmony_ci  __u8 priority : 3;
20122851890Sopenharmony_ci  __u8 reserved : 1;
20222851890Sopenharmony_ci#elif defined(__LITTLE_ENDIAN_BITFIELD)
20322851890Sopenharmony_ci  __u8 reserved : 1;
20422851890Sopenharmony_ci  __u8 priority : 3;
20522851890Sopenharmony_ci  __u8 no : 4;
20622851890Sopenharmony_ci#else
20722851890Sopenharmony_ci#error "unknown bitfield endianness"
20822851890Sopenharmony_ci#endif
20922851890Sopenharmony_ci  __u8 dest[ETH_ALEN];
21022851890Sopenharmony_ci  __u8 orig[ETH_ALEN];
21122851890Sopenharmony_ci  __be16 seqno;
21222851890Sopenharmony_ci  __be16 total_size;
21322851890Sopenharmony_ci};
21422851890Sopenharmony_cistruct batadv_bcast_packet {
21522851890Sopenharmony_ci  __u8 packet_type;
21622851890Sopenharmony_ci  __u8 version;
21722851890Sopenharmony_ci  __u8 ttl;
21822851890Sopenharmony_ci  __u8 reserved;
21922851890Sopenharmony_ci  __be32 seqno;
22022851890Sopenharmony_ci  __u8 orig[ETH_ALEN];
22122851890Sopenharmony_ci};
22222851890Sopenharmony_cistruct batadv_coded_packet {
22322851890Sopenharmony_ci  __u8 packet_type;
22422851890Sopenharmony_ci  __u8 version;
22522851890Sopenharmony_ci  __u8 ttl;
22622851890Sopenharmony_ci  __u8 first_ttvn;
22722851890Sopenharmony_ci  __u8 first_source[ETH_ALEN];
22822851890Sopenharmony_ci  __u8 first_orig_dest[ETH_ALEN];
22922851890Sopenharmony_ci  __be32 first_crc;
23022851890Sopenharmony_ci  __u8 second_ttl;
23122851890Sopenharmony_ci  __u8 second_ttvn;
23222851890Sopenharmony_ci  __u8 second_dest[ETH_ALEN];
23322851890Sopenharmony_ci  __u8 second_source[ETH_ALEN];
23422851890Sopenharmony_ci  __u8 second_orig_dest[ETH_ALEN];
23522851890Sopenharmony_ci  __be32 second_crc;
23622851890Sopenharmony_ci  __be16 coded_len;
23722851890Sopenharmony_ci};
23822851890Sopenharmony_cistruct batadv_unicast_tvlv_packet {
23922851890Sopenharmony_ci  __u8 packet_type;
24022851890Sopenharmony_ci  __u8 version;
24122851890Sopenharmony_ci  __u8 ttl;
24222851890Sopenharmony_ci  __u8 reserved;
24322851890Sopenharmony_ci  __u8 dst[ETH_ALEN];
24422851890Sopenharmony_ci  __u8 src[ETH_ALEN];
24522851890Sopenharmony_ci  __be16 tvlv_len;
24622851890Sopenharmony_ci  __u16 align;
24722851890Sopenharmony_ci};
24822851890Sopenharmony_cistruct batadv_tvlv_hdr {
24922851890Sopenharmony_ci  __u8 type;
25022851890Sopenharmony_ci  __u8 version;
25122851890Sopenharmony_ci  __be16 len;
25222851890Sopenharmony_ci};
25322851890Sopenharmony_cistruct batadv_tvlv_gateway_data {
25422851890Sopenharmony_ci  __be32 bandwidth_down;
25522851890Sopenharmony_ci  __be32 bandwidth_up;
25622851890Sopenharmony_ci};
25722851890Sopenharmony_cistruct batadv_tvlv_tt_data {
25822851890Sopenharmony_ci  __u8 flags;
25922851890Sopenharmony_ci  __u8 ttvn;
26022851890Sopenharmony_ci  __be16 num_vlan;
26122851890Sopenharmony_ci};
26222851890Sopenharmony_cistruct batadv_tvlv_tt_vlan_data {
26322851890Sopenharmony_ci  __be32 crc;
26422851890Sopenharmony_ci  __be16 vid;
26522851890Sopenharmony_ci  __u16 reserved;
26622851890Sopenharmony_ci};
26722851890Sopenharmony_cistruct batadv_tvlv_tt_change {
26822851890Sopenharmony_ci  __u8 flags;
26922851890Sopenharmony_ci  __u8 reserved[3];
27022851890Sopenharmony_ci  __u8 addr[ETH_ALEN];
27122851890Sopenharmony_ci  __be16 vid;
27222851890Sopenharmony_ci};
27322851890Sopenharmony_cistruct batadv_tvlv_roam_adv {
27422851890Sopenharmony_ci  __u8 client[ETH_ALEN];
27522851890Sopenharmony_ci  __be16 vid;
27622851890Sopenharmony_ci};
27722851890Sopenharmony_cistruct batadv_tvlv_mcast_data {
27822851890Sopenharmony_ci  __u8 flags;
27922851890Sopenharmony_ci  __u8 reserved[3];
28022851890Sopenharmony_ci};
28122851890Sopenharmony_ci#pragma pack()
28222851890Sopenharmony_ci#endif
283