如何使用C中的NETLINK套接字获取VLAN信息,例如从内核到用户空间的VLAN子接口(interface)的添加和删除?
正如评论中所建议的,我没有对NETLINK的人做任何研究。我添加和删除了VLAN子接口(interface),并使用netlink套接字程序对其进行了监视。对于添加和删除,每个接收3条消息。
添加发送3条NEWLINK消息,删除发送2条NEWLINK和1条DELLINK消息。为什么会这样?
要添加新的VLAN接口(interface)eth1.75:
RTM_NEWLINK Link eth2.75 Down
RTM_NEWLINK Link eth2 Up
RTM_NEWLINK Link eth2.75 Up
对于删除VLAN接口(interface)eth2.75:
RTM_NEWLINK Link eth2 Up
RTM_NEWLINK Link eth2.75 Down
RTM_DELLINK eth2.75
最佳答案
创建netlink套接字时,它将创建3个设备。这就是为什么您收到3个事件的原因。这是add
事件时创建的3个设备。
net
子系统是上级控制设备。另外两个是用于处理数据的queues
。您可以如下进行验证。当我执行
udevadm monitor --env
并创建VLAN时,我从内核获取以下事件: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