การจำลองเครือข่ายเทรดด้วย OpenThread

1. บทนำ

26b7f4f6b3ea0700.png

OpenThread ของ Google เป็นการใช้งานแบบโอเพนซอร์สของโปรโตคอลเครือข่าย Thread Google Nest ได้เปิดตัว OpenThread เพื่อทำให้เทคโนโลยีที่ใช้ในผลิตภัณฑ์ Nest พร้อมใช้งานในวงกว้างสำหรับนักพัฒนาซอฟต์แวร์เพื่อเร่งการพัฒนาผลิตภัณฑ์สำหรับบ้านที่เชื่อมต่อ

ข้อกำหนดของเทรดกำหนดโปรโตคอลการสื่อสารระหว่างอุปกรณ์ไร้สายที่เสถียร ปลอดภัย และใช้พลังงานต่ำ โดยใช้ IPv6 สำหรับแอปพลิเคชันในบ้าน OpenThread ใช้เลเยอร์เครือข่ายเทรดทั้งหมดซึ่งรวมถึง IPv6, 6LoWPAN, IEEE 802.15.4 ที่มีการรักษาความปลอดภัย MAC, Mesh Link Generatement และ Mesh Routing

Codelab นี้จะแนะนำการจำลองเครือข่าย Thread ในอุปกรณ์จำลอง

สิ่งที่คุณจะได้เรียนรู้

  • วิธีตั้งค่าเครื่องมือเชนบิลด์ของ OpenThread
  • วิธีจำลองเครือข่ายเทรด
  • วิธีตรวจสอบสิทธิ์โหนดเทรด
  • วิธีจัดการเครือข่าย Thread ด้วย OpenThread Daemon

สิ่งที่ต้องมี

  • git
  • ความรู้พื้นฐานเกี่ยวกับ Linux, การกำหนดเส้นทางเครือข่าย

2. ตั้งค่าระบบบิลด์

Git

ต้องใช้ Git เพื่อทำ Codelab นี้ให้เสร็จสิ้น โปรดดาวน์โหลดและติดตั้งก่อนดำเนินการต่อ

เมื่อติดตั้งแล้ว ให้ทำตามวิธีการสำหรับระบบปฏิบัติการที่เฉพาะเจาะจงเพื่อดาวน์โหลดและสร้าง OpenThread

XCode สำหรับ Mac OS X

ต้องใช้ XCode เพื่อติดตั้งและสร้าง OpenThread ใน Mac OS X

หลังจากติดตั้ง XCode แล้ว ให้ติดตั้งเครื่องมือบรรทัดคำสั่ง XCode ดังนี้

$ xcode-select --install

สร้างบน Linux / Mac OS X

คำแนะนำในการติดตั้งเหล่านี้ได้รับการทดสอบใน Ubuntu Server 14.04 LTS และ Mac OS X Sierra 10.12.6

ติดตั้ง OpenThread คำสั่ง bootstrap ตรวจสอบว่าได้ติดตั้ง Toolchain แล้วและกำหนดค่าสภาพแวดล้อมไว้อย่างถูกต้อง ดังนี้

$ mkdir -p ~/src
$ cd ~/src
$ git clone --recursive https://github.com/openthread/openthread.git
$ cd openthread
$ ./script/bootstrap

การใช้ Windows

หากต้องการใช้ Windows เราขอแนะนำให้ลองใช้ Codelab นี้ในเวอร์ชัน Docker

3. สร้างแอปพลิเคชัน OpenThread

เมื่อติดตั้งเสร็จแล้ว ให้สร้างแอปพลิเคชัน OpenThread ตัวอย่าง เราใช้ตัวอย่างการจำลองสำหรับ Codelab นี้

$ cd ~/src/openthread
$ ./script/cmake-build simulation

ตอนนี้ให้สร้าง Daemon ของ OpenThread:

$ ./script/cmake-build posix -DOT_DAEMON=ON

4. จำลองเครือข่ายเทรด

