시각화로 스레드 네트워크 테스트

1. 소개

5abd22afa2f2ee9a.png

Thread, OpenThread, OTNS, Silk란 무엇인가요?

스레드는 안전한 기기 간 통신 및 기기와 클라우드 간 통신을 지원하는 IP 기반 저전력 무선 메시 네트워킹 프로토콜입니다. 스레드 네트워크는 토폴로지 변경에 적응하여 단일 장애점을 방지할 수 있습니다.

Google에서 출시한 OpenThread는 Thread의 오픈소스 구현입니다. 코드 크기와 메모리 공간이 작지만 OpenThread는 스레드 사양에 정의된 모든 기능을 지원합니다.

OpenNS 네트워크 시뮬레이터 (OTNS)를 사용하면 posix 플랫폼에서 시뮬레이션된 OpenThread 노드를 실행하여 스레드 네트워크를 시뮬레이션할 수 있습니다. OTNS는 시뮬레이션된 스레드 네트워크를 시각화하고 작동하는 데 사용하기 쉬운 웹 인터페이스 (OTNS-Web)를 제공합니다.

Silk는 실제 기기로 OpenThread 함수, 기능, 시스템 성능을 검증하기 위한 완전히 자동화된 테스트 플랫폼입니다.

학습할 내용

  • OpenThread의 기능 인증 프레임워크: 실크
  • OTNS 기능이 사용 설정된 실제 기기를 위한 OpenThread 빌드
  • OTNS-Web 인터페이스를 사용해 실크 테스트 사례를 실행하여 형성된 스레드 네트워크의 상태를 모니터링

이 Codelab에서는 OTNS와 함께 Silk를 사용하는 데 중점을 둡니다. 실크 및 OTNS의 다른 기능은 다루지 않습니다.

필요한 항목

하드웨어:

  • Nordic Semiconductor nRF52840 개발자 보드 6개
  • 보드 연결을 위한 USB-마이크로 USB 케이블 6개
  • USB 허브

소프트웨어:

  • Linux x86_64입니다.
  • Git
  • 1.11+를 사용하세요.
  • 웹브라우저 OTNS-Web은 웹브라우저를 사용해 시뮬레이션을 표시합니다.

기본 요건

2. 기본 요건

이전 기본 Codelab 완료

패키지 기본 요건 확인

모든 기본 요건을 충족하는지 확인하세요.

  1. which otns를 실행하여 $PATH에서 otns 실행 파일을 검색할 수 있는지 확인합니다.
  2. which wpantund를 실행하여 wpantund를 사용할 수 있는지 확인합니다.
  3. ARM GNU 도구 모음, J-Link 및 nrfjprog 패키지를 모두 사용할 수 있는지 확인합니다.

참고: 설정 안내는 연결된 문서를 참고하세요. 첫 번째 필수 요건은 OTNS를 사용하여 스레드 네트워크 시뮬레이션이고 다른 하나는 nRF52840 보드 및 OpenThread로 스레드 네트워크 빌드에서 가져와야 합니다.

3. 실크 설정

실크를 클론하고 환경을 설정하려면 원본 디렉터리 아래에서 다음 명령어를 실행합니다.

$ git clone https://github.com/openthread/silk.git
$ cd silk
$ ./bootstrap.sh
$ sudo make install-cluster

하드웨어 구성 파일 정의

실크가 머신에 연결된 사용 가능한 테스트 하드웨어 리소스를 수집하도록 허용하려면 hwconfig.ini 파일을 다음 형식으로 정의합니다.

[DEFAULT]
ClusterID: 0
LayoutCenter: 300, 300
LayoutRadius: 100

[Dev-8A7D]
HwModel: Nrf52840
HwRev: 1.0
InterfaceSerialNumber: E1A5012E8A7D
USBInterfaceNumber: 1
DutSerial: 683536778

usbinfo라는 도구가 실크의 일부로 설치되어 인터페이스 일련번호와 USB 인터페이스 번호를 찾을 수 있습니다. DutSerial은 칩에 인쇄되거나 usbinfo에 의해 J-Link 제품에 대해 표시되는 SN 번호입니다.

[DEFAULT] 섹션의 LayoutCenterLayoutRadius 필드는 기기가 웹 UI에서 시각화될 때 레이아웃의 모양을 정의합니다. 여기에 나와 있는 값으로 설정하는 것도 좋은 출발점이 될 수 있습니다.

그런 다음 각 테스트 기기의 섹션을 정의하고 관련 하드웨어 정보를 제공합니다.

4. OTNS가 사용 설정된 OpenThread 컴파일

이미지 빌드 및 플래시

기본적으로 OpenThread 기기는 OTNS 관련 메시지를 내보내지 않습니다. 개발 보드가 OTNS 시각화에 필수적인 로그 인터페이스에 상태 메시지를 내보내도록 하려면 OpenThread 소스 디렉터리에서 다음 명령어를 실행하여 FTD 이미지를 빌드하고 16진수 형식으로 변환합니다.

