如何使用C中的NETLINK套接字获取VLAN信息,如从内核到用户空间添加和删除VLAN子接口?
正如评论中所build议的那样,我在NETLINK中做了一些小小的学习。 我添加并删除了VLAN子接口,并使用netlink套接字程序进行监视。 添加和删除每个接收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
在创建一个netlink套接字时,它创建了3个设备。 这就是为什么你收到3个事件。 这是它创建的3个设备,同时add
事件。
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
通常从netdev_state_change(请参阅: http ://lxr.free-electrons.com/source/net/core/dev.c#L1226),发送RTM_NEWLINK消息的每个接口状态更改。
基本上,将RTM_NEWLINK视为“接口更改状态”,而不是“创建新接口”。
例如,为了添加VLAN接口,您将获得:
以类似的方式删除你看到: