cpp-d1064d
[cross.git] / i686-linux-gnu-4.7 / usr / include / linux / batman_adv.h
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 _LINUX_BATMAN_ADV_H_
26 #define _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 /* _LINUX_BATMAN_ADV_H_ */