$ git clone https://github.com/openthread/ot-nrf528xx.git --recursive
$ cd ot-nrf528xx
$ ./script/bootstrap
$ ./script/build nrf52840 USB_trans -DOT_COMMISSIONER=ON -DOT_JOINER=ON -DOT_OTNS=ON
$ cd ./build/bin
$ arm-none-eabi-objcopy -O ihex ot-ncp-ftd ot-ncp-ftd.hex

보드를 플래시하려면 nrfjprog를 사용하도록 스레드 네트워크 빌드 Codelab 4단계의 안내를 따릅니다. 그런 다음 nRF USB 포트를 통해 모든 보드를 호스트 머신에 연결합니다. 동일한 USB-마이크로 USB 케이블 세트를 J-Link 포트에서 분리하고 nRF52840 개발자 보드의 nRF USB 포트에 연결할 수 있습니다. 따라서 이 6개의 케이블만으로 테스트를 실행할 수 있습니다. 번거롭지 않도록 12개의 케이블을 사용하여 두 포트에 연결하세요.

5. 실제 모드로 OTNS 서버 실행

기본 매개변수로 OTNS를 실행하면 사용자가 스레드 네트워크를 시뮬레이션할 수 있습니다. 이를 실제 물리적 네트워크의 시각화 도구로 사용하려면 다음을 사용하여 실행합니다.

otns -raw -real -ot-cli otns-silk-proxy

이러한 인수는 여러 ot-cli 프로세스를 실행하여 네트워크를 시뮬레이션하는 대신 OTNS가 스레드 네트워크를 시각화하는 방법을 설명하는 gRPC 및 UDP 메시지를 예상하도록 지시합니다. 브라우저에서 캔버스가 비어 있는 시각화 페이지를 자동으로 엽니다.

4dd5b41bf7e71334.png

6. OTNS 지원으로 실크 테스트 사례 실행

실크는 실제 기기로 OpenThread 함수, 기능, 시스템 성능을 검증하는 완전히 자동화된 테스트 플랫폼입니다. 프로젝트 리드미의 안내에서는 사용 방법을 설명합니다.

silk/unit_tests에 있는 silk_run_test.py 파일을 사용하면 편리하게 시작할 수 있습니다. Silk은 테스트 사례를 실행할 때 OTNS 지원을 제공합니다. OTNS 실시간 모드 서비스는 이미 로컬에서 실행 중이므로 출력 로그 파일, 입력 테스트 스크립트, hwconfig.ini 파일에 원하는 위치로 silk_run_test.py 파일을 수정하기만 하면 됩니다. -s localhost 인수는 Silk에 localhost에 OTNS 메시지를 전송하도록 지시합니다.

예를 들어 silk_run_test.py 파일을 다음과 같이 수정하여 ot_test_form_network.py라는 테스트를 실행할 수 있습니다. /opt/openthread_test/는 실크가 로그 출력 및 구성 파일에 사용하는 기본 경로이지만 모든 경로를 사용할 수 있습니다.

silk_run_test.py

import datetime
import os

from silk.tests import silk_run

RESULT_LOG_PATH = '/opt/openthread_test/results/' + 'silk_run_' + \
                  datetime.datetime.today().strftime('%m-%d') + '/'
CONFIG_PATH = '/opt/openthread_test/'

os.chdir('~/src/silk/silk/tests/')

timestamp = datetime.datetime.today().strftime('%m-%d-%H:%M')

run_log_path = RESULT_LOG_PATH + 'test_run_on_' + timestamp + '/'

argv = [
    'tests/silk_run.py',
    '-v2',
    '-c', CONFIG_PATH + 'hwconfig.ini',
    '-d', run_log_path,
    '-s', 'localhost',
    'ot_test_form_network.py'
]

silk_run.SilkRunner(argv=argv)

형성된 네트워크의 토폴로지 시각화가 OTNS 웹 UI에 표시됩니다.

ee443b66e0a6620b.png

왼쪽 상단에 시각화 통계, OT 버전 및 테스트 제목이 표시됩니다. 왼쪽 하단에는 오른쪽에 표시되는 로그 창 컨트롤이 있습니다. 처음에는 노드가 추가되지만 네트워크는 형성되지 않습니다. 테스트가 진행됨에 따라 각 노드의 모드와 역할이 변경되고 링크가 형성됩니다.

5c38e2c72519e620.png

7. 축하합니다

축하합니다. 실제 스레드 기기에서 실크 테스트를 성공적으로 실행하고 OTNS를 사용하여 시각화했습니다.

OTNS를 지원하는 펌웨어로 플래시된 개발 보드를 사용하여 실크 테스트를 실행했습니다. 이사회에서는 모든 상태를 모니터링하고 집계하는 Silk 서버에 상태를 보고하고 다른 테스트 정보와 함께 OTNS 서비스로 보냅니다. 실시간 모드에서 실행되는 OTNS는 웹 인터페이스의 스레드 네트워크를 시각화합니다.

다음 단계

Silk 패키지에 포함된 다른 OpenThread 테스트 사례를 실행해 보세요.

추가 자료

다양한 OpenThread 리소스는 openthread.ioSilk에서 확인하세요.

참조 문서