connectivity/networking/networking_with_multiple_instances.html · connectivity/networking/networking_with_multiple_instances.rst 공식 원문 ↗

Zephyr 3.7.0 · Connectivity · Multi-instance

여러 Zephyr instance 연결

서로 다른 subnet의 Zephyr server와 client를 Linux bridge로 연결해 QEMU와 native_sim 조합을 검증합니다.

Official pathconnectivity/networking/networking_with_multiple_instances.html
Source fileconnectivity/networking/networking_with_multiple_instances.rst
Source versionZephyr 3.7.0
TranslationFull · reviewed

본문 기준: Zephyr 3.7.0 LTS3 · 이후 유지보수 패치는 별도입니다.

Part 1

요약·해설

Interface별 configuration file, zeth bridge, 대칭 IP·MAC·gateway 설정과 server/client 실행 절차를 제공합니다.

Interfaces

zeth.1 · zeth.2

Bridge

zeth-br · Linux routing

Instances

QEMU · native_sim

Part 2

접을 수 있는 영어 원문 전체

영어 원문 전체 펼치기
원문 SHA-256 0E5769CC98199F0BC1D2C989239976FC92C6441AF045078FC531CDE630084161
.. _networking_with_multiple_instances:

Networking with multiple Zephyr instances
#########################################

.. contents::
    :local:
    :depth: 2

This page describes how to set up a virtual network between multiple
Zephyr instances. The Zephyr instances could be running inside QEMU
or could be native_sim board processes. The Linux host can be used
to route network traffic between these systems.

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 five terminal windows:

* Terminal #1 and #2 are terminal windows with net-tools being the current
  directory (``cd net-tools``)
* Terminal #3, where you setup bridging in Linux host
* Terminal #4 and #5 are your usual Zephyr development terminal,
  with the Zephyr environment initialized.

As there are multiple ways to setup the Zephyr network, the example below uses
``qemu_x86`` board with ``e1000`` Ethernet controller and native_sim board
to simplify the setup instructions. You can use other QEMU boards and drivers
if needed, see :ref:`networking_with_eth_qemu` for details. You can also use
two or more native_sim board Zephyr instances and connect them together.


Step 1 - Create configuration files
===================================

Before starting QEMU with network connectivity, a network interfaces for each
Zephyr instance should be created in the host system. The default setup for
creating network interface cannot be used here as that is for connecting one
Zephyr instance to Linux host.

For Zephyr instance #1, create file called ``zephyr1.conf`` to ``net-tools``
project, or to some other suitable directory.

.. code-block:: console

   # Configuration file for setting IP addresses for a network interface.
   INTERFACE="$1"
   HWADDR="00:00:5e:00:53:11"
   IPV6_ADDR_1="2001:db8:100::2"
   IPV6_ROUTE_1="2001:db8:100::/64"
   IPV4_ADDR_1="198.51.100.2/24"
   IPV4_ROUTE_1="198.51.100.0/24"
   ip link set dev $INTERFACE up
   ip link set dev $INTERFACE address $HWADDR
   ip -6 address add $IPV6_ADDR_1 dev $INTERFACE nodad
   ip -6 route add $IPV6_ROUTE_1 dev $INTERFACE
   ip address add $IPV4_ADDR_1 dev $INTERFACE
   ip route add $IPV4_ROUTE_1 dev $INTERFACE > /dev/null 2>&1

For Zephyr instance #2, create file called ``zephyr2.conf`` to ``net-tools``
project, or to some other suitable directory.

.. code-block:: console

   # Configuration file for setting IP addresses for a network interface.
   INTERFACE="$1"
   HWADDR="00:00:5e:00:53:22"
   IPV6_ADDR_1="2001:db8:200::2"
   IPV6_ROUTE_1="2001:db8:200::/64"
   IPV4_ADDR_1="203.0.113.2/24"
   IPV4_ROUTE_1="203.0.113.0/24"
   ip link set dev $INTERFACE up
   ip link set dev $INTERFACE address $HWADDR
   ip -6 address add $IPV6_ADDR_1 dev $INTERFACE nodad
   ip -6 route add $IPV6_ROUTE_1 dev $INTERFACE
   ip address add $IPV4_ADDR_1 dev $INTERFACE
   ip route add $IPV4_ROUTE_1 dev $INTERFACE > /dev/null 2>&1


Step 2 - Create Ethernet interfaces
===================================

The following ``net-setup.sh`` commands should be typed in net-tools
directory (``cd net-tools``).

In terminal #1, type:

.. code-block:: console

   ./net-setup.sh -c zephyr1.conf -i zeth.1

In terminal #2, type:

.. code-block:: console

   ./net-setup.sh -c zephyr2.conf -i zeth.2


