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

1. บทนำ

26b7f4f6b3ea0700.png

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

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

Codelab นี้จะแนะนําการจําลองเครือข่ายเทรดในอุปกรณ์ที่จําลองขึ้นมา

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

  • วิธีตั้งค่าเครื่องมือสร้างเชน OpenThread
  • วิธีจําลองเครือข่ายชุดข้อความ
  • วิธีตรวจสอบสิทธิ์โหนดชุดข้อความ
  • วิธีจัดการเครือข่ายชุดข้อความด้วย 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 โปรดตรวจสอบว่าติดตั้งเครื่องมือเชนไว้แล้ว และมีการกําหนดค่าสภาพแวดล้อมอย่างถูกต้อง

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

การใช้ Windows

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

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

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

$ cd ~/src/openthread
$ make -f examples/Makefile-simulation

ตอนนี้ให้สร้าง OpenThread Daemon ดังนี้

$ cd ~/src/openthread
$ make -f src/posix/Makefile-posix DAEMON=1

4. จําลองเครือข่ายชุดข้อความ

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

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

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

6e3aa07675f902dc.png

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

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

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

$ cd ~/src/openthread
$ ./output/simulation/bin/ot-cli-ftd 1

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

ไบนารีนี้นําอุปกรณ์ OpenThread ที่จําลองมาจาก POSIX มีการใช้ไดรเวอร์วิทยุ 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&#39 (เอาต์พุตของคุณจะแตกต่างออกไป)

> 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

ระบบจะจัดประเภทที่อยู่ Mesh-local เพิ่มเติมดังนี้

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

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

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

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

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

$ cd ~/src/openthread
$ ./output/simulation/bin/ot-cli-ftd 2

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

กําหนดค่าคีย์เครือข่ายชุดข้อความและ 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 บิตสุดท้ายของที่อยู่ RSAOC IPv6 ของอุปกรณ์

> rloc16
5800
Done

ในโหนด 1 ให้ตรวจสอบตารางเราเตอร์สําหรับ โหนด 2&#39 RSAOC16 ตรวจสอบว่าโหนด 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 |

พบ RSAOC ของโหนด 1&#39 ของ 0xa800 ในตาราง ซึ่งยืนยันว่าเชื่อมต่อกับ 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 เป็นค่าเริ่มต้นก่อนออก โดยระบบจะทําการรีเซ็ตเป็นค่าเริ่มต้นเพื่อให้แน่ใจว่าจะไม่มีการนําข้อมูลเข้าสู่ระบบเครือข่ายชุดข้อความที่ใช้ในแบบฝึกหัดถัดไปไปใช้

> thread stop
Done
> factoryreset
>
> exit

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

> factoryreset
>
> exit

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

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

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

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

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

d6a67e8a0d0b5dcb.png

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

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

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

$ cd ~/src/openthread
$ ./output/simulation/bin/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. เริ่มบทบาทผู้ผนวก

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

$ cd ~/src/openthread
$ ./output/simulation/bin/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

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

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

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

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

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

ใช้ ot-daemon

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

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

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

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

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

$ cd ~/src/openthread
$ ./output/simulation/bin/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&#39:

> 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 ที่อยู่เป็น Mesh-local (fd) EID คือที่อยู่ Mesh-local ที่ไม่มี ff:fe00 ในที่อยู่ ในเอาต์พุตตัวอย่างนี้ EID คือ fd55:cf34:dea5:7994:460:872c:e807:c4ab

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

2. เริ่ม O-daemon

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

$ cd ~/src/openthread
$ ./output/posix/bin/ot-daemon -v \
    'spinel+hdlc+forkpty://output/simulation/bin/ot-rcp?forkpty-arg=2'

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

ot-daemon[228024]: Running OPENTHREAD/20191113-00831-gfb399104; POSIX; Jun 7 2020 18:05:15
ot-daemon[228024]: Thread version: 2
ot-daemon[228024]: RCP version: OPENTHREAD/20191113-00831-gfb399104; SIMULATION; Jun 7 2020 18:06:08

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

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

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

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

$ ./output/posix/bin/ot-ctl
>

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

> state
disabled
Done

รับโหนด 2&#39 ของ eui64 เพื่อจํากัดการเข้าถึงการผนวกที่เฉพาะเจาะจง

> eui64
18b4300000000001
Done

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

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

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

> ifconfig up
Done
> joiner start J01NME
Done

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

Join success

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

วิธีเข้าร่วมโหนด 2 ในเครือข่ายชุดข้อความ

> thread start
Done

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

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

> state
child
Done
...
> state
router
Done

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

ออก ot-ctl โดยใช้คําสั่ง Ctrl+D หรือ exit และในบรรทัดคําสั่ง ping ให้โหนด 1 โดยใช้ EID ด้วยคําสั่ง 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. ยินดีด้วย

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

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

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

หากต้องการข้อมูลเพิ่มเติม โปรดดูข้อมูลอ้างอิงต่อไปนี้