แอปพลิเคชันตัวอย่างที่คุณจะใช้สำหรับ Codelab นี้แสดงให้เห็นแอปพลิเคชัน OpenThread ที่เรียบง่ายซึ่งแสดงการกำหนดค่าและอินเทอร์เฟซการจัดการ OpenThread ผ่านอินเทอร์เฟซบรรทัดคำสั่ง (CLI)

แบบฝึกหัดนี้จะอธิบายขั้นตอนขั้นต่ำที่จำเป็นในการใช้คำสั่ง ping กับอุปกรณ์เทรดจำลอง 1 เครื่องจากอุปกรณ์เทรดจำลองเครื่องอื่น

ภาพด้านล่างอธิบายโทโพโลยีเครือข่ายเทรดพื้นฐาน สำหรับแบบฝึกหัดนี้ เราจะจำลองโหนด 2 โหนดภายในวงกลมสีเขียว ได้แก่ ตัวนำเทรดและเราเตอร์เทรด (Thread Router) ที่มีจุดเชื่อมต่อเดียว

6e3aa07675f902dc.png

การใช้คำสั่ง ping กับโหนด

1. เริ่มต้นโหนด 1

ไปที่ไดเรกทอรี openthread และสร้างกระบวนการ CLI สำหรับอุปกรณ์เทรดจำลองโดยใช้ไบนารี ot-cli-ftd

$ cd ~/src/openthread
$ ./build/simulation/examples/apps/cli/ot-cli-ftd 1

หมายเหตุ: หากคุณไม่เห็นข้อความแจ้งเกี่ยวกับ > หลังจากเรียกใช้คำสั่งนี้ ให้กด enter

ไบนารีนี้ใช้อุปกรณ์ OpenThread ที่จำลองขึ้นที่ด้านบนของ POSIX ไดรเวอร์วิทยุ IEEE 802.15.4 จะทำงานบน UDP (เฟรม IEEE 802.15.4 จะส่งภายในเพย์โหลด UDP)

อาร์กิวเมนต์ของ 1 คือตัวบอกไฟล์ที่แสดงถึงบิตที่มีค่าน้อยที่สุดของ "กำหนดจากโรงงาน" IEEE EUI-64 สำหรับอุปกรณ์จำลอง ค่านี้จะใช้เมื่อเชื่อมโยงกับพอร์ต UDP สำหรับการจำลองวิทยุ IEEE 802.15.4 (พอร์ต = 9000 + ข้อบ่งชี้ไฟล์) อินสแตนซ์แต่ละรายการของอุปกรณ์เทรดจำลองใน Codelab นี้จะใช้ข้อบ่งชี้ไฟล์ที่แตกต่างกัน

หมายเหตุ: ใช้เฉพาะข้อบ่งชี้ไฟล์ตั้งแต่ 1 ขึ้นไปตามที่ระบุไว้ใน Codelab เมื่อสร้างกระบวนการสำหรับอุปกรณ์จำลอง ตัวอธิบายไฟล์ของ 0 สงวนไว้สำหรับการใช้งานอื่น

สร้างชุดข้อมูลด้านการปฏิบัติงานใหม่และกำหนดให้เป็นชุดข้อมูลที่ใช้งานอยู่ ชุดข้อมูลการดำเนินการคือการกำหนดค่าสำหรับเครือข่ายเทรดที่คุณกำลังสร้าง

> dataset init new
Done
> dataset
Active Timestamp: 1
Channel: 20
Channel Mask: 07fff800
Ext PAN ID: d6263b6d857647da
Mesh Local Prefix: fd61:2344:9a52:ede0/64
Network Key: e4344ca17d1dca2a33f064992f31f786
Network Name: OpenThread-c169
PAN ID: 0xc169
PSKc: ebb4f2f8a68026fc55bcf3d7be3e6fe4
Security Policy: 0, onrcb
Done

คอมมิตชุดข้อมูลนี้เป็นชุดข้อมูลที่ใช้งานอยู่:

> dataset commit active
Done

เรียกใช้อินเทอร์เฟซ IPv6:

> ifconfig up
Done

เริ่มการดำเนินการโปรโตคอลเทรด:

> thread start
Done