Step 3 - Setup network bridging
===============================

In terminal #3, type:

.. code-block:: console

   sudo brctl addbr zeth-br
   sudo brctl addif zeth-br zeth.1
   sudo brctl addif zeth-br zeth.2
   sudo ifconfig zeth-br up


Step 4 - Start Zephyr instances
===============================

In this example we start :zephyr:code-sample:`sockets-echo-server` and
:zephyr:code-sample:`sockets-echo-client` sample applications. You can use other applications
too as needed.

In terminal #4, if you are using QEMU, type this:

.. code-block:: console

   west build -d build/server -b qemu_x86 -t run \
      samples/net/sockets/echo_server -- \
      -DEXTRA_CONF_FILE=overlay-e1000.conf \
      -DCONFIG_NET_CONFIG_MY_IPV4_ADDR=\"198.51.100.1\" \
      -DCONFIG_NET_CONFIG_PEER_IPV4_ADDR=\"203.0.113.1\" \
      -DCONFIG_NET_CONFIG_MY_IPV6_ADDR=\"2001:db8:100::1\" \
      -DCONFIG_NET_CONFIG_PEER_IPV6_ADDR=\"2001:db8:200::1\" \
      -DCONFIG_NET_CONFIG_MY_IPV4_GW=\"203.0.113.1\" \
      -DCONFIG_ETH_QEMU_IFACE_NAME=\"zeth.1\" \
      -DCONFIG_ETH_QEMU_EXTRA_ARGS=\"mac=00:00:5e:00:53:01\"

or if you want to use native_sim board, type this:

.. code-block:: console

   west build -d build/server -b native_sim -t run \
      samples/net/sockets/echo_server -- \
      -DCONFIG_NET_CONFIG_MY_IPV4_ADDR=\"198.51.100.1\" \
      -DCONFIG_NET_CONFIG_PEER_IPV4_ADDR=\"203.0.113.1\" \
      -DCONFIG_NET_CONFIG_MY_IPV6_ADDR=\"2001:db8:100::1\" \
      -DCONFIG_NET_CONFIG_PEER_IPV6_ADDR=\"2001:db8:200::1\" \
      -DCONFIG_NET_CONFIG_MY_IPV4_GW=\"203.0.113.1\" \
      -DCONFIG_ETH_NATIVE_POSIX_DRV_NAME=\"zeth.1\" \
      -DCONFIG_ETH_NATIVE_POSIX_MAC_ADDR=\"00:00:5e:00:53:01\" \
      -DCONFIG_ETH_NATIVE_POSIX_RANDOM_MAC=n


In terminal #5, if you are using QEMU, type this:

.. code-block:: console

   west build -d build/client -b qemu_x86 -t run \
      samples/net/sockets/echo_client -- \
      -DEXTRA_CONF_FILE=overlay-e1000.conf \
      -DCONFIG_NET_CONFIG_MY_IPV4_ADDR=\"203.0.113.1\" \
      -DCONFIG_NET_CONFIG_PEER_IPV4_ADDR=\"198.51.100.1\" \
      -DCONFIG_NET_CONFIG_MY_IPV6_ADDR=\"2001:db8:200::1\" \
      -DCONFIG_NET_CONFIG_PEER_IPV6_ADDR=\"2001:db8:100::1\" \
      -DCONFIG_NET_CONFIG_MY_IPV4_GW=\"198.51.100.1\" \
      -DCONFIG_ETH_QEMU_IFACE_NAME=\"zeth.2\" \
      -DCONFIG_ETH_QEMU_EXTRA_ARGS=\"mac=00:00:5e:00:53:02\"

or if you want to use native_sim board, type this:

.. code-block:: console

   west build -d build/client -b native_sim -t run \
      samples/net/sockets/echo_client -- \
      -DCONFIG_NET_CONFIG_MY_IPV4_ADDR=\"203.0.113.1\" \
      -DCONFIG_NET_CONFIG_PEER_IPV4_ADDR=\"198.51.100.1\" \
      -DCONFIG_NET_CONFIG_MY_IPV6_ADDR=\"2001:db8:200::1\" \
      -DCONFIG_NET_CONFIG_PEER_IPV6_ADDR=\"2001:db8:100::1\" \
      -DCONFIG_NET_CONFIG_MY_IPV4_GW=\"198.51.100.1\" \
      -DCONFIG_ETH_NATIVE_POSIX_DRV_NAME=\"zeth.2\" \
      -DCONFIG_ETH_NATIVE_POSIX_MAC_ADDR=\"00:00:5e:00:53:02\" \
      -DCONFIG_ETH_NATIVE_POSIX_RANDOM_MAC=n


