对netlink无法检测到dellink事件和探测网卡是否插网线方法的简单分析

本文分析了为何使用netlink检测网卡插拔只能收到RTM_NEWLINK事件,探讨了NETDEV_UP和NETDEV_DOWN的处理,并介绍了ifplugd的四种检测方法:ethtool、MII、私有接口和IFF,详细阐述了每种方法的工作原理。
摘要由CSDN通过智能技术生成
看了一下相关的实现,总结一下,有不对的请各位指正。
我看的source是kernel 2.6.27,ifplugd-0.28。
问题1:为啥用netlink检测网线插拔只能得到RTM_NEWLINK?
问题2:如何能检测到网卡插拔的信息。
netlink实现主要是在在net/netlink/af_netlink.c下面,但是rtnetlink.c在net/core下面。还有一个netlink.h在include/net下面。
用multicast作为关键字查一下,可以发现一个函数nlmsg_multicast,他的作用是multicast a netlink message。OK,顺着这个往上找。
函数调用关系:
nlmsg_multicast
     ^
     |
nlmsg_notify
     ^
     |
rtnl_notify
     ^
     |
rtmsg_ifinfo
     ^
     |
rtnetlink_event
     ^
     |
rtnetlink_dev_notifier
到这里再往上就是register_netdevice_notifier(&rtnetlink_dev_notifier),到了通知链注册,不用往上看了,再往上就是初始化了。
在rtnetlink_event函数中有如下处理:
switch (event) {
    case NETDEV_UNREGISTER:
        rtmsg_ifinfo(RTM_DELLINK, dev, ~0U)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值