LCOV - code coverage report
Current view: top level - zephyr/net - ethernet_bridge.h Hit Total Coverage
Test: new.info Lines: 7 7 100.0 %
Date: 2024-12-22 00:14:23

          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 1.14