如何使用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
    

    10-07 16:43