Networking with native_sim board

Using virtual/TAP Ethernet driver

This paragraph describes how to set up a virtual network between a (Linux) host and a Zephyr application running in a native_sim board.

In this example, the Echo server (advanced) sample application from the Zephyr source distribution is run in native_sim board. The Zephyr native_sim board instance is connected to a Linux host using a tuntap device which is modeled in Linux as an Ethernet network interface.

Prerequisites

On the Linux Host, find the Zephyr net-tools project, which can either be found in a Zephyr standard installation under the tools/net-tools directory or installed stand alone from its own git repository:

git clone https://github.com/zephyrproject-rtos/net-tools

Basic Setup

For the steps below, you will need three terminal windows:

  • Terminal #1 is terminal window with net-tools being the current directory (cd net-tools)

  • Terminal #2 is your usual Zephyr development terminal, with the Zephyr environment initialized.

  • Terminal #3 is the console to the running Zephyr native_sim instance (optional).

Step 1 - Create Ethernet interface

Before starting native_sim with network emulation, a network interface should be created.

In terminal #1, type:

./net-setup.sh

You can tweak the behavior of the net-setup.sh script. See various options by running net-setup.sh like this:

./net-setup.sh --help

Step 2 - Start app in native_sim board

Build and start the echo_server sample application.

In terminal #2, type:

west build -b native_sim samples/net/sockets/echo_server
west build -t run

Step 3 - Connect to console (optional)

The console window should be launched automatically when the Zephyr instance is started but if it does not show up, you can manually connect to the console. The native_sim board will print a string like this when it starts:

UART connected to pseudotty: /dev/pts/5

You can manually connect to it like this:

screen /dev/pts/5

Using offloaded sockets

The main advantage over Using virtual/TAP Ethernet driver is not needing to setup a virtual network interface on the host machine. This means that no leveraged (root) privileges are needed.

Step 1 - Start app in native_sim board

Build and start the echo_server sample application:

west build -b native_sim samples/net/sockets/echo_server -- -DEXTRA_CONF_FILE=overlay-nsos.conf
west build -t run

Step 2 - run echo-client from net-tools

On the Linux Host, find the Zephyr net-tools project, which can either be found in a Zephyr standard installation under the tools/net-tools directory or installed stand alone from its own git repository:

git clone https://github.com/zephyrproject-rtos/net-tools

Note

Native Simulator with the offloaded sockets network driver is using the same network interface/namespace as any other (Linux) application that uses BSD sockets API. This means that Echo server (advanced) and echo-client applications will communicate over localhost/loopback interface (address 127.0.0.1).

To run UDP test, type:

./echo-client 127.0.0.1

For TCP test, type:

./echo-client -t 127.0.0.1

Setting interface name from command line

By default the Ethernet interface name used by native_sim is determined by CONFIG_ETH_NATIVE_POSIX_DRV_NAME, but is also possible to set it from the command line using --eth-if=<interface_name>. This can be useful if the application has to be run in multiple instances and recompiling it for each instance would be troublesome.

./zephyr.exe --eth-if=zeth2