Serveur/client TCP/IP dans un FPGA Xilinx utilisant l'API RAW de LwIP 2.00.a (0.7.2)
Table des matières
Introduction
LwIP
LwIP est une pile réseau dont l'empreinte mémoire est très faible, ce qui la rend idéale pour les systèmes embarqués.La licence utilisée par le projet LwIP est du même type que la licence BSD, ce qui dans notre cas nous permet de créer un produit propriétaire sans être obligé de redistribuer les sources. Attention, il existe tout de même des clauses à respecter, et j'invite donc le lecteur à en prendre connaissance.
Il faut savoir que LwIP est utilisé par un très grand nombre de projets libres et propriétaires, et que des améliorations sont donc constamment apportées. De plus, elle a été conçue de telle manière qu'elle soit extrêmement portable ce qui la rend idéale pour la réutilisation de projet.
Toutes ces raisons font que nous avons choisi de développer nos applications réseau avec LwIP plutôt qu'avec Xilnet. De plus Xilnet ne possède pas de fonctions TCP "client" ce qui nous conforte dans notre choix.
LwIP possède trois API de programmation :
- l'API RAW qui fonctionne grâce à un système de callbacks, c'est à dire grâce à des fonctions qui sont appelées par leurs pointeurs, cela permet de limiter la copie de données et donc de réduire l'empreinte mémoire dynamique. C'est celle que nous avons choisie.
- l'API NetConn qui est du plus au niveau, mais qui n'est absolument pas documenté par Xilinx ni même référencé dans la boite de dialogue "Software Platform Settings", mais qui semble tout de même être présent dans la bibliothèque...
- l'API BSD qui est proche de ce que connaissent les développeurs réseau sous Unix, et nécessite XilKernel. Si nous avons réellement besoin de cette API, peut-être qu'il serait plus pratique d'utiliser un noyau Linux (pas pour la taille, mais plutôt pour la souplesse) ...
Le projet
Ce projet fourni un exemple d'implémentation d'un serveur et d'un client TCP avec LwIP. Tout ce qui concerne la configuration se trouve dans le fichier config.h. Ainsi, on peut configurer le serveur pour qu'il écoute sur le port 80, et se connecter dessus avec un client HTTP (Firefox, Netscape, Opera, Internet Explorer, ...). Etant donné que ce serveur ne fait rien d'autre que de renvoyer ce qu'il reçoit, on verra alors la requète HTTP s'afficher sur notre navigateur.En ce qui concerne le client, il ne fait rien d'autre que d'envoyer le nom de l'entreprise "SMP". Pour voir facilement le résultat, il suffit de configurer un serveur sur notre ordinateur. Prenons par exemple NetCat :
nc.exe -s 149.199.6.132 -p 1302 -l
Attention à ne pas confondre le serveur et le client dans le code...