Более известная своей библиотекой wolfSSL SSL/TLS с открытым исходным кодом, компания wolfSSL выпустила стек wolfIP — открытый, легковесный стек TCP/IP без динамического выделения памяти (например, без вызовов malloc), предназначенный для ресурсо-ограниченных встроенных систем.
Компания подчеркивает, что wolfIP «поддерживает как режим конечной точки, так и полную поддержку нескольких интерфейсов с опциональной IP-маршрутизацией. По умолчанию он работает как сетевая конечная точка, но может быть сконфигурирован для передачи трафика между несколькими сетевыми интерфейсами».
Ключевые особенности wolfIP:
- BSD-подобный, неблокирующий сокетный API с пользовательскими обратными вызовами
- Без динамического выделения памяти
- Фиксированное количество одновременных сокетов
- Предварительно выделенные буферы для обработки пакетов в статической памяти
- Параметры настраиваются в файле config.h:
#define MAX_TCPSOCKETS 4 #define MAX_UDPSOCKETS 2 #define MAX_ICMPSOCKETS 2 #define RXBUF_SIZE (20 * 1024) #define TXBUF_SIZE (32 * 1024)[Format Time: 0.0001 seconds]
- Протоколы
- Канальный уровень (Data Link) – Инкапсуляция кадров IEEE 802.3 Ethernet II, разрешение адресов ARP, запрос/ответ
- Сетевой уровень (Network)
- Доставка IPv4
- Опциональная маршрутизация IPv4 с поддержкой нескольких интерфейсов
- Эхо-запрос/ответ ICMP
- IPsec
- Транспортный уровень (Transport) – Протоколы UDP и TCP
- Прикладной уровень (Applications) – DHCP (только клиент), DNS (только клиент) и HTTP/HTTPS (с использованием wolfSSL)
- VPN – wolfGuard Реализация WireGuard, соответствующая стандарту FIPS (P-256, AES-256-GCM, SHA-256); примечание: НЕ совместима со стандартными пирами WireGuard.
- Доступен порт для FreeRTOS
Микроконтроллеры и микропроцессоры, используемые во встроенных системах, не только имеют ограниченные ресурсы, но часто лишены блоков управления памятью и предлагают ограниченное пространство кучи, что делает динамическое выделение сложной задачей, которая часто может приводить к сбоям. Устранение необходимости в malloc может сделать систему значительно более стабильной.
Исходный код (C код), лицензированный под лицензией GPLv3, документацию по API (docs/API.md), руководство по использованию wolfIP на микроконтроллерах STM32 с Ethernet с использованием STM32CubeMX и пакета wolfIP CMSIS, а также инструменты можно найти на GitHub . Для предпочитающих язык программирования Rust или нуждающихся в поддержке IPv6, библиотека smoltcp также может быть сконфигурирована без использования выделения памяти.
Выражаем свою благодарность источнику, с которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.

