ใช้ฟีเจอร์ขั้นสูง

ดูแหล่งที่มาใน GitHub

ฟีเจอร์ขั้นสูงบางรายการจะมีหรือไม่ก็ได้ ขึ้นอยู่กับว่าระบบรองรับในแพลตฟอร์มฮาร์ดแวร์เป้าหมายหรือไม่

เฟรมอัตโนมัติรอดําเนินการ

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 ทางเลือกมีดังนี้

  1. กําหนดมาโคร MBEDTLS_AES_ALT ในไฟล์ส่วนหัวการกําหนดค่า mbedTLS เฉพาะผู้ใช้
  2. ระบุเส้นทางของไฟล์ aes_alt.h โดยใช้ตัวแปร MBEDTLS_CPPFLAGS

โมดูล SHA256

OpenThread Security ใช้อัลกอริทึมแฮช HMAC และ SHA256 เพื่อคํานวณค่าแฮชสําหรับการจัดการคีย์เครือข่ายและการสร้าง PSKc ตามข้อกําหนดของเทรด

วิธีใช้งานโมดูล SHA256 ขั้นพื้นฐานทางเลือกมีดังนี้

  1. กําหนดมาโคร MBEDTLS_SHA256_ALT ในไฟล์ส่วนหัวการกําหนดค่า mbedTLS เฉพาะผู้ใช้
  2. ระบุเส้นทางของไฟล์ sha256_alt.h โดยใช้ตัวแปร MBEDTLS_CPPFLAGS

ฟังก์ชัน ECC

เนื่องจากขณะนี้ mbedTLS รองรับเฉพาะการเร่งฮาร์ดแวร์สําหรับฟังก์ชัน ECC บางส่วนเท่านั้น ไม่ใช่โมดูลทั้งหมด คุณเลือกใช้ฟังก์ชันบางรายการที่ระบุไว้ใน path-to-mbedtls/library/ecp.c เพื่อเร่งการคูณจุด ECC ได้

มีการใช้เส้นโค้ง Curve secp256r1 ในอัลกอริทึมการแลกเปลี่ยนคีย์ของฉบับร่าง ECJPAKE ดังนั้น การเร่งความเร็วฮาร์ดแวร์ควรอย่างน้อยควรรองรับการประมวลผลแบบโค้งสั้นๆ แบบ secp256r1 ดูตัวอย่างได้ที่ SiLabs CRYPTO Hardware Acceleration สําหรับ mbedTLS