รอสักครู่และยืนยันว่าอุปกรณ์เป็นผู้นำเทรด Leader เป็นอุปกรณ์ที่รับผิดชอบในการจัดการการกำหนดรหัสเราเตอร์

> state
leader
Done

ดูที่อยู่ IPv6 ที่กำหนดให้กับอินเทอร์เฟซเทรดของโหนด 1 (เอาต์พุตของคุณจะแตกต่างออกไป)

> ipaddr
fd61:2344:9a52:ede0:0:ff:fe00:fc00
fd61:2344:9a52:ede0:0:ff:fe00:5000
fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6
fe80:0:0:0:94da:92ea:1353:4f3b
Done

โปรดทราบประเภทที่อยู่ IPv6 ต่อไปนี้

  • ขึ้นต้นด้วย fd = Mesh-local
  • ขึ้นต้นด้วย fe80 = link-local

ระบบจะจัดประเภทที่อยู่ในพื้นที่ทำงานร่วมกันเพิ่มเติมดังนี้

  • มี ff:fe00 = เครื่องระบุตำแหน่งเราเตอร์ (RLOC)
  • ไม่มี ff:fe00 = ตัวระบุปลายทาง (EID)

ระบุ EID ในเอาต์พุตของคอนโซลแล้วจดบันทึกไว้ใช้ในภายหลัง ในเอาต์พุตตัวอย่างด้านบน EID คือ

fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6

2. เริ่มต้นโหนด 2

เปิดเทอร์มินัลใหม่และไปยังไดเรกทอรี openthread และสร้างกระบวนการ CLI นี่คืออุปกรณ์เทรดจำลองเครื่องที่ 2 ของคุณ:

$ cd ~/src/openthread
$ ./build/simulation/examples/apps/cli/ot-cli-ftd 2

หมายเหตุ: หากคุณไม่เห็นข้อความแจ้งเกี่ยวกับ > หลังจากเรียกใช้คำสั่งนี้ ให้กด enter

กำหนดค่าคีย์เครือข่ายเทรดและรหัส PAN โดยใช้ค่าเดียวกันกับชุดข้อมูลการดำเนินการของโหนด 1 ดังนี้

> dataset networkkey e4344ca17d1dca2a33f064992f31f786
Done
> dataset panid 0xc169
Done

คอมมิตชุดข้อมูลนี้เป็นชุดข้อมูลที่ใช้งานอยู่:

> dataset commit active
Done

เรียกใช้อินเทอร์เฟซ IPv6:

> ifconfig up
Done

เริ่มการดำเนินการโปรโตคอลเทรด:

> thread start
Done

อุปกรณ์จะเริ่มต้นการทำงานเองในฐานะผู้เผยแพร่โฆษณาย่อย ผู้เผยแพร่โฆษณาย่อยเทรดเทียบเท่ากับอุปกรณ์ปลายทาง ซึ่งเป็นอุปกรณ์เทรดที่ส่งและรับการรับส่งข้อมูลแบบ Unicast ด้วยอุปกรณ์หลักเท่านั้น

> state
child
Done

คุณควรเห็นการเปลี่ยนสถานะจาก child เป็น router ภายใน 2 นาที เราเตอร์เทรดสามารถกำหนดเส้นทางการรับส่งข้อมูลระหว่างอุปกรณ์เทรด นอกจากนี้ยังเรียกว่า "ผู้เผยแพร่โฆษณาหลัก"

> state
router
Done

ยืนยันเครือข่าย

วิธีง่ายๆ ในการตรวจสอบเครือข่ายที่ทำงานร่วมกันคือการดูที่ตารางเราเตอร์

1. ตรวจสอบการเชื่อมต่อ

ในโหนด 2 ให้รับ RLOC16 RLOC16 คือ 16 บิตสุดท้ายของที่อยู่ RLOC IPv6 ของอุปกรณ์

> rloc16
5800
Done

ในโหนด 1 ให้ตรวจสอบตารางเราเตอร์สำหรับ RLOC16 ของโหนด 2 ตรวจสอบว่าโหนด 2 เปลี่ยนเป็นสถานะของเราเตอร์ก่อน

