Os desenvolvedores da biblioteca criptográfica wolfSSL estão desenvolvendo o stack TCP/IP wolfIP, otimizado para uso em dispositivos embarcados com recursos limitados, assim como para sistemas que operam em tempo real e soluções que exigem alta confiabilidade (Safety-Critical). Para um consumo de recursos previsível, o wolfIP não utiliza alocação de memória dinâmica - todos os buffers e tabelas de soquete têm tamanho fixo e são configuráveis na fase de compilação. O código do projeto é escrito em C e distribuído sob a licença GPLv3.
O projeto pode ser utilizado como um stack TCP/IP funcionando no espaço do usuário, substituindo o stack de rede do Linux, FreeBSD e macOS, e também é aplicável em sistemas embarcados baseados em FreeRTOS, SafeRTOS, Zephyr, Azure RTOS ThreadX, NuttX, RTEMS, VxWorks e QNX. Além disso, aplicações de rede autossustentáveis podem ser criadas com base no wolfIP, executando-se sobre hardware bare-metal. Em combinação com a biblioteca wolfSSL, oferece suporte a TLS 1.3, permitindo a criação de sistemas embarcados compactos que suportam HTTPS.
Principais características do wolfIP:
- Uso de buffers alocados estaticamente para o processamento de pacotes de rede. Chamadas malloc e free não são utilizadas.
- Possibilidade de ser utilizado em vez dos stacks de rede padrão em sistemas POSIX.
- Suporte a sockets BSD em modo bloqueante e não bloqueante.
- Tamanho compacto (4200 linhas de código, 4 vezes menor que o stack TCP/IP lwIP).
- Suporte a interfaces de rede STM32 Ethernet.
- Possibilidade de uso de uma interface de rede TAP para testar a operação sem hardware.
- Desenvolvimento focado em sistemas com altas exigências de segurança: configuração determinística e reproduzível; modelo de implantação que assegura segurança (Secure-by-default); isolamento entre componentes. Suporte a atualizações seguras de versões; longa manutenção.
- Consideração das exigências para sistemas altamente confiáveis: ausência de alocação dinâmica de recursos; pools de memória fixos; uso controlado de recursos; comportamento previsível; arquitetura simplificada; suporte à geração de artefatos para verificação.
- Implementação de IPv4, UDP, TCP, IPSEC, ARP, ICMP, cliente DHCP, cliente DNS e servidor HTTP/HTTPS. Suporte à implementação do TCP RFC 7323 (Carimbos de Tempo TCP, medição RTT, PAWS, Escalonamento de Janela), MSS (Tamanho Máximo de Segmento), RTO (tempo limite de retransmissão) e SACK (Reconhecimento Seletivo). Vários algoritmos de controle de congestionamento.
Entre as limitações do wolfIP, destaca-se a possibilidade de uso do wolfIP apenas como um nó final capaz de receber e estabelecer conexões, mas sem suporte para roteamento de tráfego entre interfaces de rede.
Além disso, merece destaque o desenvolvimento ativo por um funcionário da Red Hat de uma pilha TCP/IP semelhante chamada passt, que opera no espaço do usuário e não utiliza alocação dinâmica de memória. O projeto passt está sendo desenvolvido para organizar um canal de comunicação entre o ambiente host e os sistemas convidados no QEMU como uma substituição mais segura ao libslirp. O código do passt é escrito em C, possui cerca de 5000 linhas e é distribuído sob a licença GPLv2+.
Entre as características do passt, podemos destacar: suporte a IPv6 além do IPv4, otimizações baseadas em instruções AVX2, proteção contra synflood, suporte integrado ao QEMU, libvirt e Podman, pacotes para todas as distribuições populares, serviço de proxy ARP, servidores DHCPD, DHCPv6 e NDP minimalistas, perfil seccomp para bloquear todas as chamadas de sistema não utilizadas, suporte à NAT e a possibilidade de uso como uma substituição transparente ao slirp4netns.
Fonte: opennet.ru
