1. ข้อมูลเบื้องต้น
OpenThread ที่เผยแพร่โดย Google เป็นการใช้งานโปรโตคอลโอเพนซอร์สสําหรับเครือข่าย Thread Google Nest ได้เปิดตัว OpenThread เพื่อทําให้เทคโนโลยีที่ใช้ในผลิตภัณฑ์ Nest พร้อมใช้งานอย่างกว้างขวางสําหรับนักพัฒนาซอฟต์แวร์ เพื่อเร่งการพัฒนาผลิตภัณฑ์สําหรับบ้านที่เชื่อมต่อ
ข้อมูลจําเพาะของชุดข้อความกําหนดโปรโตคอลการสื่อสารระหว่างอุปกรณ์ไร้สายที่เชื่อถือได้และมีความปลอดภัยตามมาตรฐาน IPv6 สําหรับแอปพลิเคชันในบ้าน OpenThread ใช้ Thread Network Layer ทั้งหมด ซึ่งรวมถึง IPv6, 6LoWPAN, IEEE 802.15.4 พร้อมระบบ MAC, การสร้าง Mesh Link และ Mesh Routing
Codelab นี้จะแนะนําการจําลองเครือข่าย Thread ในอุปกรณ์ที่จําลองโดยใช้ 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 จากอิมเมจแล้วเชื่อมต่อกับเชลล์ bash
ดังนี้
$ docker run --name codelab_otsim_ctnr -it --rm \ --sysctl net.ipv6.conf.all.disable_ipv6=0 \ --cap-add=net_admin openthread/environment bash
ตัวเลือก --rm
จะลบคอนเทนเนอร์เมื่อคุณออกจากคอนเทนเนอร์ โปรดอย่าใช้ตัวเลือกนี้หากไม่ต้องการให้ลบคอนเทนเนอร์
จดบันทึกแฟล็กที่จําเป็นสําหรับ 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 กับชุดเธรดที่จําลอง 1 ชุดจากอุปกรณ์เทรดที่จําลองมาอีกชุดหนึ่ง
รูปด้านล่างจะอธิบายโทโพโลยีเครือข่ายขั้นพื้นฐานของเทรด สําหรับแบบฝึกหัดนี้ เราจะจําลองโหนด 2 โหนดภายในวงกลมสีเขียว ได้แก่ Thread Leader และ Thread Router ที่มีเส้นเชื่อมต่อ 1 เส้นระหว่างกัน
สร้างเครือข่าย
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
ในคอนเทนเนอร์ Docker สร้างกระบวนการ 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
เป็นตัวบ่งชี้ไฟล์ที่แสดงบิตของส่วน IEEE EUI-64 ที่ "กําหนด" น้อยที่สุดสําหรับอุปกรณ์ที่จําลอง นอกจากนี้ ค่านี้ยังใช้เมื่อเชื่อมโยงกับพอร์ต UDP สําหรับการจําลองวิทยุ IEEE 802.15.4 (พอร์ต = 9000 + ตัวบ่งชี้ไฟล์) แต่ละอินสแตนซ์ของอุปกรณ์ Thread ที่จําลองใน 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
= เครื่องระบุตําแหน่งเราเตอร์ (RLOC) - ไม่มี
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
อุปกรณ์จะตั้งตัวเองเป็นเด็ก Thread Child มีค่าเท่ากับอุปกรณ์ปลายทาง ซึ่งเป็นอุปกรณ์เทรดที่ส่งและรับการรับส่งข้อมูล 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 | LQ In | LQ Out | Age | Extended MAC | +----+--------+----------+-----------+--------+-------+---+--------------------+ | 20 | 0x5000 | 63 | 0 | 0 | 0 | 0 | 96da92ea13534f3b | | 22 | 0x5800 | 63 | 0 | 3 | 3 | 23 | 5a4eb647eb6bc66c |
พบ RLOC ของโหนด 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:/#
โปรดดูที่ OpenThread CLI Reference เพื่อดูคําสั่ง CLI ที่มีทั้งหมด
4. ตรวจสอบสิทธิ์โหนดด้วยค่าคอมมิชชัน
ในแบบฝึกหัดก่อนหน้า คุณจะต้องตั้งค่าเครือข่ายเทรดด้วยอุปกรณ์จําลอง 2 เครื่องและการเชื่อมต่อที่ได้รับการยืนยัน อย่างไรก็ตาม การดําเนินการนี้จะอนุญาตให้มีการส่งผ่านลิงก์เฉพาะ IPv6 ที่ไม่ผ่านการตรวจสอบสิทธิ์ระหว่างอุปกรณ์เท่านั้น ในการกําหนดเส้นทางการรับส่งข้อมูล IPv6 ระหว่างกัน (และอินเทอร์เน็ตผ่านเราเตอร์ Thread Border) จะต้องมีการตรวจสอบสิทธิ์โหนด
อุปกรณ์ 1 เครื่องต้องทําหน้าที่เป็นเจ้าหน้าที่เพื่อที่จะตรวจสอบสิทธิ์ ค่าคอมมิชชันคือเซิร์ฟเวอร์การตรวจสอบสิทธิ์ที่ได้รับเลือกในปัจจุบันสําหรับอุปกรณ์เทรดใหม่ รวมถึงผู้ให้สิทธิ์ในการจัดทําข้อมูลรับรองเครือข่ายเพื่อให้อุปกรณ์เข้าร่วมเครือข่าย
ในแบบฝึกหัดนี้ เราจะใช้โทโพโลยีแบบ 2 โหนดแบบเดียวกับก่อนหน้านี้ สําหรับผู้นํา Threader Leader จะทําหน้าที่เป็น Commissioner หรือ Thread Router ในฐานะผู้เชื่อม
Docker
สําหรับโหนด (หน้าต่างเทอร์มินัล) แต่ละรายการในแบบฝึกหัดที่เหลือ ให้ตรวจสอบว่าคุณใช้คอนเทนเนอร์ Docker ที่มีบิวด์ OpenThread อยู่ หากทําแบบฝึกหัดก่อนหน้าต่อ คุณยังควรมีข้อความแจ้ง bash
สองรายการภายในคอนเทนเนอร์ 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 ในคอนเทนเนอร์ Docker จะสร้างกระบวนการ CLI ใหม่ นี่คือโหนด 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 เป็นอินพุตและเอาต์พุต เพื่อให้แกน 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 >
ตามที่อธิบายไว้ในขั้นตอนจําลองเครือข่ายเทรด ที่อยู่ 1 รายการเป็นลิงก์ภายใน (fe80
) และที่อยู่ 3 รายการเป็น Mesh-Local (fd
) EID คือที่อยู่ Mesh-Local ที่ไม่มี ff:fe00
ในที่อยู่ ในเอาต์พุตตัวอย่างนี้ EID คือ fd55:cf34:dea5:7994:460:872c:e807:c4ab
ระบุ EID ที่เฉพาะเจาะจงจากเอาต์พุต ipaddr
ซึ่งจะใช้เพื่อสื่อสารกับโหนด
2. เริ่ม Od-ememon
ในหน้าต่างเทอร์มินัลที่สอง ให้สร้างโหนดอุปกรณ์ 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
ได้เหมือนกับอุปกรณ์ Thread อื่นๆ ที่จําลองขึ้นมา
เปิดหน้าต่างเทอร์มินัลที่สามและเรียกใช้คอนเทนเนอร์ที่มีอยู่:
$ 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
รับ 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
ในฐานะผู้เข้าร่วม RCP (Node 2) ได้ตรวจสอบสิทธิ์ตัวเองกับ Commissioner (Node 1) และได้รับข้อมูลรับรอง Thread Network เรียบร้อยแล้ว
จากนั้นเข้าร่วมโหนด 2 กับเครือข่ายชุดข้อความ (ในหน้าต่างเทอร์มินัลที่สามอีกครั้ง)
> thread start Done
4. ตรวจสอบการตรวจสอบสิทธิ์เครือข่าย
ในเทอร์มินัลที่ 3 ให้ตรวจสอบ state
ในโหนด 2 เพื่อยืนยันว่าเข้าร่วมเครือข่ายแล้ว ภายใน 2 นาที โหนด 2 เปลี่ยนจาก child
เป็น router
:
> state child Done ... > state router Done
5. ตรวจสอบการเชื่อมต่อ
ในหน้าต่างเทอร์มินัลที่สาม ให้ออกจาก ot-ctl
โดยใช้คําสั่ง Ctrl+D หรือ exit
แล้วกลับไปที่คอนโซล bash
ของคอนเทนเนอร์ จากคอนโซลนี้ ให้ใช้คําสั่ง ping กับโหนด 1 โดยใช้ EID กับคําสั่ง ping6
ถ้าอินสแตนซ์ ot-daemon
ของ RCP เข้าร่วมและสื่อสารกับเครือข่ายเทรดสําเร็จแล้ว จะได้รับคําสั่ง 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
ข้อความแจ้ง คุณอาจต้องตรวจสอบว่าโฆษณาทํางานอยู่หรือไม่ แล้วรีสตาร์ท / กลับเข้ามาใหม่ตามที่จําเป็น คอนเทนเนอร์ Docker ที่คุณสร้างซึ่งคุณไม่ได้ใช้ตัวเลือก --rm
ควรมีอยู่
วิธีแสดงคอนเทนเนอร์ 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
โปรดใช้ตัวเลือก --rm
หากคุณต้องการให้ลบคอนเทนเนอร์เมื่อออกจากคอนเทนเนอร์เท่านั้น
หากคอนเทนเนอร์หยุดทํางาน (แสดงอยู่ใน 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 การจําลอง OpenThread
- จําลองเครือข่ายเทรด
- ตรวจสอบโหนดชุดข้อความ
- จัดการเครือข่ายเทรดด้วย OpenThread Daemon
หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับชุดข้อความและ OpenThread ให้ดูข้อมูลอ้างอิงเหล่านี้