ฟีเจอร์ขั้นสูงบางรายการจะมีหรือไม่ก็ได้ ขึ้นอยู่กับว่าระบบรองรับในแพลตฟอร์มฮาร์ดแวร์เป้าหมายหรือไม่
เฟรมอัตโนมัติรอดําเนินการ
IEEE 802.15.4 กําหนดวิธีส่งข้อมูล 2 ประเภทระหว่างผู้เผยแพร่โฆษณาระดับบนสุดและรายย่อย ได้แก่ การส่งโดยตรงและการส่งโดยอ้อม อันหลังนี้ออกแบบมาโดยเฉพาะสําหรับอุปกรณ์ที่นอนหลับ (SED) ซึ่งส่วนใหญ่แล้วตื่นนอนเป็นระยะๆ เพื่อปลุกระบบเป็นระยะๆ เพื่อส่งแบบสํารวจให้ผู้ปกครอง
การส่งโดยตรง - ผู้ปกครองส่งเฟรมข้อมูลไปยังอุปกรณ์ปลายทางโดยตรง
การส่งโดยอ้อม - ผู้ปกครองจะเก็บรักษาข้อมูลไว้จนกว่าจะได้รับคําขอจากอุปกรณ์ปลายทางที่ต้องการ
ในกรณีโดยอ้อม อุปกรณ์ปลายทางย่อยต้องทําแบบสํารวจหลักก่อน เพื่อพิจารณาว่ามีข้อมูลที่พร้อมใช้งานหรือไม่ โดยผู้เผยแพร่โฆษณาจะส่งคําขอข้อมูล ที่ผู้ปกครองรับทราบ จากนั้นผู้ปกครองจะตรวจสอบว่าอุปกรณ์มีข้อมูลสําหรับอุปกรณ์ย่อยหรือไม่ หากมี ก็จะส่งแพ็กเก็ตข้อมูลไปยังอุปกรณ์ย่อยซึ่งจะตอบรับการรับข้อมูล
หากวิทยุรองรับการตั้งค่าบิตของเฟรมที่รออนุมัติในการแจ้งข้อมูลขาออกไปยัง SED ไดรเวอร์ต้องใช้ API ที่อยู่ต้นทาง เพื่อเปิดใช้ความสามารถนี้ OpenThread ใช้ API นี้เพื่อบอกวิทยุว่า SED ใดเพื่อตั้งค่าบิตที่รอดําเนินการของ Frame
หากวิทยุไม่รองรับการตั้งค่าบิตของเฟรมที่รอดําเนินการแบบไดนามิก วิทยุอาจตัดการทํางานของ API การจับคู่ที่อยู่ต้นทางเพื่อแสดงผล OT_ERROR_NOT_IMPLEMENTED
สแกน/ตรวจหาพลังงานด้วยวิทยุ
ฟีเจอร์สแกน/ตรวจหาพลังงานต้องใช้ชิปวิทยุเพื่อดูตัวอย่างพลังงานที่แสดงในแชแนลที่เลือกและแสดงผลค่าพลังงานที่ตรวจพบในชั้นบน
หากไม่ได้ใช้ฟีเจอร์นี้ เลเยอร์ IEEE 802.15.4 MAC จะส่ง/รับแพ็กเก็ตบีคอน/การตอบกลับเพื่อประเมินค่าพลังงานปัจจุบันในช่อง
หากชิปวิทยุรองรับการสแกนพลังงาน/การตรวจจับ อย่าลืมปิดใช้ตรรกะการสแกนพลังงานของซอฟต์แวร์โดยตั้งค่ามาโคร
OPENTHREAD_CONFIG_ENABLE_SOFTWARE_ENERGY_SCAN = 0
การเร่งฮาร์ดแวร์สําหรับ mbedTLS
mbedTLS กําหนดมาโครหลายรายการในไฟล์ส่วนหัวการกําหนดค่าหลัก mbedtls-config.h
เพื่อให้ผู้ใช้เปิดใช้โมดูล AES, SHA1, SHA2 และโมดูลอื่นๆ ทางเลือกได้ รวมถึงใช้ฟังก์ชันแต่ละรายการสําหรับการเข้ารหัสเส้นโค้งแบบ Eliptic (ECC) ผ่านโมดูล GF(p) ดูข้อมูลเพิ่มเติมได้ที่การเร่งฮาร์ดแวร์ mbedTLS
OpenThread ไม่ได้เปิดใช้มาโครเหล่านั้น ดังนั้นอัลกอริทึมคริปโตเคอเรนซีสมมาตร อัลกอริทึมแฮช และฟังก์ชัน ECC ล้วนใช้การติดตั้งใช้งานซอฟต์แวร์โดยค่าเริ่มต้น การนําไปใช้เหล่านี้ต้องใช้หน่วยความจําและทรัพยากรจํานวนมาก เพื่อประสิทธิภาพสูงสุดและประสบการณ์ของผู้ใช้ที่ดียิ่งขึ้น เราขอแนะนําให้เปิดใช้การเร่งฮาร์ดแวร์แทนซอฟต์แวร์เพื่อใช้การดําเนินการข้างต้น
หากต้องการเปิดใช้การเร่งฮาร์ดแวร์ภายใน OpenThread ควรเพิ่มไฟล์ส่วนหัวการกําหนดค่า mbedTLS ต่อไปนี้ลงในคําจํากัดความคอมไพล์ ot-config
ในไฟล์ CMake ของแพลตฟอร์ม
- การกําหนดค่าหลักที่กําหนดมาโครที่จําเป็นทั้งหมดซึ่งใช้ใน OpenThread มีดังนี้
/openthread/third-party/mbedtls/mbedtls-config.h
- การกําหนดค่าที่เจาะจงผู้ใช้ ซึ่งกําหนดการใช้งานทางเลือกของโมดูลและฟังก์ชัน:
src/platform-name-mbedtls-config.h
ตัวอย่างจาก nrf52811.cmake
target_compile_definitions(ot-config INTERFACE "MBEDTLS_USER_CONFIG_FILE=\"nrf52811-mbedtls-config.h\"" )
มาโครที่มีการแสดงความคิดเห็นใน mbedtls-config.h
ไม่จําเป็น และสามารถเปิดได้ในไฟล์ส่วนหัวการกําหนดค่าเฉพาะผู้ใช้สําหรับการเร่งฮาร์ดแวร์
โปรดดูตัวอย่างการกําหนดค่าผู้ใช้ที่สมบูรณ์ในmbedtls_config_autogen.h
ใน ot-efr32
โมดูล AES
OpenThread Security ใช้การเข้ารหัส AES CCM (ตัวนับด้วย CBC-MAC) เพื่อเข้ารหัส/ถอดรหัสข้อความ IEEE 802.15.4 หรือ MLE และตรวจสอบโค้ดการผสานรวมข้อความ การเร่งฮาร์ดแวร์ควรรองรับโหมด AES ECB แบบพื้นฐาน (Book Codebook Book) สําหรับการเรียกใช้ฟังก์ชันพื้นฐาน AES CCM
วิธีใช้งานโมดูล AES ทางเลือกมีดังนี้
- กําหนดมาโคร
MBEDTLS_AES_ALT
ในไฟล์ส่วนหัวการกําหนดค่า mbedTLS เฉพาะผู้ใช้ - ระบุเส้นทางของไฟล์
aes_alt.h
โดยใช้ตัวแปรMBEDTLS_CPPFLAGS
โมดูล SHA256
OpenThread Security ใช้อัลกอริทึมแฮช HMAC และ SHA256 เพื่อคํานวณค่าแฮชสําหรับการจัดการคีย์เครือข่ายและการสร้าง PSKc ตามข้อกําหนดของเทรด
วิธีใช้งานโมดูล SHA256 ขั้นพื้นฐานทางเลือกมีดังนี้
- กําหนดมาโคร
MBEDTLS_SHA256_ALT
ในไฟล์ส่วนหัวการกําหนดค่า mbedTLS เฉพาะผู้ใช้ - ระบุเส้นทางของไฟล์
sha256_alt.h
โดยใช้ตัวแปรMBEDTLS_CPPFLAGS
ฟังก์ชัน ECC
เนื่องจากขณะนี้ mbedTLS รองรับเฉพาะการเร่งฮาร์ดแวร์สําหรับฟังก์ชัน ECC บางส่วนเท่านั้น ไม่ใช่โมดูลทั้งหมด คุณเลือกใช้ฟังก์ชันบางรายการที่ระบุไว้ใน path-to-mbedtls/library/ecp.c
เพื่อเร่งการคูณจุด ECC ได้
มีการใช้เส้นโค้ง Curve secp256r1 ในอัลกอริทึมการแลกเปลี่ยนคีย์ของฉบับร่าง ECJPAKE ดังนั้น การเร่งความเร็วฮาร์ดแวร์ควรอย่างน้อยควรรองรับการประมวลผลแบบโค้งสั้นๆ แบบ secp256r1 ดูตัวอย่างได้ที่ SiLabs CRYPTO Hardware Acceleration สําหรับ mbedTLS