1 points par GN⁺ 2024-09-08 | 1 commentaires | Partager sur WhatsApp

Présentation de lwIP

Introduction
  • lwIP est une implémentation indépendante d’une petite pile de protocoles TCP/IP
  • Elle met l’accent sur la réduction de l’utilisation de la RAM tout en conservant un TCP complet
  • Elle convient à une utilisation dans les systèmes embarqués et nécessite quelques dizaines de kilo-octets de RAM ainsi qu’environ 40 kilo-octets de ROM de code
  • Développé à l’origine par Adam Dunkels, le projet est aujourd’hui maintenu par un réseau mondial de développeurs
Fonctionnalités
  • IP (Internet Protocol, IPv4 et IPv6) : y compris le transfert de paquets entre plusieurs interfaces réseau
  • ICMP (Internet Control Message Protocol) : maintenance et débogage du réseau
  • IGMP (Internet Group Management Protocol) : gestion du trafic multicast
  • MLD (Multicast Listener Discovery) : pour IPv6, avec l’objectif de conformité à la RFC 2710
  • ND (Neighbor Discovery et autoconfiguration d’adresse sans état) : avec l’objectif de conformité aux RFC 4861 et RFC 4862
  • DHCP, AutoIP/APIPA (Zeroconf) et DHCPv6 (sans état)
  • UDP (User Datagram Protocol) : avec l’extension expérimentale UDP-lite
  • TCP (Transmission Control Protocol) : contrôle de congestion, estimation RTT, fast recovery/fast retransmit et transmission SACK
  • API brute/native : amélioration des performances
  • API de sockets optionnelle de type Berkeley
  • TLS : couche TCP optionnelle ("altcp") pour un TLS presque transparent (porté sur mbedTLS)
  • PPPoS et PPPoE (Point-to-Point Protocol sur série/Ethernet)
  • DNS (résolveur de noms de domaine, avec mDNS)
  • 6LoWPAN (via IEEE 802.15.4, BLE ou ZEP)
Applications
  • Serveur HTTP : avec SSI et CGI (HTTPS via altcp)
  • Agent SNMPv2c : avec compilateur MIB, v3 pris en charge via altcp
  • SNTP (Simple Network Time Protocol)
  • Répondeur de nom NetBIOS
  • Répondeur MDNS (Multicast DNS)
  • Implémentation de serveur iPerf
  • Client MQTT : prise en charge de TLS possible via altcp
Licence
  • lwIP est disponible gratuitement sous licence BSD
Développement
  • lwIP est devenu une excellente pile TCP/IP pour les appareils embarqués
  • Les développeurs soumettent des corrections de bugs, des améliorations et des fonctionnalités supplémentaires, ce qui renforce encore l’utilité de la pile
  • Le développement est hébergé sur Savannah, et chacun peut contribuer à l’amélioration de lwIP via Git et les mailing lists
  • La pile TCP/IP lwIP est maintenue dans le module Git lwip, et les contributions se trouvent dans le module Git contrib
  • Pour plus de détails sur l’accès au serveur Git, voir doc/savannah.txt
  • L’arborescence Git actuelle peut être consultée sur le Web : lwip, lwip-contrib
  • Soumission de patchs et de bugs : page du projet lwIP
  • Builds d’intégration continue : Travis CI
Documentation

Le résumé de GN⁺

  • lwIP fournit une pile TCP/IP efficace pour les systèmes embarqués, en minimisant l’utilisation de la mémoire
  • Il prend en charge divers protocoles réseau et applications, offrant flexibilité et extensibilité
  • Il est continuellement amélioré grâce à la participation active de la communauté de développeurs
  • Parmi les projets aux fonctionnalités similaires figurent FreeRTOS+TCP, uIP, etc.

1 commentaires

 
GN⁺ 2024-09-08
Avis sur Hacker News
  • Il y a quelques années, j’ai utilisé LwIP dans un projet pour effectuer efficacement les tests du système

    • C’était un projet où plusieurs microcontrôleurs communiquaient via un LAN interne
    • Nous utilisions un noyau embarqué appelé MicroCOS et la pile IP LwIP
    • Nous avons configuré un outil de build cross-platform pour permettre une exécution native ou une compilation en code x64 afin de l’exécuter sur les machines des développeurs
    • Nous avons simulé la partie la plus basse de la couche liaison de LwIP pour utiliser le TCP/IP standard
    • Nous avons écrit un petit serveur TCP afin que l’application du microcontrôleur puisse communiquer sur la machine du développeur comme sur le système réel
    • Cette configuration a très bien fonctionné et a été utilisée pendant des années tout au long du développement du projet
  • Dire que c’est une pile IP est réducteur

    • Elle peut servir de client HTTP, de serveur HTTP ou de client MQTT
    • C’est un peu le busybox du networking embarqué, mais avec une licence bien plus pratique
  • À ceux qui cherchent des options comme LwIP, je recommande aussi d’examiner NetXDuo et ses équivalents ThreadX, FileX, LevelX et UsbX

    • C’est l’une des piles réseau pour RTOS commercial les plus utilisées depuis 20 ans
    • Le projet a changé plusieurs fois de propriétaire, est aujourd’hui soutenu par l’Eclipse Foundation et est sous licence MIT
    • Je recommanderais d’utiliser NetXDuo plutôt que LwIP
    • Lien vers NetXDuo
  • Adam Dunkels a écrit l’essentiel de Protothreads

  • Je me demande ce qu’est nongnu.org et quel est son lien avec gnu.org

    • savannah.gnu.org est le site d’hébergement des logiciels GNU « officiels », soutenu par la Free Software Foundation
    • savannah.nongnu.org est le site d’hébergement des projets « communautaires » qui ne sont pas soutenus par la FSF
    • Lien connexe
  • C’est probablement la pile TCP/IP la plus utilisée sur les appareils aux ressources limitées

  • Ce que j’aime avec LWIP, c’est qu’il permet d’utiliser le même bloc mémoire alloué par l’Ethernet MAC DMA pendant toute la durée de vie du paquet

    • On peut optimiser les « pools » mémoire pour réduire le nombre de memcpy
  • Pour ceux qui veulent implémenter leur propre pile TCP/IP légère, le livre <i>TCP/IP Lean</i> de Jeremy Bentham est une excellente ressource

  • Extrait de l’article :

    • « Cela rend lwIP adapté à une utilisation dans des systèmes embarqués disposant de quelques dizaines de kilo-octets de RAM libre et d’environ 40 kilo-octets de ROM pour le code »
  • Le Pico W utilise cela