LCOV - code coverage report
Current view: top level - zephyr/net - ethernet_bridge.h Coverage Total Hit
Test: new.info Lines: 100.0 % 7 7
Test Date: 2025-09-05 22:20:39

            Line data    Source code
       1            1 : /** @file
       2              :  * @brief Ethernet Bridge public header file
       3              :  *
       4              :  * Ethernet Bridges connect two or more Ethernet networks together and
       5              :  * transparently forward packets from one network to the others as if
       6              :  * they were part of the same network.
       7              :  */
       8              : 
       9              : /*
      10              :  * Copyright (c) 2021 BayLibre SAS
      11              :  * Copyright (c) 2024 Nordic Semiconductor
      12              :  *
      13              :  * SPDX-License-Identifier: Apache-2.0
      14              :  */
      15              : 
      16              : #ifndef ZEPHYR_INCLUDE_NET_ETHERNET_BRIDGE_H_
      17              : #define ZEPHYR_INCLUDE_NET_ETHERNET_BRIDGE_H_
      18              : 
      19              : #include <zephyr/sys/slist.h>
      20              : #include <zephyr/sys/iterable_sections.h>
      21              : 
      22              : #ifdef __cplusplus
      23              : extern "C" {
      24              : #endif
      25              : 
      26              : /**
      27              :  * @brief Ethernet Bridging API
      28              :  * @defgroup eth_bridge Ethernet Bridging API
      29              :  * @since 2.7
      30              :  * @version 0.8.0
      31              :  * @ingroup networking
      32              :  * @{
      33              :  */
      34              : 
      35              : /** @cond INTERNAL_HIDDEN */
      36              : 
      37              : #if defined(CONFIG_NET_ETHERNET_BRIDGE)
      38              : #define NET_ETHERNET_BRIDGE_ETH_INTERFACE_COUNT CONFIG_NET_ETHERNET_BRIDGE_ETH_INTERFACE_COUNT
      39              : #else
      40              : #define NET_ETHERNET_BRIDGE_ETH_INTERFACE_COUNT 1
      41              : #endif
      42              : 
      43              : struct eth_bridge_iface_context {
      44              :         /* Lock to protect access to interface array below */
      45              :         struct k_mutex lock;
      46              : 
      47              :         /* The actual bridge virtual interface  */
      48              :         struct net_if *iface;
      49              : 
      50              :         /* What Ethernet interfaces are bridged together */
      51              :         struct net_if *eth_iface[NET_ETHERNET_BRIDGE_ETH_INTERFACE_COUNT];
      52              : 
      53              :         /* How many interfaces are bridged atm */
      54              :         size_t count;
      55              : 
      56              :         /* Bridge instance id */
      57              :         int id;
      58              : 
      59              :         /* Is the bridge interface initialized */
      60              :         bool is_init : 1;
      61              : 
      62              :         /* Has user configured the bridge */
      63              :         bool is_setup : 1;
      64              : 
      65              :         /* Is the interface enabled or not */
      66              :         bool status : 1;
      67              : };
      68              : 
      69              : /** @endcond */
      70              : 
      71              : /**
      72              :  * @brief Add an Ethernet network interface to a bridge
      73              :  *
      74              :  * This adds a network interface to a bridge. The interface is then put
      75              :  * into promiscuous mode. After more than one Ethernet interfaces are
      76              :  * added to the bridge interface, the bridge interface is setup.
      77              :  * After the setup is done, the bridge interface can be brought up so
      78              :  * that it can start bridging L2 traffic.
      79              :  *
      80              :  * @param br A pointer to a bridge interface
      81              :  * @param iface Interface to add
      82              :  *
      83              :  * @return 0 if OK, negative error code otherwise.
      84              :  */
      85            1 : int eth_bridge_iface_add(struct net_if *br, struct net_if *iface);
      86              : 
      87              : /**
      88              :  * @brief Remove an Ethernet network interface from a bridge.
      89              :  *
      90              :  * If the bridge interface setup has only one Ethernet interface left
      91              :  * after this function call, the bridge is disabled as it cannot bridge
      92              :  * the L2 traffic any more. The bridge interface is left in UP state
      93              :  * if this case.
      94              :  *
      95              :  * @param br A pointer to a bridge interface
      96              :  * @param iface Interface to remove
      97              :  *
      98              :  * @return 0 if OK, negative error code otherwise.
      99              :  */
     100            1 : int eth_bridge_iface_remove(struct net_if *br, struct net_if *iface);
     101              : 
     102              : /**
     103              :  * @brief Get bridge index according to pointer
     104              :  *
     105              :  * @param br Pointer to bridge instance
     106              :  *
     107              :  * @return Bridge index
     108              :  */
     109            1 : int eth_bridge_get_index(struct net_if *br);
     110              : 
     111              : /**
     112              :  * @brief Get bridge instance according to index
     113              :  *
     114              :  * @param index Bridge instance index
     115              :  *
     116              :  * @return Pointer to bridge interface or NULL if not found.
     117              :  */
     118            1 : struct net_if *eth_bridge_get_by_index(int index);
     119              : 
     120              : /**
     121              :  * @typedef eth_bridge_cb_t
     122              :  * @brief Callback used while iterating over bridge instances
     123              :  *
     124              :  * @param br Pointer to bridge context instance
     125              :  * @param user_data User supplied data
     126              :  */
     127            1 : typedef void (*eth_bridge_cb_t)(struct eth_bridge_iface_context *br, void *user_data);
     128              : 
     129              : /**
     130              :  * @brief Go through all the bridge context instances in order to get
     131              :  *        information about them. This is mainly useful in
     132              :  *        net-shell to print data about currently active bridges.
     133              :  *
     134              :  * @param cb Callback to call for each bridge instance
     135              :  * @param user_data User supplied data
     136              :  */
     137            1 : void net_eth_bridge_foreach(eth_bridge_cb_t cb, void *user_data);
     138              : 
     139              : /**
     140              :  * @}
     141              :  */
     142              : 
     143              : #ifdef __cplusplus
     144              : }
     145              : #endif
     146              : 
     147              : #endif /* ZEPHYR_INCLUDE_NET_ETHERNET_BRIDGE_H_ */
        

Generated by: LCOV version 2.0-1