Home | History | Annotate | Download | only in linux
      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