Previous Up Next

5  Programmation système

Vous allez programmer votre simulateur piur analyser les paquets TCP/IP reçus et en générer d’autres. Sauvez votre main.c du chenillard dans un sous-répertoire, repartez d’un fichier main.c vierge. N’oubliez pas d’ajouter votre sous-répertoire dans votre archive GIT.

5.1  Protocole SLIP

L’utilitaire slattach est configuré pour utiliser le protocole SLIP. Ce protocole permet de marquer la fin des paquets avec l’octet de valeur 0xc0.

A remarquer que le protocole SLIP de Linux met un 0xc0 aussi en début de paquet. Vous pouvez donc tomber sur deux 0xc0 de suite. Dans ce cas il ne faut pas penser avoir reçu un paquet vide.

Si ce caractère est présent dans le paquet lui-même, il est remplacé par les deux caractères 0xdb et 0xdc. Si le caractère d’échappement 0xdb est présent dans le paquet il est remplacé par les deux caractères 0xdb et 0xdd.

Commencez par mettre en place dans la fonction SerialInHandler, le décodage des paquets SLIP reçus, en suivant le protocole inverse de celui que nous venons d’expliquer. Affichez le contenu et la taille des paquets après décodage (vous pouvez utilisez le format %02x de printf pour afficher chaque octet). Vérifiez à l’aide de l’utilitaire ping. La taille indiquée après décodage doit correspondre à celle indiquée par ping (typiquement 84 octets).

5.2  Réception d’un paquet UDP

Une fois le protocole SLIP géré, il faut traiter le paquet IPv4, contenant lui même un paquet UDP. Les premiers octets du paquet décodé contiennent donc les entêtes IPv4, viennent ensuite les entêtes UDP, puis enfin les données du paquet UDP.

Pour contrôler les LEDs de la plateforme nous allons nous baser sur ces données UDP.

Commencez par vérifier que le paquet reçu est un paquet UDP vous concernant :

Si le paquet est le paquet UDP attendu, prenez les octets de données et effectuez l’action correspondante sur les LEDs.

Vous pouvez tester votre programme en utilisant la commande Unix ci-dessous :

echo -en "\xff" | nc -q0 -u <adresse IP plateforme> <port UDP>

5.3  Envoi d’un paquet UDP

Sur réception d’un paquet UDP particulier, par exemple sur un second port UDP, votre plateforme doit renvoyer un paquet UDP sur le même port avec comme données l’état des boutons de la plateforme.

Vous devez donc constituer un paquet IPv4 contenant un paquet UDP contenant les données. Ce paquet doit être envoyé sur le port série en utilisant le protocole SLIP. N’oubliez pas de calculer la somme de contrôle IPv4 et éventuellement la somme de contrôle UDP.

Vous pouvez tester votre programme en utilisant la commande Unix ci-dessous :

nc -u -l -p <port UDP> | od -tx1 -w1

Previous Up Next