> router table
| ID | RLOC16 | Next Hop | Path Cost | LQI In | LQI Out | Age | Extended MAC  |
+----+--------+----------+----------+-------+---------+-----+------------------+
| 20 | 0x5000 |       63 |         0 |     0 |      0 |   0 | 96da92ea13534f3b |
| 22 | 0x5800 |       63 |         0 |     3 |      3 |  23 | 5a4eb647eb6bc66c |

พบ RLOC ของ 0xa800 ของโหนด 1 ในตารางเพื่อยืนยันว่าโหนดเชื่อมต่อกับ Mesh

2. ปิงโหนด 1 จากโหนด 2

ยืนยันการเชื่อมต่อระหว่างอุปกรณ์เทรดจำลองทั้ง 2 เครื่อง ในโหนด 2 ping EID ที่กำหนดให้กับโหนด 1:

> ping fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6
> 16 bytes from fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6: icmp_seq=1
hlim=64 time=12ms

กด enter เพื่อกลับไปยังพรอมต์ CLI ของ >

ทดสอบเครือข่าย

ตอนนี้คุณสามารถใช้คำสั่ง ping ระหว่างอุปกรณ์เทรดจำลอง 2 เครื่องได้สำเร็จ ให้ทดสอบเครือข่ายที่ทำงานร่วมกันโดยทำให้โหนดหนึ่งโหนดออฟไลน์

กลับไปที่โหนด 1 และหยุดเทรด:

> thread stop
Done

เปลี่ยนไปใช้โหนด 2 และตรวจสอบสถานะ ภายใน 2 นาที โหนด 2 จะตรวจพบว่าตัวนำ (โหนด 1) ออฟไลน์อยู่ และคุณควรเห็นการเปลี่ยนโหนด 2 เป็น leader ของเครือข่าย

> state
router
Done
...
> state
leader
Done

เมื่อยืนยันแล้ว ให้หยุดเทรดและรีเซ็ตโหนด 2 เป็นค่าเริ่มต้นก่อนออก มีการรีเซ็ตเป็นค่าเริ่มต้นเพื่อให้มั่นใจว่าข้อมูลเข้าสู่ระบบเครือข่ายเทรดที่เราใช้ในแบบฝึกหัดนี้จะไม่ถูกนำไปใช้ในแบบฝึกหัดครั้งถัดไป

> thread stop
Done
> factoryreset
>
> exit

รีเซ็ตเป็นค่าเริ่มต้นและออกจากโหนด 1 ด้วย:

> factoryreset
>
> exit

ดูการอ้างอิง CLI ของ OpenThread เพื่อสำรวจคำสั่ง CLI ทั้งหมดที่มี

5. ตรวจสอบสิทธิ์โหนดด้วยการค่าคอมมิชชัน

ในแบบฝึกหัดก่อนหน้า คุณตั้งค่าเครือข่ายเทรดด้วยอุปกรณ์จำลอง 2 เครื่องและการเชื่อมต่อที่ยืนยันแล้ว อย่างไรก็ตาม วิธีนี้จะอนุญาตเฉพาะการรับส่งข้อมูลภายในลิงก์ของ IPv6 ที่ไม่ผ่านการตรวจสอบสิทธิ์เท่านั้นที่จะผ่านระหว่างอุปกรณ์ได้ ในการกำหนดเส้นทางการรับส่งข้อมูล IPv6 ทั่วโลกระหว่างโดเมน (และอินเทอร์เน็ตผ่าน Thread Border Router) โหนดจะต้องได้รับการตรวจสอบสิทธิ์

หากต้องการตรวจสอบสิทธิ์ อุปกรณ์ 1 เครื่องต้องทำหน้าที่เป็นค่าคอมมิชชัน Commissioner เป็นเซิร์ฟเวอร์การตรวจสอบสิทธิ์ที่ได้รับเลือกในปัจจุบันสำหรับอุปกรณ์เทรดใหม่ และผู้ให้สิทธิ์ระบุข้อมูลเข้าสู่ระบบเครือข่ายที่จำเป็นสำหรับอุปกรณ์เพื่อเข้าร่วมเครือข่าย

