wolfIP – สแตก TCP/IP แบบโอเพ่นซอร์และ lightweight ไม่ใช้การจัดสรรหน่วยความจำแบบไดนามิก สำหรับระบบฝังตัว

wolfSSL SSL/TLS เป็นที่รู้จักกันดีจากไลบรารีแบบโอเพ่นซอร์ส และบริษัท wolfSSL ได้เปิดตัว wolfIP ซึ่งเป็นสแตก TCP/IP แบบโอเพ่นซอร์สที่มีน้ำหนักเบา (lightweight) โดยออกแบบมาให้ไม่มีการจัดสรรหน่วยความจำแบบไดนามิก (เช่น ไม่มีการเรียกใช้ malloc) เหมาะสำหรับระบบฝังตัว (embedded systems) ที่มีทรัพยากรจำกัด

ทางบริษัทระบุว่า wolfIP รองรับทั้งโหมดใช้งานแบบปลายทางเท่านั้น (endpoint-only) และรองรับหลายอินเทอร์เฟซแบบเต็มรูปแบบ พร้อมตัวเลือกสำหรับการส่งต่อแพ็กเก็ต (IP forwarding) โดยค่าเริ่มต้นจะทำงานเป็นอุปกรณ์ปลายทางของเครือข่าย แต่สามารถตั้งค่าให้ทำหน้าที่ส่งต่อทราฟฟิกระหว่างอินเทอร์เฟซเครือข่ายหลายตัวได้

wolfip TCP IP library no memory allocations

คุณสมบัติเด่นของ wolfIP:

  • API แบบซ็อกเก็ตลักษณะคล้าย BSD รองรับการทำงานแบบไม่บล็อก (non-blocking) พร้อม callback ที่ปรับแต่งได้
  • ไม่มีการจัดสรรหน่วยความจำแบบไดนามิก
    • กำหนดจำนวนซ็อกเก็ตที่ใช้งานพร้อมกันได้แบบคงที่
    • ใช้บัฟเฟอร์ที่จัดเตรียมไว้ล่วงหน้าสำหรับการประมวลผลแพ็กเก็ตในหน่วยความจำแบบสแตติก
    • สามารถปรับแต่งพารามิเตอร์ต่าง ๆ ได้ในไฟล์ config.h:
  • โปรโตคอลที่รองรับ
    • Data Link – IEEE 802.3 Ethernet II frame encapsulation, ARP address resolution, request/reply
    • Network
      • การรับส่งข้อมูลแบบ IPv4
      • รองรับการส่งต่อ IPv4 (IPv4 forwarding) แบบเลือกใช้ พร้อมการทำ routing หลายอินเทอร์เฟซ
      • ICMP echo request/reply
      • IPsec
    • Transport – โปรโตคอล UDP และ TCP
    • Applications – DHCP (เฉพาะ client ), DNS (เฉพาะ client) และ HTTP/HTTPS (ใช้งานร่วมกับ wolfSSL)
    • VPN – wolfGuard ซึ่งเป็นการใช้งาน WireGuard ที่สอดคล้องกับมาตรฐาน FIPS (ใช้ P-256, AES-256-GCM, SHA-256); หมายเหตุ: ไม่สามารถใช้งานร่วมกับ WireGuard มาตรฐานได้
  • รองรับการพอร์ตใช้งานกับ FreeRTOS

ไมโครคอนโทรลเลอร์และไมโครโปรเซสเซอร์ที่ใช้ในระบบฝังตัว (embedded systems) ไม่เพียงมีทรัพยากรจำกัดเท่านั้น แต่ยังมักไม่มีหน่วยจัดการหน่วยความจำ (MMU) และมีพื้นที่ heap ที่จำกัด ทำให้การจัดสรรหน่วยความจำแบบไดนามิกเป็นเรื่องท้าทาย และอาจนำไปสู่การล่มของระบบได้ การไม่ต้องพึ่งพา malloc จึงอาจช่วยให้ระบบมีความเสถียรมากยิ่งขึ้น

คุณสามารถค้นหาซอร์สโค้ด (ภาษา C) ที่เผยแพร่ภายใต้สัญญาอนุญาตแบบ GPLv3 รวมถึงเอกสาร API (docs/API.md), คู่มือการใช้งาน wolfIP บนไมโครคอนโทรลเลอร์ STM32 ที่มี Ethernet โดยใช้ STM32CubeMX และแพ็กเกจ wolfIP CMSIS, รวมถึงเครื่องมือต่าง ๆ ได้บน GitHub ถ้าคุณต้องการใช้ภาษาโปรแกรม Rust หรือจำเป็นต้องรองรับ IPv6, smoltcp library ก็สามารถตั้งค่าให้ไม่ใช้การจัดสรรหน่วยความจำแบบไดนามิกได้เช่นกัน

แปลจากบทความ : wolfIP – An open-source, lightweight TCP/IP stack with no dynamic memory allocations for embedded systems

Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
โฆษณา