如何使用C中的NETLINK套接字从内核到用户空间添加和删除VLAN子接口等VLAN信息?
我在评论中建议的NETLINK人中没有做过什么研究。我添加并删除了一个VLAN子接口,并使用netlink socket程序进行监控。添加&删除每个接收3条消息。 添加发送3个NEWLINK消息并删除发送2个NEWLINK& 1 DELLINK消息。为什么会这样?
添加新的VLAN接口eth1.75:
RTM_NEWLINK Link eth2.75 Down
RTM_NEWLINK Link eth2 Up
RTM_NEWLINK Link eth2.75 Up
删除VLAN接口eth2.75:
RTM_NEWLINK Link eth2 Up
RTM_NEWLINK Link eth2.75 Down
RTM_DELLINK eth2.75
答案 0 :(得分:4)
创建netlink套接字时,它会创建3个设备。这就是你收到3个活动的原因。以下是net
事件时创建的3个设备。
queues
子系统是上层控制设备。其他两个是udevadm monitor --env
用于处理数据。您可以按照以下方式进行验证。
当我执行UDEV [305215.045416] add /devices/virtual/net/vpn0 (net)
ACTION=add
DEVPATH=/devices/virtual/net/vpn0
ID_MM_CANDIDATE=1
IFINDEX=10
INTERFACE=vpn0
SEQNUM=3665
SUBSYSTEM=net
USEC_INITIALIZED=5215023319
UDEV [305215.046658] add /devices/virtual/net/vpn0/queues/rx-0 (queues)
ACTION=add
DEVPATH=/devices/virtual/net/vpn0/queues/rx-0
SEQNUM=3666
SUBSYSTEM=queues
USEC_INITIALIZED=15044665
UDEV [305215.047628] add /devices/virtual/net/vpn0/queues/tx-0 (queues)
ACTION=add
DEVPATH=/devices/virtual/net/vpn0/queues/tx-0
SEQNUM=3667
SUBSYSTEM=queues
USEC_INITIALIZED=5215044729
并创建vlan时,我从内核获得以下事件:
{{1}}
答案 1 :(得分:1)
RTM_NEWLINK消息是针对接口状态的每次更改发送的,通常来自netdev_state_change(请参阅:http://lxr.free-electrons.com/source/net/core/dev.c#L1226)。
基本上,将RTM_NEWLINK视为"接口改变状态"而不仅仅是"创建新接口"。
例如,要添加VLAN接口,您将获得:
以类似的方式删除,您会看到: