|
|
1.1 ! root 1: /* arpfind.c - arpfind */ ! 2: ! 3: #include <conf.h> ! 4: #include <kernel.h> ! 5: #include <proc.h> ! 6: #include <network.h> ! 7: ! 8: /*------------------------------------------------------------------------ ! 9: * arpfind - find or insert entry in ARP cache and return its index ! 10: *------------------------------------------------------------------------ ! 11: */ ! 12: arpfind(faddr) ! 13: IPaddr faddr; ! 14: { ! 15: int i; ! 16: int arindex; ! 17: struct arpent *atabptr; ! 18: ! 19: for (arindex=0; arindex<Arp.atabsiz; arindex++) { ! 20: atabptr = &Arp.arptab[arindex]; ! 21: if (blkequ(atabptr->arp_Iad, faddr, IPLEN) ! 22: && atabptr->arp_state != AR_FREE) ! 23: return(arindex); ! 24: } ! 25: if (Arp.atabsiz < AR_TAB) { ! 26: Arp.atabsiz++; ! 27: } ! 28: arindex = Arp.atabnxt++; ! 29: if (Arp.atabnxt >= AR_TAB) ! 30: Arp.atabnxt = 0; ! 31: atabptr = &Arp.arptab[arindex]; ! 32: atabptr->arp_state = AR_ALLOC; ! 33: blkcopy(atabptr->arp_Iad, faddr, IPLEN); ! 34: for(i=0 ; i<EPADLEN ; i++) ! 35: atabptr->arp_Ead[i] = '\0'; ! 36: atabptr->arp_dev = -1; ! 37: return(arindex); ! 38: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.