การจําลองเครือข่ายชุดข้อความโดยใช้ OpenThread ใน Docker

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

1. บทนำ

26b7f4f6b3ea0700

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

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

Codelab นี้จะอธิบายวิธีจําลองเครือข่ายเทรดในอุปกรณ์ที่จําลองโดยใช้ Dock

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

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

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

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

2. ตั้งค่า Dock

Codelab นี้ออกแบบมาให้ใช้ Dock ในเครื่อง Linux, Mac OS X หรือ Windows สภาพแวดล้อมที่แนะนําคือ Linux

ติดตั้ง Docker

ติดตั้ง Dock บนระบบปฏิบัติการที่คุณต้องการ

พุลอิมเมจ Dock

เมื่อติดตั้ง Dock แล้ว ให้เปิดหน้าต่างเทอร์มินัลและดึงรูปภาพ HTTPS ของ openthread/environment มาใช้ รูปภาพนี้มี OpenThread และ OpenThread Daemon ซึ่งสร้างไว้ล่วงหน้าและพร้อมใช้งานกับ Codelab นี้

$ docker pull openthread/environment:latest

โปรดทราบว่าการดาวน์โหลดอาจใช้เวลาสักครู่จึงจะเสร็จสมบูรณ์

ในหน้าต่างเทอร์มินัล ให้เริ่มคอนเทนเนอร์คอนเทนเนอร์จากรูปภาพ และเชื่อมต่อกับ Shell bash

$ docker run --name codelab_otsim_ctnr -it --rm \
   --sysctl net.ipv6.conf.all.disable_ipv6=0 \
   --cap-add=net_admin openthread/environment bash

จดแฟล็กที่จําเป็นสําหรับ Codelab นี้

  • --sysctl net.ipv6.conf.all.disable_ipv6=0 — การดําเนินการนี้จะเปิดใช้ IPv6 ภายในคอนเทนเนอร์
  • --cap-add=net_admin — เปิดใช้ความสามารถของ NET_ADMIN ซึ่งจะช่วยให้คุณดําเนินการที่เกี่ยวข้องกับเครือข่ายได้ เช่น การเพิ่มเส้นทาง IP

เมื่ออยู่ในคอนเทนเนอร์ คุณควรได้รับข้อความแจ้งที่คล้ายกับข้อความด้านล่างนี้

root@c0f3912a74ff:/#

ในตัวอย่างข้างต้น c0f3912a74ff คือรหัสคอนเทนเนอร์ รหัสคอนเทนเนอร์สําหรับอินสแตนซ์ของคอนเทนเนอร์ Dock จะแตกต่างจากรหัสที่แสดงในข้อความแจ้งสําหรับ Codelab นี้

การใช้ Dock

Codelab นี้จะถือว่าคุณทราบข้อมูลพื้นฐานในการใช้ Dock คุณควรในคอนเทนเนอร์คอนเทนเนอร์ทั้งหมดสําหรับ Codelab ทั้งหมด

3. จําลองเครือข่ายเทรด

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

การดําเนินการนี้จะช่วยให้คุณทําตามขั้นตอนขั้นต่ําที่จําเป็นสําหรับการใช้คําสั่ง ping กับอุปกรณ์เทรดที่จําลอง 1 เครื่องจากอุปกรณ์เทรดจําลองอื่นๆ

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

6e3aa07675f902dc.png

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

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

หากยังไม่ได้ดําเนินการ ให้เริ่มต้นคอนเทนเนอร์ Dock ในหน้าต่างเทอร์มินัลและเชื่อมต่อกับ bash Shell ต่อไปนี้

$ docker run --name codelab_otsim_ctnr -it --rm \
   --sysctl net.ipv6.conf.all.disable_ipv6=0 \
   --cap-add=net_admin openthread/environment bash

สร้างคอนเทนเนอร์ CLI สําหรับคอนเทนเนอร์เทรดที่จําลองโดยใช้คอนเทนเนอร์ ot-cli-ftd ในคอนเทนเนอร์ของคอนเทนเนอร์

root@c0f3912a74ff:/# /openthread/build/examples/apps/cli/ot-cli-ftd 1

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

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

อาร์กิวเมนต์ของ 1 เป็นตัวบ่งชี้ไฟล์ที่แสดงถึงบิตที่มีค่าน้อยที่สุดของ "Factory-assigned" 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

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

> 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 = ตาข่ายภายใน
  • ขึ้นต้นด้วย fe80 = link-local

ประเภทที่อยู่ภายในซึ่งใช้ตาข่ายจะได้รับการจัดประเภทเพิ่มเติมดังนี้

  • มี ff:fe00 = Router Locator ({/7}OC)
  • ไม่มี ff:fe00 = ตัวระบุปลายทาง (EID)

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

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

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

