Sous-routine arpresolve_common

Objectif

Lève ou crée de nouvelles entrées arp de sorte que les adresses matérielles puissent être résolues.

Syntaxe

int  arpresolve_common ( ac, m, arpwhohas, dst, hwaddr, szhwaddr, extra, if_dependent)

		register struct arpcom *ac;
		struct mbuf *m; 
		int (*arpwhohas)(register struct arpcom *ac, 
                       struct in_addr *addr, int skipbestif, void *extra), 
		struct sockaddr_in *dst; 
		u_char * hwaddr; 
		int szhwaddr; 
		void *extra; 
		union if_dependent *if_dependent;

Descriptif

La sous-routine Arpresolve_common lit ou crée de nouvelles entrées arp de sorte que les adresses matérielles puissent être résolues. Il est appelé par Arpresolve à partir de la couche IF de l'interface. Si l'entrée arp est terminée, Arpresolve_common renvoie l'adresse pointé par Hwaddr et les données pointé par Si_dépendant si Si_dépendant est vrai. Si l'entrée arp n'est pas terminée, cette sous-routine ajoute la mémoire tampon pointé par Mbuf à At_hold. At_hold contient un ou plusieurs paquets en attente de la fin de l'entrée arp afin qu'ils puissent être transmis.

Si une entrée arp n'existe pas, Arpresolve_common crée une nouvelle entrée en appelant Arptnew , puis ajoute la mémoire tampon pointé par Mbuf à At_hold. Ce sous-programme appelle Arpwhohas lorsqu'il crée une nouvelle entrée arp ou lorsque le temporisateur de l'entrée arp incomplète (avec l'adresse IP pointé par Dst) est arrivé à expiration.

Paramètres

Article Descriptif
ac Pointe vers la structure Arpcom .
m Pointe vers la mémoire tampon (Mbuf), qui sera ajoutée à la liste en attente de l'achèvement de l'entrée de la table arp.
Arpwhohas Pointe vers le sous-programme Arpwhohas .
ADDR Pointe vers l'adresse de la structure Un_addr .
Excédentaires Pointeur de vide qui peut être utilisé à l'avenir pour que les couches IF puissent transmettre des structures supplémentaires à Arpwhohas.
DST Pointe vers la structure Sockaddr_in . Cette structure a l'adresse IP de destination.
Hwaddr Pointe vers la mémoire tampon. Cette mémoire tampon contient l'adresse matérielle si elle trouve une entrée terminée.
Szhwaddr Taille de la mémoire tampon pointé par Hwaddr.
Si_dépendant Pointeur vers la structure Si_dépendant . Arpresolve_common utilise cette fonction pour transmettre les données Si_dépendant , qui font partie de l'entrée Arptab , à la fonction appelante.

Valeurs renvoyées

Article Descriptif
ARP_MBUF L'entrée arp n'est pas terminée.
ARP_HWADDR La mémoire tampon Hwaddr est remplie avec l'adresse matérielle.
ARP_FLG_NOARP L'entrée arp n'existe pas et l'indicateur IFF_NOARP n'est défini que si la valeur de Type_if_if est IFT_ETHER.