Also if you have firewall enabled in your host, you need to allow traffic
between ``zeth.1``, ``zeth.2`` and ``zeth-br`` interfaces.

Part 3

한국어 전문 번역

여러 Zephyr instance 연결

이 문서는 여러 Zephyr instance 사이에 virtual network를 설정하는 방법을 설명합니다. Instance는 QEMU 내부에서 실행하거나 native_sim board process로 실행할 수 있습니다. Linux host가 이 system들 사이의 network traffic을 route합니다.

사전 준비

Linux host에서 별도 Git repository의 Zephyr net-tools project를 내려받습니다.

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

기본 설정

아래 절차에는 terminal window 다섯 개가 필요합니다.

  • Terminal #1, #2: net-tools를 현재 directory로 둡니다(cd net-tools).
  • Terminal #3: Linux host의 network bridging을 설정합니다.
  • Terminal #4, #5: Zephyr environment를 초기화한 development terminal입니다.

Zephyr network 구성 방법은 여러 가지지만 예제는 설명을 단순화하기 위해 e1000 Ethernet controller를 쓰는 qemu_x86 board와 native_sim board를 사용합니다. 다른 QEMU board와 driver를 쓰거나 native_sim instance 둘 이상을 연결할 수도 있습니다.

1단계: Configuration file 생성

Network connectivity를 사용하는 QEMU를 시작하기 전에 Zephyr instance마다 host system에 network interface를 만들어야 합니다. 기본 net-tools 설정은 Zephyr instance 하나와 Linux host를 연결하기 위한 것이므로 여기서는 그대로 사용할 수 없습니다.

Zephyr instance #1용 zephyr1.conf를 net-tools project 또는 적절한 directory에 만듭니다.

# Configuration file for setting IP addresses for a network interface.
INTERFACE="$1"
HWADDR="00:00:5e:00:53:11"
IPV6_ADDR_1="2001:db8:100::2"
IPV6_ROUTE_1="2001:db8:100::/64"
IPV4_ADDR_1="198.51.100.2/24"
IPV4_ROUTE_1="198.51.100.0/24"
ip link set dev $INTERFACE up
ip link set dev $INTERFACE address $HWADDR
ip -6 address add $IPV6_ADDR_1 dev $INTERFACE nodad
ip -6 route add $IPV6_ROUTE_1 dev $INTERFACE
ip address add $IPV4_ADDR_1 dev $INTERFACE
ip route add $IPV4_ROUTE_1 dev $INTERFACE > /dev/null 2>&1

Zephyr instance #2용 zephyr2.conf도 만듭니다.

# Configuration file for setting IP addresses for a network interface.
INTERFACE="$1"
HWADDR="00:00:5e:00:53:22"
IPV6_ADDR_1="2001:db8:200::2"
IPV6_ROUTE_1="2001:db8:200::/64"
IPV4_ADDR_1="203.0.113.2/24"
IPV4_ROUTE_1="203.0.113.0/24"
ip link set dev $INTERFACE up
ip link set dev $INTERFACE address $HWADDR
ip -6 address add $IPV6_ADDR_1 dev $INTERFACE nodad
ip -6 route add $IPV6_ROUTE_1 dev $INTERFACE
ip address add $IPV4_ADDR_1 dev $INTERFACE
ip route add $IPV4_ROUTE_1 dev $INTERFACE > /dev/null 2>&1

첫 구성은 MAC 00:00:5e:00:53:11, IPv6 subnet 2001:db8:100::/64, IPv4 subnet 198.51.100.0/24를 사용합니다. 두 번째 구성은 MAC 00:00:5e:00:53:22, IPv6 subnet 2001:db8:200::/64, IPv4 subnet 203.0.113.0/24를 사용합니다.

2단계: Ethernet interface 생성

다음 net-setup.sh command는 net-tools directory에서 실행합니다.

Terminal #1에서 첫 interface를 만듭니다.

./net-setup.sh -c zephyr1.conf -i zeth.1

Terminal #2에서 두 번째 interface를 만듭니다.

./net-setup.sh -c zephyr2.conf -i zeth.2

3단계: Network bridge 설정

Terminal #3에서 zeth-br bridge를 만들고 zeth.1과 zeth.2를 연결한 뒤 bridge를 up 상태로 만듭니다.

sudo brctl addbr zeth-br
sudo brctl addif zeth-br zeth.1
sudo brctl addif zeth-br zeth.2
sudo ifconfig zeth-br up

4단계: Zephyr instance 시작

예제는 sockets echo server와 sockets echo client sample을 시작하지만 필요하면 다른 application을 사용할 수 있습니다.

Terminal #4에서 QEMU server를 사용할 경우 다음 명령을 실행합니다.

