arptimer.c
来自「TCP-IP红宝书源代码」· C语言 代码 · 共 42 行
C
42 行
/* arptimer.c - arptimer */
#include <conf.h>
#include <kernel.h>
#include <network.h>
void arpdq(struct arpentry *);
int arpsend(struct arpentry *);
/*------------------------------------------------------------------------
* arptimer - Iterate through ARP cache, aging (possibly removing) entries
*------------------------------------------------------------------------
* gran - time since last iteration
*/
void
arptimer(int gran)
{
struct arpentry *pae;
STATWORD ps;
int i;
disable(ps); /* mutex */
for (i=0; i<ARP_TSIZE; ++i) {
if ((pae = &arptable[i])->ae_state == AS_FREE)
continue;
if (pae->ae_ttl == ARP_INF)
continue; /* don't time out permanent entry */
if ((pae->ae_ttl -= gran) <= 0)
if (pae->ae_state == AS_RESOLVED)
pae->ae_state = AS_FREE;
else if (++pae->ae_attempts > ARP_MAXRETRY) {
pae->ae_state = AS_FREE;
arpdq(pae);
} else {
pae->ae_ttl = ARP_RESEND;
arpsend(pae);
}
}
restore(ps);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?