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. |