Next: Requêtes et réponses ARP
Up: Gestion des Threads et
Previous: Quelques détails sur les
  Contents
Nous avons donc pensé à une structure chaînée, qui nous permettrait avec
une espace de mémoire restreint de pointer vers autant de paquets qu'il
est nécessaire. Mais comment organiser cette structure? L'idée principale
est de conserver l'ordre des paquets, c'est une 'file d'attente'. Nous avons
donc recréé une file (FIFO) chaînée. Mais cette structure de file doit suivre
certaines particularités. Premièrement, vu que ces files seront utilisées par
des threads, il pourra se produire le cas ou deux threads voudront accéder en
même temps à la même file, ce qui entraînerait une perte définitive de la
tête par exemple.
Pour résoudre ce problème , chaque file est sécurisée par un
booléen, qui fait parti de l'enregistrement qui contient :
- la tête de la file
- un booléen qui indique si la file est en cours d'utilisation ou pas
- la taille de la file
La taille de la file permet de limiter et de contrôler un flux de données
trop important. Dans ce cas précis, il pourra s'opérer la destruction totale
de la file pour éviter un débordement de mémoire ou tout autre problème.
Mais ce n'est pas la seule raison, le scanner de port et le trace-route,
nouvellement ajouté au projet, bénéficient de ce fonctionnement. Lorsque le
scanner (réciproquement trace-route) devra envoyer un paquet, il lui suffira
de l'ajouter dans la file d'envoi. De plus, lorsque notre filtre détectera un
paquet pour le scanner (réciproquement trace-route), il lui sera transmis via
la file du scanner (réciproquement trace-route). Bien sûr, ces deux nouveaux
outils vous seront détaillés par la suite.
Nous avons donc utilisé à plusieurs reprises cette file : premièrement pour
stocker les paquets erronés, et deuxièmement, pour les réponses du scanner
et du trace-route.
- Le type file_securise :
il s'agit d'un enregistrement qui contient
un pointeur vers le noeud de fin de file, le booléen qui dit si la file
est bloquée, un troisième champ qui indique la taille de la file.
- Le type file est un pointeur sur le type noeud.
- Le type noeud est un enregistrement qui contient un pointeur sur
le paquet, la taille du paquet, et son précédent.
Nous n'avions aucun intérêt à parcourir ces files. Nous avons donc fait au
plus économique de façon à ce que les fonctions Enfiler et Défiler soient
très courtes.
Au debut de chacune des fonctions, tant que la file est bloquée,
on ne fait rien. Dès qu'elle est débloquée, la fonction bloque la
file à son tour. A la fin de chaque fonction, la file est
débloquée.
Next: Requêtes et réponses ARP
Up: Gestion des Threads et
Previous: Quelques détails sur les
  Contents
root
2002-06-23