ในแบบฝึกหัดนี้ เราจะใช้โทโพโลยีแบบ 2 โหนดเช่นเดียวกับก่อนหน้านี้ สำหรับการตรวจสอบสิทธิ์ ตัวนำเทรดจะทำหน้าที่เป็นค่าคอมมิชชัน หรือเราเตอร์เทรดในฐานะผู้ผนวก

d6a67e8a0d0b5dcb.png

1. สร้างเครือข่าย

หากดำเนินการต่อจากแบบฝึกหัดก่อนหน้า คุณควรเปิดหน้าต่างเทอร์มินัลไว้ 2 หน้าต่าง หากไม่เปิด ให้ตรวจสอบว่าทั้ง 2 บัญชีเปิดอยู่และพร้อมใช้งาน โหนดหนึ่งจะทำหน้าที่เป็นโหนด 1 ส่วนอีกโหนดหนึ่งจะทำหน้าที่เป็นโหนด 2

สร้างกระบวนการ CLI ในโหนด 1 ดังนี้

$ cd ~/src/openthread
$ ./build/simulation/examples/apps/cli/ot-cli-ftd 1

หมายเหตุ: หากคุณไม่เห็นข้อความแจ้งเกี่ยวกับ > หลังจากเรียกใช้คำสั่งนี้ ให้กด enter

สร้างชุดข้อมูลด้านการปฏิบัติงานใหม่ คอมมิตให้เป็นชุดข้อมูลที่ใช้งานอยู่ และเริ่มเทรด:

> dataset init new
Done
> dataset
Active Timestamp: 1
Channel: 12
Channel Mask: 07fff800
Ext PAN ID: e68d05794bf13052
Mesh Local Prefix: fd7d:ddf7:877b:8756/64
Network Key: a77fe1d03b0e8028a4e13213de38080e
Network Name: OpenThread-8f37
PAN ID: 0x8f37
PSKc: f9debbc1532487984b17f92cd55b21fc
Security Policy: 0, onrcb
Done

คอมมิตชุดข้อมูลนี้เป็นชุดข้อมูลที่ใช้งานอยู่:

> dataset commit active
Done

เรียกใช้อินเทอร์เฟซ IPv6:

> ifconfig up
Done

เริ่มการดำเนินการโปรโตคอลเทรด:

> thread start
Done

รอสักครู่และตรวจสอบว่าอุปกรณ์กลายเป็น Thread Leader แล้ว

> state
leader
Done

2. เริ่มต้นบทบาทค่าคอมมิชชัน

ขณะที่ยังอยู่ในโหนด 1 ให้เริ่มบทบาทผู้ช่วยโดยดำเนินการดังนี้

> commissioner start
Done

อนุญาตให้ Joiner ทั้งหมด (โดยใช้ไวลด์การ์ด *) พร้อมข้อมูลเข้าสู่ระบบ Joiner J01NME เพื่อคอมมิชชันไปยังเครือข่าย Joiner คืออุปกรณ์ที่เพิ่มโดยผู้ดูแลระบบที่เป็นมนุษย์ไปยังเครือข่ายเทรดที่ได้รับการว่าจ้าง

> commissioner joiner add * J01NME
Done

3. เริ่มต้นบทบาทผู้เข้าร่วม

ในหน้าต่างเทอร์มินัลที่ 2 ให้สร้างกระบวนการ CLI ใหม่ นี่คือโหนด 2

$ cd ~/src/openthread
$ ./build/simulation/examples/apps/cli/ot-cli-ftd 2

ในโหนด 2 ให้เปิดใช้บทบาทผู้ผสานโดยใช้ข้อมูลเข้าสู่ระบบของตัวเข้าร่วม J01NME

> ifconfig up
Done
> joiner start J01NME
Done

... รอสักครู่เพื่อยืนยัน ...

Join success

ในฐานะ Joiner อุปกรณ์ (โหนด 2) ได้ตรวจสอบสิทธิ์ตัวเองกับ Commissioner (โหนด 1) เรียบร้อยแล้ว และได้รับข้อมูลรับรองเครือข่าย Thread

