1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#ifndef _NET_BATMAN_ADV_PACKET_H_
21#define _NET_BATMAN_ADV_PACKET_H_
22
23#define BATADV_ETH_P_BATMAN 0x4305
24
25enum batadv_packettype {
26 BATADV_IV_OGM = 0x01,
27 BATADV_ICMP = 0x02,
28 BATADV_UNICAST = 0x03,
29 BATADV_BCAST = 0x04,
30 BATADV_VIS = 0x05,
31 BATADV_UNICAST_FRAG = 0x06,
32 BATADV_TT_QUERY = 0x07,
33 BATADV_ROAM_ADV = 0x08,
34};
35
36
37#define BATADV_COMPAT_VERSION 14
38
39enum batadv_iv_flags {
40 BATADV_NOT_BEST_NEXT_HOP = BIT(3),
41 BATADV_PRIMARIES_FIRST_HOP = BIT(4),
42 BATADV_VIS_SERVER = BIT(5),
43 BATADV_DIRECTLINK = BIT(6),
44};
45
46
47enum batadv_icmp_packettype {
48 BATADV_ECHO_REPLY = 0,
49 BATADV_DESTINATION_UNREACHABLE = 3,
50 BATADV_ECHO_REQUEST = 8,
51 BATADV_TTL_EXCEEDED = 11,
52 BATADV_PARAMETER_PROBLEM = 12,
53};
54
55
56enum batadv_vis_packettype {
57 BATADV_VIS_TYPE_SERVER_SYNC = 0,
58 BATADV_VIS_TYPE_CLIENT_UPDATE = 1,
59};
60
61
62enum batadv_unicast_frag_flags {
63 BATADV_UNI_FRAG_HEAD = BIT(0),
64 BATADV_UNI_FRAG_LARGETAIL = BIT(1),
65};
66
67
68#define BATADV_TT_QUERY_TYPE_MASK 0x3
69
70enum batadv_tt_query_packettype {
71 BATADV_TT_REQUEST = 0,
72 BATADV_TT_RESPONSE = 1,
73};
74
75
76enum batadv_tt_query_flags {
77 BATADV_TT_FULL_TABLE = BIT(2),
78};
79
80
81
82
83
84enum batadv_tt_client_flags {
85 BATADV_TT_CLIENT_DEL = BIT(0),
86 BATADV_TT_CLIENT_ROAM = BIT(1),
87 BATADV_TT_CLIENT_WIFI = BIT(2),
88 BATADV_TT_CLIENT_TEMP = BIT(3),
89 BATADV_TT_CLIENT_NOPURGE = BIT(8),
90 BATADV_TT_CLIENT_NEW = BIT(9),
91 BATADV_TT_CLIENT_PENDING = BIT(10),
92};
93
94
95enum batadv_bla_claimframe {
96 BATADV_CLAIM_TYPE_CLAIM = 0x00,
97 BATADV_CLAIM_TYPE_UNCLAIM = 0x01,
98 BATADV_CLAIM_TYPE_ANNOUNCE = 0x02,
99 BATADV_CLAIM_TYPE_REQUEST = 0x03,
100};
101
102
103
104
105struct batadv_bla_claim_dst {
106 uint8_t magic[3];
107 uint8_t type;
108 __be16 group;
109} __packed;
110
111struct batadv_header {
112 uint8_t packet_type;
113 uint8_t version;
114 uint8_t ttl;
115} __packed;
116
117struct batadv_ogm_packet {
118 struct batadv_header header;
119 uint8_t flags;
120 __be32 seqno;
121 uint8_t orig[ETH_ALEN];
122 uint8_t prev_sender[ETH_ALEN];
123 uint8_t gw_flags;
124 uint8_t tq;
125 uint8_t tt_num_changes;
126 uint8_t ttvn;
127 __be16 tt_crc;
128} __packed;
129
130#define BATADV_OGM_HLEN sizeof(struct batadv_ogm_packet)
131
132struct batadv_icmp_packet {
133 struct batadv_header header;
134 uint8_t msg_type;
135 uint8_t dst[ETH_ALEN];
136 uint8_t orig[ETH_ALEN];
137 __be16 seqno;
138 uint8_t uid;
139 uint8_t reserved;
140} __packed;
141
142#define BATADV_RR_LEN 16
143
144
145
146
147struct batadv_icmp_packet_rr {
148 struct batadv_header header;
149 uint8_t msg_type;
150 uint8_t dst[ETH_ALEN];
151 uint8_t orig[ETH_ALEN];
152 __be16 seqno;
153 uint8_t uid;
154 uint8_t rr_cur;
155 uint8_t rr[BATADV_RR_LEN][ETH_ALEN];
156} __packed;
157
158struct batadv_unicast_packet {
159 struct batadv_header header;
160 uint8_t ttvn;
161 uint8_t dest[ETH_ALEN];
162} __packed;
163
164struct batadv_unicast_frag_packet {
165 struct batadv_header header;
166 uint8_t ttvn;
167 uint8_t dest[ETH_ALEN];
168 uint8_t flags;
169 uint8_t align;
170 uint8_t orig[ETH_ALEN];
171 __be16 seqno;
172} __packed;
173
174struct batadv_bcast_packet {
175 struct batadv_header header;
176 uint8_t reserved;
177 __be32 seqno;
178 uint8_t orig[ETH_ALEN];
179} __packed;
180
181struct batadv_vis_packet {
182 struct batadv_header header;
183 uint8_t vis_type;
184 __be32 seqno;
185 uint8_t entries;
186 uint8_t reserved;
187 uint8_t vis_orig[ETH_ALEN];
188 uint8_t target_orig[ETH_ALEN];
189 uint8_t sender_orig[ETH_ALEN];
190} __packed;
191
192struct batadv_tt_query_packet {
193 struct batadv_header header;
194
195
196
197
198 uint8_t flags;
199 uint8_t dst[ETH_ALEN];
200 uint8_t src[ETH_ALEN];
201
202
203
204
205
206
207 uint8_t ttvn;
208
209
210
211
212
213 __be16 tt_data;
214} __packed;
215
216struct batadv_roam_adv_packet {
217 struct batadv_header header;
218 uint8_t reserved;
219 uint8_t dst[ETH_ALEN];
220 uint8_t src[ETH_ALEN];
221 uint8_t client[ETH_ALEN];
222} __packed;
223
224struct batadv_tt_change {
225 uint8_t flags;
226 uint8_t addr[ETH_ALEN];
227} __packed;
228
229#endif
230