1a0105792SSven Eckelmann /* SPDX-License-Identifier: MIT */ 2*cfa55c6dSSven Eckelmann /* Copyright (C) B.A.T.M.A.N. contributors: 309748a22SMatthias Schiffer * 409748a22SMatthias Schiffer * Matthias Schiffer 509748a22SMatthias Schiffer */ 609748a22SMatthias Schiffer 709748a22SMatthias Schiffer #ifndef _UAPI_LINUX_BATMAN_ADV_H_ 809748a22SMatthias Schiffer #define _UAPI_LINUX_BATMAN_ADV_H_ 909748a22SMatthias Schiffer 1009748a22SMatthias Schiffer #define BATADV_NL_NAME "batadv" 1109748a22SMatthias Schiffer 1260040513SSven Eckelmann #define BATADV_NL_MCAST_GROUP_CONFIG "config" 1333a3bb4aSAntonio Quartulli #define BATADV_NL_MCAST_GROUP_TPMETER "tpmeter" 1433a3bb4aSAntonio Quartulli 1509748a22SMatthias Schiffer /** 16d34f0550SMatthias Schiffer * enum batadv_tt_client_flags - TT client specific flags 17d34f0550SMatthias Schiffer * 18d34f0550SMatthias Schiffer * Bits from 0 to 7 are called _remote flags_ because they are sent on the wire. 19d34f0550SMatthias Schiffer * Bits from 8 to 15 are called _local flags_ because they are used for local 20d34f0550SMatthias Schiffer * computations only. 21d34f0550SMatthias Schiffer * 22d34f0550SMatthias Schiffer * Bits from 4 to 7 - a subset of remote flags - are ensured to be in sync with 23d34f0550SMatthias Schiffer * the other nodes in the network. To achieve this goal these flags are included 24d34f0550SMatthias Schiffer * in the TT CRC computation. 25d34f0550SMatthias Schiffer */ 26d34f0550SMatthias Schiffer enum batadv_tt_client_flags { 2740b16b9bSSven Eckelmann /** 2840b16b9bSSven Eckelmann * @BATADV_TT_CLIENT_DEL: the client has to be deleted from the table 2940b16b9bSSven Eckelmann */ 30d34f0550SMatthias Schiffer BATADV_TT_CLIENT_DEL = (1 << 0), 3140b16b9bSSven Eckelmann 3240b16b9bSSven Eckelmann /** 3340b16b9bSSven Eckelmann * @BATADV_TT_CLIENT_ROAM: the client roamed to/from another node and 3440b16b9bSSven Eckelmann * the new update telling its new real location has not been 3540b16b9bSSven Eckelmann * received/sent yet 3640b16b9bSSven Eckelmann */ 37d34f0550SMatthias Schiffer BATADV_TT_CLIENT_ROAM = (1 << 1), 3840b16b9bSSven Eckelmann 3940b16b9bSSven Eckelmann /** 4040b16b9bSSven Eckelmann * @BATADV_TT_CLIENT_WIFI: this client is connected through a wifi 4140b16b9bSSven Eckelmann * interface. This information is used by the "AP Isolation" feature 4240b16b9bSSven Eckelmann */ 43d34f0550SMatthias Schiffer BATADV_TT_CLIENT_WIFI = (1 << 4), 4440b16b9bSSven Eckelmann 4540b16b9bSSven Eckelmann /** 4640b16b9bSSven Eckelmann * @BATADV_TT_CLIENT_ISOLA: this client is considered "isolated". This 4740b16b9bSSven Eckelmann * information is used by the Extended Isolation feature 4840b16b9bSSven Eckelmann */ 49d34f0550SMatthias Schiffer BATADV_TT_CLIENT_ISOLA = (1 << 5), 5040b16b9bSSven Eckelmann 5140b16b9bSSven Eckelmann /** 5240b16b9bSSven Eckelmann * @BATADV_TT_CLIENT_NOPURGE: this client should never be removed from 5340b16b9bSSven Eckelmann * the table 5440b16b9bSSven Eckelmann */ 55d34f0550SMatthias Schiffer BATADV_TT_CLIENT_NOPURGE = (1 << 8), 5640b16b9bSSven Eckelmann 5740b16b9bSSven Eckelmann /** 5840b16b9bSSven Eckelmann * @BATADV_TT_CLIENT_NEW: this client has been added to the local table 5940b16b9bSSven Eckelmann * but has not been announced yet 6040b16b9bSSven Eckelmann */ 61d34f0550SMatthias Schiffer BATADV_TT_CLIENT_NEW = (1 << 9), 6240b16b9bSSven Eckelmann 6340b16b9bSSven Eckelmann /** 6440b16b9bSSven Eckelmann * @BATADV_TT_CLIENT_PENDING: this client is marked for removal but it 6540b16b9bSSven Eckelmann * is kept in the table for one more originator interval for consistency 6640b16b9bSSven Eckelmann * purposes 6740b16b9bSSven Eckelmann */ 68d34f0550SMatthias Schiffer BATADV_TT_CLIENT_PENDING = (1 << 10), 6940b16b9bSSven Eckelmann 7040b16b9bSSven Eckelmann /** 7140b16b9bSSven Eckelmann * @BATADV_TT_CLIENT_TEMP: this global client has been detected to be 72bccb48c8SSven Eckelmann * part of the network but no node has already announced it 7340b16b9bSSven Eckelmann */ 74d34f0550SMatthias Schiffer BATADV_TT_CLIENT_TEMP = (1 << 11), 75d34f0550SMatthias Schiffer }; 76d34f0550SMatthias Schiffer 77d34f0550SMatthias Schiffer /** 7853dd9a68SLinus Lüssing * enum batadv_mcast_flags_priv - Private, own multicast flags 7953dd9a68SLinus Lüssing * 8053dd9a68SLinus Lüssing * These are internal, multicast related flags. Currently they describe certain 8153dd9a68SLinus Lüssing * multicast related attributes of the segment this originator bridges into the 8253dd9a68SLinus Lüssing * mesh. 8353dd9a68SLinus Lüssing * 8453dd9a68SLinus Lüssing * Those attributes are used to determine the public multicast flags this 8553dd9a68SLinus Lüssing * originator is going to announce via TT. 8653dd9a68SLinus Lüssing * 8753dd9a68SLinus Lüssing * For netlink, if BATADV_MCAST_FLAGS_BRIDGED is unset then all querier 8853dd9a68SLinus Lüssing * related flags are undefined. 8953dd9a68SLinus Lüssing */ 9053dd9a68SLinus Lüssing enum batadv_mcast_flags_priv { 9153dd9a68SLinus Lüssing /** 9253dd9a68SLinus Lüssing * @BATADV_MCAST_FLAGS_BRIDGED: There is a bridge on top of the mesh 9353dd9a68SLinus Lüssing * interface. 9453dd9a68SLinus Lüssing */ 9553dd9a68SLinus Lüssing BATADV_MCAST_FLAGS_BRIDGED = (1 << 0), 9653dd9a68SLinus Lüssing 9753dd9a68SLinus Lüssing /** 9853dd9a68SLinus Lüssing * @BATADV_MCAST_FLAGS_QUERIER_IPV4_EXISTS: Whether an IGMP querier 9953dd9a68SLinus Lüssing * exists in the mesh 10053dd9a68SLinus Lüssing */ 10153dd9a68SLinus Lüssing BATADV_MCAST_FLAGS_QUERIER_IPV4_EXISTS = (1 << 1), 10253dd9a68SLinus Lüssing 10353dd9a68SLinus Lüssing /** 10453dd9a68SLinus Lüssing * @BATADV_MCAST_FLAGS_QUERIER_IPV6_EXISTS: Whether an MLD querier 10553dd9a68SLinus Lüssing * exists in the mesh 10653dd9a68SLinus Lüssing */ 10753dd9a68SLinus Lüssing BATADV_MCAST_FLAGS_QUERIER_IPV6_EXISTS = (1 << 2), 10853dd9a68SLinus Lüssing 10953dd9a68SLinus Lüssing /** 11053dd9a68SLinus Lüssing * @BATADV_MCAST_FLAGS_QUERIER_IPV4_SHADOWING: If an IGMP querier 11153dd9a68SLinus Lüssing * exists, whether it is potentially shadowing multicast listeners 11253dd9a68SLinus Lüssing * (i.e. querier is behind our own bridge segment) 11353dd9a68SLinus Lüssing */ 11453dd9a68SLinus Lüssing BATADV_MCAST_FLAGS_QUERIER_IPV4_SHADOWING = (1 << 3), 11553dd9a68SLinus Lüssing 11653dd9a68SLinus Lüssing /** 11753dd9a68SLinus Lüssing * @BATADV_MCAST_FLAGS_QUERIER_IPV6_SHADOWING: If an MLD querier 11853dd9a68SLinus Lüssing * exists, whether it is potentially shadowing multicast listeners 11953dd9a68SLinus Lüssing * (i.e. querier is behind our own bridge segment) 12053dd9a68SLinus Lüssing */ 12153dd9a68SLinus Lüssing BATADV_MCAST_FLAGS_QUERIER_IPV6_SHADOWING = (1 << 4), 12253dd9a68SLinus Lüssing }; 12353dd9a68SLinus Lüssing 12453dd9a68SLinus Lüssing /** 125e2d0d35bSSven Eckelmann * enum batadv_gw_modes - gateway mode of node 126e2d0d35bSSven Eckelmann */ 127e2d0d35bSSven Eckelmann enum batadv_gw_modes { 128e2d0d35bSSven Eckelmann /** @BATADV_GW_MODE_OFF: gw mode disabled */ 129e2d0d35bSSven Eckelmann BATADV_GW_MODE_OFF, 130e2d0d35bSSven Eckelmann 131e2d0d35bSSven Eckelmann /** @BATADV_GW_MODE_CLIENT: send DHCP requests to gw servers */ 132e2d0d35bSSven Eckelmann BATADV_GW_MODE_CLIENT, 133e2d0d35bSSven Eckelmann 134bccb48c8SSven Eckelmann /** @BATADV_GW_MODE_SERVER: announce itself as gateway server */ 135e2d0d35bSSven Eckelmann BATADV_GW_MODE_SERVER, 136e2d0d35bSSven Eckelmann }; 137e2d0d35bSSven Eckelmann 138e2d0d35bSSven Eckelmann /** 13909748a22SMatthias Schiffer * enum batadv_nl_attrs - batman-adv netlink attributes 14009748a22SMatthias Schiffer */ 14109748a22SMatthias Schiffer enum batadv_nl_attrs { 14240b16b9bSSven Eckelmann /** 14340b16b9bSSven Eckelmann * @BATADV_ATTR_UNSPEC: unspecified attribute to catch errors 14440b16b9bSSven Eckelmann */ 14509748a22SMatthias Schiffer BATADV_ATTR_UNSPEC, 14640b16b9bSSven Eckelmann 14740b16b9bSSven Eckelmann /** 14840b16b9bSSven Eckelmann * @BATADV_ATTR_VERSION: batman-adv version string 14940b16b9bSSven Eckelmann */ 1505da0aef5SMatthias Schiffer BATADV_ATTR_VERSION, 15140b16b9bSSven Eckelmann 15240b16b9bSSven Eckelmann /** 15340b16b9bSSven Eckelmann * @BATADV_ATTR_ALGO_NAME: name of routing algorithm 15440b16b9bSSven Eckelmann */ 1555da0aef5SMatthias Schiffer BATADV_ATTR_ALGO_NAME, 15640b16b9bSSven Eckelmann 15740b16b9bSSven Eckelmann /** 15840b16b9bSSven Eckelmann * @BATADV_ATTR_MESH_IFINDEX: index of the batman-adv interface 15940b16b9bSSven Eckelmann */ 1605da0aef5SMatthias Schiffer BATADV_ATTR_MESH_IFINDEX, 16140b16b9bSSven Eckelmann 16240b16b9bSSven Eckelmann /** 16340b16b9bSSven Eckelmann * @BATADV_ATTR_MESH_IFNAME: name of the batman-adv interface 16440b16b9bSSven Eckelmann */ 1655da0aef5SMatthias Schiffer BATADV_ATTR_MESH_IFNAME, 16640b16b9bSSven Eckelmann 16740b16b9bSSven Eckelmann /** 16840b16b9bSSven Eckelmann * @BATADV_ATTR_MESH_ADDRESS: mac address of the batman-adv interface 16940b16b9bSSven Eckelmann */ 1705da0aef5SMatthias Schiffer BATADV_ATTR_MESH_ADDRESS, 17140b16b9bSSven Eckelmann 17240b16b9bSSven Eckelmann /** 17340b16b9bSSven Eckelmann * @BATADV_ATTR_HARD_IFINDEX: index of the non-batman-adv interface 17440b16b9bSSven Eckelmann */ 1755da0aef5SMatthias Schiffer BATADV_ATTR_HARD_IFINDEX, 17640b16b9bSSven Eckelmann 17740b16b9bSSven Eckelmann /** 17840b16b9bSSven Eckelmann * @BATADV_ATTR_HARD_IFNAME: name of the non-batman-adv interface 17940b16b9bSSven Eckelmann */ 1805da0aef5SMatthias Schiffer BATADV_ATTR_HARD_IFNAME, 18140b16b9bSSven Eckelmann 18240b16b9bSSven Eckelmann /** 18340b16b9bSSven Eckelmann * @BATADV_ATTR_HARD_ADDRESS: mac address of the non-batman-adv 18440b16b9bSSven Eckelmann * interface 18540b16b9bSSven Eckelmann */ 1865da0aef5SMatthias Schiffer BATADV_ATTR_HARD_ADDRESS, 18740b16b9bSSven Eckelmann 18840b16b9bSSven Eckelmann /** 18940b16b9bSSven Eckelmann * @BATADV_ATTR_ORIG_ADDRESS: originator mac address 19040b16b9bSSven Eckelmann */ 19133a3bb4aSAntonio Quartulli BATADV_ATTR_ORIG_ADDRESS, 19240b16b9bSSven Eckelmann 19340b16b9bSSven Eckelmann /** 19440b16b9bSSven Eckelmann * @BATADV_ATTR_TPMETER_RESULT: result of run (see 19540b16b9bSSven Eckelmann * batadv_tp_meter_status) 19640b16b9bSSven Eckelmann */ 19733a3bb4aSAntonio Quartulli BATADV_ATTR_TPMETER_RESULT, 19840b16b9bSSven Eckelmann 19940b16b9bSSven Eckelmann /** 20040b16b9bSSven Eckelmann * @BATADV_ATTR_TPMETER_TEST_TIME: time (msec) the run took 20140b16b9bSSven Eckelmann */ 20233a3bb4aSAntonio Quartulli BATADV_ATTR_TPMETER_TEST_TIME, 20340b16b9bSSven Eckelmann 20440b16b9bSSven Eckelmann /** 20540b16b9bSSven Eckelmann * @BATADV_ATTR_TPMETER_BYTES: amount of acked bytes during run 20640b16b9bSSven Eckelmann */ 20733a3bb4aSAntonio Quartulli BATADV_ATTR_TPMETER_BYTES, 20840b16b9bSSven Eckelmann 20940b16b9bSSven Eckelmann /** 21040b16b9bSSven Eckelmann * @BATADV_ATTR_TPMETER_COOKIE: session cookie to match tp_meter session 21140b16b9bSSven Eckelmann */ 21233a3bb4aSAntonio Quartulli BATADV_ATTR_TPMETER_COOKIE, 21340b16b9bSSven Eckelmann 21440b16b9bSSven Eckelmann /** 21540b16b9bSSven Eckelmann * @BATADV_ATTR_PAD: attribute used for padding for 64-bit alignment 21640b16b9bSSven Eckelmann */ 21733a3bb4aSAntonio Quartulli BATADV_ATTR_PAD, 21840b16b9bSSven Eckelmann 21940b16b9bSSven Eckelmann /** 22040b16b9bSSven Eckelmann * @BATADV_ATTR_ACTIVE: Flag indicating if the hard interface is active 22140b16b9bSSven Eckelmann */ 222b60620cfSMatthias Schiffer BATADV_ATTR_ACTIVE, 22340b16b9bSSven Eckelmann 22440b16b9bSSven Eckelmann /** 22540b16b9bSSven Eckelmann * @BATADV_ATTR_TT_ADDRESS: Client MAC address 22640b16b9bSSven Eckelmann */ 227d34f0550SMatthias Schiffer BATADV_ATTR_TT_ADDRESS, 22840b16b9bSSven Eckelmann 22940b16b9bSSven Eckelmann /** 23040b16b9bSSven Eckelmann * @BATADV_ATTR_TT_TTVN: Translation table version 23140b16b9bSSven Eckelmann */ 232d34f0550SMatthias Schiffer BATADV_ATTR_TT_TTVN, 23340b16b9bSSven Eckelmann 23440b16b9bSSven Eckelmann /** 23540b16b9bSSven Eckelmann * @BATADV_ATTR_TT_LAST_TTVN: Previous translation table version 23640b16b9bSSven Eckelmann */ 237d34f0550SMatthias Schiffer BATADV_ATTR_TT_LAST_TTVN, 23840b16b9bSSven Eckelmann 23940b16b9bSSven Eckelmann /** 24040b16b9bSSven Eckelmann * @BATADV_ATTR_TT_CRC32: CRC32 over translation table 24140b16b9bSSven Eckelmann */ 242d34f0550SMatthias Schiffer BATADV_ATTR_TT_CRC32, 24340b16b9bSSven Eckelmann 24440b16b9bSSven Eckelmann /** 24540b16b9bSSven Eckelmann * @BATADV_ATTR_TT_VID: VLAN ID 24640b16b9bSSven Eckelmann */ 247d34f0550SMatthias Schiffer BATADV_ATTR_TT_VID, 24840b16b9bSSven Eckelmann 24940b16b9bSSven Eckelmann /** 25040b16b9bSSven Eckelmann * @BATADV_ATTR_TT_FLAGS: Translation table client flags 25140b16b9bSSven Eckelmann */ 252d34f0550SMatthias Schiffer BATADV_ATTR_TT_FLAGS, 25340b16b9bSSven Eckelmann 25440b16b9bSSven Eckelmann /** 25540b16b9bSSven Eckelmann * @BATADV_ATTR_FLAG_BEST: Flags indicating entry is the best 25640b16b9bSSven Eckelmann */ 257d34f0550SMatthias Schiffer BATADV_ATTR_FLAG_BEST, 25840b16b9bSSven Eckelmann 25940b16b9bSSven Eckelmann /** 26040b16b9bSSven Eckelmann * @BATADV_ATTR_LAST_SEEN_MSECS: Time in milliseconds since last seen 26140b16b9bSSven Eckelmann */ 262d34f0550SMatthias Schiffer BATADV_ATTR_LAST_SEEN_MSECS, 26340b16b9bSSven Eckelmann 26440b16b9bSSven Eckelmann /** 26540b16b9bSSven Eckelmann * @BATADV_ATTR_NEIGH_ADDRESS: Neighbour MAC address 26640b16b9bSSven Eckelmann */ 267024f99cbSMatthias Schiffer BATADV_ATTR_NEIGH_ADDRESS, 26840b16b9bSSven Eckelmann 26940b16b9bSSven Eckelmann /** 27040b16b9bSSven Eckelmann * @BATADV_ATTR_TQ: TQ to neighbour 27140b16b9bSSven Eckelmann */ 272024f99cbSMatthias Schiffer BATADV_ATTR_TQ, 27340b16b9bSSven Eckelmann 27440b16b9bSSven Eckelmann /** 27540b16b9bSSven Eckelmann * @BATADV_ATTR_THROUGHPUT: Estimated throughput to Neighbour 27640b16b9bSSven Eckelmann */ 277f02a478fSMatthias Schiffer BATADV_ATTR_THROUGHPUT, 27840b16b9bSSven Eckelmann 27940b16b9bSSven Eckelmann /** 28040b16b9bSSven Eckelmann * @BATADV_ATTR_BANDWIDTH_UP: Reported uplink bandwidth 28140b16b9bSSven Eckelmann */ 282d7129dafSSven Eckelmann BATADV_ATTR_BANDWIDTH_UP, 28340b16b9bSSven Eckelmann 28440b16b9bSSven Eckelmann /** 28540b16b9bSSven Eckelmann * @BATADV_ATTR_BANDWIDTH_DOWN: Reported downlink bandwidth 28640b16b9bSSven Eckelmann */ 287d7129dafSSven Eckelmann BATADV_ATTR_BANDWIDTH_DOWN, 28840b16b9bSSven Eckelmann 28940b16b9bSSven Eckelmann /** 29040b16b9bSSven Eckelmann * @BATADV_ATTR_ROUTER: Gateway router MAC address 29140b16b9bSSven Eckelmann */ 292d7129dafSSven Eckelmann BATADV_ATTR_ROUTER, 29340b16b9bSSven Eckelmann 29440b16b9bSSven Eckelmann /** 29540b16b9bSSven Eckelmann * @BATADV_ATTR_BLA_OWN: Flag indicating own originator 29640b16b9bSSven Eckelmann */ 29704f3f5bfSAndrew Lunn BATADV_ATTR_BLA_OWN, 29840b16b9bSSven Eckelmann 29940b16b9bSSven Eckelmann /** 30040b16b9bSSven Eckelmann * @BATADV_ATTR_BLA_ADDRESS: Bridge loop avoidance claim MAC address 30140b16b9bSSven Eckelmann */ 30204f3f5bfSAndrew Lunn BATADV_ATTR_BLA_ADDRESS, 30340b16b9bSSven Eckelmann 30440b16b9bSSven Eckelmann /** 30540b16b9bSSven Eckelmann * @BATADV_ATTR_BLA_VID: BLA VLAN ID 30640b16b9bSSven Eckelmann */ 30704f3f5bfSAndrew Lunn BATADV_ATTR_BLA_VID, 30840b16b9bSSven Eckelmann 30940b16b9bSSven Eckelmann /** 31040b16b9bSSven Eckelmann * @BATADV_ATTR_BLA_BACKBONE: BLA gateway originator MAC address 31140b16b9bSSven Eckelmann */ 31204f3f5bfSAndrew Lunn BATADV_ATTR_BLA_BACKBONE, 31340b16b9bSSven Eckelmann 31440b16b9bSSven Eckelmann /** 31540b16b9bSSven Eckelmann * @BATADV_ATTR_BLA_CRC: BLA CRC 31640b16b9bSSven Eckelmann */ 31704f3f5bfSAndrew Lunn BATADV_ATTR_BLA_CRC, 31840b16b9bSSven Eckelmann 31941aeefccSLinus Lüssing /** 32041aeefccSLinus Lüssing * @BATADV_ATTR_DAT_CACHE_IP4ADDRESS: Client IPv4 address 32141aeefccSLinus Lüssing */ 32241aeefccSLinus Lüssing BATADV_ATTR_DAT_CACHE_IP4ADDRESS, 32341aeefccSLinus Lüssing 32441aeefccSLinus Lüssing /** 32541aeefccSLinus Lüssing * @BATADV_ATTR_DAT_CACHE_HWADDRESS: Client MAC address 32641aeefccSLinus Lüssing */ 32741aeefccSLinus Lüssing BATADV_ATTR_DAT_CACHE_HWADDRESS, 32841aeefccSLinus Lüssing 32941aeefccSLinus Lüssing /** 33041aeefccSLinus Lüssing * @BATADV_ATTR_DAT_CACHE_VID: VLAN ID 33141aeefccSLinus Lüssing */ 33241aeefccSLinus Lüssing BATADV_ATTR_DAT_CACHE_VID, 33341aeefccSLinus Lüssing 33453dd9a68SLinus Lüssing /** 33553dd9a68SLinus Lüssing * @BATADV_ATTR_MCAST_FLAGS: Per originator multicast flags 33653dd9a68SLinus Lüssing */ 33753dd9a68SLinus Lüssing BATADV_ATTR_MCAST_FLAGS, 33853dd9a68SLinus Lüssing 33953dd9a68SLinus Lüssing /** 34053dd9a68SLinus Lüssing * @BATADV_ATTR_MCAST_FLAGS_PRIV: Private, own multicast flags 34153dd9a68SLinus Lüssing */ 34253dd9a68SLinus Lüssing BATADV_ATTR_MCAST_FLAGS_PRIV, 34353dd9a68SLinus Lüssing 34449e7e37cSSven Eckelmann /** 34549e7e37cSSven Eckelmann * @BATADV_ATTR_VLANID: VLAN id on top of soft interface 34649e7e37cSSven Eckelmann */ 34749e7e37cSSven Eckelmann BATADV_ATTR_VLANID, 34849e7e37cSSven Eckelmann 3499ab4cee5SSven Eckelmann /** 3509ab4cee5SSven Eckelmann * @BATADV_ATTR_AGGREGATED_OGMS_ENABLED: whether the batman protocol 3519ab4cee5SSven Eckelmann * messages of the mesh interface shall be aggregated or not. 3529ab4cee5SSven Eckelmann */ 3539ab4cee5SSven Eckelmann BATADV_ATTR_AGGREGATED_OGMS_ENABLED, 3549ab4cee5SSven Eckelmann 355e43d16b8SSven Eckelmann /** 356e43d16b8SSven Eckelmann * @BATADV_ATTR_AP_ISOLATION_ENABLED: whether the data traffic going 357e43d16b8SSven Eckelmann * from a wireless client to another wireless client will be silently 358e43d16b8SSven Eckelmann * dropped. 359e43d16b8SSven Eckelmann */ 360e43d16b8SSven Eckelmann BATADV_ATTR_AP_ISOLATION_ENABLED, 361e43d16b8SSven Eckelmann 362e43d16b8SSven Eckelmann /** 363e43d16b8SSven Eckelmann * @BATADV_ATTR_ISOLATION_MARK: the isolation mark which is used to 364e43d16b8SSven Eckelmann * classify clients as "isolated" by the Extended Isolation feature. 365e43d16b8SSven Eckelmann */ 366e43d16b8SSven Eckelmann BATADV_ATTR_ISOLATION_MARK, 367e43d16b8SSven Eckelmann 368e43d16b8SSven Eckelmann /** 369e43d16b8SSven Eckelmann * @BATADV_ATTR_ISOLATION_MASK: the isolation (bit)mask which is used to 370e43d16b8SSven Eckelmann * classify clients as "isolated" by the Extended Isolation feature. 371e43d16b8SSven Eckelmann */ 372e43d16b8SSven Eckelmann BATADV_ATTR_ISOLATION_MASK, 373e43d16b8SSven Eckelmann 374d7e52506SSven Eckelmann /** 375d7e52506SSven Eckelmann * @BATADV_ATTR_BONDING_ENABLED: whether the data traffic going through 376d7e52506SSven Eckelmann * the mesh will be sent using multiple interfaces at the same time. 377d7e52506SSven Eckelmann */ 378d7e52506SSven Eckelmann BATADV_ATTR_BONDING_ENABLED, 379d7e52506SSven Eckelmann 38043ff6105SSven Eckelmann /** 38143ff6105SSven Eckelmann * @BATADV_ATTR_BRIDGE_LOOP_AVOIDANCE_ENABLED: whether the bridge loop 38243ff6105SSven Eckelmann * avoidance feature is enabled. This feature detects and avoids loops 38343ff6105SSven Eckelmann * between the mesh and devices bridged with the soft interface 38443ff6105SSven Eckelmann */ 38543ff6105SSven Eckelmann BATADV_ATTR_BRIDGE_LOOP_AVOIDANCE_ENABLED, 38643ff6105SSven Eckelmann 387a1c8de80SSven Eckelmann /** 388a1c8de80SSven Eckelmann * @BATADV_ATTR_DISTRIBUTED_ARP_TABLE_ENABLED: whether the distributed 389a1c8de80SSven Eckelmann * arp table feature is enabled. This feature uses a distributed hash 390a1c8de80SSven Eckelmann * table to answer ARP requests without flooding the request through 391a1c8de80SSven Eckelmann * the whole mesh. 392a1c8de80SSven Eckelmann */ 393a1c8de80SSven Eckelmann BATADV_ATTR_DISTRIBUTED_ARP_TABLE_ENABLED, 394a1c8de80SSven Eckelmann 3953e15b06eSSven Eckelmann /** 3963e15b06eSSven Eckelmann * @BATADV_ATTR_FRAGMENTATION_ENABLED: whether the data traffic going 3973e15b06eSSven Eckelmann * through the mesh will be fragmented or silently discarded if the 3983e15b06eSSven Eckelmann * packet size exceeds the outgoing interface MTU. 3993e15b06eSSven Eckelmann */ 4003e15b06eSSven Eckelmann BATADV_ATTR_FRAGMENTATION_ENABLED, 4013e15b06eSSven Eckelmann 402e2d0d35bSSven Eckelmann /** 403e2d0d35bSSven Eckelmann * @BATADV_ATTR_GW_BANDWIDTH_DOWN: defines the download bandwidth which 404e2d0d35bSSven Eckelmann * is propagated by this node if %BATADV_ATTR_GW_BANDWIDTH_MODE was set 405e2d0d35bSSven Eckelmann * to 'server'. 406e2d0d35bSSven Eckelmann */ 407e2d0d35bSSven Eckelmann BATADV_ATTR_GW_BANDWIDTH_DOWN, 408e2d0d35bSSven Eckelmann 409e2d0d35bSSven Eckelmann /** 410e2d0d35bSSven Eckelmann * @BATADV_ATTR_GW_BANDWIDTH_UP: defines the upload bandwidth which 411e2d0d35bSSven Eckelmann * is propagated by this node if %BATADV_ATTR_GW_BANDWIDTH_MODE was set 412e2d0d35bSSven Eckelmann * to 'server'. 413e2d0d35bSSven Eckelmann */ 414e2d0d35bSSven Eckelmann BATADV_ATTR_GW_BANDWIDTH_UP, 415e2d0d35bSSven Eckelmann 416e2d0d35bSSven Eckelmann /** 417e2d0d35bSSven Eckelmann * @BATADV_ATTR_GW_MODE: defines the state of the gateway features. 418e2d0d35bSSven Eckelmann * Possible values are specified in enum batadv_gw_modes 419e2d0d35bSSven Eckelmann */ 420e2d0d35bSSven Eckelmann BATADV_ATTR_GW_MODE, 421e2d0d35bSSven Eckelmann 422e2d0d35bSSven Eckelmann /** 423e2d0d35bSSven Eckelmann * @BATADV_ATTR_GW_SEL_CLASS: defines the selection criteria this node 424e2d0d35bSSven Eckelmann * will use to choose a gateway if gw_mode was set to 'client'. 425e2d0d35bSSven Eckelmann */ 426e2d0d35bSSven Eckelmann BATADV_ATTR_GW_SEL_CLASS, 427e2d0d35bSSven Eckelmann 428bfc7f1beSSven Eckelmann /** 429bfc7f1beSSven Eckelmann * @BATADV_ATTR_HOP_PENALTY: defines the penalty which will be applied 4303bda14d0SLinus Lüssing * to an originator message's tq-field on every hop and/or per 4313bda14d0SLinus Lüssing * hard interface 432bfc7f1beSSven Eckelmann */ 433bfc7f1beSSven Eckelmann BATADV_ATTR_HOP_PENALTY, 434bfc7f1beSSven Eckelmann 435b85bd091SSven Eckelmann /** 436b85bd091SSven Eckelmann * @BATADV_ATTR_LOG_LEVEL: bitmask with to define which debug messages 437b85bd091SSven Eckelmann * should be send to the debug log/trace ring buffer 438b85bd091SSven Eckelmann */ 439b85bd091SSven Eckelmann BATADV_ATTR_LOG_LEVEL, 440b85bd091SSven Eckelmann 441f75b56bcSSven Eckelmann /** 442f75b56bcSSven Eckelmann * @BATADV_ATTR_MULTICAST_FORCEFLOOD_ENABLED: whether multicast 443f75b56bcSSven Eckelmann * optimizations should be replaced by simple broadcast-like flooding 444f75b56bcSSven Eckelmann * of multicast packets. If set to non-zero then all nodes in the mesh 445f75b56bcSSven Eckelmann * are going to use classic flooding for any multicast packet with no 446f75b56bcSSven Eckelmann * optimizations. 447f75b56bcSSven Eckelmann */ 448f75b56bcSSven Eckelmann BATADV_ATTR_MULTICAST_FORCEFLOOD_ENABLED, 449f75b56bcSSven Eckelmann 4506c57cde6SSven Eckelmann /** 4516c57cde6SSven Eckelmann * @BATADV_ATTR_NETWORK_CODING_ENABLED: whether Network Coding (using 4526c57cde6SSven Eckelmann * some magic to send fewer wifi packets but still the same content) is 4536c57cde6SSven Eckelmann * enabled or not. 4546c57cde6SSven Eckelmann */ 4556c57cde6SSven Eckelmann BATADV_ATTR_NETWORK_CODING_ENABLED, 4566c57cde6SSven Eckelmann 4577b751b39SSven Eckelmann /** 4587b751b39SSven Eckelmann * @BATADV_ATTR_ORIG_INTERVAL: defines the interval in milliseconds in 4597b751b39SSven Eckelmann * which batman sends its protocol messages. 4607b751b39SSven Eckelmann */ 4617b751b39SSven Eckelmann BATADV_ATTR_ORIG_INTERVAL, 4627b751b39SSven Eckelmann 463a1080082SSven Eckelmann /** 464a1080082SSven Eckelmann * @BATADV_ATTR_ELP_INTERVAL: defines the interval in milliseconds in 465a1080082SSven Eckelmann * which batman emits probing packets for neighbor sensing (ELP). 466a1080082SSven Eckelmann */ 467a1080082SSven Eckelmann BATADV_ATTR_ELP_INTERVAL, 468a1080082SSven Eckelmann 4699a182242SSven Eckelmann /** 4709a182242SSven Eckelmann * @BATADV_ATTR_THROUGHPUT_OVERRIDE: defines the throughput value to be 4719a182242SSven Eckelmann * used by B.A.T.M.A.N. V when estimating the link throughput using 4729a182242SSven Eckelmann * this interface. If the value is set to 0 then batman-adv will try to 4739a182242SSven Eckelmann * estimate the throughput by itself. 4749a182242SSven Eckelmann */ 4759a182242SSven Eckelmann BATADV_ATTR_THROUGHPUT_OVERRIDE, 4769a182242SSven Eckelmann 47732e72744SLinus Lüssing /** 47832e72744SLinus Lüssing * @BATADV_ATTR_MULTICAST_FANOUT: defines the maximum number of packet 47932e72744SLinus Lüssing * copies that may be generated for a multicast-to-unicast conversion. 48032e72744SLinus Lüssing * Once this limit is exceeded distribution will fall back to broadcast. 48132e72744SLinus Lüssing */ 48232e72744SLinus Lüssing BATADV_ATTR_MULTICAST_FANOUT, 48332e72744SLinus Lüssing 48409748a22SMatthias Schiffer /* add attributes above here, update the policy in netlink.c */ 48540b16b9bSSven Eckelmann 48640b16b9bSSven Eckelmann /** 48740b16b9bSSven Eckelmann * @__BATADV_ATTR_AFTER_LAST: internal use 48840b16b9bSSven Eckelmann */ 48909748a22SMatthias Schiffer __BATADV_ATTR_AFTER_LAST, 49040b16b9bSSven Eckelmann 49140b16b9bSSven Eckelmann /** 49240b16b9bSSven Eckelmann * @NUM_BATADV_ATTR: total number of batadv_nl_attrs available 49340b16b9bSSven Eckelmann */ 49409748a22SMatthias Schiffer NUM_BATADV_ATTR = __BATADV_ATTR_AFTER_LAST, 49540b16b9bSSven Eckelmann 49640b16b9bSSven Eckelmann /** 49740b16b9bSSven Eckelmann * @BATADV_ATTR_MAX: highest attribute number currently defined 49840b16b9bSSven Eckelmann */ 49909748a22SMatthias Schiffer BATADV_ATTR_MAX = __BATADV_ATTR_AFTER_LAST - 1 50009748a22SMatthias Schiffer }; 50109748a22SMatthias Schiffer 50209748a22SMatthias Schiffer /** 50309748a22SMatthias Schiffer * enum batadv_nl_commands - supported batman-adv netlink commands 50409748a22SMatthias Schiffer */ 50509748a22SMatthias Schiffer enum batadv_nl_commands { 50640b16b9bSSven Eckelmann /** 50740b16b9bSSven Eckelmann * @BATADV_CMD_UNSPEC: unspecified command to catch errors 50840b16b9bSSven Eckelmann */ 50909748a22SMatthias Schiffer BATADV_CMD_UNSPEC, 51040b16b9bSSven Eckelmann 51140b16b9bSSven Eckelmann /** 51260040513SSven Eckelmann * @BATADV_CMD_GET_MESH: Get attributes from softif/mesh 51340b16b9bSSven Eckelmann */ 51460040513SSven Eckelmann BATADV_CMD_GET_MESH, 51560040513SSven Eckelmann 51660040513SSven Eckelmann /** 51760040513SSven Eckelmann * @BATADV_CMD_GET_MESH_INFO: Alias for @BATADV_CMD_GET_MESH 51860040513SSven Eckelmann */ 51960040513SSven Eckelmann BATADV_CMD_GET_MESH_INFO = BATADV_CMD_GET_MESH, 52040b16b9bSSven Eckelmann 52140b16b9bSSven Eckelmann /** 52240b16b9bSSven Eckelmann * @BATADV_CMD_TP_METER: Start a tp meter session 52340b16b9bSSven Eckelmann */ 52433a3bb4aSAntonio Quartulli BATADV_CMD_TP_METER, 52540b16b9bSSven Eckelmann 52640b16b9bSSven Eckelmann /** 52740b16b9bSSven Eckelmann * @BATADV_CMD_TP_METER_CANCEL: Cancel a tp meter session 52840b16b9bSSven Eckelmann */ 52933a3bb4aSAntonio Quartulli BATADV_CMD_TP_METER_CANCEL, 53040b16b9bSSven Eckelmann 53140b16b9bSSven Eckelmann /** 53240b16b9bSSven Eckelmann * @BATADV_CMD_GET_ROUTING_ALGOS: Query the list of routing algorithms. 53340b16b9bSSven Eckelmann */ 53407a3061eSMatthias Schiffer BATADV_CMD_GET_ROUTING_ALGOS, 53540b16b9bSSven Eckelmann 53640b16b9bSSven Eckelmann /** 5375c55a40fSSven Eckelmann * @BATADV_CMD_GET_HARDIF: Get attributes from a hardif of the 5385c55a40fSSven Eckelmann * current softif 53940b16b9bSSven Eckelmann */ 5405c55a40fSSven Eckelmann BATADV_CMD_GET_HARDIF, 5415c55a40fSSven Eckelmann 5425c55a40fSSven Eckelmann /** 5435c55a40fSSven Eckelmann * @BATADV_CMD_GET_HARDIFS: Alias for @BATADV_CMD_GET_HARDIF 5445c55a40fSSven Eckelmann */ 5455c55a40fSSven Eckelmann BATADV_CMD_GET_HARDIFS = BATADV_CMD_GET_HARDIF, 54640b16b9bSSven Eckelmann 54740b16b9bSSven Eckelmann /** 54840b16b9bSSven Eckelmann * @BATADV_CMD_GET_TRANSTABLE_LOCAL: Query list of local translations 54940b16b9bSSven Eckelmann */ 550d34f0550SMatthias Schiffer BATADV_CMD_GET_TRANSTABLE_LOCAL, 55140b16b9bSSven Eckelmann 55240b16b9bSSven Eckelmann /** 55340b16b9bSSven Eckelmann * @BATADV_CMD_GET_TRANSTABLE_GLOBAL: Query list of global translations 55440b16b9bSSven Eckelmann */ 555d34f0550SMatthias Schiffer BATADV_CMD_GET_TRANSTABLE_GLOBAL, 55640b16b9bSSven Eckelmann 55740b16b9bSSven Eckelmann /** 55840b16b9bSSven Eckelmann * @BATADV_CMD_GET_ORIGINATORS: Query list of originators 55940b16b9bSSven Eckelmann */ 56085cf8c85SMatthias Schiffer BATADV_CMD_GET_ORIGINATORS, 56140b16b9bSSven Eckelmann 56240b16b9bSSven Eckelmann /** 56340b16b9bSSven Eckelmann * @BATADV_CMD_GET_NEIGHBORS: Query list of neighbours 56440b16b9bSSven Eckelmann */ 56585cf8c85SMatthias Schiffer BATADV_CMD_GET_NEIGHBORS, 56640b16b9bSSven Eckelmann 56740b16b9bSSven Eckelmann /** 56840b16b9bSSven Eckelmann * @BATADV_CMD_GET_GATEWAYS: Query list of gateways 56940b16b9bSSven Eckelmann */ 570d7129dafSSven Eckelmann BATADV_CMD_GET_GATEWAYS, 57140b16b9bSSven Eckelmann 57240b16b9bSSven Eckelmann /** 57340b16b9bSSven Eckelmann * @BATADV_CMD_GET_BLA_CLAIM: Query list of bridge loop avoidance claims 57440b16b9bSSven Eckelmann */ 57504f3f5bfSAndrew Lunn BATADV_CMD_GET_BLA_CLAIM, 57640b16b9bSSven Eckelmann 57740b16b9bSSven Eckelmann /** 57840b16b9bSSven Eckelmann * @BATADV_CMD_GET_BLA_BACKBONE: Query list of bridge loop avoidance 57940b16b9bSSven Eckelmann * backbones 58040b16b9bSSven Eckelmann */ 581ea4152e1SSimon Wunderlich BATADV_CMD_GET_BLA_BACKBONE, 58240b16b9bSSven Eckelmann 58341aeefccSLinus Lüssing /** 58441aeefccSLinus Lüssing * @BATADV_CMD_GET_DAT_CACHE: Query list of DAT cache entries 58541aeefccSLinus Lüssing */ 58641aeefccSLinus Lüssing BATADV_CMD_GET_DAT_CACHE, 58741aeefccSLinus Lüssing 58853dd9a68SLinus Lüssing /** 58953dd9a68SLinus Lüssing * @BATADV_CMD_GET_MCAST_FLAGS: Query list of multicast flags 59053dd9a68SLinus Lüssing */ 59153dd9a68SLinus Lüssing BATADV_CMD_GET_MCAST_FLAGS, 59253dd9a68SLinus Lüssing 59360040513SSven Eckelmann /** 59460040513SSven Eckelmann * @BATADV_CMD_SET_MESH: Set attributes for softif/mesh 59560040513SSven Eckelmann */ 59660040513SSven Eckelmann BATADV_CMD_SET_MESH, 59760040513SSven Eckelmann 5985c55a40fSSven Eckelmann /** 5995c55a40fSSven Eckelmann * @BATADV_CMD_SET_HARDIF: Set attributes for hardif of the 6005c55a40fSSven Eckelmann * current softif 6015c55a40fSSven Eckelmann */ 6025c55a40fSSven Eckelmann BATADV_CMD_SET_HARDIF, 6035c55a40fSSven Eckelmann 60449e7e37cSSven Eckelmann /** 60549e7e37cSSven Eckelmann * @BATADV_CMD_GET_VLAN: Get attributes from a VLAN of the 60649e7e37cSSven Eckelmann * current softif 60749e7e37cSSven Eckelmann */ 60849e7e37cSSven Eckelmann BATADV_CMD_GET_VLAN, 60949e7e37cSSven Eckelmann 61049e7e37cSSven Eckelmann /** 61149e7e37cSSven Eckelmann * @BATADV_CMD_SET_VLAN: Set attributes for VLAN of the 61249e7e37cSSven Eckelmann * current softif 61349e7e37cSSven Eckelmann */ 61449e7e37cSSven Eckelmann BATADV_CMD_SET_VLAN, 61549e7e37cSSven Eckelmann 61609748a22SMatthias Schiffer /* add new commands above here */ 61740b16b9bSSven Eckelmann 61840b16b9bSSven Eckelmann /** 61940b16b9bSSven Eckelmann * @__BATADV_CMD_AFTER_LAST: internal use 62040b16b9bSSven Eckelmann */ 62109748a22SMatthias Schiffer __BATADV_CMD_AFTER_LAST, 62240b16b9bSSven Eckelmann 62340b16b9bSSven Eckelmann /** 62440b16b9bSSven Eckelmann * @BATADV_CMD_MAX: highest used command number 62540b16b9bSSven Eckelmann */ 62609748a22SMatthias Schiffer BATADV_CMD_MAX = __BATADV_CMD_AFTER_LAST - 1 62709748a22SMatthias Schiffer }; 62809748a22SMatthias Schiffer 62933a3bb4aSAntonio Quartulli /** 63033a3bb4aSAntonio Quartulli * enum batadv_tp_meter_reason - reason of a tp meter test run stop 63133a3bb4aSAntonio Quartulli */ 63233a3bb4aSAntonio Quartulli enum batadv_tp_meter_reason { 63340b16b9bSSven Eckelmann /** 63440b16b9bSSven Eckelmann * @BATADV_TP_REASON_COMPLETE: sender finished tp run 63540b16b9bSSven Eckelmann */ 63633a3bb4aSAntonio Quartulli BATADV_TP_REASON_COMPLETE = 3, 63740b16b9bSSven Eckelmann 63840b16b9bSSven Eckelmann /** 63940b16b9bSSven Eckelmann * @BATADV_TP_REASON_CANCEL: sender was stopped during run 64040b16b9bSSven Eckelmann */ 64133a3bb4aSAntonio Quartulli BATADV_TP_REASON_CANCEL = 4, 64240b16b9bSSven Eckelmann 64333a3bb4aSAntonio Quartulli /* error status >= 128 */ 64440b16b9bSSven Eckelmann 64540b16b9bSSven Eckelmann /** 64640b16b9bSSven Eckelmann * @BATADV_TP_REASON_DST_UNREACHABLE: receiver could not be reached or 64740b16b9bSSven Eckelmann * didn't answer 64840b16b9bSSven Eckelmann */ 64933a3bb4aSAntonio Quartulli BATADV_TP_REASON_DST_UNREACHABLE = 128, 65040b16b9bSSven Eckelmann 65140b16b9bSSven Eckelmann /** 65240b16b9bSSven Eckelmann * @BATADV_TP_REASON_RESEND_LIMIT: (unused) sender retry reached limit 65340b16b9bSSven Eckelmann */ 65433a3bb4aSAntonio Quartulli BATADV_TP_REASON_RESEND_LIMIT = 129, 65540b16b9bSSven Eckelmann 65640b16b9bSSven Eckelmann /** 65740b16b9bSSven Eckelmann * @BATADV_TP_REASON_ALREADY_ONGOING: test to or from the same node 65840b16b9bSSven Eckelmann * already ongoing 65940b16b9bSSven Eckelmann */ 66033a3bb4aSAntonio Quartulli BATADV_TP_REASON_ALREADY_ONGOING = 130, 66140b16b9bSSven Eckelmann 66240b16b9bSSven Eckelmann /** 66340b16b9bSSven Eckelmann * @BATADV_TP_REASON_MEMORY_ERROR: test was stopped due to low memory 66440b16b9bSSven Eckelmann */ 66533a3bb4aSAntonio Quartulli BATADV_TP_REASON_MEMORY_ERROR = 131, 66640b16b9bSSven Eckelmann 66740b16b9bSSven Eckelmann /** 66840b16b9bSSven Eckelmann * @BATADV_TP_REASON_CANT_SEND: failed to send via outgoing interface 66940b16b9bSSven Eckelmann */ 67033a3bb4aSAntonio Quartulli BATADV_TP_REASON_CANT_SEND = 132, 67140b16b9bSSven Eckelmann 67240b16b9bSSven Eckelmann /** 67340b16b9bSSven Eckelmann * @BATADV_TP_REASON_TOO_MANY: too many ongoing sessions 67440b16b9bSSven Eckelmann */ 67533a3bb4aSAntonio Quartulli BATADV_TP_REASON_TOO_MANY = 133, 67633a3bb4aSAntonio Quartulli }; 67733a3bb4aSAntonio Quartulli 678128254ceSSven Eckelmann /** 679128254ceSSven Eckelmann * enum batadv_ifla_attrs - batman-adv ifla nested attributes 680128254ceSSven Eckelmann */ 681128254ceSSven Eckelmann enum batadv_ifla_attrs { 682128254ceSSven Eckelmann /** 683128254ceSSven Eckelmann * @IFLA_BATADV_UNSPEC: unspecified attribute which is not parsed by 684128254ceSSven Eckelmann * rtnetlink 685128254ceSSven Eckelmann */ 686128254ceSSven Eckelmann IFLA_BATADV_UNSPEC, 687128254ceSSven Eckelmann 688a5ad457eSSven Eckelmann /** 689a5ad457eSSven Eckelmann * @IFLA_BATADV_ALGO_NAME: routing algorithm (name) which should be 690a5ad457eSSven Eckelmann * used by the newly registered batadv net_device. 691a5ad457eSSven Eckelmann */ 692a5ad457eSSven Eckelmann IFLA_BATADV_ALGO_NAME, 693a5ad457eSSven Eckelmann 694128254ceSSven Eckelmann /* add attributes above here, update the policy in soft-interface.c */ 695128254ceSSven Eckelmann 696128254ceSSven Eckelmann /** 697128254ceSSven Eckelmann * @__IFLA_BATADV_MAX: internal use 698128254ceSSven Eckelmann */ 699128254ceSSven Eckelmann __IFLA_BATADV_MAX, 700128254ceSSven Eckelmann }; 701128254ceSSven Eckelmann 702128254ceSSven Eckelmann #define IFLA_BATADV_MAX (__IFLA_BATADV_MAX - 1) 703128254ceSSven Eckelmann 70409748a22SMatthias Schiffer #endif /* _UAPI_LINUX_BATMAN_ADV_H_ */ 705