blob: 4c9543570066ef0e30557d25b62dbcea108b2cc9 [file] [log] [blame]
.. _networking_with_native_sim:
Networking with native_sim board
################################
.. contents::
:local:
:depth: 2
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 :ref:`native_sim <native_sim>` board.
In this example, the :zephyr:code-sample:`sockets-echo-server` 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, fetch the Zephyr ``net-tools`` project, which is located
in a separate Git repository:
.. code-block:: console
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:
.. code-block:: console
./net-setup.sh
You can tweak the behavior of the net-setup.sh script. See various options
by running ``net-setup.sh`` like this:
.. code-block:: console
./net-setup.sh --help
Step 2 - Start app in native_sim board
--------------------------------------
Build and start the ``echo_server`` sample application.
In terminal #2, type:
.. zephyr-app-commands::
:zephyr-app: samples/net/sockets/echo_server
:host-os: unix
:board: native_sim
:goals: run
:compact:
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:
.. code-block:: console
UART connected to pseudotty: /dev/pts/5
You can manually connect to it like this:
.. code-block:: console
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:
.. zephyr-app-commands::
:zephyr-app: samples/net/sockets/echo_server
:host-os: unix
:board: native_sim
:gen-args: -DEXTRA_CONF_FILE=overlay-nsos.conf
:goals: run
:compact:
Step 2 - run echo-client from net-tools
=======================================
On the Linux Host, fetch the Zephyr ``net-tools`` project, which is located
in a separate Git repository:
.. code-block:: console
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 :zephyr:code-sample:`sockets-echo-server` and
``echo-client`` applications will communicate over localhost/loopback
interface (address ``127.0.0.1``).
To run UDP test, type:
.. code-block:: console
./echo-client 127.0.0.1
For TCP test, type:
.. code-block:: console
./echo-client -t 127.0.0.1