网站改版怎么做,微信公众平台登录界面,网站专题策划方案,自适应自助建站网站今天看到Linux内核里arp代码相关的一个函数,让人想起来很久之前掉进去的一个坑。 说产品的实现里,会存放一个dummy的neighbor(arp记录)在系统里,然后根据这个dummy的记录做一些特殊的处理。 但是当时根本就不知道这个记录的存在,也就无从谈起说要在做设计时考虑它的存在。…今天看到Linux内核里arp代码相关的一个函数,让人想起来很久之前掉进去的一个坑。 说产品的实现里,会存放一个dummy的neighbor(arp记录)在系统里,然后根据这个dummy的记录做一些特殊的处理。 但是当时根本就不知道这个记录的存在,也就无从谈起说要在做设计时考虑它的存在。 然后当时做的是非常普通的操作,只是将一个网卡上的最后的IP地址给删掉,然后就导致这个dummy的记录也被删掉了。 虽然这个dummy-neighbor的属性设置为了permanent。
当时没有看内核代码,现在重新看一下这个删除IP怎么就触发了neighbor的删除的过程。 在arp的代码里有这么一条路,意思是说,当net-device有变动的时候,要通知我,我会做一些处理,其中就包含IP地址发生变化是的处理。 arp_init-register_netdevice_notifier-arp_netdev_notifier-arp_netdev_event(NETDEV_CHANGEADDR)-neigh_changeaddr-neigh_flush_dev-neigh_cleanup_and_release(n);
这样,这个问题的前因后果就捋顺了。
这个功能后续还单门为网卡状态的down做过修改,其中的一个情况是:如果是permanent的记录不会被删;但是对IP的变化处理依然是没有变化,不知道是出于什么样的考虑。可能遵照的原则是,不要改变其他不必要的行为,以免引起不适应的情况。 $ git show 859bd2ef1fc11 commit 859bd2ef1fc1110a8031b967ee656c53a6260a76 Author: David Ah