Skip to content

Commit 0aaf0aa

Browse files
jukkarcarlescufi
authored andcommitted
doc: net: Add info how to test Ethernet bridging with native-sim
Add instructions how to test Ethernet bridging when using native-sim board. Signed-off-by: Jukka Rissanen <[email protected]>
1 parent 42b7a97 commit 0aaf0aa

File tree

2 files changed

+192
-0
lines changed

2 files changed

+192
-0
lines changed
Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
.. _networking_with_native_sim_eth_bridge:
2+
3+
Ethernet bridge with native_sim board
4+
#####################################
5+
6+
.. contents::
7+
:local:
8+
:depth: 2
9+
10+
This document describes how to set up a bridged Ethernet network between a (Linux) host
11+
and a Zephyr application running in a :ref:`native_sim <native_sim>` board.
12+
13+
This setup is useful when testing the Ethernet bridging feature that can be enabled with
14+
:kconfig:option:`CONFIG_NET_ETHERNET_BRIDGE` Kconfig option. In this setup, the net-tools
15+
configuration creates two host network interfaces ``zeth0`` and ``zeth1`` and connects them
16+
to Zephyr's :ref:`native_sim <native_sim>` application.
17+
18+
First create the host interfaces. In this example two interfaces are created.
19+
20+
.. code-block:: console
21+
22+
cd $ZEPHYR_BASE/../tools/net-tools
23+
./net-setup.sh -c zeth-multiface.conf -i zeth0 -t 2
24+
25+
The ``-c`` tells which configuration file to use, where ``zeth-multiface.conf`` is tailored
26+
for generating multiple network interfaces in the host.
27+
The ``-i`` option tells what is the first host interface name. The ``-t`` tells how
28+
many network interfaces to create.
29+
30+
Example output of the host interfaces:
31+
32+
.. code-block:: console
33+
34+
zeth0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
35+
inet 192.0.2.2 netmask 255.255.255.255 broadcast 0.0.0.0
36+
inet6 2001:db8::2 prefixlen 128 scopeid 0x0<global>
37+
inet6 fe80::200:5eff:fe00:5300 prefixlen 64 scopeid 0x20<link>
38+
ether 00:00:5e:00:53:00 txqueuelen 1000 (Ethernet)
39+
RX packets 33 bytes 2408 (2.4 KB)
40+
RX errors 0 dropped 0 overruns 0 frame 0
41+
TX packets 49 bytes 4092 (4.0 KB)
42+
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
43+
44+
zeth1: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
45+
inet 198.51.100.1 netmask 255.255.255.255 broadcast 0.0.0.0
46+
inet6 fe80::200:5eff:fe00:5301 prefixlen 64 scopeid 0x20<link>
47+
inet6 2001:db8:2::1 prefixlen 128 scopeid 0x0<global>
48+
ether 00:00:5e:00:53:01 txqueuelen 1000 (Ethernet)
49+
RX packets 21 bytes 1340 (1.3 KB)
50+
RX errors 0 dropped 0 overruns 0 frame 0
51+
TX packets 45 bytes 3916 (3.9 KB)
52+
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
53+
54+
Then create a sample and enable Ethernet bridging support. In this example we create
55+
:zephyr:code-sample:`sockets-echo-server` sample application.
56+
57+
.. code-block:: console
58+
59+
west build -p -b native_sim -d ../build/echo-server \
60+
samples/net/sockets/echo_server -- \
61+
-DCONFIG_NATIVE_UART_AUTOATTACH_DEFAULT_CMD="\"gnome-terminal -- screen %s\"" \
62+
-DCONFIG_NET_ETHERNET_BRIDGE=y \
63+
-DCONFIG_NET_ETHERNET_BRIDGE_SHELL=y \
64+
-DCONFIG_ETH_NATIVE_POSIX_INTERFACE_COUNT=2 \
65+
-DCONFIG_NET_IF_MAX_IPV6_COUNT=2 \
66+
-DCONFIG_NET_IF_MAX_IPV4_COUNT=2
67+
../build/echo-server/zephyr/zephyr.exe -attach_uart
68+
69+
This will create and run :zephyr:code-sample:`sockets-echo-server` with bridging enabled but
70+
not yet configured. To configure the bridging, you either need to use the bridge shell or call the
71+
bridging API directly from the application. We setup the bridging using the bridge shell like
72+
this:
73+
74+
.. code-block:: console
75+
76+
net bridge addif 1 3 2
77+
net iface up 1
78+
79+
In the above example, the bridge interface index is 1, and interfaces 2 and 3 are
80+
Ethernet interfaces which are linked to interfaces ``zeth0`` and ``zeth1`` in the host side.
81+
82+
The network interfaces look like this in Zephyr's side:
83+
84+
.. code-block:: console
85+
86+
net iface
87+
Hostname: zephyr
88+
89+
Interface bridge0 (0x8090ebc) (Virtual) [1]
90+
==================================
91+
Virtual name : <enabled>
92+
No attached network interface.
93+
Link addr : 3B:DB:31:0F:CC:B6
94+
MTU : 1500
95+
Flags : NO_AUTO_START
96+
Device : BRIDGE_0 (0x8088354)
97+
Promiscuous mode : disabled
98+
IPv6 not enabled for this interface.
99+
IPv4 not enabled for this interface.
100+
101+
Interface eth0 (0x8090fcc) (Ethernet) [2]
102+
===================================
103+
Link addr : 02:00:5E:00:53:D2
104+
MTU : 1500
105+
Flags : AUTO_START,IPv4,IPv6
106+
Device : zeth0 (0x808837c)
107+
Promiscuous mode : disabled
108+
Ethernet capabilities supported:
109+
TXTIME
110+
Promiscuous mode
111+
Ethernet PHY device: <none> (0)
112+
IPv6 unicast addresses (max 3):
113+
fe80::5eff:fe00:53d2 autoconf preferred infinite
114+
2001:db8::1 manual preferred infinite
115+
IPv6 multicast addresses (max 4):
116+
ff02::1
117+
ff02::1:ff00:53d2
118+
ff02::1:ff00:1
119+
IPv6 prefixes (max 2):
120+
<none>
121+
IPv6 hop limit : 64
122+
IPv6 base reachable time : 30000
123+
IPv6 reachable time : 18476
124+
IPv6 retransmit timer : 0
125+
IPv4 unicast addresses (max 1):
126+
192.0.2.1/255.255.255.0 manual preferred infinite
127+
IPv4 multicast addresses (max 2):
128+
224.0.0.1
129+
IPv4 gateway : 0.0.0.0
130+
131+
Interface eth1 (0x80910dc) (Ethernet) [3]
132+
===================================
133+
Link addr : 02:00:5E:00:53:87
134+
MTU : 1500
135+
Flags : AUTO_START,IPv4,IPv6
136+
Device : zeth1 (0x8088368)
137+
Promiscuous mode : disabled
138+
Ethernet capabilities supported:
139+
TXTIME
140+
Promiscuous mode
141+
Ethernet PHY device: <none> (0)
142+
IPv6 unicast addresses (max 3):
143+
fe80::5eff:fe00:5387 autoconf preferred infinite
144+
IPv6 multicast addresses (max 4):
145+
ff02::1
146+
ff02::1:ff00:5387
147+
IPv6 prefixes (max 2):
148+
<none>
149+
IPv6 hop limit : 64
150+
IPv6 base reachable time : 30000
151+
IPv6 reachable time : 25158
152+
IPv6 retransmit timer : 0
153+
IPv4 unicast addresses (max 1):
154+
<none>
155+
IPv4 multicast addresses (max 2):
156+
224.0.0.1
157+
IPv4 gateway : 0.0.0.0
158+
159+
The ``net bridge`` command will show the current status of the bridging:
160+
161+
.. code-block:: console
162+
163+
net bridge
164+
Bridge Status Config Interfaces
165+
1 up ok 2 3
166+
167+
The ``addif`` command adds Ethernet interfaces 2 and 3 to the bridge interface 1.
168+
After the ``addif`` command, the bridging is still disabled because the bridge interface
169+
is not up by default. The ``net iface up`` command will turn on bridging.
170+
171+
If you have wireshark running in host side and monitoring ``zeth0`` and ``zeth1``,
172+
you should see the same network traffic in both host interfaces.
173+
174+
Note that interface index numbers are not fixed, the bridge and Ethernet interface index
175+
values might be different in your setup.
176+
177+
The bridging can be disabled by taking the bridge interface down, and the Ethernet interfaces
178+
can be removed from the bridge using ``delif`` command.
179+
180+
.. code-block:: console
181+
182+
net iface down 1
183+
net bridge delif 1 2 3

doc/connectivity/networking/networking_with_host.rst

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ Networking with the host system
1313
usbnet_setup.rst
1414
qemu_user_setup.rst
1515
networking_with_multiple_instances.rst
16+
eth_bridge_native_sim_setup.rst
1617
qemu_802154_setup.rst
1718
armfvp_user_networking_setup.rst
1819

@@ -80,3 +81,11 @@ possible:
8081
* Here, two Zephyr instances are running and there is IEEE 802.15.4 link layer
8182
run over an UART between them.
8283
See :ref:`networking_with_ieee802154_qemu` for details.
84+
85+
* Simulating Ethernet bridge network with native_sim.
86+
87+
* Here, one Zephyr instance is running with Ethernet bridge enabled
88+
via :kconfig:option:`CONFIG_NET_ETHERNET_BRIDGE` Kconfig option. There
89+
exists two host network interfaces ``zeth0`` and ``zeth1`` and the network
90+
packets are bridged between those two interfaces.
91+
See :ref:`networking_with_native_sim_eth_bridge` for details.

0 commit comments

Comments
 (0)