使用NETLINK的VLAN信息

时间:2015-05-21 01:12:34

标签: c linux kernel netlink vlan

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

2 个答案:

答案 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接口,您将获得:

  1. 处于DOWN状态的新接口eth2.75的通知
  2. 基础物理接口eth2的状态通知(它现在有一个"从属接口"它没有没有接口 之前 - 例如某些NIC卡有HW卸载来过滤 不需要的VLAN标签。接口现在可能需要更新NIC 等等。)。 eth2处于UP状态并且仍然如此 - 但它的内部状态 改变。
  3. 通知eth2.75从DOWN状态变为UP状态。
  4. 以类似的方式删除,您会看到:

    1. eth2状态变化的通知(与eth2.75和 VLAN)
    2. eth2.75从UP到DOWN状态的通知
    3. 删除eth2.75界面的通知