From d2f37d06bacab8bf265b652420d259b80e378bc4 Mon Sep 17 00:00:00 2001 From: Lukasz Majewski Date: Wed, 18 Dec 2024 16:12:13 +0100 Subject: [PATCH] net: Extend echo_client README.rst file to setup OTBR based echo_server This description provides information about setting up RCP (nRF21540-DK) and OT HOST (mimxrt1020_evk) to communicate with HOST PC's echo_server via OpenThread Border Router (OTBR). Signed-off-by: Lukasz Majewski --- samples/net/sockets/echo_client/README.rst | 158 +++++++++++++++++++++ 1 file changed, 158 insertions(+) diff --git a/samples/net/sockets/echo_client/README.rst b/samples/net/sockets/echo_client/README.rst index 289a90acc39..02cc74b302d 100644 --- a/samples/net/sockets/echo_client/README.rst +++ b/samples/net/sockets/echo_client/README.rst @@ -179,3 +179,161 @@ on how to test TLS with Linux host samples. See the :zephyr:code-sample:`sockets-echo-server` documentation for an alternate way of running, with the echo-client on the Linux host and the echo-server in QEMU. + +OpenThread RCP+Zephyr HOST (SPINEL connection via UART) +======================================================= + +Prerequisites: +-------------- + +- Build ``echo-server`` for HOST PC (x86_64) + (https://github.com/zephyrproject-rtos/net-tools) SHA1:1c4fdba + +.. code-block:: console + + $ make echo-server + +- Program nRF RCP from Nordic nrf SDK (v2.7.0): + +.. code-block:: console + + (v2.7.0) ~/ncs$ west build -p always -b nrf21540dk/nrf52840 -S logging nrf/samples/openthread/coprocessor + + +- Build mimxrt1020_evk HOST (Zephyr): + +.. zephyr-app-commands:: + :zephyr-app: samples/net/sockets/echo_client + :board: mimxrt1020_evk + :conf: "prj.conf overlay-ot-rcp-host-uart.conf" + :goals: build + :compact: + +And flash + +.. code-block:: console + + $ west flash -r pyocd -i 0226000047784e4500439004d9170013e56100009796990 + + +- Connect the nRF RCP with IMXRT1020 (HOST) via UART + +.. code-block:: c + + /* + * imxrt1020_evk -> HOST + * nRF21540-DK -> RCP (nrf/samples/openthread/coprocessor) + * LPUART2 used for communication: + * nRF21540 (P6) P0.08 RXD -> IMXRT1020-EVK (J17) D1 (GPIO B1 08) (TXD) + * nRF21540 (P6) P0.07 CTS -> IMXRT1020-EVK (J19) D8 (GPIO B1 07) (RTS) + * nRF21540 (P6) P0.06 TXD -> IMXRT1020-EVK (J17) D0 (GPIO B1 09) (RXD) + * nRF21540 (P6) P0.05 RTS -> IMXRT1020-EVK (J17) D7 (GPIO B1 06) (CTS) + */ + + +- Install the OTBR (OpenThread Border Router) docker container on your HOST PC (x86_64) + Follow steps from https://docs.nordicsemi.com/bundle/ncs-2.5.1/page/nrf/protocols/thread/tools.html#running_otbr_using_docker + +**Most notable ones:** + + 1. Create ``otbr0`` network bridge to have access to OT network from HOST + Linux PC + + .. code-block:: console + + sudo docker network create --ipv6 --subnet fd11:db8:1::/64 -o com.docker.network.bridge.name=otbr0 otbr + + + 2. Pull docker container for OTBR: + + .. code-block:: console + + docker pull nrfconnect/otbr:84c6aff + + + 3. Start the docker image: + + .. code-block:: console + + sudo modprobe ip6table_filter + sudo docker run -it --rm --privileged --name otbr --network otbr -p 8080:80 --sysctl "net.ipv6.conf.all.disable_ipv6=0 net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1" --volume /dev/ttyACM5:/dev/radio nrfconnect/otbr:84c6aff --radio-url spinel+hdlc+uart:///dev/radio?uart-baudrate=1000000 + + + 4. Add proper routing (``fd11:22::/64`` are the IPv6 addresses - On-Mesh - which allow accessing the OT devices) on HOST PC (x86_64) + + .. code-block:: console + + sudo ip -6 route add fd11:22::/64 dev otbr0 via fd11:db8:1::2 + + + And the output for on-OT address: + + .. code-block:: console + + ip route get fd11:22:0:0:5188:1678:d0c0:6893 + fd11:22::5188:1678:d0c0:6893 from :: via fd11:db8:1::2 dev otbr0 src fd11:db8:1::1 metric 1024 pref medium + + + 5. Start the console to the docker image: + + .. code-block:: console + + sudo docker exec -it otbr /bin/bash + + + Test with e.g. + + .. code-block:: console + + ot-ctl router table + ot-ctl ipaddr + + + +Configure OTBR +-------------- + +On the HOST PC's webbrowser: http://localhost:8080/ + +Go to ``Form`` and leave default values - e.g: + + * Network Key: ``00112233445566778899aabbccddeeff`` + * On-Mesh Prefix: ``fd11:22::`` + * Channel: ``15`` + + +to "FORM" the OT network. + +*Note:* +The "On-Mesh Prefix" shall match the one setup in ``otbr0`` routing. + + +Configure RCP (nRF21540-DK) + OT HOST (mimxrt1020) +-------------------------------------------------- + +.. code-block:: console + + ot factoryreset + ot dataset networkkey 00112233445566778899aabbccddeeff + ot ifconfig up + + +In the HOST PC www webpage interface please: +Commission -> Joiner PSKd* set to ``J01NME`` -> START COMMISSION + +.. code-block:: console + + ot joiner start J01NME + ot thread start + + +The ``ot ipaddr`` shall show IPv6 address starting from ``fd11:22:0:0:``. +This one can be accessed from HOST's PC network (via e.g. +``ping -6 fd11:22:0:0:e8bf:266b:63ca:eff4``). + +Start ``echo-server`` on HOST PC (x86-64) +----------------------------------------- + +.. code-block:: console + + ./echo-server -i otbr0