Part 1
요약·해설
Interface별 configuration file, zeth bridge, 대칭 IP·MAC·gateway 설정과 server/client 실행 절차를 제공합니다.
zeth.1 · zeth.2
zeth-br · Linux routing
QEMU · native_sim
Part 2
접을 수 있는 영어 원문 전체
영어 원문 전체 펼치기
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>&1Zephyr 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.1Terminal #2에서 두 번째 interface를 만듭니다.
./net-setup.sh -c zephyr2.conf -i zeth.23단계: 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 up4단계: 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=nTerminal #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=nServer는 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
출처
영어 원문에는 문단, 문서 지시문, 표, 코드, 코드 심벌, 경로를 그대로 보존했습니다.