1 pontos por GN⁺ 2024-09-08 | 1 comentários | Compartilhar no WhatsApp

Visão geral do lwIP

Introdução
  • lwIP é uma implementação independente de uma pequena pilha de protocolos TCP/IP
  • O foco é manter um TCP completo enquanto reduz o uso de RAM
  • É adequado para uso em sistemas embarcados e requer algumas dezenas de kilobytes de RAM e cerca de 40 kilobytes de ROM de código
  • Foi originalmente desenvolvido por Adam Dunkels e atualmente é mantido por uma rede global de desenvolvedores
Funcionalidades
  • IP (Protocolo de Internet, IPv4 e IPv6): inclui encaminhamento de pacotes entre várias interfaces de rede
  • ICMP (Protocolo de Mensagens de Controle da Internet): manutenção e depuração de rede
  • IGMP (Protocolo de Gerenciamento de Grupos da Internet): gerenciamento de tráfego multicast
  • MLD (Multicast Listener Discovery): para IPv6, com meta de conformidade com a RFC 2710
  • ND (Neighbor Discovery e autoconfiguração de endereço stateless): com meta de conformidade com as RFC 4861 e RFC 4862
  • DHCP, AutoIP/APIPA (Zeroconf) e DHCPv6 (stateless)
  • UDP (Protocolo de Datagrama do Usuário): inclui a extensão experimental UDP-lite
  • TCP (Protocolo de Controle de Transmissão): controle de congestionamento, estimativa de RTT, fast recovery/fast retransmit e transmissão SACK
  • API bruta/nativa: melhor desempenho
  • API de soquetes opcional semelhante à Berkeley
  • TLS: camada TCP opcional ("altcp") para TLS quase transparente (portado para mbedTLS)
  • PPPoS e PPPoE (Point-to-Point Protocol sobre serial/Ethernet)
  • DNS (resolvedor de nomes de domínio, incluindo mDNS)
  • 6LoWPAN (via IEEE 802.15.4, BLE ou ZEP)
Aplicações
  • Servidor HTTP: inclui SSI e CGI (HTTPS via altcp)
  • Agente SNMPv2c: inclui compilador MIB, com suporte a v3 via altcp
  • SNTP (Simple Network Time Protocol)
  • Respondedor de serviço de nomes NetBIOS
  • Respondedor MDNS (Multicast DNS)
  • Implementação de servidor iPerf
  • Cliente MQTT: suporte a TLS disponível via altcp
Licença
  • O lwIP é oferecido gratuitamente sob a licença BSD
Desenvolvimento
  • O lwIP evoluiu para uma excelente pilha TCP/IP para dispositivos embarcados
  • Desenvolvedores enviam correções de bugs, melhorias e recursos adicionais, aumentando ainda mais a utilidade da pilha
  • O desenvolvimento é hospedado no Savannah, e qualquer pessoa pode contribuir para melhorar o lwIP por meio de Git e listas de discussão
  • A pilha TCP/IP lwIP é mantida no módulo Git lwip, e as contribuições ficam no módulo Git contrib
  • Para detalhes sobre acesso ao servidor Git, consulte doc/savannah.txt
  • A árvore Git atual pode ser navegada na web: lwip, lwip-contrib
  • Envio de patches e bugs: página do projeto lwIP
  • Build de integração contínua: Travis CI
Documentação

Resumo do GN⁺

  • O lwIP fornece uma pilha TCP/IP eficiente para sistemas embarcados, minimizando o uso de memória
  • Suporta diversos protocolos de rede e aplicações, oferecendo flexibilidade e escalabilidade
  • Continua sendo aprimorado graças à participação ativa da comunidade de desenvolvedores
  • Projetos com funcionalidades semelhantes incluem FreeRTOS+TCP, uIP e outros

1 comentários

 
GN⁺ 2024-09-08
Comentários do Hacker News
  • Há alguns anos, usei o LwIP em um projeto para realizar testes de sistema de forma eficaz

    • Era um projeto em que vários microcontroladores se comunicavam por uma LAN interna
    • Usava um kernel embarcado chamado MicroCOS e a pilha IP do LwIP
    • Configurei ferramentas de build multiplataforma para compilar e executar nativamente ou como código x64, permitindo rodar na máquina do desenvolvedor
    • Implementei em mock a parte da camada de enlace mais baixa do LwIP para usar TCP/IP padrão
    • Escrevi um pequeno servidor TCP para que a aplicação do microcontrolador se comunicasse na máquina do desenvolvedor como se fosse o sistema real
    • Essa configuração funcionou muito bem e foi usada por anos durante o desenvolvimento do projeto
  • Chamar isso de pilha IP é até subestimar

    • Pode ser usado como cliente HTTP, servidor HTTP ou cliente MQTT
    • É como o busybox do networking embarcado, mas com uma licença muito mais conveniente
  • Para quem procura opções como o LwIP, recomendo considerar o NetXDuo e seus equivalentes ThreadX, FileX, LevelX e UsbX

    • É uma das pilhas de rede para RTOS comerciais usada há 20 anos
    • Mudou de proprietário algumas vezes e hoje é mantida pela Eclipse Foundation com licença MIT
    • Eu recomendaria usar NetXDuo em vez de LwIP
    • Link do NetXDuo
  • Adam Dunkels escreveu a maior parte do Protothreads

  • Fico curioso sobre o que é nongnu.org e como ele se relaciona com gnu.org

    • savannah.gnu.org é o site de hospedagem para software GNU “oficial” patrocinado pela Free Software Foundation
    • savannah.nongnu.org é o site de hospedagem para projetos “da comunidade” que não são patrocinados pela FSF
    • Link relacionado
  • Parece ser a pilha TCP/IP mais usada em dispositivos com recursos limitados

  • O que eu gosto no LWIP é que ele permite usar o mesmo bloco de memória alocado pelo Ethernet MAC DMA durante toda a vida útil do pacote

    • Dá para otimizar os "pools" de memória e reduzir o número de memcpy
  • Para quem quer implementar sua própria pilha leve de TCP/IP, o livro <i>TCP/IP Lean</i>, de Jeremy Bentham, é um excelente recurso

  • Trecho do artigo:

    • "Isso torna o lwIP adequado para uso em sistemas embarcados com algumas dezenas de kilobytes de RAM livre e cerca de 40 kilobytes de ROM de código"
  • O Pico W usa isso