Sous-routine arpupdate

Objectif

Met à jour les entrées arp pour une adresse IP donnée.

Syntaxe

int arpupdate (ac, m, hp, action, prm) 
      register struct arpcom *ac; 
      struct mbuf *m; 
      caddr_t hp; 
      int action; 
      struct arpupdate_parm *prm;

Descriptif

La sous-routine arpupdate met à jour les entrées arp pour une adresse IP donnée. Il est appelé par arpinput à partir de la couche IF de l'interface. Cette sous-routine recherche dans la table arp une entrée correspondant à l'adresse IP. Il met ensuite à jour l'entrée arp pour l'adresse IP indiquée. La sous-routine arpupdate effectue également des recherches arp inversées.

La sous-routine arpupdate entre une nouvelle adresse dans arptab, en poussant l'entrée la plus ancienne du compartiment s'il n'y a pas d'espace. Cette sous-routine réussit toujours car aucun compartiment ne peut être complètement rempli avec des entrées permanentes (sauf lorsque arpioctl teste si une autre entrée permanente peut tenir).

Selon l'action spécifiée, les adresses IP prm isaddr, itaddret myaddr sont utilisées par la sous-routine arpupdate .

Paramètres

Article Descriptif
ac Pointe vers la structure arpcom .
m Pointe vers la mémoire tampon (mbuf), qui contient le paquet de réponse arp reçu par l'interface.
hp Pointe vers la mémoire tampon transmise par le gestionnaire d'interruptions.
action Renvoie une valeur qui indique l'action effectuée:
LOOK
Recherche l'adresse IP isaddr dans la table arp et renvoie l'adresse matérielle et la structure if_dependent .
LKPUB
Recherche l'adresse IP isaddr dans la table arp et renvoie l'adresse matérielle et la structure if_dependent uniquement si ATF_PUBL est défini.
MISE A JOUR
Met à jour l'entrée arp pour une adresse IP (isaddr). Si aucune entrée arp n'est présente, crée une nouvelle entrée et met à jour la structure if_dependent à l'aide de la fonction ptr transmise dans la structure prm .
REVARP
Inverse la demande arp. hwaddr contient l'adresse matérielle, szhwaddr indique sa taille et Saddr renvoie l'adresse IP si une entrée est trouvée.
PRM Pointe vers la structure arpudpate_parm . Valeurs possibles :
LOOK ou LKPUB
itaddr et myaddr sont ignorés. isaddr est utilisé pour la recherche de table arp.
MISE A JOUR
isaddr pointe vers l'adresse de protocole de l'expéditeur. itaddr pointe vers l'adresse de protocole cible. myaddr pointe vers l'adresse de protocole de l'interface qui a reçu le paquet.

Valeurs renvoyées

Article Descriptif
ARP_OK La recherche ou la mise à jour a abouti.
ARP_FAIL Echec de la recherche ou de la mise à jour.
ARP_NEWF Impossible de créer une nouvelle entrée arp.