next up previous contents
Next: Gestion des Threads et Up: Noyau Previous: Affichage des paquets   Contents

Envoie des paquets

Lorsqu'un paquet arrive, nous structurons la donnée à l'aide de types définissant les entêtes des paquets. Nous n'avions aucune idée precise de la forme des paquets à leur arrivée, puisque c'est l'opérateur de coercition (TypeCast) qui convertissait dans notre type structuré.
Aussi, pour renvoyer un paquet filtré, des modifications sont faites dessus, sous sa forme structurée, puis il est déstructuré afin d'être renvoyé. Mais sous quelle forme le déstructurer, puisqu'à l'origine nous recevons seulement un pointeur non typé sur la donnée ?
Après de multiples recherches, nous avons découvert qu'il s'agissait tout simplement d'une zone mémoire basique référencée par un pointeur non typé. Les modifications sont faites sur cette zone mémoire à l'aide de pointeurs typés retournés par l'opérateur de coercition.
Enfin, le paquet déstructuré est renvoyé sur la seconde interface. Pour cela, nous avons créé une procedure utilisant les fonctions de la librairie Packet.dll, permettant ainsi d'envoyer un paquet facilement. Cette procédure n'a pas été facile à réaliser.
Les modifications faites sur chaque paquet concernent les adresses Mac et IP (dans le sens de réception, il s'agit du destinataire, et dans le sens de l'envoi de l'expéditeur), et le calcul des Checksum.
Après de nombreuses difficultés, notre algorithme sur le calcul du Checksum IP a pu être réalisé, ceux des entêtes sousjascentes telles que TCP, UDP, et ICMP nous elle aussi données du fil à retordre.
Remarque :

next up previous contents
Next: Gestion des Threads et Up: Noyau Previous: Affichage des paquets   Contents
root 2002-06-23