wolfIP – открытый, легковесный стек TCP/IP без динамического выделения памяти для встроенных систем

Более известная своей библиотекой wolfSSL SSL/TLS с открытым исходным кодом, компания wolfSSL выпустила стек wolfIP — открытый, легковесный стек TCP/IP без динамического выделения памяти (например, без вызовов malloc), предназначенный для ресурсо-ограниченных встроенных систем.

Компания подчеркивает, что wolfIP «поддерживает как режим конечной точки, так и полную поддержку нескольких интерфейсов с опциональной IP-маршрутизацией. По умолчанию он работает как сетевая конечная точка, но может быть сконфигурирован для передачи трафика между несколькими сетевыми интерфейсами».

wolfip TCP/IP library no memory allocations

Ключевые особенности 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.

Оригинал статьи вы можете прочитать здесь.

0 0 votes
Article Rating
Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 Комментарий
Oldest
Newest Most Voted
Inline Feedbacks
View all comments