Google은 흑인 공동체를 위한 인종적 평등을 추구하기 위해 노력하고 있습니다. 자세히 알아보기

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

1. 소개

5abd22afa2f2ee9a.png

스레드, OpenThread, OTNS, Silk란 무엇인가요?

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

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

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

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

실습 내용

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

이 Codelab에서는 실크를 OTNS와 함께 사용하는 방법을 중점적으로 다룹니다. 실크 및 OTNS의 다른 기능은 다루지 않습니다.

준비물

하드웨어

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

소프트웨어:

  • Linux x86_64
  • Git로 이동합니다.
  • Go 1.11+.
  • 웹브라우저 OTNS-Web은 웹브라우저를 사용하여 시뮬레이션을 표시합니다.

기본 요건:

2 기본 요건

이전의 기본 Codelab 완료하기

패키지 기본 요건 확인

기본 요건을 모두 충족하는지 확인해 보겠습니다.

  1. which otns를 실행하여 $PATH에서 otns 실행 파일을 검색할 수 있는지 확인합니다.
  2. which wpantund를 실행하여 wpantund를 사용할 수 있는지 확인합니다.
  3. ARM GNU 도구 모음, J-Link 및 nrfjprog 패키지를 모두 사용할 수 있는지 확인합니다.
  4. openthread 폴더 아래에서 make -f examples/Makefile-nrf52840를 실행하여 OpenThread 바이너리가 생성될 수 있는지 확인합니다.

참고: 설정 안내는 연결된 문서를 참고하세요. 기본 요건 #1은 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라는 도구는 Silk의 일부로 설치되어 인터페이스 일련번호와 USB 인터페이스 번호를 확인하는 데 사용할 수 있습니다. DutSerial은 칩에 인쇄된 SN 번호이거나 usbinfo에서 J-Link 제품용으로 표시됩니다.

[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

보드를 플래시하려면 스레드 네트워크 빌드 Codelab의 4단계에 있는 안내에 따라 nrfjprog를 사용합니다. 그런 다음 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 지원으로 실크 테스트 사례 실행

Silk는 실제 기기에서 OpenThread 함수, 기능, 시스템 성능을 검증하기 위한 완전 자동화된 테스트 플랫폼입니다. 프로젝트 README의 안내에 따라 사용 방법이 나와 있습니다.

silk/unit_tests에 있는 silk_run_test.py 파일이 준비에 좋습니다. 실크는 테스트 사례를 실행할 때 OTNS 지원을 제공합니다. OTNS 실제 모드 서비스가 이미 로컬에서 실행 중이므로 출력 로그 파일, 입력 테스트 스크립트 및 hwconfig.ini 파일에 대해 원하는 위치로 silk_run_test.py 파일을 수정하면 됩니다. -s localhost 인수는 실크에 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를 지원하는 펌웨어로 플래시된 개발 보드를 사용하여 실크 테스트를 실행했습니다. 이사회는 실크 서버로 상태를 보고하며, 이 서버는 모든 사무소를 모니터링 및 집계하고 다른 테스트 정보와 함께 OTNS 서비스로 전송합니다. 실제 모드에서 실행되는 OTNS는 웹 인터페이스에서 스레드 네트워크를 시각화합니다.

다음 단계

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

추가 자료

다양한 OpenThread 리소스에 대한 자세한 내용은 openthread.ioSilk를 참고하세요.

참조 문서