เปิดเทอร์มินัลใหม่และเรียกใช้ Shell ของ bash ในคอนเทนเนอร์ของ Dock ที่ใช้งานอยู่เพื่อใช้กับโหนด 2

$ docker exec -it codelab_otsim_ctnr bash

ในข้อความแจ้ง bash ใหม่นี้ ให้สร้างกระบวนการ CLI ด้วยอาร์กิวเมนต์ 2 อุปกรณ์นี้เป็นอุปกรณ์เทรดที่จําลองที่ 2 ดังนี้

root@c0f3912a74ff:/# /openthread/build/examples/apps/cli/ot-cli-ftd 2

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

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

> dataset networkkey e4344ca17d1dca2a33f064992f31f786
Done
> dataset panid 0xc169
Done

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

> dataset commit active
Done

เปิดอินเทอร์เฟซ IPv6

> ifconfig up
Done

การดําเนินการเริ่มต้นโปรโตคอลชุดข้อความ:

> thread start
Done

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

> state
child
Done

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

> state
router
Done

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

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

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

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

> rloc16
5800
Done

ในโหนด 1 ให้ตรวจสอบตารางเราเตอร์เพื่อหา Node 2 และ #39;{/7} ตรวจสอบว่าโหนด 2 เปลี่ยนเป็นสถานะเราเตอร์ก่อน

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

โหนด 2's {/7}ของ 0x5800 พบในตารางเพื่อยืนยันว่าเชื่อมต่อกับ Mesh

2. โหนด ping ของโหนด 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 โหนดแบบออฟไลน์

กลับไปที่โหนด 1 และหยุดชุดข้อความ:

> thread stop
Done

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

> state
router
Done
...
> state
leader
Done

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

> thread stop
Done
> factoryreset
>
> exit
root@c0f3912a74ff:/#

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

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

> factoryreset
>
> exit
root@c0f3912a74ff:/#

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

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

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

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

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

d6a67e8a0d0b5dcb.png

Docker

สําหรับโหนดแต่ละโหนด (หน้าต่างเทอร์มินัล) ในแบบฝึกหัดที่เหลือ โปรดตรวจสอบว่าคุณกําลังเรียกใช้คอนเทนเนอร์ HTTPS ที่มีบิลด์ OpenThread หากดําเนินการต่อจากแบบฝึกหัดก่อนหน้า คุณก็น่าจะมีข้อความแจ้ง bash 2 รายการภายในคอนเทนเนอร์ RTB เดียวกันเปิดอยู่แล้ว หากไม่ ให้ดูขั้นตอนการแก้ปัญหาเกี่ยวกับแท่นชาร์จ หรือฝึกจําลองเครือข่ายเทรดซ้ําอีกครั้ง

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

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

root@c0f3912a74ff:/# /openthread/build/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

รอสักครู่แล้วตรวจสอบว่าอุปกรณ์กลายเป็นผู้นําชุดข้อความแล้ว

> state
leader
Done

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

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

> commissioner start
Done

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

> commissioner joiner add * J01NME
Done

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

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

root@c0f3912a74ff:/# /openthread/build/examples/apps/cli/ot-cli-ftd 2

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

> ifconfig up
Done
> joiner start J01NME
Done

... รอสักครู่สําหรับการยืนยัน ...

Join success

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

เมื่อโหนด 2 ได้รับการตรวจสอบแล้ว ให้เริ่มชุดข้อความ:

> thread start
Done

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

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

> state
child
Done
...
> state
router
Done

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

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

> thread stop
Done
> factoryreset
>
> exit
root@c0f3912a74ff:/#

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

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

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

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

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

Docker

สําหรับโหนด (หน้าต่างเทอร์มินัล) แต่ละรายการในแบบฝึกหัดนี้ โปรดตรวจสอบว่าคุณเรียกใช้คอนเทนเนอร์ HTTPS ที่มีบิลด์ OpenThread หากดําเนินการต่อจากแบบฝึกหัดก่อนหน้า คุณควรมีข้อความแจ้ง bash 2 รายการภายในคอนเทนเนอร์ RTB เดียวกันเปิดอยู่แล้ว หากไม่ ให้ดูขั้นตอนการแก้ปัญหาเกี่ยวกับแท่นชาร์จ

ใช้ ot-daemon

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

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

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

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

root@c0f3912a74ff:/# /openthread/build/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
>

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

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

2. เริ่ม Ot-daemon

ในหน้าต่างเทอร์มินัลที่ 2 ให้สร้างโหนดอุปกรณ์ tun และตั้งสิทธิ์การอ่าน/เขียนดังนี้

