邻居表NUD的状态转移

yo-yo 2011-09-12 06:41:25
内核[2.6.34]相关代码:arp.c neighbour.c
假设表项处于NUD_INCOMPLETE状态,此时它会发送广播ARP报文。
如果它在发送前收到了对方主机的ARP报文,那么在arp_process()中的处理

if (!dont_send) {
n = neigh_event_ns(&arp_tbl, sha, &sip, dev);
if (n) {
arp_send(ARPOP_REPLY,ETH_P_ARP,sip,dev,tip,sha,dev->dev_addr,sha);
    neigh_release(n);
}
}

neigh_event_ns() -> neigh_update(neigh, lladdr, NUD_STALE, NEIGH_UPDATE_F_OVERRIDE)会导致表项从NUD_INCOMPLETE迁移到NUD_STALE状态,等待表项被主机引用,但实际上之前肯定已经引用过了,因为迁移到了NUD_INCOMPLETE。感觉做了许多无用功,在这种特殊情况下直接迁移到NUD_DELAY不是更好??
另外,“Understanding Linux Network Internals”书中关于邻居表的状态转移图,并没有NUD_INCOMPLETE迁移到NUD_STALE的,但从代码看是可以的???
...全文
232 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
alcz2008 2011-09-19
  • 打赏
  • 举报
回复
不懂帮顶,待学习。。。
xmx2009 2011-09-13
  • 打赏
  • 举报
回复
帮顶了

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