ตอนนี้โหนด 2 ได้รับการตรวจสอบแล้ว ให้เริ่มเทรด:

> thread start
Done

4. ตรวจสอบการตรวจสอบสิทธิ์เครือข่าย

ตรวจสอบ state ในโหนด 2 เพื่อยืนยันว่าได้เข้าร่วมเครือข่ายแล้ว โหนด 2 จะเปลี่ยนจาก child เป็น router ภายใน 2 นาที:

> state
child
Done
...
> state
router
Done

5. รีเซ็ตการกำหนดค่า

โปรดรีเซ็ตการกำหนดค่าเพื่อเตรียมพร้อมสำหรับการออกกำลังกายถัดไป ในแต่ละโหนด ให้หยุด Thread รีเซ็ตเป็นค่าเริ่มต้น แล้วออกจากอุปกรณ์ Thread ที่จำลองขึ้น

> thread stop
Done
> factoryreset
>
> exit

คุณอาจต้องกด enter 2-3 ครั้งเพื่อนำข้อความแจ้ง > กลับมาหลังจากคำสั่ง factoryreset

6. จัดการเครือข่ายด้วย OpenThread Daemon

สำหรับแบบฝึกหัดนี้ เราจะจำลองอินสแตนซ์ CLI (อุปกรณ์ SoC Thread แบบฝังเดี่ยว) และอินสแตนซ์ Radio Co-Processor (RCP) 1 อินสแตนซ์

ot-daemon คือโหมดของแอป OpenThread Posix ที่ใช้ UNIX Socket เป็นอินพุตและเอาต์พุตเพื่อให้ OpenThread Core ทำงานเป็นบริการได้ ไคลเอ็นต์จะสื่อสารกับบริการนี้ได้โดยเชื่อมต่อกับซ็อกเก็ตโดยใช้ OpenThread CLI เป็นโปรโตคอล

ot-ctl เป็น CLI จาก ot-daemon เพื่อจัดการและกำหนดค่า RCP ด้วยการใช้วิธีนี้ เราจะเชื่อมต่อ RCP กับเครือข่ายที่สร้างโดยอุปกรณ์เทรด

ใช้ ot-daemon

แบบฝึกหัดนี้จะใช้หน้าต่างเทอร์มินัล 3 หน้าต่าง ซึ่งสอดคล้องกับเงื่อนไขต่อไปนี้

  1. อินสแตนซ์ CLI ของอุปกรณ์เทรดจำลอง (โหนด 1)
  2. ot-daemon กระบวนการ
  3. อินสแตนซ์ CLI ot-ctl รายการ

หากดำเนินการต่อจากแบบฝึกหัดก่อนหน้า คุณควรเปิดหน้าต่างเทอร์มินัลไว้ 2 หน้าต่าง เปิดหน้าต่างที่สามเพื่อให้แน่ใจว่ามีหน้าต่างเทอร์มินัล 3 หน้าต่างสำหรับแบบฝึกหัดนี้

1. เริ่มต้นโหนด 1

ในหน้าต่างเทอร์มินัลแรก ให้สร้างกระบวนการ CLI สำหรับอุปกรณ์ Thread ที่จำลองขึ้น ดังนี้

$ cd ~/src/openthread
$ ./build/simulation/examples/apps/cli/ot-cli-ftd 1

หมายเหตุ: หากคุณไม่เห็นข้อความแจ้งเกี่ยวกับ > หลังจากเรียกใช้คำสั่งนี้ ให้กด enter

สร้างชุดข้อมูลด้านการปฏิบัติงานใหม่ คอมมิตให้เป็นชุดข้อมูลที่ใช้งานอยู่ และเริ่มเทรด:

> dataset init new
Done
> dataset
Active Timestamp: 1
Channel: 13
Channel Mask: 07fff800
Ext PAN ID: 97d584bcd493b824
Mesh Local Prefix: fd55:cf34:dea5:7994/64
Network Key: ba6e886c7af50598df1115fa07658a83
Network Name: OpenThread-34e4
PAN ID: 0x34e4
PSKc: 38d6fd32c866927a4dfcc06d79ae1192
Security Policy: 0, onrcb
Done