root@c0f3912a74ff:/# mkdir -p /dev/net && mknod /dev/net/tun c 10 200
root@c0f3912a74ff:/# chmod 600 /dev/net/tun

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

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

root@c0f3912a74ff:/# /openthread/build/posix/src/posix/ot-daemon -v \
'spinel+hdlc+forkpty:///openthread/build/examples/apps/ncp/ot-rcp?forkpty-arg=2'

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

ot-daemon[31]: Running OPENTHREAD/297a880; POSIX; Feb  1 2022 04:43:39
ot-daemon[31]: Thread version: 3
ot-daemon[31]: Thread interface: wpan0
ot-daemon[31]: RCP version: OPENTHREAD/297a880; SIMULATION; Feb  1 2022 04:42:50

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

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

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

เปิดหน้าต่างเทอร์มินัลที่ 3 แล้วเรียกใช้คอนเทนเนอร์ที่มีอยู่

$ docker exec -it codelab_otsim_ctnr bash

เมื่ออยู่ในคอนเทนเนอร์แล้ว ให้เริ่ม ot-ctl:

root@c0f3912a74ff:/# /openthread/build/posix/src/posix/ot-ctl
>

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

> state
disabled
Done

รับโหนด 2' eui64 เพื่อจํากัดการเข้าร่วมกับตัวเข้าร่วมเฉพาะ:

> eui64
18b4300000000001
Done

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

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

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

> ifconfig up
Done
> joiner start J01NME
Done

... รอสักครู่สําหรับการยืนยัน ...

Join success

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

จากนั้นรวมโหนด 2 กับเครือข่ายเทรด (อีกครั้งในหน้าต่างเทอร์มินัลที่ 3) ต่อไปนี้

> thread start
Done

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

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

> state
child
Done
...
> state
router
Done

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

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

root@c0f3912a74ff:/# 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

6. การแก้ปัญหาใน Dock

หากคุณออกจากคอนเทนเนอร์ HTTPS

bash ข้อความแจ้ง คุณอาจต้องตรวจสอบว่าไฟล์กําลังทํางานหรือไม่ แล้วรีสตาร์ท / ป้อนอีกครั้งตามที่จําเป็น

วิธีแสดงคอนเทนเนอร์ของคอนเทนเนอร์ที่ใช้งานอยู่

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
505fc57ffc72        environment       "bash"              10 minutes ago      Up 10 minutes                           codelab_otsim_ctnr

วิธีแสดงคอนเทนเนอร์ทั้งหมดของ Dock (ทั้งที่ทํางานอยู่และหยุดทํางาน)

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
505fc57ffc72        environment       "bash"              10 minutes ago      Up 10 minutes                           codelab_otsim_ctnr

หากคุณไม่เห็นคอนเทนเนอร์ codelab_otsim_ctnr ในเอาต์พุตของคําสั่ง docker ps ให้เรียกใช้อีกครั้ง

$ docker run --name codelab_otsim_ctnr -it --rm \
   --sysctl net.ipv6.conf.all.disable_ipv6=0 \
   --cap-add=net_admin openthread/environment bash

หากคอนเทนเนอร์หยุดทํางาน (แสดงเป็นภาษาdocker ps -a แต่ไม่ใช่ docker ps) ให้รีสตาร์ทเครื่องดังนี้

$ docker start -i codelab_otsim_ctnr

หากคอนเทนเนอร์ของ Dock ทํางานอยู่แล้ว (แสดงอยู่ใน docker ps) ให้เชื่อมต่ออีกครั้งกับคอนเทนเนอร์ในแต่ละเทอร์มินัล

$ docker exec -it codelab_otsim_ctnr bash

"ไม่ได้รับอนุญาตการทํางาน&ข้อผิดพลาด;ข้อผิดพลาด

หากคุณพบข้อผิดพลาด Operation not permitted ครั้งขณะสร้างโหนด OpenThread ใหม่ (โดยใช้คําสั่ง mknod) โปรดตรวจสอบว่าคุณกําลังเรียกใช้ Dock ในฐานะผู้ใช้รูทตามคําสั่งที่ระบุไว้ใน Codelab นี้ Codelab นี้ไม่รองรับการเรียกใช้ Dock ในโหมดรูท

7. ยินดีด้วย

คุณจําลองเครือข่ายชุดข้อความแรกโดยใช้ OpenThread เรียบร้อยแล้ว ยอดเยี่ยม

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

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

หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับชุดข้อความและ OpenThread ให้ดูข้อมูลอ้างอิงต่อไปนี้

หรือลองใช้ เราเตอร์ OpenThread Border ในคอนเทนเนอร์ของ Dock