xref: /linux-6.15/include/uapi/linux/batman_adv.h (revision e00a844a)
1 /* Copyright (C) 2016-2017  B.A.T.M.A.N. contributors:
2  *
3  * Matthias Schiffer
4  *
5  * Permission to use, copy, modify, and/or distribute this software for any
6  * purpose with or without fee is hereby granted, provided that the above
7  * copyright notice and this permission notice appear in all copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16  */
17 
18 #ifndef _UAPI_LINUX_BATMAN_ADV_H_
19 #define _UAPI_LINUX_BATMAN_ADV_H_
20 
21 #define BATADV_NL_NAME "batadv"
22 
23 #define BATADV_NL_MCAST_GROUP_TPMETER	"tpmeter"
24 
25 /**
26  * enum batadv_tt_client_flags - TT client specific flags
27  *
28  * Bits from 0 to 7 are called _remote flags_ because they are sent on the wire.
29  * Bits from 8 to 15 are called _local flags_ because they are used for local
30  * computations only.
31  *
32  * Bits from 4 to 7 - a subset of remote flags - are ensured to be in sync with
33  * the other nodes in the network. To achieve this goal these flags are included
34  * in the TT CRC computation.
35  */
36 enum batadv_tt_client_flags {
37 	/**
38 	 * @BATADV_TT_CLIENT_DEL: the client has to be deleted from the table
39 	 */
40 	BATADV_TT_CLIENT_DEL     = (1 << 0),
41 
42 	/**
43 	 * @BATADV_TT_CLIENT_ROAM: the client roamed to/from another node and
44 	 * the new update telling its new real location has not been
45 	 * received/sent yet
46 	 */
47 	BATADV_TT_CLIENT_ROAM    = (1 << 1),
48 
49 	/**
50 	 * @BATADV_TT_CLIENT_WIFI: this client is connected through a wifi
51 	 * interface. This information is used by the "AP Isolation" feature
52 	 */
53 	BATADV_TT_CLIENT_WIFI    = (1 << 4),
54 
55 	/**
56 	 * @BATADV_TT_CLIENT_ISOLA: this client is considered "isolated". This
57 	 * information is used by the Extended Isolation feature
58 	 */
59 	BATADV_TT_CLIENT_ISOLA	 = (1 << 5),
60 
61 	/**
62 	 * @BATADV_TT_CLIENT_NOPURGE: this client should never be removed from
63 	 * the table
64 	 */
65 	BATADV_TT_CLIENT_NOPURGE = (1 << 8),
66 
67 	/**
68 	 * @BATADV_TT_CLIENT_NEW: this client has been added to the local table
69 	 * but has not been announced yet
70 	 */
71 	BATADV_TT_CLIENT_NEW     = (1 << 9),
72 
73 	/**
74 	 * @BATADV_TT_CLIENT_PENDING: this client is marked for removal but it
75 	 * is kept in the table for one more originator interval for consistency
76 	 * purposes
77 	 */
78 	BATADV_TT_CLIENT_PENDING = (1 << 10),
79 
80 	/**
81 	 * @BATADV_TT_CLIENT_TEMP: this global client has been detected to be
82 	 * part of the network but no nnode has already announced it
83 	 */
84 	BATADV_TT_CLIENT_TEMP	 = (1 << 11),
85 };
86 
87 /**
88  * enum batadv_nl_attrs - batman-adv netlink attributes
89  */
90 enum batadv_nl_attrs {
91 	/**
92 	 * @BATADV_ATTR_UNSPEC: unspecified attribute to catch errors
93 	 */
94 	BATADV_ATTR_UNSPEC,
95 
96 	/**
97 	 * @BATADV_ATTR_VERSION: batman-adv version string
98 	 */
99 	BATADV_ATTR_VERSION,
100 
101 	/**
102 	 * @BATADV_ATTR_ALGO_NAME: name of routing algorithm
103 	 */
104 	BATADV_ATTR_ALGO_NAME,
105 
106 	/**
107 	 * @BATADV_ATTR_MESH_IFINDEX: index of the batman-adv interface
108 	 */
109 	BATADV_ATTR_MESH_IFINDEX,
110 
111 	/**
112 	 * @BATADV_ATTR_MESH_IFNAME: name of the batman-adv interface
113 	 */
114 	BATADV_ATTR_MESH_IFNAME,
115 
116 	/**
117 	 * @BATADV_ATTR_MESH_ADDRESS: mac address of the batman-adv interface
118 	 */
119 	BATADV_ATTR_MESH_ADDRESS,
120 
121 	/**
122 	 * @BATADV_ATTR_HARD_IFINDEX: index of the non-batman-adv interface
123 	 */
124 	BATADV_ATTR_HARD_IFINDEX,
125 
126 	/**
127 	 * @BATADV_ATTR_HARD_IFNAME: name of the non-batman-adv interface
128 	 */
129 	BATADV_ATTR_HARD_IFNAME,
130 
131 	/**
132 	 * @BATADV_ATTR_HARD_ADDRESS: mac address of the non-batman-adv
133 	 * interface
134 	 */
135 	BATADV_ATTR_HARD_ADDRESS,
136 
137 	/**
138 	 * @BATADV_ATTR_ORIG_ADDRESS: originator mac address
139 	 */
140 	BATADV_ATTR_ORIG_ADDRESS,
141 
142 	/**
143 	 * @BATADV_ATTR_TPMETER_RESULT: result of run (see
144 	 * batadv_tp_meter_status)
145 	 */
146 	BATADV_ATTR_TPMETER_RESULT,
147 
148 	/**
149 	 * @BATADV_ATTR_TPMETER_TEST_TIME: time (msec) the run took
150 	 */
151 	BATADV_ATTR_TPMETER_TEST_TIME,
152 
153 	/**
154 	 * @BATADV_ATTR_TPMETER_BYTES: amount of acked bytes during run
155 	 */
156 	BATADV_ATTR_TPMETER_BYTES,
157 
158 	/**
159 	 * @BATADV_ATTR_TPMETER_COOKIE: session cookie to match tp_meter session
160 	 */
161 	BATADV_ATTR_TPMETER_COOKIE,
162 
163 	/**
164 	 * @BATADV_ATTR_PAD: attribute used for padding for 64-bit alignment
165 	 */
166 	BATADV_ATTR_PAD,
167 
168 	/**
169 	 * @BATADV_ATTR_ACTIVE: Flag indicating if the hard interface is active
170 	 */
171 	BATADV_ATTR_ACTIVE,
172 
173 	/**
174 	 * @BATADV_ATTR_TT_ADDRESS: Client MAC address
175 	 */
176 	BATADV_ATTR_TT_ADDRESS,
177 
178 	/**
179 	 * @BATADV_ATTR_TT_TTVN: Translation table version
180 	 */
181 	BATADV_ATTR_TT_TTVN,
182 
183 	/**
184 	 * @BATADV_ATTR_TT_LAST_TTVN: Previous translation table version
185 	 */
186 	BATADV_ATTR_TT_LAST_TTVN,
187 
188 	/**
189 	 * @BATADV_ATTR_TT_CRC32: CRC32 over translation table
190 	 */
191 	BATADV_ATTR_TT_CRC32,
192 
193 	/**
194 	 * @BATADV_ATTR_TT_VID: VLAN ID
195 	 */
196 	BATADV_ATTR_TT_VID,
197 
198 	/**
199 	 * @BATADV_ATTR_TT_FLAGS: Translation table client flags
200 	 */
201 	BATADV_ATTR_TT_FLAGS,
202 
203 	/**
204 	 * @BATADV_ATTR_FLAG_BEST: Flags indicating entry is the best
205 	 */
206 	BATADV_ATTR_FLAG_BEST,
207 
208 	/**
209 	 * @BATADV_ATTR_LAST_SEEN_MSECS: Time in milliseconds since last seen
210 	 */
211 	BATADV_ATTR_LAST_SEEN_MSECS,
212 
213 	/**
214 	 * @BATADV_ATTR_NEIGH_ADDRESS: Neighbour MAC address
215 	 */
216 	BATADV_ATTR_NEIGH_ADDRESS,
217 
218 	/**
219 	 * @BATADV_ATTR_TQ: TQ to neighbour
220 	 */
221 	BATADV_ATTR_TQ,
222 
223 	/**
224 	 * @BATADV_ATTR_THROUGHPUT: Estimated throughput to Neighbour
225 	 */
226 	BATADV_ATTR_THROUGHPUT,
227 
228 	/**
229 	 * @BATADV_ATTR_BANDWIDTH_UP: Reported uplink bandwidth
230 	 */
231 	BATADV_ATTR_BANDWIDTH_UP,
232 
233 	/**
234 	 * @BATADV_ATTR_BANDWIDTH_DOWN: Reported downlink bandwidth
235 	 */
236 	BATADV_ATTR_BANDWIDTH_DOWN,
237 
238 	/**
239 	 * @BATADV_ATTR_ROUTER: Gateway router MAC address
240 	 */
241 	BATADV_ATTR_ROUTER,
242 
243 	/**
244 	 * @BATADV_ATTR_BLA_OWN: Flag indicating own originator
245 	 */
246 	BATADV_ATTR_BLA_OWN,
247 
248 	/**
249 	 * @BATADV_ATTR_BLA_ADDRESS: Bridge loop avoidance claim MAC address
250 	 */
251 	BATADV_ATTR_BLA_ADDRESS,
252 
253 	/**
254 	 * @BATADV_ATTR_BLA_VID: BLA VLAN ID
255 	 */
256 	BATADV_ATTR_BLA_VID,
257 
258 	/**
259 	 * @BATADV_ATTR_BLA_BACKBONE: BLA gateway originator MAC address
260 	 */
261 	BATADV_ATTR_BLA_BACKBONE,
262 
263 	/**
264 	 * @BATADV_ATTR_BLA_CRC: BLA CRC
265 	 */
266 	BATADV_ATTR_BLA_CRC,
267 
268 	/* add attributes above here, update the policy in netlink.c */
269 
270 	/**
271 	 * @__BATADV_ATTR_AFTER_LAST: internal use
272 	 */
273 	__BATADV_ATTR_AFTER_LAST,
274 
275 	/**
276 	 * @NUM_BATADV_ATTR: total number of batadv_nl_attrs available
277 	 */
278 	NUM_BATADV_ATTR = __BATADV_ATTR_AFTER_LAST,
279 
280 	/**
281 	 * @BATADV_ATTR_MAX: highest attribute number currently defined
282 	 */
283 	BATADV_ATTR_MAX = __BATADV_ATTR_AFTER_LAST - 1
284 };
285 
286 /**
287  * enum batadv_nl_commands - supported batman-adv netlink commands
288  */
289 enum batadv_nl_commands {
290 	/**
291 	 * @BATADV_CMD_UNSPEC: unspecified command to catch errors
292 	 */
293 	BATADV_CMD_UNSPEC,
294 
295 	/**
296 	 * @BATADV_CMD_GET_MESH_INFO: Query basic information about batman-adv
297 	 * device
298 	 */
299 	BATADV_CMD_GET_MESH_INFO,
300 
301 	/**
302 	 * @BATADV_CMD_TP_METER: Start a tp meter session
303 	 */
304 	BATADV_CMD_TP_METER,
305 
306 	/**
307 	 * @BATADV_CMD_TP_METER_CANCEL: Cancel a tp meter session
308 	 */
309 	BATADV_CMD_TP_METER_CANCEL,
310 
311 	/**
312 	 * @BATADV_CMD_GET_ROUTING_ALGOS: Query the list of routing algorithms.
313 	 */
314 	BATADV_CMD_GET_ROUTING_ALGOS,
315 
316 	/**
317 	 * @BATADV_CMD_GET_HARDIFS: Query list of hard interfaces
318 	 */
319 	BATADV_CMD_GET_HARDIFS,
320 
321 	/**
322 	 * @BATADV_CMD_GET_TRANSTABLE_LOCAL: Query list of local translations
323 	 */
324 	BATADV_CMD_GET_TRANSTABLE_LOCAL,
325 
326 	/**
327 	 * @BATADV_CMD_GET_TRANSTABLE_GLOBAL: Query list of global translations
328 	 */
329 	BATADV_CMD_GET_TRANSTABLE_GLOBAL,
330 
331 	/**
332 	 * @BATADV_CMD_GET_ORIGINATORS: Query list of originators
333 	 */
334 	BATADV_CMD_GET_ORIGINATORS,
335 
336 	/**
337 	 * @BATADV_CMD_GET_NEIGHBORS: Query list of neighbours
338 	 */
339 	BATADV_CMD_GET_NEIGHBORS,
340 
341 	/**
342 	 * @BATADV_CMD_GET_GATEWAYS: Query list of gateways
343 	 */
344 	BATADV_CMD_GET_GATEWAYS,
345 
346 	/**
347 	 * @BATADV_CMD_GET_BLA_CLAIM: Query list of bridge loop avoidance claims
348 	 */
349 	BATADV_CMD_GET_BLA_CLAIM,
350 
351 	/**
352 	 * @BATADV_CMD_GET_BLA_BACKBONE: Query list of bridge loop avoidance
353 	 * backbones
354 	 */
355 	BATADV_CMD_GET_BLA_BACKBONE,
356 
357 	/* add new commands above here */
358 
359 	/**
360 	 * @__BATADV_CMD_AFTER_LAST: internal use
361 	 */
362 	__BATADV_CMD_AFTER_LAST,
363 
364 	/**
365 	 * @BATADV_CMD_MAX: highest used command number
366 	 */
367 	BATADV_CMD_MAX = __BATADV_CMD_AFTER_LAST - 1
368 };
369 
370 /**
371  * enum batadv_tp_meter_reason - reason of a tp meter test run stop
372  */
373 enum batadv_tp_meter_reason {
374 	/**
375 	 * @BATADV_TP_REASON_COMPLETE: sender finished tp run
376 	 */
377 	BATADV_TP_REASON_COMPLETE		= 3,
378 
379 	/**
380 	 * @BATADV_TP_REASON_CANCEL: sender was stopped during run
381 	 */
382 	BATADV_TP_REASON_CANCEL			= 4,
383 
384 	/* error status >= 128 */
385 
386 	/**
387 	 * @BATADV_TP_REASON_DST_UNREACHABLE: receiver could not be reached or
388 	 * didn't answer
389 	 */
390 	BATADV_TP_REASON_DST_UNREACHABLE	= 128,
391 
392 	/**
393 	 * @BATADV_TP_REASON_RESEND_LIMIT: (unused) sender retry reached limit
394 	 */
395 	BATADV_TP_REASON_RESEND_LIMIT		= 129,
396 
397 	/**
398 	 * @BATADV_TP_REASON_ALREADY_ONGOING: test to or from the same node
399 	 * already ongoing
400 	 */
401 	BATADV_TP_REASON_ALREADY_ONGOING	= 130,
402 
403 	/**
404 	 * @BATADV_TP_REASON_MEMORY_ERROR: test was stopped due to low memory
405 	 */
406 	BATADV_TP_REASON_MEMORY_ERROR		= 131,
407 
408 	/**
409 	 * @BATADV_TP_REASON_CANT_SEND: failed to send via outgoing interface
410 	 */
411 	BATADV_TP_REASON_CANT_SEND		= 132,
412 
413 	/**
414 	 * @BATADV_TP_REASON_TOO_MANY: too many ongoing sessions
415 	 */
416 	BATADV_TP_REASON_TOO_MANY		= 133,
417 };
418 
419 #endif /* _UAPI_LINUX_BATMAN_ADV_H_ */
420