คอมมิตชุดข้อมูลนี้เป็นชุดข้อมูลที่ใช้งานอยู่:

> dataset commit active
Done

เรียกใช้อินเทอร์เฟซ IPv6:

> ifconfig up
Done

เริ่มการดำเนินการโปรโตคอลเทรด:

> thread start
Done

ดูที่อยู่ IPv6 ที่กำหนดให้กับอินเทอร์เฟซเทรดของโหนด 1 ดังนี้

> ipaddr
fd55:cf34:dea5:7994:0:ff:fe00:fc00
fd55:cf34:dea5:7994:0:ff:fe00:d000
fd55:cf34:dea5:7994:460:872c:e807:c4ab
fe80:0:0:0:9cd8:aab6:482f:4cdc
Done
>

ตามที่อธิบายไว้ในขั้นตอนจำลองเครือข่ายเทรด ที่อยู่ 1 รายการคือลิงก์ภายใน (fe80) และที่อยู่ 3 รายการเป็นแบบ Mesh ภายใน (fd) EID คือที่อยู่ภายในที่ทำงานร่วมกัน ซึ่งไม่มี ff:fe00 ในที่อยู่ ในเอาต์พุตตัวอย่างนี้ EID คือ fd55:cf34:dea5:7994:460:872c:e807:c4ab

ระบุ EID ที่เฉพาะเจาะจงจากเอาต์พุต ipaddr ซึ่งจะใช้ในการสื่อสารกับโหนด

2. เริ่มต้น ot-daemon

ในหน้าต่างเทอร์มินัลที่ 2 ให้ไปที่ไดเรกทอรี openthread แล้วเริ่ม ot-daemon สำหรับโหนด RCP ซึ่งเราเรียกว่าโหนด 2 ใช้แฟล็กแบบละเอียดของ -v เพื่อให้คุณเห็นเอาต์พุตของบันทึกและยืนยันว่ากำลังทำงานอยู่ และตรวจสอบว่าได้ใช้ sudo แล้ว

$ cd ~/src/openthread
$ sudo ./build/posix/src/posix/ot-daemon -v \
    'spinel+hdlc+forkpty://build/simulation/examples/apps/ncp/ot-rcp?forkpty-arg=2'

เมื่อสําเร็จ ot-daemon ในโหมดแบบละเอียดจะสร้างเอาต์พุตที่คล้ายกับตัวอย่างต่อไปนี้

ot-daemon[12463]: Running OPENTHREAD/thread-reference-20200818-1938-g0f10480ed; POSIX; Aug 30 2022 10:55:05
ot-daemon[12463]: Thread version: 4
ot-daemon[12463]: Thread interface: wpan0
ot-daemon[12463]: RCP version: OPENTHREAD/thread-reference-20200818-1938-g0f10480ed; SIMULATION; Aug 30 2022 10:54:10

เปิดเทอร์มินัลนี้ทิ้งไว้และทำงานในเบื้องหลัง คุณไม่ต้องป้อนคำสั่งใดๆ เพิ่มเติม

3. ใช้ ot-ctl เพื่อเข้าร่วมเครือข่าย

เรายังไม่ได้มอบหมายโหนด 2 (RCP ของ ot-daemon) ให้แก่เครือข่ายเทรด นี่คือสิ่งที่ ot-ctl จะเข้ามาช่วย ot-ctl ใช้ CLI เดียวกับแอป OpenThread CLI คุณจึงควบคุมโหนด ot-daemon รายการได้ในลักษณะเดียวกันกับอุปกรณ์เทรดจำลองอื่นๆ

ในหน้าต่างเทอร์มินัลที่ 3 ให้เริ่ม ot-ctl:

$ sudo ./build/posix/src/posix/ot-ctl
>

หมายเหตุ: หากคุณไม่เห็นข้อความแจ้งเกี่ยวกับ > หลังจากเรียกใช้คำสั่งนี้ ให้กด enter

