Zephyr API Documentation 4.5.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
ethernet_bridge.h
Go to the documentation of this file.
1
8
9/*
10 * Copyright (c) 2021 BayLibre SAS
11 * Copyright (c) 2024 Nordic Semiconductor
12 * SPDX-FileCopyrightText: Copyright 2025 NXP
13 *
14 * SPDX-License-Identifier: Apache-2.0
15 */
16
17#ifndef ZEPHYR_INCLUDE_NET_ETHERNET_BRIDGE_H_
18#define ZEPHYR_INCLUDE_NET_ETHERNET_BRIDGE_H_
19
20#include <zephyr/sys/slist.h>
22#include <zephyr/net/ethernet.h>
23
24#ifdef __cplusplus
25extern "C" {
26#endif
27
36
38
39#if defined(CONFIG_NET_ETHERNET_BRIDGE)
40#define NET_ETHERNET_BRIDGE_ETH_INTERFACE_COUNT CONFIG_NET_ETHERNET_BRIDGE_ETH_INTERFACE_COUNT
41#else
42#define NET_ETHERNET_BRIDGE_ETH_INTERFACE_COUNT 1
43#endif
44
45struct eth_bridge_iface_context {
46 /* Lock to protect access to interface array below */
47 struct k_mutex lock;
48
49 /* The actual bridge virtual interface */
50 struct net_if *iface;
51
52 /* What Ethernet interfaces are bridged together */
53 struct net_if *eth_iface[NET_ETHERNET_BRIDGE_ETH_INTERFACE_COUNT];
54
55 /* How many interfaces are bridged atm */
56 size_t count;
57
58 /* Bridge instance id */
59 int id;
60
61 /* Has user configured the bridge */
62 bool is_setup : 1;
63
64 /* Is the interface enabled or not */
65 bool status : 1;
66};
67
69
84int eth_bridge_iface_add(struct net_if *br, struct net_if *iface);
85
99int eth_bridge_iface_remove(struct net_if *br, struct net_if *iface);
100
109
118
126typedef void (*eth_bridge_cb_t)(struct eth_bridge_iface_context *br, void *user_data);
127
136void net_eth_bridge_foreach(eth_bridge_cb_t cb, void *user_data);
137
145static inline bool net_eth_iface_is_bridged(struct ethernet_context *ctx)
146{
147#if defined(CONFIG_NET_ETHERNET_BRIDGE)
148 struct eth_bridge_iface_context *br_ctx;
149 const struct device *br_dev;
150
151 NET_ASSERT(ctx != NULL);
152
153 if (ctx->bridge == NULL) {
154 return false;
155 }
156
157 br_dev = net_if_get_device(ctx->bridge);
158
159 br_ctx = (struct eth_bridge_iface_context *)br_dev->data;
160 if (br_ctx->is_setup) {
161 return true;
162 }
163#endif
164 return false;
165}
166
174static inline struct net_if *net_eth_get_bridge(struct ethernet_context *ctx)
175{
176#if defined(CONFIG_NET_ETHERNET_BRIDGE)
177 NET_ASSERT(ctx != NULL);
178
179 return ctx->bridge;
180#else
181 return NULL;
182#endif
183}
184
194enum net_verdict eth_bridge_input_process(struct net_if *iface, struct net_pkt *pkt,
195 struct net_if **dst_iface);
196
200
201#ifdef __cplusplus
202}
203#endif
204
205#endif /* ZEPHYR_INCLUDE_NET_ETHERNET_BRIDGE_H_ */
Ethernet.
static bool net_eth_iface_is_bridged(struct ethernet_context *ctx)
Check if the iface is bridged.
Definition ethernet_bridge.h:145
int eth_bridge_iface_add(struct net_if *br, struct net_if *iface)
Add an Ethernet network interface to a bridge.
void net_eth_bridge_foreach(eth_bridge_cb_t cb, void *user_data)
Go through all the bridge context instances in order to get information about them.
int eth_bridge_iface_remove(struct net_if *br, struct net_if *iface)
Remove an Ethernet network interface from a bridge.
struct net_if * eth_bridge_get_by_index(int index)
Get bridge instance according to index.
enum net_verdict eth_bridge_input_process(struct net_if *iface, struct net_pkt *pkt, struct net_if **dst_iface)
Process pkt received on bridged interface.
void(* eth_bridge_cb_t)(struct eth_bridge_iface_context *br, void *user_data)
Callback used while iterating over bridge instances.
Definition ethernet_bridge.h:126
static struct net_if * net_eth_get_bridge(struct ethernet_context *ctx)
Get bridge iface.
Definition ethernet_bridge.h:174
int eth_bridge_get_index(struct net_if *br)
Get bridge index according to pointer.
net_verdict
Net Verdict.
Definition net_core.h:84
static const struct device * net_if_get_device(struct net_if *iface)
Get an network interface's device.
Definition net_if.h:1187
Header file for the single-linked list API.
Runtime device structure (in ROM) per driver instance.
Definition device.h:543
void * data
Address of the device instance private data.
Definition device.h:553
Network Interface structure.
Definition net_if.h:857
Network packet.
Definition net_pkt.h:119
Iterable sections helpers.