linux 内核中arp表项老化源码
时间: 2023-10-21 09:03:30 浏览: 228
中文注释内核源码,适用于嵌入式linux软件工程师,中文注释只是部分,中文注释将保持更新,更新进度取决于我的学习进度
arp表项老化的源码在linux内核中的net/ipv4/arp.c文件中,具体实现在arp_expire函数中。
该函数会遍历arp表中所有的条目,检查每个条目的时间戳是否超过了系统定义的老化时间,如果超时则将该条目从arp表中删除。
以下是arp_expire函数的部分源码:
```
static void arp_expire(unsigned long dummy)
{
struct net_device *dev;
struct net *net;
struct hlist_node *n, *tmp;
struct arp_entry *entry;
unsigned long now = jiffies;
for_each_net(net) {
for_each_netdev(net, dev) {
if (dev->flags & IFF_NOARP)
continue;
rcu_read_lock();
hlist_for_each_entry_safe(entry, n, tmp, &dev->arp_tbl.hash[0], node) {
if (time_after(now, entry->used + ARP_TABLE_T1)) {
hlist_del(&entry->node);
arp_tbl_entry_free(entry);
}
}
rcu_read_unlock();
}
}
mod_timer(&arp_timer, round_jiffies(jiffies + ARP_TABLE_T1));
}
```
在该函数中,我们首先通过for_each_net和for_each_netdev遍历所有网络设备的arp表。然后,对于每个条目,我们使用hlist_for_each_entry_safe函数遍历哈希链表,检查时间戳是否超时,并在需要时删除条目。
最后,我们使用mod_timer函数重新设置ARP表项老化的定时器,以便在下一次超时时再次调用arp_expire函数。
阅读全文