1. บทนำ
OpenThread ที่ Google เปิดตัวเป็นการใช้งานโปรโตคอลเครือข่าย Thread แบบโอเพนซอร์ส Google Nest ได้เปิดตัว OpenThread เพื่อให้นักพัฒนาซอฟต์แวร์ใช้เทคโนโลยีในผลิตภัณฑ์ Nest ได้ในวงกว้าง เพื่อให้เร่งการพัฒนาผลิตภัณฑ์สําหรับบ้านที่เชื่อมต่อ
ข้อมูลจําเพาะของชุดข้อความกําหนดโปรโตคอลการสื่อสารระหว่างอุปกรณ์กับอุปกรณ์ไร้สายแบบไร้สายที่เชื่อถือได้และมีความปลอดภัยสําหรับ IPv6 สําหรับแอปพลิเคชันในบ้าน OpenThread จะนําเลเยอร์เครือข่ายเทรดทั้งหมดมาใช้ เช่น IPv6, 6LoWPAN, IEEE 802.15.4 พร้อมการรักษาความปลอดภัย MAC, Mesh Link Establishment และ Mesh Routing
Codelab นี้จะแนะนําการจําลองเครือข่ายชุดข้อความในอุปกรณ์ที่จําลองโดยใช้ Docker
สิ่งที่คุณจะได้เรียนรู้
- วิธีตั้งค่าเครื่องมือสร้างเชน OpenThread
- วิธีจําลองเครือข่ายชุดข้อความ
- วิธีตรวจสอบสิทธิ์โหนดชุดข้อความ
- วิธีจัดการเครือข่ายชุดข้อความด้วย OpenThread Daemon
สิ่งที่ต้องมี
- Docker
- ความรู้เบื้องต้นเกี่ยวกับ Linux การกําหนดเส้นทางเครือข่าย
2. ตั้งค่า Docker
Codelab นี้ออกแบบมาให้ใช้ Docker ในเครื่อง Linux, Mac OS X หรือ Windows สภาพแวดล้อมที่แนะนําคือ Linux
ติดตั้ง Docker
ติดตั้ง Docker บนระบบปฏิบัติการที่คุณต้องการ
ดึงรูปภาพ Docker
เมื่อติดตั้ง Docker แล้ว ให้เปิดหน้าต่างเทอร์มินัลและดึงรูปภาพ Docker ของ openthread/environment
รูปภาพนี้มี OpenThread และ OpenThread Daemon ซึ่งสร้างไว้ล่วงหน้าและพร้อมใช้งานสําหรับ Codelab นี้
$ docker pull openthread/environment:latest
โปรดทราบว่าการดาวน์โหลดอาจใช้เวลา 2-3 นาที
ในหน้าต่างเทอร์มินัล ให้เริ่มต้นคอนเทนเนอร์ Docker จากรูปภาพและเชื่อมต่อกับ 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
คือรหัสคอนเทนเนอร์ รหัสคอนเทนเนอร์สําหรับอินสแตนซ์ของคอนเทนเนอร์ Docker จะต่างจากรหัสที่แสดงในข้อความแจ้งสําหรับ Codelab นี้
การใช้ Docker
Codelab จะถือว่าคุณทราบข้อมูลพื้นฐานเกี่ยวกับการใช้ Docker คุณควรอยู่ในคอนเทนเนอร์ Docker สําหรับทั้งโค้ด Codelab
3. จําลองเครือข่ายชุดข้อความ
ตัวอย่างแอปพลิเคชันที่คุณจะใช้สําหรับ Codelab นี้จะสาธิตแอปพลิเคชัน OpenThread ที่เรียบง่ายซึ่งจะแสดงอินเทอร์เฟซ OpenThread และการจัดการอินเทอร์เฟซอินเทอร์เฟซแบบบรรทัดคําสั่ง (CLI) พื้นฐาน
แบบฝึกหัดนี้จะนําคุณมีขั้นตอนขั้นต่ําที่จําเป็นสําหรับการใช้คําสั่ง ping กับอุปกรณ์เทรดจําลองที่จําลองมาจากอุปกรณ์เทรดอีกชุดหนึ่ง
รูปภาพด้านล่างอธิบายถึงโทโพโลยีเครือข่ายเทรดพื้นฐาน สําหรับแบบฝึกหัดนี้ เราจะจําลองโหนด 2 โหนดภายในวงกลมสีเขียว ได้แก่ ชุดข้อความของผู้นําชุดข้อความและเราเตอร์ชุดข้อความโดยมีการเชื่อมต่อระหว่างกัน
สร้างเครือข่าย
1. เริ่มต้นโหนด 1
หากยังไม่ได้ดําเนินการ ให้เปิดหน้าต่างคอนเทนเนอร์ของ Docker แล้วเชื่อมต่อกับคอนเทนเนอร์ bash
ในหน้าต่างเทอร์มินัล โดยทําดังนี้
$ docker run --name codelab_otsim_ctnr -it --rm \ --sysctl net.ipv6.conf.all.disable_ipv6=0 \ --cap-add=net_admin openthread/environment bash
สร้างกระบวนการ CLI สําหรับอุปกรณ์ เทรดจําลองที่จําลองโดยใช้คอนเทนเนอร์ Docker โดยใช้ไบนารี 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
= 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
เปิดเทอร์มินัลใหม่และเรียกใช้ Shell ของ bash
ในคอนเทนเนอร์ Docker ที่กําลังทํางานอยู่ซึ่งใช้สําหรับโหนด 2
$ docker exec -it codelab_otsim_ctnr bash
ในข้อความแจ้ง bash
ใหม่นี้ ให้สร้างกระบวนการ CLI ด้วยอาร์กิวเมนต์ 2
นี่คืออุปกรณ์เทรดที่สองที่จําลองขึ้น:
root@c0f3912a74ff:/# /openthread/build/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
อุปกรณ์จะเริ่มต้นเป็นเด็ก Child Child จะเทียบเท่ากับอุปกรณ์ปลายทาง ซึ่งเป็นอุปกรณ์ชุดข้อความที่ส่งและได้รับการเข้าชม Unicast ด้วยอุปกรณ์ของผู้ปกครองเท่านั้น
> state child Done
คุณจะเห็นการเปลี่ยนสถานะจาก child
เป็น router
ภายใน 2 นาที เราเตอร์เทรดสามารถกําหนดเส้นทางการรับส่งข้อมูลระหว่างอุปกรณ์เทรดได้ หรือเรียกว่าผู้เผยแพร่โฆษณาหลัก
> state router Done
ยืนยันเครือข่าย
วิธีง่ายๆ ในการยืนยันเครือข่ายที่ทํางานร่วมกันคือการดูตารางเราเตอร์
1. ตรวจสอบการเชื่อมต่อ
ในโหนด 2 ให้ดาวน์โหลด RSAOC16 RSAOC16 คือ 16 บิตสุดท้ายของที่อยู่ RSAOC IPv6 ของอุปกรณ์
> rloc16 5800 Done
ในโหนด 1 ให้ตรวจสอบตารางเราเตอร์สําหรับ โหนด 2' RSAOC16 ตรวจสอบว่าโหนด 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 |
พบ RSAOC ของโหนด 2' จาก 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 เป็นค่าเริ่มต้นก่อนออกกลับไปยังข้อความแจ้งของ Docker bash
โดยระบบจะทําการรีเซ็ตเป็นค่าเริ่มต้นเพื่อให้แน่ใจว่าจะไม่มีการนําข้อมูลเข้าสู่ระบบเครือข่ายชุดข้อความที่ใช้ในแบบฝึกหัดถัดไปไปใช้
> thread stop Done > factoryreset > > exit root@c0f3912a74ff:/#
คุณอาจต้องกด enter
2-3 ครั้งเพื่อให้ข้อความแจ้ง >
ปรากฏขึ้นอีกครั้งหลังคําสั่ง factoryreset
อย่าออกจากคอนเทนเนอร์ Docker
รีเซ็ตและออกจากโหนด 1 เป็นค่าเริ่มต้นด้วย:
> factoryreset > > exit root@c0f3912a74ff:/#
ดูการอ้างอิง CLI ของ OpenThread เพื่อสํารวจคําสั่ง CLI ที่มีทั้งหมด
4. ตรวจสอบสิทธิ์โหนดด้วยค่าคอมมิชชัน
ในแบบฝึกหัดก่อนหน้า คุณตั้งค่าเครือข่ายชุดข้อความด้วยอุปกรณ์ที่จําลอง 2 เครื่องและการเชื่อมต่อที่ได้รับการยืนยัน อย่างไรก็ตาม วิธีนี้อนุญาตให้รับส่งข้อมูลเฉพาะลิงก์แบบ IPv6 ที่ไม่ได้ผ่านการตรวจสอบสิทธิ์ระหว่างอุปกรณ์เท่านั้น ในการกําหนดเส้นทางการรับส่งข้อมูล IPv6 ทั่วโลกระหว่างกัน (และอินเทอร์เน็ตผ่านเราเตอร์เส้นขอบของชุดข้อความ) จะต้องมีการตรวจสอบสิทธิ์โหนด
ในการตรวจสอบสิทธิ์ อุปกรณ์หนึ่งเครื่องต้องทําหน้าที่เป็นค่าคอมมิชชัน ค่าคอมมิชชันคือเซิร์ฟเวอร์การตรวจสอบสิทธิ์ที่ได้รับเลือกในปัจจุบันสําหรับอุปกรณ์ เทรดใหม่ และผู้ออกใบรับรองสําหรับให้ข้อมูลรับรองเครือข่ายที่จําเป็นสําหรับอุปกรณ์ในการเข้าร่วมเครือข่าย
ในแบบฝึกหัดนี้ เราจะใช้โทโพโลยี 2 โหนดเหมือนกับก่อนหน้านี้ สําหรับผู้นํา เทรดผู้นําจะทําหน้าที่เป็นผู้กํากับ เราเตอร์เทรดในฐานะผู้เชื่อม
Docker
สําหรับโหนดแต่ละโหนด (หน้าต่างเทอร์มินัล) ในแบบฝึกหัดที่เหลือ โปรดตรวจสอบว่าคุณเรียกใช้คอนเทนเนอร์ Docker ที่มีบิลด์ OpenThread แล้ว หากดําเนินการต่อจากการออกกําลังกายก่อนหน้า คุณควรมีข้อความแจ้งของ bash
2 รายการภายในคอนเทนเนอร์ Docker เดียวกันที่เปิดอยู่แล้ว หากไม่มี โปรดดูขั้นตอนการแก้ปัญหาเกี่ยวกับ Docker หรือฝึกแบบจําลองเครือข่ายชุดข้อความอีกครั้ง
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 ใหม่ในคอนเทนเนอร์ Docker นี่คือโหนด 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 แบบฝัง 1 รายการ) และอินสแตนซ์ Radio Co-Processor (RCP) 1 รายการ
ot-daemon
เป็นโหมดของแอป OpenThread Posix ที่ใช้ซ็อกเก็ต UNIX เป็นอินพุตและเอาต์พุต เพื่อให้แกน OpenOpen ทํางานเป็นบริการ ไคลเอ็นต์สื่อสารกับบริการนี้ได้โดยเชื่อมต่อกับซ็อกเก็ตโดยใช้ OpenThread CLI เป็นโปรโตคอล
ot-ctl
คือ CLI ที่ ot-daemon
ให้ไว้เพื่อจัดการและกําหนดค่า RCP ซึ่งจะช่วยให้เราเชื่อมต่อ RCP กับเครือข่ายที่สร้างโดยอุปกรณ์ชุดข้อความได้
Docker
สําหรับโหนดแต่ละโหนด (หน้าต่างเทอร์มินัล) ในการออกกําลังกายนี้ ตรวจสอบว่าคุณเรียกใช้คอนเทนเนอร์ Docker ที่มีบิลด์ OpenThread อยู่ หากดําเนินการต่อจากการออกกําลังกายก่อนหน้า คุณควรมีข้อความแจ้งของ bash
2 รายการภายในคอนเทนเนอร์ Docker เดียวกันเปิดอยู่แล้ว หากไม่ถูกต้อง โปรดดูขั้นตอนการแก้ปัญหาเกี่ยวกับ Docker
ใช้ ot-daemon
แบบฝึกหัดนี้จะใช้หน้าต่างเทอร์มินัล 3 หน้า ดังต่อไปนี้
- อินสแตนซ์ CLI ของอุปกรณ์เทรดจําลอง (โหนด 1)
- กระบวนการ
ot-daemon
- อินสแตนซ์ 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 ที่อยู่เป็น Mesh-local (fd
) EID คือที่อยู่ Mesh-local ที่ไม่มี ff:fe00
ในที่อยู่ ในเอาต์พุตตัวอย่างนี้ EID คือ fd55:cf34:dea5:7994:460:872c:e807:c4ab
ระบุ EID ที่เจาะจงจากเอาต์พุต ipaddr
ซึ่งจะใช้ในการสื่อสารกับโหนด
2. เริ่ม O-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 (โหนด 2) ได้ตรวจสอบสิทธิ์ตัวเองกับค่าคอมมิชชัน (โหนด 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
และกลับไปที่คอนโซล's 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. การแก้ปัญหาเกี่ยวกับ Docker
หากคุณออกจากคอนเทนเนอร์ของ Docker
bash
Prompt คุณอาจต้องตรวจสอบว่าโฆษณาทํางานและรีสตาร์ท / ป้อนอีกครั้งตามความจําเป็นหรือไม่
วิธีแสดงคอนเทนเนอร์ Docker ที่กําลังทํางานอยู่
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 505fc57ffc72 environment "bash" 10 minutes ago Up 10 minutes codelab_otsim_ctnr
วิธีแสดงคอนเทนเนอร์ Docker ทั้งหมด (ทั้งการเรียกใช้และหยุด)
$ 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
หากคอนเทนเนอร์ Docker ทํางานอยู่แล้ว (แสดงอยู่ใน docker ps
) ให้เชื่อมต่อกับคอนเทนเนอร์ในแต่ละเทอร์มินัลอีกครั้ง ดังนี้
$ docker exec -it codelab_otsim_ctnr bash
"ข้อผิดพลาดด้านการทํางานไม่ได้รับอนุญาต"
หากคุณพบข้อผิดพลาด Operation not permitted
เมื่อสร้างโหนด OpenThread ใหม่ (โดยใช้คําสั่ง mknod
) ให้ตรวจสอบว่าคุณกําลังเรียกใช้ Docker เป็นผู้ใช้รากตามคําสั่งที่มีให้ใน Codelab นี้ Codelab นี้ไม่รองรับการเรียกใช้ Docker ในโหมดที่ไม่มีรูท
7. ยินดีด้วย
คุณจําลองเครือข่ายชุดข้อความแรกโดยใช้ OpenThread เรียบร้อยแล้ว ยอดเยี่ยม!
ใน Codelab นี้ คุณจะได้เรียนรู้วิธีการทําสิ่งต่อไปนี้
- เริ่มและจัดการคอนเทนเนอร์ Docker การจําลองการจําลองของ Docker
- จําลองเครือข่ายชุดข้อความ
- ตรวจสอบสิทธิ์โหนดชุดข้อความ
- จัดการเครือข่ายชุดข้อความด้วย OpenThread Daemon
หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับชุดข้อความและ OpenThread ให้สํารวจข้อมูลอ้างอิงเหล่านี้
- ชุดข้อความ Primer ใน openthread.io
- ข้อกําหนดชุดข้อความ
- ที่เก็บข้อมูล OpenThread GitHub
- ข้อมูลอ้างอิง OpenThread CLI
- การรองรับ OpenThread Docker เพิ่มเติม
หรือลองใช้เราเตอร์ BorderThread Border ในคอนเทนเนอร์ของ Docker