1 /* SPDX-License-Identifier: MIT */ 2 /* Copyright (C) 2016-2019 B.A.T.M.A.N. contributors: 3 * 4 * Matthias Schiffer 5 */ 6 7 #ifndef _UAPI_LINUX_BATMAN_ADV_H_ 8 #define _UAPI_LINUX_BATMAN_ADV_H_ 9 10 #define BATADV_NL_NAME "batadv" 11 12 #define BATADV_NL_MCAST_GROUP_CONFIG "config" 13 #define BATADV_NL_MCAST_GROUP_TPMETER "tpmeter" 14 15 /** 16 * enum batadv_tt_client_flags - TT client specific flags 17 * 18 * Bits from 0 to 7 are called _remote flags_ because they are sent on the wire. 19 * Bits from 8 to 15 are called _local flags_ because they are used for local 20 * computations only. 21 * 22 * Bits from 4 to 7 - a subset of remote flags - are ensured to be in sync with 23 * the other nodes in the network. To achieve this goal these flags are included 24 * in the TT CRC computation. 25 */ 26 enum batadv_tt_client_flags { 27 /** 28 * @BATADV_TT_CLIENT_DEL: the client has to be deleted from the table 29 */ 30 BATADV_TT_CLIENT_DEL = (1 << 0), 31 32 /** 33 * @BATADV_TT_CLIENT_ROAM: the client roamed to/from another node and 34 * the new update telling its new real location has not been 35 * received/sent yet 36 */ 37 BATADV_TT_CLIENT_ROAM = (1 << 1), 38 39 /** 40 * @BATADV_TT_CLIENT_WIFI: this client is connected through a wifi 41 * interface. This information is used by the "AP Isolation" feature 42 */ 43 BATADV_TT_CLIENT_WIFI = (1 << 4), 44 45 /** 46 * @BATADV_TT_CLIENT_ISOLA: this client is considered "isolated". This 47 * information is used by the Extended Isolation feature 48 */ 49 BATADV_TT_CLIENT_ISOLA = (1 << 5), 50 51 /** 52 * @BATADV_TT_CLIENT_NOPURGE: this client should never be removed from 53 * the table 54 */ 55 BATADV_TT_CLIENT_NOPURGE = (1 << 8), 56 57 /** 58 * @BATADV_TT_CLIENT_NEW: this client has been added to the local table 59 * but has not been announced yet 60 */ 61 BATADV_TT_CLIENT_NEW = (1 << 9), 62 63 /** 64 * @BATADV_TT_CLIENT_PENDING: this client is marked for removal but it 65 * is kept in the table for one more originator interval for consistency 66 * purposes 67 */ 68 BATADV_TT_CLIENT_PENDING = (1 << 10), 69 70 /** 71 * @BATADV_TT_CLIENT_TEMP: this global client has been detected to be 72 * part of the network but no nnode has already announced it 73 */ 74 BATADV_TT_CLIENT_TEMP = (1 << 11), 75 }; 76 77 /** 78 * enum batadv_mcast_flags_priv - Private, own multicast flags 79 * 80 * These are internal, multicast related flags. Currently they describe certain 81 * multicast related attributes of the segment this originator bridges into the 82 * mesh. 83 * 84 * Those attributes are used to determine the public multicast flags this 85 * originator is going to announce via TT. 86 * 87 * For netlink, if BATADV_MCAST_FLAGS_BRIDGED is unset then all querier 88 * related flags are undefined. 89 */ 90 enum batadv_mcast_flags_priv { 91 /** 92 * @BATADV_MCAST_FLAGS_BRIDGED: There is a bridge on top of the mesh 93 * interface. 94 */ 95 BATADV_MCAST_FLAGS_BRIDGED = (1 << 0), 96 97 /** 98 * @BATADV_MCAST_FLAGS_QUERIER_IPV4_EXISTS: Whether an IGMP querier 99 * exists in the mesh 100 */ 101 BATADV_MCAST_FLAGS_QUERIER_IPV4_EXISTS = (1 << 1), 102 103 /** 104 * @BATADV_MCAST_FLAGS_QUERIER_IPV6_EXISTS: Whether an MLD querier 105 * exists in the mesh 106 */ 107 BATADV_MCAST_FLAGS_QUERIER_IPV6_EXISTS = (1 << 2), 108 109 /** 110 * @BATADV_MCAST_FLAGS_QUERIER_IPV4_SHADOWING: If an IGMP querier 111 * exists, whether it is potentially shadowing multicast listeners 112 * (i.e. querier is behind our own bridge segment) 113 */ 114 BATADV_MCAST_FLAGS_QUERIER_IPV4_SHADOWING = (1 << 3), 115 116 /** 117 * @BATADV_MCAST_FLAGS_QUERIER_IPV6_SHADOWING: If an MLD querier 118 * exists, whether it is potentially shadowing multicast listeners 119 * (i.e. querier is behind our own bridge segment) 120 */ 121 BATADV_MCAST_FLAGS_QUERIER_IPV6_SHADOWING = (1 << 4), 122 }; 123 124 /** 125 * enum batadv_gw_modes - gateway mode of node 126 */ 127 enum batadv_gw_modes { 128 /** @BATADV_GW_MODE_OFF: gw mode disabled */ 129 BATADV_GW_MODE_OFF, 130 131 /** @BATADV_GW_MODE_CLIENT: send DHCP requests to gw servers */ 132 BATADV_GW_MODE_CLIENT, 133 134 /** @BATADV_GW_MODE_SERVER: announce itself as gatway server */ 135 BATADV_GW_MODE_SERVER, 136 }; 137 138 /** 139 * enum batadv_nl_attrs - batman-adv netlink attributes 140 */ 141 enum batadv_nl_attrs { 142 /** 143 * @BATADV_ATTR_UNSPEC: unspecified attribute to catch errors 144 */ 145 BATADV_ATTR_UNSPEC, 146 147 /** 148 * @BATADV_ATTR_VERSION: batman-adv version string 149 */ 150 BATADV_ATTR_VERSION, 151 152 /** 153 * @BATADV_ATTR_ALGO_NAME: name of routing algorithm 154 */ 155 BATADV_ATTR_ALGO_NAME, 156 157 /** 158 * @BATADV_ATTR_MESH_IFINDEX: index of the batman-adv interface 159 */ 160 BATADV_ATTR_MESH_IFINDEX, 161 162 /** 163 * @BATADV_ATTR_MESH_IFNAME: name of the batman-adv interface 164 */ 165 BATADV_ATTR_MESH_IFNAME, 166 167 /** 168 * @BATADV_ATTR_MESH_ADDRESS: mac address of the batman-adv interface 169 */ 170 BATADV_ATTR_MESH_ADDRESS, 171 172 /** 173 * @BATADV_ATTR_HARD_IFINDEX: index of the non-batman-adv interface 174 */ 175 BATADV_ATTR_HARD_IFINDEX, 176 177 /** 178 * @BATADV_ATTR_HARD_IFNAME: name of the non-batman-adv interface 179 */ 180 BATADV_ATTR_HARD_IFNAME, 181 182 /** 183 * @BATADV_ATTR_HARD_ADDRESS: mac address of the non-batman-adv 184 * interface 185 */ 186 BATADV_ATTR_HARD_ADDRESS, 187 188 /** 189 * @BATADV_ATTR_ORIG_ADDRESS: originator mac address 190 */ 191 BATADV_ATTR_ORIG_ADDRESS, 192 193 /** 194 * @BATADV_ATTR_TPMETER_RESULT: result of run (see 195 * batadv_tp_meter_status) 196 */ 197 BATADV_ATTR_TPMETER_RESULT, 198 199 /** 200 * @BATADV_ATTR_TPMETER_TEST_TIME: time (msec) the run took 201 */ 202 BATADV_ATTR_TPMETER_TEST_TIME, 203 204 /** 205 * @BATADV_ATTR_TPMETER_BYTES: amount of acked bytes during run 206 */ 207 BATADV_ATTR_TPMETER_BYTES, 208 209 /** 210 * @BATADV_ATTR_TPMETER_COOKIE: session cookie to match tp_meter session 211 */ 212 BATADV_ATTR_TPMETER_COOKIE, 213 214 /** 215 * @BATADV_ATTR_PAD: attribute used for padding for 64-bit alignment 216 */ 217 BATADV_ATTR_PAD, 218 219 /** 220 * @BATADV_ATTR_ACTIVE: Flag indicating if the hard interface is active 221 */ 222 BATADV_ATTR_ACTIVE, 223 224 /** 225 * @BATADV_ATTR_TT_ADDRESS: Client MAC address 226 */ 227 BATADV_ATTR_TT_ADDRESS, 228 229 /** 230 * @BATADV_ATTR_TT_TTVN: Translation table version 231 */ 232 BATADV_ATTR_TT_TTVN, 233 234 /** 235 * @BATADV_ATTR_TT_LAST_TTVN: Previous translation table version 236 */ 237 BATADV_ATTR_TT_LAST_TTVN, 238 239 /** 240 * @BATADV_ATTR_TT_CRC32: CRC32 over translation table 241 */ 242 BATADV_ATTR_TT_CRC32, 243 244 /** 245 * @BATADV_ATTR_TT_VID: VLAN ID 246 */ 247 BATADV_ATTR_TT_VID, 248 249 /** 250 * @BATADV_ATTR_TT_FLAGS: Translation table client flags 251 */ 252 BATADV_ATTR_TT_FLAGS, 253 254 /** 255 * @BATADV_ATTR_FLAG_BEST: Flags indicating entry is the best 256 */ 257 BATADV_ATTR_FLAG_BEST, 258 259 /** 260 * @BATADV_ATTR_LAST_SEEN_MSECS: Time in milliseconds since last seen 261 */ 262 BATADV_ATTR_LAST_SEEN_MSECS, 263 264 /** 265 * @BATADV_ATTR_NEIGH_ADDRESS: Neighbour MAC address 266 */ 267 BATADV_ATTR_NEIGH_ADDRESS, 268 269 /** 270 * @BATADV_ATTR_TQ: TQ to neighbour 271 */ 272 BATADV_ATTR_TQ, 273 274 /** 275 * @BATADV_ATTR_THROUGHPUT: Estimated throughput to Neighbour 276 */ 277 BATADV_ATTR_THROUGHPUT, 278 279 /** 280 * @BATADV_ATTR_BANDWIDTH_UP: Reported uplink bandwidth 281 */ 282 BATADV_ATTR_BANDWIDTH_UP, 283 284 /** 285 * @BATADV_ATTR_BANDWIDTH_DOWN: Reported downlink bandwidth 286 */ 287 BATADV_ATTR_BANDWIDTH_DOWN, 288 289 /** 290 * @BATADV_ATTR_ROUTER: Gateway router MAC address 291 */ 292 BATADV_ATTR_ROUTER, 293 294 /** 295 * @BATADV_ATTR_BLA_OWN: Flag indicating own originator 296 */ 297 BATADV_ATTR_BLA_OWN, 298 299 /** 300 * @BATADV_ATTR_BLA_ADDRESS: Bridge loop avoidance claim MAC address 301 */ 302 BATADV_ATTR_BLA_ADDRESS, 303 304 /** 305 * @BATADV_ATTR_BLA_VID: BLA VLAN ID 306 */ 307 BATADV_ATTR_BLA_VID, 308 309 /** 310 * @BATADV_ATTR_BLA_BACKBONE: BLA gateway originator MAC address 311 */ 312 BATADV_ATTR_BLA_BACKBONE, 313 314 /** 315 * @BATADV_ATTR_BLA_CRC: BLA CRC 316 */ 317 BATADV_ATTR_BLA_CRC, 318 319 /** 320 * @BATADV_ATTR_DAT_CACHE_IP4ADDRESS: Client IPv4 address 321 */ 322 BATADV_ATTR_DAT_CACHE_IP4ADDRESS, 323 324 /** 325 * @BATADV_ATTR_DAT_CACHE_HWADDRESS: Client MAC address 326 */ 327 BATADV_ATTR_DAT_CACHE_HWADDRESS, 328 329 /** 330 * @BATADV_ATTR_DAT_CACHE_VID: VLAN ID 331 */ 332 BATADV_ATTR_DAT_CACHE_VID, 333 334 /** 335 * @BATADV_ATTR_MCAST_FLAGS: Per originator multicast flags 336 */ 337 BATADV_ATTR_MCAST_FLAGS, 338 339 /** 340 * @BATADV_ATTR_MCAST_FLAGS_PRIV: Private, own multicast flags 341 */ 342 BATADV_ATTR_MCAST_FLAGS_PRIV, 343 344 /** 345 * @BATADV_ATTR_VLANID: VLAN id on top of soft interface 346 */ 347 BATADV_ATTR_VLANID, 348 349 /** 350 * @BATADV_ATTR_AGGREGATED_OGMS_ENABLED: whether the batman protocol 351 * messages of the mesh interface shall be aggregated or not. 352 */ 353 BATADV_ATTR_AGGREGATED_OGMS_ENABLED, 354 355 /** 356 * @BATADV_ATTR_AP_ISOLATION_ENABLED: whether the data traffic going 357 * from a wireless client to another wireless client will be silently 358 * dropped. 359 */ 360 BATADV_ATTR_AP_ISOLATION_ENABLED, 361 362 /** 363 * @BATADV_ATTR_ISOLATION_MARK: the isolation mark which is used to 364 * classify clients as "isolated" by the Extended Isolation feature. 365 */ 366 BATADV_ATTR_ISOLATION_MARK, 367 368 /** 369 * @BATADV_ATTR_ISOLATION_MASK: the isolation (bit)mask which is used to 370 * classify clients as "isolated" by the Extended Isolation feature. 371 */ 372 BATADV_ATTR_ISOLATION_MASK, 373 374 /** 375 * @BATADV_ATTR_BONDING_ENABLED: whether the data traffic going through 376 * the mesh will be sent using multiple interfaces at the same time. 377 */ 378 BATADV_ATTR_BONDING_ENABLED, 379 380 /** 381 * @BATADV_ATTR_BRIDGE_LOOP_AVOIDANCE_ENABLED: whether the bridge loop 382 * avoidance feature is enabled. This feature detects and avoids loops 383 * between the mesh and devices bridged with the soft interface 384 */ 385 BATADV_ATTR_BRIDGE_LOOP_AVOIDANCE_ENABLED, 386 387 /** 388 * @BATADV_ATTR_DISTRIBUTED_ARP_TABLE_ENABLED: whether the distributed 389 * arp table feature is enabled. This feature uses a distributed hash 390 * table to answer ARP requests without flooding the request through 391 * the whole mesh. 392 */ 393 BATADV_ATTR_DISTRIBUTED_ARP_TABLE_ENABLED, 394 395 /** 396 * @BATADV_ATTR_FRAGMENTATION_ENABLED: whether the data traffic going 397 * through the mesh will be fragmented or silently discarded if the 398 * packet size exceeds the outgoing interface MTU. 399 */ 400 BATADV_ATTR_FRAGMENTATION_ENABLED, 401 402 /** 403 * @BATADV_ATTR_GW_BANDWIDTH_DOWN: defines the download bandwidth which 404 * is propagated by this node if %BATADV_ATTR_GW_BANDWIDTH_MODE was set 405 * to 'server'. 406 */ 407 BATADV_ATTR_GW_BANDWIDTH_DOWN, 408 409 /** 410 * @BATADV_ATTR_GW_BANDWIDTH_UP: defines the upload bandwidth which 411 * is propagated by this node if %BATADV_ATTR_GW_BANDWIDTH_MODE was set 412 * to 'server'. 413 */ 414 BATADV_ATTR_GW_BANDWIDTH_UP, 415 416 /** 417 * @BATADV_ATTR_GW_MODE: defines the state of the gateway features. 418 * Possible values are specified in enum batadv_gw_modes 419 */ 420 BATADV_ATTR_GW_MODE, 421 422 /** 423 * @BATADV_ATTR_GW_SEL_CLASS: defines the selection criteria this node 424 * will use to choose a gateway if gw_mode was set to 'client'. 425 */ 426 BATADV_ATTR_GW_SEL_CLASS, 427 428 /** 429 * @BATADV_ATTR_HOP_PENALTY: defines the penalty which will be applied 430 * to an originator message's tq-field on every hop. 431 */ 432 BATADV_ATTR_HOP_PENALTY, 433 434 /** 435 * @BATADV_ATTR_LOG_LEVEL: bitmask with to define which debug messages 436 * should be send to the debug log/trace ring buffer 437 */ 438 BATADV_ATTR_LOG_LEVEL, 439 440 /** 441 * @BATADV_ATTR_MULTICAST_FORCEFLOOD_ENABLED: whether multicast 442 * optimizations should be replaced by simple broadcast-like flooding 443 * of multicast packets. If set to non-zero then all nodes in the mesh 444 * are going to use classic flooding for any multicast packet with no 445 * optimizations. 446 */ 447 BATADV_ATTR_MULTICAST_FORCEFLOOD_ENABLED, 448 449 /** 450 * @BATADV_ATTR_NETWORK_CODING_ENABLED: whether Network Coding (using 451 * some magic to send fewer wifi packets but still the same content) is 452 * enabled or not. 453 */ 454 BATADV_ATTR_NETWORK_CODING_ENABLED, 455 456 /** 457 * @BATADV_ATTR_ORIG_INTERVAL: defines the interval in milliseconds in 458 * which batman sends its protocol messages. 459 */ 460 BATADV_ATTR_ORIG_INTERVAL, 461 462 /** 463 * @BATADV_ATTR_ELP_INTERVAL: defines the interval in milliseconds in 464 * which batman emits probing packets for neighbor sensing (ELP). 465 */ 466 BATADV_ATTR_ELP_INTERVAL, 467 468 /** 469 * @BATADV_ATTR_THROUGHPUT_OVERRIDE: defines the throughput value to be 470 * used by B.A.T.M.A.N. V when estimating the link throughput using 471 * this interface. If the value is set to 0 then batman-adv will try to 472 * estimate the throughput by itself. 473 */ 474 BATADV_ATTR_THROUGHPUT_OVERRIDE, 475 476 /** 477 * @BATADV_ATTR_MULTICAST_FANOUT: defines the maximum number of packet 478 * copies that may be generated for a multicast-to-unicast conversion. 479 * Once this limit is exceeded distribution will fall back to broadcast. 480 */ 481 BATADV_ATTR_MULTICAST_FANOUT, 482 483 /* add attributes above here, update the policy in netlink.c */ 484 485 /** 486 * @__BATADV_ATTR_AFTER_LAST: internal use 487 */ 488 __BATADV_ATTR_AFTER_LAST, 489 490 /** 491 * @NUM_BATADV_ATTR: total number of batadv_nl_attrs available 492 */ 493 NUM_BATADV_ATTR = __BATADV_ATTR_AFTER_LAST, 494 495 /** 496 * @BATADV_ATTR_MAX: highest attribute number currently defined 497 */ 498 BATADV_ATTR_MAX = __BATADV_ATTR_AFTER_LAST - 1 499 }; 500 501 /** 502 * enum batadv_nl_commands - supported batman-adv netlink commands 503 */ 504 enum batadv_nl_commands { 505 /** 506 * @BATADV_CMD_UNSPEC: unspecified command to catch errors 507 */ 508 BATADV_CMD_UNSPEC, 509 510 /** 511 * @BATADV_CMD_GET_MESH: Get attributes from softif/mesh 512 */ 513 BATADV_CMD_GET_MESH, 514 515 /** 516 * @BATADV_CMD_GET_MESH_INFO: Alias for @BATADV_CMD_GET_MESH 517 */ 518 BATADV_CMD_GET_MESH_INFO = BATADV_CMD_GET_MESH, 519 520 /** 521 * @BATADV_CMD_TP_METER: Start a tp meter session 522 */ 523 BATADV_CMD_TP_METER, 524 525 /** 526 * @BATADV_CMD_TP_METER_CANCEL: Cancel a tp meter session 527 */ 528 BATADV_CMD_TP_METER_CANCEL, 529 530 /** 531 * @BATADV_CMD_GET_ROUTING_ALGOS: Query the list of routing algorithms. 532 */ 533 BATADV_CMD_GET_ROUTING_ALGOS, 534 535 /** 536 * @BATADV_CMD_GET_HARDIF: Get attributes from a hardif of the 537 * current softif 538 */ 539 BATADV_CMD_GET_HARDIF, 540 541 /** 542 * @BATADV_CMD_GET_HARDIFS: Alias for @BATADV_CMD_GET_HARDIF 543 */ 544 BATADV_CMD_GET_HARDIFS = BATADV_CMD_GET_HARDIF, 545 546 /** 547 * @BATADV_CMD_GET_TRANSTABLE_LOCAL: Query list of local translations 548 */ 549 BATADV_CMD_GET_TRANSTABLE_LOCAL, 550 551 /** 552 * @BATADV_CMD_GET_TRANSTABLE_GLOBAL: Query list of global translations 553 */ 554 BATADV_CMD_GET_TRANSTABLE_GLOBAL, 555 556 /** 557 * @BATADV_CMD_GET_ORIGINATORS: Query list of originators 558 */ 559 BATADV_CMD_GET_ORIGINATORS, 560 561 /** 562 * @BATADV_CMD_GET_NEIGHBORS: Query list of neighbours 563 */ 564 BATADV_CMD_GET_NEIGHBORS, 565 566 /** 567 * @BATADV_CMD_GET_GATEWAYS: Query list of gateways 568 */ 569 BATADV_CMD_GET_GATEWAYS, 570 571 /** 572 * @BATADV_CMD_GET_BLA_CLAIM: Query list of bridge loop avoidance claims 573 */ 574 BATADV_CMD_GET_BLA_CLAIM, 575 576 /** 577 * @BATADV_CMD_GET_BLA_BACKBONE: Query list of bridge loop avoidance 578 * backbones 579 */ 580 BATADV_CMD_GET_BLA_BACKBONE, 581 582 /** 583 * @BATADV_CMD_GET_DAT_CACHE: Query list of DAT cache entries 584 */ 585 BATADV_CMD_GET_DAT_CACHE, 586 587 /** 588 * @BATADV_CMD_GET_MCAST_FLAGS: Query list of multicast flags 589 */ 590 BATADV_CMD_GET_MCAST_FLAGS, 591 592 /** 593 * @BATADV_CMD_SET_MESH: Set attributes for softif/mesh 594 */ 595 BATADV_CMD_SET_MESH, 596 597 /** 598 * @BATADV_CMD_SET_HARDIF: Set attributes for hardif of the 599 * current softif 600 */ 601 BATADV_CMD_SET_HARDIF, 602 603 /** 604 * @BATADV_CMD_GET_VLAN: Get attributes from a VLAN of the 605 * current softif 606 */ 607 BATADV_CMD_GET_VLAN, 608 609 /** 610 * @BATADV_CMD_SET_VLAN: Set attributes for VLAN of the 611 * current softif 612 */ 613 BATADV_CMD_SET_VLAN, 614 615 /* add new commands above here */ 616 617 /** 618 * @__BATADV_CMD_AFTER_LAST: internal use 619 */ 620 __BATADV_CMD_AFTER_LAST, 621 622 /** 623 * @BATADV_CMD_MAX: highest used command number 624 */ 625 BATADV_CMD_MAX = __BATADV_CMD_AFTER_LAST - 1 626 }; 627 628 /** 629 * enum batadv_tp_meter_reason - reason of a tp meter test run stop 630 */ 631 enum batadv_tp_meter_reason { 632 /** 633 * @BATADV_TP_REASON_COMPLETE: sender finished tp run 634 */ 635 BATADV_TP_REASON_COMPLETE = 3, 636 637 /** 638 * @BATADV_TP_REASON_CANCEL: sender was stopped during run 639 */ 640 BATADV_TP_REASON_CANCEL = 4, 641 642 /* error status >= 128 */ 643 644 /** 645 * @BATADV_TP_REASON_DST_UNREACHABLE: receiver could not be reached or 646 * didn't answer 647 */ 648 BATADV_TP_REASON_DST_UNREACHABLE = 128, 649 650 /** 651 * @BATADV_TP_REASON_RESEND_LIMIT: (unused) sender retry reached limit 652 */ 653 BATADV_TP_REASON_RESEND_LIMIT = 129, 654 655 /** 656 * @BATADV_TP_REASON_ALREADY_ONGOING: test to or from the same node 657 * already ongoing 658 */ 659 BATADV_TP_REASON_ALREADY_ONGOING = 130, 660 661 /** 662 * @BATADV_TP_REASON_MEMORY_ERROR: test was stopped due to low memory 663 */ 664 BATADV_TP_REASON_MEMORY_ERROR = 131, 665 666 /** 667 * @BATADV_TP_REASON_CANT_SEND: failed to send via outgoing interface 668 */ 669 BATADV_TP_REASON_CANT_SEND = 132, 670 671 /** 672 * @BATADV_TP_REASON_TOO_MANY: too many ongoing sessions 673 */ 674 BATADV_TP_REASON_TOO_MANY = 133, 675 }; 676 677 #endif /* _UAPI_LINUX_BATMAN_ADV_H_ */ 678