diff --git a/src/netif/etharp.c b/src/netif/etharp.c index 8f241e42..eabc23ab 100644 --- a/src/netif/etharp.c +++ b/src/netif/etharp.c @@ -3,6 +3,9 @@ * Address Resolution Protocol module for IP over Ethernet * * $Log: etharp.c,v $ + * Revision 1.22 2003/01/13 09:38:21 jani + * remove global ctime.Each entry's ctime is now absolute.This avoids wrapping and also solves naming clash reported on the list + * * Revision 1.21 2003/01/08 11:04:36 likewise * Moved ETHARP_ALWAYS_INSERT switch to lwipopts.h * @@ -137,7 +140,6 @@ struct etharp_entry { static const struct eth_addr ethbroadcast = {{0xff,0xff,0xff,0xff,0xff,0xff}}; static struct etharp_entry arp_table[ARP_TABLE_SIZE]; -static u8_t ctime; static struct pbuf *update_arp_entry(struct netif *netif, struct ip_addr *ipaddr, struct eth_addr *ethaddr, u8_t flags); #define ARP_INSERT_FLAG 1 @@ -156,8 +158,6 @@ etharp_init(void) arp_table[i].p = NULL; #endif } - /* reset ARP current time */ - ctime = 0; } /** @@ -171,12 +171,12 @@ etharp_tmr(void) { u8_t i; - ++ctime; DEBUGF(ETHARP_DEBUG, ("etharp_timer\n")); /* remove expired entries from the ARP table */ for(i = 0; i < ARP_TABLE_SIZE; ++i) { + arp_table[i].ctime++; if((arp_table[i].state == ETHARP_STATE_STABLE) && - (ctime - arp_table[i].ctime >= ARP_MAXAGE)) { + (arp_table[i].ctime >= ARP_MAXAGE)) { DEBUGF(ETHARP_DEBUG, ("etharp_timer: expired stable entry %u.\n", i)); arp_table[i].state = ETHARP_STATE_EMPTY; #if ARP_QUEUEING @@ -185,7 +185,7 @@ etharp_tmr(void) arp_table[i].p = NULL; #endif } else if((arp_table[i].state == ETHARP_STATE_PENDING) && - (ctime - arp_table[i].ctime >= ARP_MAXPENDING)) { + (arp_table[i].ctime >= ARP_MAXPENDING)) { arp_table[i].state = ETHARP_STATE_EMPTY; #if ARP_QUEUEING DEBUGF(ETHARP_DEBUG, ("etharp_timer: expired pending entry %u - dequeueing %p.\n", i, (void *)(arp_table[i].p))); @@ -227,8 +227,8 @@ find_arp_entry(void) for(i = 0; i < ARP_TABLE_SIZE; ++i) { /* remember entry with oldest stable entry in j*/ if((arp_table[i].state == ETHARP_STATE_STABLE) && - (ctime - arp_table[i].ctime > maxtime)) { - maxtime = ctime - arp_table[i].ctime; + (arp_table[i].ctime > maxtime)) { + maxtime = arp_table[i].ctime; j = i; } } @@ -289,8 +289,8 @@ update_arp_entry(struct netif *netif, struct ip_addr *ipaddr, struct eth_addr *e for(k = 0; k < 6; ++k) { arp_table[i].ethaddr.addr[k] = ethaddr->addr[k]; } - /* time stamp */ - arp_table[i].ctime = ctime; + /* reset time stamp */ + arp_table[i].ctime = 0; #if ARP_QUEUEING /* queued packet present? */ if(arp_table[i].p != NULL) { @@ -346,8 +346,8 @@ update_arp_entry(struct netif *netif, struct ip_addr *ipaddr, struct eth_addr *e for(k = 0; k < 6; ++k) { arp_table[i].ethaddr.addr[k] = ethaddr->addr[k]; } - /* time-stamp */ - arp_table[i].ctime = ctime; + /* reset time-stamp */ + arp_table[i].ctime = 0; /* mark as stable */ arp_table[i].state = ETHARP_STATE_STABLE; /* no queued packet */ @@ -698,7 +698,7 @@ struct pbuf *etharp_query(struct netif *netif, struct ip_addr *ipaddr, struct pb DEBUGF(ETHARP_DEBUG, ("etharp_query: created ARP table entry.\n")); /* i is available, create ARP entry */ ip_addr_set(&arp_table[i].ipaddr, ipaddr); - arp_table[i].ctime = ctime; + arp_table[i].ctime = 0; arp_table[i].state = ETHARP_STATE_PENDING; #if ARP_QUEUEING arp_table[i].p = NULL;