remove global ctime.Each entry's ctime is now absolute.This avoids wrapping and also solves naming clash reported on the list

This commit is contained in:
jani 2003-01-13 09:38:21 +00:00
parent 02a6a8a809
commit 8d7f09fa92

View File

@ -3,6 +3,9 @@
* Address Resolution Protocol module for IP over Ethernet * Address Resolution Protocol module for IP over Ethernet
* *
* $Log: etharp.c,v $ * $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 * Revision 1.21 2003/01/08 11:04:36 likewise
* Moved ETHARP_ALWAYS_INSERT switch to lwipopts.h * 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 const struct eth_addr ethbroadcast = {{0xff,0xff,0xff,0xff,0xff,0xff}};
static struct etharp_entry arp_table[ARP_TABLE_SIZE]; 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); 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 #define ARP_INSERT_FLAG 1
@ -156,8 +158,6 @@ etharp_init(void)
arp_table[i].p = NULL; arp_table[i].p = NULL;
#endif #endif
} }
/* reset ARP current time */
ctime = 0;
} }
/** /**
@ -171,12 +171,12 @@ etharp_tmr(void)
{ {
u8_t i; u8_t i;
++ctime;
DEBUGF(ETHARP_DEBUG, ("etharp_timer\n")); DEBUGF(ETHARP_DEBUG, ("etharp_timer\n"));
/* remove expired entries from the ARP table */ /* remove expired entries from the ARP table */
for(i = 0; i < ARP_TABLE_SIZE; ++i) { for(i = 0; i < ARP_TABLE_SIZE; ++i) {
arp_table[i].ctime++;
if((arp_table[i].state == ETHARP_STATE_STABLE) && 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)); DEBUGF(ETHARP_DEBUG, ("etharp_timer: expired stable entry %u.\n", i));
arp_table[i].state = ETHARP_STATE_EMPTY; arp_table[i].state = ETHARP_STATE_EMPTY;
#if ARP_QUEUEING #if ARP_QUEUEING
@ -185,7 +185,7 @@ etharp_tmr(void)
arp_table[i].p = NULL; arp_table[i].p = NULL;
#endif #endif
} else if((arp_table[i].state == ETHARP_STATE_PENDING) && } 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; arp_table[i].state = ETHARP_STATE_EMPTY;
#if ARP_QUEUEING #if ARP_QUEUEING
DEBUGF(ETHARP_DEBUG, ("etharp_timer: expired pending entry %u - dequeueing %p.\n", i, (void *)(arp_table[i].p))); 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) { for(i = 0; i < ARP_TABLE_SIZE; ++i) {
/* remember entry with oldest stable entry in j*/ /* remember entry with oldest stable entry in j*/
if((arp_table[i].state == ETHARP_STATE_STABLE) && if((arp_table[i].state == ETHARP_STATE_STABLE) &&
(ctime - arp_table[i].ctime > maxtime)) { (arp_table[i].ctime > maxtime)) {
maxtime = ctime - arp_table[i].ctime; maxtime = arp_table[i].ctime;
j = i; 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) { for(k = 0; k < 6; ++k) {
arp_table[i].ethaddr.addr[k] = ethaddr->addr[k]; arp_table[i].ethaddr.addr[k] = ethaddr->addr[k];
} }
/* time stamp */ /* reset time stamp */
arp_table[i].ctime = ctime; arp_table[i].ctime = 0;
#if ARP_QUEUEING #if ARP_QUEUEING
/* queued packet present? */ /* queued packet present? */
if(arp_table[i].p != NULL) { 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) { for(k = 0; k < 6; ++k) {
arp_table[i].ethaddr.addr[k] = ethaddr->addr[k]; arp_table[i].ethaddr.addr[k] = ethaddr->addr[k];
} }
/* time-stamp */ /* reset time-stamp */
arp_table[i].ctime = ctime; arp_table[i].ctime = 0;
/* mark as stable */ /* mark as stable */
arp_table[i].state = ETHARP_STATE_STABLE; arp_table[i].state = ETHARP_STATE_STABLE;
/* no queued packet */ /* 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")); DEBUGF(ETHARP_DEBUG, ("etharp_query: created ARP table entry.\n"));
/* i is available, create ARP entry */ /* i is available, create ARP entry */
ip_addr_set(&arp_table[i].ipaddr, ipaddr); 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; arp_table[i].state = ETHARP_STATE_PENDING;
#if ARP_QUEUEING #if ARP_QUEUEING
arp_table[i].p = NULL; arp_table[i].p = NULL;