west build -d build/server -b qemu_x86 -t run \
   samples/net/sockets/echo_server -- \
   -DEXTRA_CONF_FILE=overlay-e1000.conf \
   -DCONFIG_NET_CONFIG_MY_IPV4_ADDR=\"198.51.100.1\" \
   -DCONFIG_NET_CONFIG_PEER_IPV4_ADDR=\"203.0.113.1\" \
   -DCONFIG_NET_CONFIG_MY_IPV6_ADDR=\"2001:db8:100::1\" \
   -DCONFIG_NET_CONFIG_PEER_IPV6_ADDR=\"2001:db8:200::1\" \
   -DCONFIG_NET_CONFIG_MY_IPV4_GW=\"203.0.113.1\" \
   -DCONFIG_ETH_QEMU_IFACE_NAME=\"zeth.1\" \
   -DCONFIG_ETH_QEMU_EXTRA_ARGS=\"mac=00:00:5e:00:53:01\"

Server를 native_sim board로 실행하려면 다음 명령을 사용합니다.

west build -d build/server -b native_sim -t run \
   samples/net/sockets/echo_server -- \
   -DCONFIG_NET_CONFIG_MY_IPV4_ADDR=\"198.51.100.1\" \
   -DCONFIG_NET_CONFIG_PEER_IPV4_ADDR=\"203.0.113.1\" \
   -DCONFIG_NET_CONFIG_MY_IPV6_ADDR=\"2001:db8:100::1\" \
   -DCONFIG_NET_CONFIG_PEER_IPV6_ADDR=\"2001:db8:200::1\" \
   -DCONFIG_NET_CONFIG_MY_IPV4_GW=\"203.0.113.1\" \
   -DCONFIG_ETH_NATIVE_POSIX_DRV_NAME=\"zeth.1\" \
   -DCONFIG_ETH_NATIVE_POSIX_MAC_ADDR=\"00:00:5e:00:53:01\" \
   -DCONFIG_ETH_NATIVE_POSIX_RANDOM_MAC=n

Terminal #5에서 QEMU client를 사용할 경우 다음 명령을 실행합니다.

west build -d build/client -b qemu_x86 -t run \
   samples/net/sockets/echo_client -- \
   -DEXTRA_CONF_FILE=overlay-e1000.conf \
   -DCONFIG_NET_CONFIG_MY_IPV4_ADDR=\"203.0.113.1\" \
   -DCONFIG_NET_CONFIG_PEER_IPV4_ADDR=\"198.51.100.1\" \
   -DCONFIG_NET_CONFIG_MY_IPV6_ADDR=\"2001:db8:200::1\" \
   -DCONFIG_NET_CONFIG_PEER_IPV6_ADDR=\"2001:db8:100::1\" \
   -DCONFIG_NET_CONFIG_MY_IPV4_GW=\"198.51.100.1\" \
   -DCONFIG_ETH_QEMU_IFACE_NAME=\"zeth.2\" \
   -DCONFIG_ETH_QEMU_EXTRA_ARGS=\"mac=00:00:5e:00:53:02\"

Client를 native_sim board로 실행하려면 다음 명령을 사용합니다.

west build -d build/client -b native_sim -t run \
   samples/net/sockets/echo_client -- \
   -DCONFIG_NET_CONFIG_MY_IPV4_ADDR=\"203.0.113.1\" \
   -DCONFIG_NET_CONFIG_PEER_IPV4_ADDR=\"198.51.100.1\" \
   -DCONFIG_NET_CONFIG_MY_IPV6_ADDR=\"2001:db8:200::1\" \
   -DCONFIG_NET_CONFIG_PEER_IPV6_ADDR=\"2001:db8:100::1\" \
   -DCONFIG_NET_CONFIG_MY_IPV4_GW=\"198.51.100.1\" \
   -DCONFIG_ETH_NATIVE_POSIX_DRV_NAME=\"zeth.2\" \
   -DCONFIG_ETH_NATIVE_POSIX_MAC_ADDR=\"00:00:5e:00:53:02\" \
   -DCONFIG_ETH_NATIVE_POSIX_RANDOM_MAC=n

Server는 198.51.100.1과 2001:db8:100::1을, client는 203.0.113.1과 2001:db8:200::1을 사용합니다. QEMU는 interface name과 e1000 MAC을, native_sim은 POSIX driver name과 고정 MAC을 각각 지정합니다.

CONFIG_ETH_NATIVE_POSIX_RANDOM_MAC=n으로 random MAC을 끄며, host firewall을 사용 중이라면 zeth.1, zeth.2, zeth-br 사이 traffic을 허용해야 합니다.

Source

출처

영어 원문에는 문단, 문서 지시문, 표, 코드, 코드 심벌, 경로를 그대로 보존했습니다.