/[lwip]/lwip/src/netif/etharp.c
ViewVC logotype

Diff of /lwip/src/netif/etharp.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.21 by likewise, Wed Jan 8 11:04:36 2003 UTC revision 1.22 by jani, Mon Jan 13 09:38:21 2003 UTC
# Line 3  Line 3 
3   * Address Resolution Protocol module for IP over Ethernet   * Address Resolution Protocol module for IP over Ethernet
4   *   *
5   * $Log$   * $Log$
6     * Revision 1.22  2003/01/13 09:38:21  jani
7     * remove global ctime.Each entry's ctime is now absolute.This avoids wrapping and also solves naming clash reported on the list
8     *
9   * Revision 1.21  2003/01/08 11:04:36  likewise   * Revision 1.21  2003/01/08 11:04:36  likewise
10   * Moved ETHARP_ALWAYS_INSERT switch to lwipopts.h   * Moved ETHARP_ALWAYS_INSERT switch to lwipopts.h
11   *   *
# Line 137  struct etharp_entry { Line 140  struct etharp_entry {
140    
141  static const struct eth_addr ethbroadcast = {{0xff,0xff,0xff,0xff,0xff,0xff}};  static const struct eth_addr ethbroadcast = {{0xff,0xff,0xff,0xff,0xff,0xff}};
142  static struct etharp_entry arp_table[ARP_TABLE_SIZE];  static struct etharp_entry arp_table[ARP_TABLE_SIZE];
 static u8_t ctime;  
143    
144  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);
145  #define ARP_INSERT_FLAG 1  #define ARP_INSERT_FLAG 1
# Line 156  etharp_init(void) Line 158  etharp_init(void)
158      arp_table[i].p = NULL;      arp_table[i].p = NULL;
159  #endif  #endif
160    }    }
   /* reset ARP current time */  
   ctime = 0;  
161  }  }
162    
163  /**  /**
# Line 171  etharp_tmr(void) Line 171  etharp_tmr(void)
171  {  {
172    u8_t i;    u8_t i;
173        
   ++ctime;  
174    DEBUGF(ETHARP_DEBUG, ("etharp_timer\n"));    DEBUGF(ETHARP_DEBUG, ("etharp_timer\n"));
175    /* remove expired entries from the ARP table */    /* remove expired entries from the ARP table */
176    for(i = 0; i < ARP_TABLE_SIZE; ++i) {    for(i = 0; i < ARP_TABLE_SIZE; ++i) {
177        arp_table[i].ctime++;        
178      if((arp_table[i].state == ETHARP_STATE_STABLE) &&            if((arp_table[i].state == ETHARP_STATE_STABLE) &&      
179         (ctime - arp_table[i].ctime >= ARP_MAXAGE)) {         (arp_table[i].ctime >= ARP_MAXAGE)) {
180        DEBUGF(ETHARP_DEBUG, ("etharp_timer: expired stable entry %u.\n", i));        DEBUGF(ETHARP_DEBUG, ("etharp_timer: expired stable entry %u.\n", i));
181        arp_table[i].state = ETHARP_STATE_EMPTY;        arp_table[i].state = ETHARP_STATE_EMPTY;
182  #if ARP_QUEUEING  #if ARP_QUEUEING
# Line 185  etharp_tmr(void) Line 185  etharp_tmr(void)
185        arp_table[i].p = NULL;        arp_table[i].p = NULL;
186  #endif  #endif
187      } else if((arp_table[i].state == ETHARP_STATE_PENDING) &&      } else if((arp_table[i].state == ETHARP_STATE_PENDING) &&
188                (ctime - arp_table[i].ctime >= ARP_MAXPENDING)) {                (arp_table[i].ctime >= ARP_MAXPENDING)) {
189        arp_table[i].state = ETHARP_STATE_EMPTY;        arp_table[i].state = ETHARP_STATE_EMPTY;
190  #if ARP_QUEUEING  #if ARP_QUEUEING
191        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)));
# Line 227  find_arp_entry(void) Line 227  find_arp_entry(void)
227      for(i = 0; i < ARP_TABLE_SIZE; ++i) {      for(i = 0; i < ARP_TABLE_SIZE; ++i) {
228        /* remember entry with oldest stable entry in j*/        /* remember entry with oldest stable entry in j*/
229        if((arp_table[i].state == ETHARP_STATE_STABLE) &&        if((arp_table[i].state == ETHARP_STATE_STABLE) &&
230        (ctime - arp_table[i].ctime > maxtime)) {        (arp_table[i].ctime > maxtime)) {
231          maxtime = ctime - arp_table[i].ctime;          maxtime = arp_table[i].ctime;
232                j = i;                j = i;
233        }        }
234      }      }
# Line 289  update_arp_entry(struct netif *netif, st Line 289  update_arp_entry(struct netif *netif, st
289          for(k = 0; k < 6; ++k) {          for(k = 0; k < 6; ++k) {
290            arp_table[i].ethaddr.addr[k] = ethaddr->addr[k];            arp_table[i].ethaddr.addr[k] = ethaddr->addr[k];
291          }          }
292          /* time stamp */          /* reset time stamp */
293          arp_table[i].ctime = ctime;          arp_table[i].ctime = 0;
294  #if ARP_QUEUEING  #if ARP_QUEUEING
295          /* queued packet present? */          /* queued packet present? */
296          if(arp_table[i].p != NULL) {              if(arp_table[i].p != NULL) {    
# Line 346  update_arp_entry(struct netif *netif, st Line 346  update_arp_entry(struct netif *netif, st
346      for(k = 0; k < 6; ++k) {      for(k = 0; k < 6; ++k) {
347        arp_table[i].ethaddr.addr[k] = ethaddr->addr[k];        arp_table[i].ethaddr.addr[k] = ethaddr->addr[k];
348      }      }
349      /* time-stamp */        /* reset time-stamp */  
350      arp_table[i].ctime = ctime;      arp_table[i].ctime = 0;
351      /* mark as stable */        /* mark as stable */  
352      arp_table[i].state = ETHARP_STATE_STABLE;      arp_table[i].state = ETHARP_STATE_STABLE;
353      /* no queued packet */        /* no queued packet */  
# Line 698  struct pbuf *etharp_query(struct netif * Line 698  struct pbuf *etharp_query(struct netif *
698      DEBUGF(ETHARP_DEBUG, ("etharp_query: created ARP table entry.\n"));      DEBUGF(ETHARP_DEBUG, ("etharp_query: created ARP table entry.\n"));
699      /* i is available, create ARP entry */      /* i is available, create ARP entry */
700      ip_addr_set(&arp_table[i].ipaddr, ipaddr);      ip_addr_set(&arp_table[i].ipaddr, ipaddr);
701      arp_table[i].ctime = ctime;      arp_table[i].ctime = 0;
702      arp_table[i].state = ETHARP_STATE_PENDING;      arp_table[i].state = ETHARP_STATE_PENDING;
703  #if ARP_QUEUEING  #if ARP_QUEUEING
704      arp_table[i].p = NULL;      arp_table[i].p = NULL;

Legend:
Removed from v.1.21  
changed lines
  Added in v.1.22

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26