1 /* 2 * This file is auto-generated. Modifications will be lost. 3 * 4 * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/ 5 * for more information. 6 */ 7 #ifndef _UAPI_LINUX_BATADV_PACKET_H_ 8 #define _UAPI_LINUX_BATADV_PACKET_H_ 9 #include <asm/byteorder.h> 10 #include <linux/if_ether.h> 11 #include <linux/types.h> 12 #define batadv_tp_is_error(n) ((__u8) (n) > 127 ? 1 : 0) 13 enum batadv_packettype { 14 BATADV_IV_OGM = 0x00, 15 BATADV_BCAST = 0x01, 16 BATADV_CODED = 0x02, 17 BATADV_ELP = 0x03, 18 BATADV_OGM2 = 0x04, 19 BATADV_MCAST = 0x05, 20 #define BATADV_UNICAST_MIN 0x40 21 BATADV_UNICAST = 0x40, 22 BATADV_UNICAST_FRAG = 0x41, 23 BATADV_UNICAST_4ADDR = 0x42, 24 BATADV_ICMP = 0x43, 25 BATADV_UNICAST_TVLV = 0x44, 26 #define BATADV_UNICAST_MAX 0x7f 27 }; 28 enum batadv_subtype { 29 BATADV_P_DATA = 0x01, 30 BATADV_P_DAT_DHT_GET = 0x02, 31 BATADV_P_DAT_DHT_PUT = 0x03, 32 BATADV_P_DAT_CACHE_REPLY = 0x04, 33 }; 34 #define BATADV_COMPAT_VERSION 15 35 enum batadv_iv_flags { 36 BATADV_NOT_BEST_NEXT_HOP = 1UL << 0, 37 BATADV_PRIMARIES_FIRST_HOP = 1UL << 1, 38 BATADV_DIRECTLINK = 1UL << 2, 39 }; 40 enum batadv_icmp_packettype { 41 BATADV_ECHO_REPLY = 0, 42 BATADV_DESTINATION_UNREACHABLE = 3, 43 BATADV_ECHO_REQUEST = 8, 44 BATADV_TTL_EXCEEDED = 11, 45 BATADV_PARAMETER_PROBLEM = 12, 46 BATADV_TP = 15, 47 }; 48 enum batadv_mcast_flags { 49 BATADV_MCAST_WANT_ALL_UNSNOOPABLES = 1UL << 0, 50 BATADV_MCAST_WANT_ALL_IPV4 = 1UL << 1, 51 BATADV_MCAST_WANT_ALL_IPV6 = 1UL << 2, 52 BATADV_MCAST_WANT_NO_RTR4 = 1UL << 3, 53 BATADV_MCAST_WANT_NO_RTR6 = 1UL << 4, 54 BATADV_MCAST_HAVE_MC_PTYPE_CAPA = 1UL << 5, 55 }; 56 #define BATADV_TT_DATA_TYPE_MASK 0x0F 57 enum batadv_tt_data_flags { 58 BATADV_TT_OGM_DIFF = 1UL << 0, 59 BATADV_TT_REQUEST = 1UL << 1, 60 BATADV_TT_RESPONSE = 1UL << 2, 61 BATADV_TT_FULL_TABLE = 1UL << 4, 62 }; 63 enum batadv_vlan_flags { 64 BATADV_VLAN_HAS_TAG = 1UL << 15, 65 }; 66 enum batadv_bla_claimframe { 67 BATADV_CLAIM_TYPE_CLAIM = 0x00, 68 BATADV_CLAIM_TYPE_UNCLAIM = 0x01, 69 BATADV_CLAIM_TYPE_ANNOUNCE = 0x02, 70 BATADV_CLAIM_TYPE_REQUEST = 0x03, 71 BATADV_CLAIM_TYPE_LOOPDETECT = 0x04, 72 }; 73 enum batadv_tvlv_type { 74 BATADV_TVLV_GW = 0x01, 75 BATADV_TVLV_DAT = 0x02, 76 BATADV_TVLV_NC = 0x03, 77 BATADV_TVLV_TT = 0x04, 78 BATADV_TVLV_ROAM = 0x05, 79 BATADV_TVLV_MCAST = 0x06, 80 BATADV_TVLV_MCAST_TRACKER = 0x07, 81 }; 82 #pragma pack(2) 83 struct batadv_bla_claim_dst { 84 __u8 magic[3]; 85 __u8 type; 86 __be16 group; 87 }; 88 struct batadv_ogm_packet { 89 __u8 packet_type; 90 __u8 version; 91 __u8 ttl; 92 __u8 flags; 93 __be32 seqno; 94 __u8 orig[ETH_ALEN]; 95 __u8 prev_sender[ETH_ALEN]; 96 __u8 reserved; 97 __u8 tq; 98 __be16 tvlv_len; 99 }; 100 #define BATADV_OGM_HLEN sizeof(struct batadv_ogm_packet) 101 struct batadv_ogm2_packet { 102 __u8 packet_type; 103 __u8 version; 104 __u8 ttl; 105 __u8 flags; 106 __be32 seqno; 107 __u8 orig[ETH_ALEN]; 108 __be16 tvlv_len; 109 __be32 throughput; 110 }; 111 #define BATADV_OGM2_HLEN sizeof(struct batadv_ogm2_packet) 112 struct batadv_elp_packet { 113 __u8 packet_type; 114 __u8 version; 115 __u8 orig[ETH_ALEN]; 116 __be32 seqno; 117 __be32 elp_interval; 118 }; 119 #define BATADV_ELP_HLEN sizeof(struct batadv_elp_packet) 120 struct batadv_icmp_header { 121 __u8 packet_type; 122 __u8 version; 123 __u8 ttl; 124 __u8 msg_type; 125 __u8 dst[ETH_ALEN]; 126 __u8 orig[ETH_ALEN]; 127 __u8 uid; 128 __u8 align[3]; 129 }; 130 struct batadv_icmp_packet { 131 __u8 packet_type; 132 __u8 version; 133 __u8 ttl; 134 __u8 msg_type; 135 __u8 dst[ETH_ALEN]; 136 __u8 orig[ETH_ALEN]; 137 __u8 uid; 138 __u8 reserved; 139 __be16 seqno; 140 }; 141 struct batadv_icmp_tp_packet { 142 __u8 packet_type; 143 __u8 version; 144 __u8 ttl; 145 __u8 msg_type; 146 __u8 dst[ETH_ALEN]; 147 __u8 orig[ETH_ALEN]; 148 __u8 uid; 149 __u8 subtype; 150 __u8 session[2]; 151 __be32 seqno; 152 __be32 timestamp; 153 }; 154 enum batadv_icmp_tp_subtype { 155 BATADV_TP_MSG = 0, 156 BATADV_TP_ACK, 157 }; 158 #define BATADV_RR_LEN 16 159 struct batadv_icmp_packet_rr { 160 __u8 packet_type; 161 __u8 version; 162 __u8 ttl; 163 __u8 msg_type; 164 __u8 dst[ETH_ALEN]; 165 __u8 orig[ETH_ALEN]; 166 __u8 uid; 167 __u8 rr_cur; 168 __be16 seqno; 169 __u8 rr[BATADV_RR_LEN][ETH_ALEN]; 170 }; 171 #define BATADV_ICMP_MAX_PACKET_SIZE sizeof(struct batadv_icmp_packet_rr) 172 struct batadv_unicast_packet { 173 __u8 packet_type; 174 __u8 version; 175 __u8 ttl; 176 __u8 ttvn; 177 __u8 dest[ETH_ALEN]; 178 }; 179 struct batadv_unicast_4addr_packet { 180 struct batadv_unicast_packet u; 181 __u8 src[ETH_ALEN]; 182 __u8 subtype; 183 __u8 reserved; 184 }; 185 struct batadv_frag_packet { 186 __u8 packet_type; 187 __u8 version; 188 __u8 ttl; 189 #ifdef __BIG_ENDIAN_BITFIELD 190 __u8 no : 4; 191 __u8 priority : 3; 192 __u8 reserved : 1; 193 #elif defined(__LITTLE_ENDIAN_BITFIELD) 194 __u8 reserved : 1; 195 __u8 priority : 3; 196 __u8 no : 4; 197 #else 198 #error "unknown bitfield endianness" 199 #endif 200 __u8 dest[ETH_ALEN]; 201 __u8 orig[ETH_ALEN]; 202 __be16 seqno; 203 __be16 total_size; 204 }; 205 struct batadv_bcast_packet { 206 __u8 packet_type; 207 __u8 version; 208 __u8 ttl; 209 __u8 reserved; 210 __be32 seqno; 211 __u8 orig[ETH_ALEN]; 212 }; 213 struct batadv_mcast_packet { 214 __u8 packet_type; 215 __u8 version; 216 __u8 ttl; 217 __u8 reserved; 218 __be16 tvlv_len; 219 }; 220 struct batadv_coded_packet { 221 __u8 packet_type; 222 __u8 version; 223 __u8 ttl; 224 __u8 first_ttvn; 225 __u8 first_source[ETH_ALEN]; 226 __u8 first_orig_dest[ETH_ALEN]; 227 __be32 first_crc; 228 __u8 second_ttl; 229 __u8 second_ttvn; 230 __u8 second_dest[ETH_ALEN]; 231 __u8 second_source[ETH_ALEN]; 232 __u8 second_orig_dest[ETH_ALEN]; 233 __be32 second_crc; 234 __be16 coded_len; 235 }; 236 struct batadv_unicast_tvlv_packet { 237 __u8 packet_type; 238 __u8 version; 239 __u8 ttl; 240 __u8 reserved; 241 __u8 dst[ETH_ALEN]; 242 __u8 src[ETH_ALEN]; 243 __be16 tvlv_len; 244 __u16 align; 245 }; 246 struct batadv_tvlv_hdr { 247 __u8 type; 248 __u8 version; 249 __be16 len; 250 }; 251 struct batadv_tvlv_gateway_data { 252 __be32 bandwidth_down; 253 __be32 bandwidth_up; 254 }; 255 struct batadv_tvlv_tt_data { 256 __u8 flags; 257 __u8 ttvn; 258 __be16 num_vlan; 259 }; 260 struct batadv_tvlv_tt_vlan_data { 261 __be32 crc; 262 __be16 vid; 263 __u16 reserved; 264 }; 265 struct batadv_tvlv_tt_change { 266 __u8 flags; 267 __u8 reserved[3]; 268 __u8 addr[ETH_ALEN]; 269 __be16 vid; 270 }; 271 struct batadv_tvlv_roam_adv { 272 __u8 client[ETH_ALEN]; 273 __be16 vid; 274 }; 275 struct batadv_tvlv_mcast_data { 276 __u8 flags; 277 __u8 reserved[3]; 278 }; 279 struct batadv_tvlv_mcast_tracker { 280 __be16 num_dests; 281 }; 282 #pragma pack() 283 #endif 284