对于状态为ETHARP_STATE_STABLE的表项,这些表项代表着ARP记录了IP地址与MAC地址的映射关系,能随意通过IP地址进行数据的发送,但是这些表项是具有生存时间的,通过宏定义ARP_MAXAGE指定,默认为5分钟,在这些时间,LwIP会不断维护这些缓存表以保持缓存表的有效。当表项是ETHARP_STATE_STABLE的时候又发送一个ARP请求包,...
对于状态为ETHARP_STATE_STABLE的表项,这些表项代表着ARP记录了IP地址与MAC地址的映射关系,能随意通过IP地址进行数据的发送,但是这些表项是具有生存时间的,通过宏定义ARP_MAXAGE指定,默认为5分钟,在这些时间,LwIP会不断维护这些缓存表以保持缓存表的有效。当表项是ETHARP_STATE_STABLE的时候又发送一个ARP请求包,那...
对于状态为ETHARP_STATE_STABLE的表项,这些表项代表着ARP记录了IP地址与MAC地址的映射关系,能随意通过IP地址进行数据的发送,但是这些表项是具有生存时间的,通过宏定义ARP_MAXAGE指定,默认为5分钟,在这些时间,LwIP会不断维护这些缓存表以保持缓存表的有效。当表项是ETHARP_STATE_STABLE的时候又发送一个ARP请求包,那...
arp_table[i].ctime++;if((arp_table[i].ctime >= ARP_MAXAGE) ||//表项大于生存时间20分钟((arp_table[i].state == ETHARP_STATE_PENDING) &&//达到pending 最大时间10s(arp_table[i].ctime >= ARP_MAXPENDING))) { etharp_free_entry(i);//删除表项}elseif(arp_table[i].state == ETHA...
etharp_tmr 定时器前面已经介绍过,etharp_tmr会以默认1S的间隔调用。 遍历所有表项 如果某个表项超过ARP_MAXAGE(默认300S)没有更新时,就会释放。 定时器是在etharp_find_entry,etharp_query, etharp_update_arp_entry时清零的,也就是说超过300S没收收到对应的地址的IP包和ARP包就认为超时需要释放。
MAXAGE,//或者是 pending 状态且其生存值大于 ARP_MAXPENDING,则删除表项if( ((arp_table[i].state == ETHARP_STATE_STABLE) &&//stable 状态(arp_table[i].ctime >=ARP_MAXAGE))||//或者((arp_table[i].state == ETHARP_STATE_PENDING) &&//pending 状态(arp_table[i].ctime >=ARP_MAX...
LwIP中实现的函数是:etharp_tmr(void)。由于LwIP的ARP表是比较小的,LwIP采用直接遍历ARP缓存表,更新ARP表的内容,而当表项的时间大于表项的生存时间(5分钟),或者表项状态是ETHARP_STATE_PENDING处于等待目标主机回应ARP请求包,并且等待的时间超过ARP_MAXPENDING(5秒),那么LwIP就认为这些表项是无效了,就调用etharp...
arp_table[i].ctime++; /* 只要不是EMPTY项目,ctime就会增加,这个就是ARP表的存在时间. */ if ((arp_table[i].ctime >= ARP_MAXAGE) || /* 条件1:如果他存在太长时间,就是太老了,回收. */ ((arp_table[i].state == ETHARP_STATE_PENDING) && /* 条件2:如果他等待询问MAC,但是一直还没去询...
定时器是在etharp_find_entry,etharp_query, etharp_update_arp_entry时清零的,也就是说超过300S没收收到对应的地址的IP包和ARP包就认为超时需要释放。 如果表项处于ETHARP_STATE_PENDING状态且超过ARP_MAXAGE(默认是5)时也要释放表项。即比如一开始给某个IP发包,但是MAC地址不知道,于是发了ARP请求包,但是此...
(2)ARP缓存表的定时机制 定时更新缓存表项的状态 #define ARP_TMR_INTERVAL 5000 #define ARP_MAXAGE 240 #define ARP_AGE_REREQUEST_USED (ARP_MAXAGE - 12) #define ARP_MAXPENDING 2 void etharp_tmr(void) { u8_t i; //查阅缓存表中的每一项状态、时间计数器 ...