คุณจะใช้ ot-ctl ในหน้าต่างเทอร์มินัลที่ 3 นี้เพื่อจัดการโหนด 2 (โหนด RCP) ที่คุณเริ่มต้นในหน้าต่างเทอร์มินัลที่ 2 ด้วย ot-daemon ตรวจสอบ state ของโหนด 2:

> state
disabled
Done

รับ eui64 ของโหนด 2 เพื่อจำกัดการเข้าร่วมเฉพาะผู้ผนวกที่ระบุ

> eui64
18b4300000000001
Done

ในโหนด 1 (หน้าต่างเทอร์มินัลแรก) ให้เริ่มต้นค่าคอมมิชชันและจำกัดการเข้าร่วมเฉพาะ eui64 ดังกล่าวเท่านั้น

> commissioner start
Done
> commissioner joiner add 18b4300000000001 J01NME
Done

ในโหนด 2 (หน้าต่างเทอร์มินัลที่สาม) ให้เปิดอินเทอร์เฟซเครือข่ายและเข้าร่วมเครือข่าย:

> ifconfig up
Done
> joiner start J01NME
Done

... รอสักครู่เพื่อยืนยัน ...

Join success

ในฐานะ Joiner นั้น RCP (โหนด 2) ได้ตรวจสอบสิทธิ์ตัวเองกับ Commissioner (โหนด 1) เรียบร้อยแล้ว และได้รับข้อมูลรับรองเครือข่ายเทรด

จากนั้นเข้าร่วมโหนด 2 กับเครือข่ายเทรด:

> thread start
Done

4. ตรวจสอบการตรวจสอบสิทธิ์เครือข่าย

ตรวจสอบ state ในโหนด 2 เพื่อยืนยันว่าได้เข้าร่วมเครือข่ายแล้ว โหนด 2 จะเปลี่ยนจาก child เป็น router ภายใน 2 นาที:

> state
child
Done
...
> state
router
Done

5. ตรวจสอบการเชื่อมต่อ

ออกจาก ot-ctl โดยใช้คำสั่ง Ctrl+D หรือ exit และใช้คำสั่ง ping6 ในบรรทัดคำสั่งของเครื่องโฮสต์ หากอินสแตนซ์ RCP ot-daemon เข้าร่วมและสื่อสารกับเครือข่ายเทรดได้สำเร็จ คําสั่ง ping จะสําเร็จดังนี้

$ ping6 -c 4 fd55:cf34:dea5:7994:460:872c:e807:c4ab
PING fd55:cf34:dea5:7994:460:872c:e807:c4ab (fd55:cf34:dea5:7994:460:872c:e807:c4ab): 56 data bytes
64 bytes from fd55:cf34:dea5:7994:460:872c:e807:c4ab: icmp_seq=0 ttl=64 time=4.568 ms
64 bytes from fd55:cf34:dea5:7994:460:872c:e807:c4ab: icmp_seq=1 ttl=64 time=6.396 ms
64 bytes from fd55:cf34:dea5:7994:460:872c:e807:c4ab: icmp_seq=2 ttl=64 time=7.594 ms
64 bytes from fd55:cf34:dea5:7994:460:872c:e807:c4ab: icmp_seq=3 ttl=64 time=5.461 ms
--- fd55:cf34:dea5:7994:460:872c:e807:c4ab ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 4.568/6.005/7.594/1.122 ms

7. ยินดีด้วย

คุณจำลองเครือข่าย Thread แรกโดยใช้ OpenThread สำเร็จแล้ว ยอดเยี่ยม!

คุณได้เรียนรู้วิธีทำสิ่งต่อไปนี้ใน Codelab แล้ว

  • ตั้งค่าเครื่องมือสร้าง OpenThread
  • จำลองเครือข่ายเทรด
  • ตรวจสอบสิทธิ์โหนดเทรด
  • จัดการเครือข่าย Thread ด้วย OpenThread Daemon

ดูข้อมูลเพิ่มเติมได้ในข้อมูลอ้างอิงต่อไปนี้