1 /* SPDX-License-Identifier: MIT */
2 /* Copyright (C) 2016-2018  B.A.T.M.A.N. contributors:
3  *
4  * Matthias Schiffer
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a
7  * copy of this software and associated documentation files (the "Software"),
8  * to deal in the Software without restriction, including without limitation
9  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10  * and/or sell copies of the Software, and to permit persons to whom the
11  * Software is furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22  * DEALINGS IN THE SOFTWARE.
23  */
24 
25 #ifndef _UAPI_LINUX_BATMAN_ADV_H_
26 #define _UAPI_LINUX_BATMAN_ADV_H_
27 
28 #define BATADV_NL_NAME "batadv"
29 
30 #define BATADV_NL_MCAST_GROUP_TPMETER	"tpmeter"
31 
32 /**
33  * enum batadv_tt_client_flags - TT client specific flags
34  *
35  * Bits from 0 to 7 are called _remote flags_ because they are sent on the wire.
36  * Bits from 8 to 15 are called _local flags_ because they are used for local
37  * computations only.
38  *
39  * Bits from 4 to 7 - a subset of remote flags - are ensured to be in sync with
40  * the other nodes in the network. To achieve this goal these flags are included
41  * in the TT CRC computation.
42  */
43 enum batadv_tt_client_flags {
44 	/**
45 	 * @BATADV_TT_CLIENT_DEL: the client has to be deleted from the table
46 	 */
47 	BATADV_TT_CLIENT_DEL     = (1 << 0),
48 
49 	/**
50 	 * @BATADV_TT_CLIENT_ROAM: the client roamed to/from another node and
51 	 * the new update telling its new real location has not been
52 	 * received/sent yet
53 	 */
54 	BATADV_TT_CLIENT_ROAM    = (1 << 1),
55 
56 	/**
57 	 * @BATADV_TT_CLIENT_WIFI: this client is connected through a wifi
58 	 * interface. This information is used by the "AP Isolation" feature
59 	 */
60 	BATADV_TT_CLIENT_WIFI    = (1 << 4),
61 
62 	/**
63 	 * @BATADV_TT_CLIENT_ISOLA: this client is considered "isolated". This
64 	 * information is used by the Extended Isolation feature
65 	 */
66 	BATADV_TT_CLIENT_ISOLA	 = (1 << 5),
67 
68 	/**
69 	 * @BATADV_TT_CLIENT_NOPURGE: this client should never be removed from
70 	 * the table
71 	 */
72 	BATADV_TT_CLIENT_NOPURGE = (1 << 8),
73 
74 	/**
75 	 * @BATADV_TT_CLIENT_NEW: this client has been added to the local table
76 	 * but has not been announced yet
77 	 */
78 	BATADV_TT_CLIENT_NEW     = (1 << 9),
79 
80 	/**
81 	 * @BATADV_TT_CLIENT_PENDING: this client is marked for removal but it
82 	 * is kept in the table for one more originator interval for consistency
83 	 * purposes
84 	 */
85 	BATADV_TT_CLIENT_PENDING = (1 << 10),
86 
87 	/**
88 	 * @BATADV_TT_CLIENT_TEMP: this global client has been detected to be
89 	 * part of the network but no nnode has already announced it
90 	 */
91 	BATADV_TT_CLIENT_TEMP	 = (1 << 11),
92 };
93 
94 /**
95  * enum batadv_mcast_flags_priv - Private, own multicast flags
96  *
97  * These are internal, multicast related flags. Currently they describe certain
98  * multicast related attributes of the segment this originator bridges into the
99  * mesh.
100  *
101  * Those attributes are used to determine the public multicast flags this
102  * originator is going to announce via TT.
103  *
104  * For netlink, if BATADV_MCAST_FLAGS_BRIDGED is unset then all querier
105  * related flags are undefined.
106  */
107 enum batadv_mcast_flags_priv {
108 	/**
109 	 * @BATADV_MCAST_FLAGS_BRIDGED: There is a bridge on top of the mesh
110 	 * interface.
111 	 */
112 	BATADV_MCAST_FLAGS_BRIDGED			= (1 << 0),
113 
114 	/**
115 	 * @BATADV_MCAST_FLAGS_QUERIER_IPV4_EXISTS: Whether an IGMP querier
116 	 * exists in the mesh
117 	 */
118 	BATADV_MCAST_FLAGS_QUERIER_IPV4_EXISTS		= (1 << 1),
119 
120 	/**
121 	 * @BATADV_MCAST_FLAGS_QUERIER_IPV6_EXISTS: Whether an MLD querier
122 	 * exists in the mesh
123 	 */
124 	BATADV_MCAST_FLAGS_QUERIER_IPV6_EXISTS		= (1 << 2),
125 
126 	/**
127 	 * @BATADV_MCAST_FLAGS_QUERIER_IPV4_SHADOWING: If an IGMP querier
128 	 * exists, whether it is potentially shadowing multicast listeners
129 	 * (i.e. querier is behind our own bridge segment)
130 	 */
131 	BATADV_MCAST_FLAGS_QUERIER_IPV4_SHADOWING	= (1 << 3),
132 
133 	/**
134 	 * @BATADV_MCAST_FLAGS_QUERIER_IPV6_SHADOWING: If an MLD querier
135 	 * exists, whether it is potentially shadowing multicast listeners
136 	 * (i.e. querier is behind our own bridge segment)
137 	 */
138 	BATADV_MCAST_FLAGS_QUERIER_IPV6_SHADOWING	= (1 << 4),
139 };
140 
141 /**
142  * enum batadv_nl_attrs - batman-adv netlink attributes
143  */
144 enum batadv_nl_attrs {
145 	/**
146 	 * @BATADV_ATTR_UNSPEC: unspecified attribute to catch errors
147 	 */
148 	BATADV_ATTR_UNSPEC,
149 
150 	/**
151 	 * @BATADV_ATTR_VERSION: batman-adv version string
152 	 */
153 	BATADV_ATTR_VERSION,
154 
155 	/**
156 	 * @BATADV_ATTR_ALGO_NAME: name of routing algorithm
157 	 */
158 	BATADV_ATTR_ALGO_NAME,
159 
160 	/**
161 	 * @BATADV_ATTR_MESH_IFINDEX: index of the batman-adv interface
162 	 */
163 	BATADV_ATTR_MESH_IFINDEX,
164 
165 	/**
166 	 * @BATADV_ATTR_MESH_IFNAME: name of the batman-adv interface
167 	 */
168 	BATADV_ATTR_MESH_IFNAME,
169 
170 	/**
171 	 * @BATADV_ATTR_MESH_ADDRESS: mac address of the batman-adv interface
172 	 */
173 	BATADV_ATTR_MESH_ADDRESS,
174 
175 	/**
176 	 * @BATADV_ATTR_HARD_IFINDEX: index of the non-batman-adv interface
177 	 */
178 	BATADV_ATTR_HARD_IFINDEX,
179 
180 	/**
181 	 * @BATADV_ATTR_HARD_IFNAME: name of the non-batman-adv interface
182 	 */
183 	BATADV_ATTR_HARD_IFNAME,
184 
185 	/**
186 	 * @BATADV_ATTR_HARD_ADDRESS: mac address of the non-batman-adv
187 	 * interface
188 	 */
189 	BATADV_ATTR_HARD_ADDRESS,
190 
191 	/**
192 	 * @BATADV_ATTR_ORIG_ADDRESS: originator mac address
193 	 */
194 	BATADV_ATTR_ORIG_ADDRESS,
195 
196 	/**
197 	 * @BATADV_ATTR_TPMETER_RESULT: result of run (see
198 	 * batadv_tp_meter_status)
199 	 */
200 	BATADV_ATTR_TPMETER_RESULT,
201 
202 	/**
203 	 * @BATADV_ATTR_TPMETER_TEST_TIME: time (msec) the run took
204 	 */
205 	BATADV_ATTR_TPMETER_TEST_TIME,
206 
207 	/**
208 	 * @BATADV_ATTR_TPMETER_BYTES: amount of acked bytes during run
209 	 */
210 	BATADV_ATTR_TPMETER_BYTES,
211 
212 	/**
213 	 * @BATADV_ATTR_TPMETER_COOKIE: session cookie to match tp_meter session
214 	 */
215 	BATADV_ATTR_TPMETER_COOKIE,
216 
217 	/**
218 	 * @BATADV_ATTR_PAD: attribute used for padding for 64-bit alignment
219 	 */
220 	BATADV_ATTR_PAD,
221 
222 	/**
223 	 * @BATADV_ATTR_ACTIVE: Flag indicating if the hard interface is active
224 	 */
225 	BATADV_ATTR_ACTIVE,
226 
227 	/**
228 	 * @BATADV_ATTR_TT_ADDRESS: Client MAC address
229 	 */
230 	BATADV_ATTR_TT_ADDRESS,
231 
232 	/**
233 	 * @BATADV_ATTR_TT_TTVN: Translation table version
234 	 */
235 	BATADV_ATTR_TT_TTVN,
236 
237 	/**
238 	 * @BATADV_ATTR_TT_LAST_TTVN: Previous translation table version
239 	 */
240 	BATADV_ATTR_TT_LAST_TTVN,
241 
242 	/**
243 	 * @BATADV_ATTR_TT_CRC32: CRC32 over translation table
244 	 */
245 	BATADV_ATTR_TT_CRC32,
246 
247 	/**
248 	 * @BATADV_ATTR_TT_VID: VLAN ID
249 	 */
250 	BATADV_ATTR_TT_VID,
251 
252 	/**
253 	 * @BATADV_ATTR_TT_FLAGS: Translation table client flags
254 	 */
255 	BATADV_ATTR_TT_FLAGS,
256 
257 	/**
258 	 * @BATADV_ATTR_FLAG_BEST: Flags indicating entry is the best
259 	 */
260 	BATADV_ATTR_FLAG_BEST,
261 
262 	/**
263 	 * @BATADV_ATTR_LAST_SEEN_MSECS: Time in milliseconds since last seen
264 	 */
265 	BATADV_ATTR_LAST_SEEN_MSECS,
266 
267 	/**
268 	 * @BATADV_ATTR_NEIGH_ADDRESS: Neighbour MAC address
269 	 */
270 	BATADV_ATTR_NEIGH_ADDRESS,
271 
272 	/**
273 	 * @BATADV_ATTR_TQ: TQ to neighbour
274 	 */
275 	BATADV_ATTR_TQ,
276 
277 	/**
278 	 * @BATADV_ATTR_THROUGHPUT: Estimated throughput to Neighbour
279 	 */
280 	BATADV_ATTR_THROUGHPUT,
281 
282 	/**
283 	 * @BATADV_ATTR_BANDWIDTH_UP: Reported uplink bandwidth
284 	 */
285 	BATADV_ATTR_BANDWIDTH_UP,
286 
287 	/**
288 	 * @BATADV_ATTR_BANDWIDTH_DOWN: Reported downlink bandwidth
289 	 */
290 	BATADV_ATTR_BANDWIDTH_DOWN,
291 
292 	/**
293 	 * @BATADV_ATTR_ROUTER: Gateway router MAC address
294 	 */
295 	BATADV_ATTR_ROUTER,
296 
297 	/**
298 	 * @BATADV_ATTR_BLA_OWN: Flag indicating own originator
299 	 */
300 	BATADV_ATTR_BLA_OWN,
301 
302 	/**
303 	 * @BATADV_ATTR_BLA_ADDRESS: Bridge loop avoidance claim MAC address
304 	 */
305 	BATADV_ATTR_BLA_ADDRESS,
306 
307 	/**
308 	 * @BATADV_ATTR_BLA_VID: BLA VLAN ID
309 	 */
310 	BATADV_ATTR_BLA_VID,
311 
312 	/**
313 	 * @BATADV_ATTR_BLA_BACKBONE: BLA gateway originator MAC address
314 	 */
315 	BATADV_ATTR_BLA_BACKBONE,
316 
317 	/**
318 	 * @BATADV_ATTR_BLA_CRC: BLA CRC
319 	 */
320 	BATADV_ATTR_BLA_CRC,
321 
322 	/**
323 	 * @BATADV_ATTR_DAT_CACHE_IP4ADDRESS: Client IPv4 address
324 	 */
325 	BATADV_ATTR_DAT_CACHE_IP4ADDRESS,
326 
327 	/**
328 	 * @BATADV_ATTR_DAT_CACHE_HWADDRESS: Client MAC address
329 	 */
330 	BATADV_ATTR_DAT_CACHE_HWADDRESS,
331 
332 	/**
333 	 * @BATADV_ATTR_DAT_CACHE_VID: VLAN ID
334 	 */
335 	BATADV_ATTR_DAT_CACHE_VID,
336 
337 	/**
338 	 * @BATADV_ATTR_MCAST_FLAGS: Per originator multicast flags
339 	 */
340 	BATADV_ATTR_MCAST_FLAGS,
341 
342 	/**
343 	 * @BATADV_ATTR_MCAST_FLAGS_PRIV: Private, own multicast flags
344 	 */
345 	BATADV_ATTR_MCAST_FLAGS_PRIV,
346 
347 	/* add attributes above here, update the policy in netlink.c */
348 
349 	/**
350 	 * @__BATADV_ATTR_AFTER_LAST: internal use
351 	 */
352 	__BATADV_ATTR_AFTER_LAST,
353 
354 	/**
355 	 * @NUM_BATADV_ATTR: total number of batadv_nl_attrs available
356 	 */
357 	NUM_BATADV_ATTR = __BATADV_ATTR_AFTER_LAST,
358 
359 	/**
360 	 * @BATADV_ATTR_MAX: highest attribute number currently defined
361 	 */
362 	BATADV_ATTR_MAX = __BATADV_ATTR_AFTER_LAST - 1
363 };
364 
365 /**
366  * enum batadv_nl_commands - supported batman-adv netlink commands
367  */
368 enum batadv_nl_commands {
369 	/**
370 	 * @BATADV_CMD_UNSPEC: unspecified command to catch errors
371 	 */
372 	BATADV_CMD_UNSPEC,
373 
374 	/**
375 	 * @BATADV_CMD_GET_MESH_INFO: Query basic information about batman-adv
376 	 * device
377 	 */
378 	BATADV_CMD_GET_MESH_INFO,
379 
380 	/**
381 	 * @BATADV_CMD_TP_METER: Start a tp meter session
382 	 */
383 	BATADV_CMD_TP_METER,
384 
385 	/**
386 	 * @BATADV_CMD_TP_METER_CANCEL: Cancel a tp meter session
387 	 */
388 	BATADV_CMD_TP_METER_CANCEL,
389 
390 	/**
391 	 * @BATADV_CMD_GET_ROUTING_ALGOS: Query the list of routing algorithms.
392 	 */
393 	BATADV_CMD_GET_ROUTING_ALGOS,
394 
395 	/**
396 	 * @BATADV_CMD_GET_HARDIFS: Query list of hard interfaces
397 	 */
398 	BATADV_CMD_GET_HARDIFS,
399 
400 	/**
401 	 * @BATADV_CMD_GET_TRANSTABLE_LOCAL: Query list of local translations
402 	 */
403 	BATADV_CMD_GET_TRANSTABLE_LOCAL,
404 
405 	/**
406 	 * @BATADV_CMD_GET_TRANSTABLE_GLOBAL: Query list of global translations
407 	 */
408 	BATADV_CMD_GET_TRANSTABLE_GLOBAL,
409 
410 	/**
411 	 * @BATADV_CMD_GET_ORIGINATORS: Query list of originators
412 	 */
413 	BATADV_CMD_GET_ORIGINATORS,
414 
415 	/**
416 	 * @BATADV_CMD_GET_NEIGHBORS: Query list of neighbours
417 	 */
418 	BATADV_CMD_GET_NEIGHBORS,
419 
420 	/**
421 	 * @BATADV_CMD_GET_GATEWAYS: Query list of gateways
422 	 */
423 	BATADV_CMD_GET_GATEWAYS,
424 
425 	/**
426 	 * @BATADV_CMD_GET_BLA_CLAIM: Query list of bridge loop avoidance claims
427 	 */
428 	BATADV_CMD_GET_BLA_CLAIM,
429 
430 	/**
431 	 * @BATADV_CMD_GET_BLA_BACKBONE: Query list of bridge loop avoidance
432 	 * backbones
433 	 */
434 	BATADV_CMD_GET_BLA_BACKBONE,
435 
436 	/**
437 	 * @BATADV_CMD_GET_DAT_CACHE: Query list of DAT cache entries
438 	 */
439 	BATADV_CMD_GET_DAT_CACHE,
440 
441 	/**
442 	 * @BATADV_CMD_GET_MCAST_FLAGS: Query list of multicast flags
443 	 */
444 	BATADV_CMD_GET_MCAST_FLAGS,
445 
446 	/* add new commands above here */
447 
448 	/**
449 	 * @__BATADV_CMD_AFTER_LAST: internal use
450 	 */
451 	__BATADV_CMD_AFTER_LAST,
452 
453 	/**
454 	 * @BATADV_CMD_MAX: highest used command number
455 	 */
456 	BATADV_CMD_MAX = __BATADV_CMD_AFTER_LAST - 1
457 };
458 
459 /**
460  * enum batadv_tp_meter_reason - reason of a tp meter test run stop
461  */
462 enum batadv_tp_meter_reason {
463 	/**
464 	 * @BATADV_TP_REASON_COMPLETE: sender finished tp run
465 	 */
466 	BATADV_TP_REASON_COMPLETE		= 3,
467 
468 	/**
469 	 * @BATADV_TP_REASON_CANCEL: sender was stopped during run
470 	 */
471 	BATADV_TP_REASON_CANCEL			= 4,
472 
473 	/* error status >= 128 */
474 
475 	/**
476 	 * @BATADV_TP_REASON_DST_UNREACHABLE: receiver could not be reached or
477 	 * didn't answer
478 	 */
479 	BATADV_TP_REASON_DST_UNREACHABLE	= 128,
480 
481 	/**
482 	 * @BATADV_TP_REASON_RESEND_LIMIT: (unused) sender retry reached limit
483 	 */
484 	BATADV_TP_REASON_RESEND_LIMIT		= 129,
485 
486 	/**
487 	 * @BATADV_TP_REASON_ALREADY_ONGOING: test to or from the same node
488 	 * already ongoing
489 	 */
490 	BATADV_TP_REASON_ALREADY_ONGOING	= 130,
491 
492 	/**
493 	 * @BATADV_TP_REASON_MEMORY_ERROR: test was stopped due to low memory
494 	 */
495 	BATADV_TP_REASON_MEMORY_ERROR		= 131,
496 
497 	/**
498 	 * @BATADV_TP_REASON_CANT_SEND: failed to send via outgoing interface
499 	 */
500 	BATADV_TP_REASON_CANT_SEND		= 132,
501 
502 	/**
503 	 * @BATADV_TP_REASON_TOO_MANY: too many ongoing sessions
504 	 */
505 	BATADV_TP_REASON_TOO_MANY		= 133,
506 };
507 
508 #endif /* _UAPI_LINUX_BATMAN_ADV_H_ */
509