标签: vlan

使用NETLINK的VLAN信息

如何使用C中的NETLINK套接字从内核到用户空间添加和删除VLAN子接口等VLAN信息?

我在评论中提到的NETLINK man中没有做过什么研究.我添加并删除了一个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
Run Code Online (Sandbox Code Playgroud)

删除VLAN接口eth2.75:

RTM_NEWLINK Link eth2 Up
RTM_NEWLINK Link eth2.75 Down
RTM_DELLINK eth2.75
Run Code Online (Sandbox Code Playgroud)

c linux kernel netlink vlan

13
推荐指数
1
解决办法
1071
查看次数

rx-vlan-offload和tx-vlan-offload ethtool选项究竟做了什么?

ethtool手册页只给出了一个模糊的解释:

   rxvlan on|off
          Specifies whether RX VLAN acceleration should be enabled

   txvlan on|off
          Specifies whether TX VLAN acceleration should be enabled
Run Code Online (Sandbox Code Playgroud)

假设您可以启用它们,这些选项到底完成了什么?

networking offloading vlan

6
推荐指数
1
解决办法
5032
查看次数

Scapy:如何在现有数据包中插入新层(802.1q)?

我有一个数据包转储,并希望向数据包注入vlan标记(802.1q标头).
怎么做?

python scapy vlan

5
推荐指数
1
解决办法
5829
查看次数

IP_PKTINFO套接字选项无效

我已经在这个问题上敲了几个星期,现在我终于屈服于这样一个事实:我无法弄清楚这一点.我也一直在我的团队中与网络工程师一起工作无济于事.我的问题如下:

我正在开发一个应用程序,它可以在多个vlan上进行相当直接的UDP组连接(每个vlan都作为自己的虚拟接口公开,在这种情况下,如果相关,则NIC是SolarFlare).所有这些连接都发生在单个套接字上(根据有效负载序列号对消息进行重复数据删除).在执行IP_ADD_MEMBERSHIP之前,我正在设置这样的套接字选项:

setsockopt(sock, SOL_SOCKET, SO_TIMESTAMP, &yes, sizeof yes)
setsockopt(sock, IPPROTO_IP, IP_PKTINFO, &yes, sizeof(yes))
setsockopt(sock, IPPROTO_IP, PACKET_AUXDATA, &yes, sizeof(yes))
Run Code Online (Sandbox Code Playgroud)

我需要通过IP_PKTINFO获取接口索引或通过PACKET_AUXDATA获取vlan id,以便收集下游的统计信息.现在,一切都初始化没有错误,我能够毫无问题地处理UDP有效负载.我遇到麻烦的地方是当我尝试访问上面请求的辅助/控制消息时,如简单的调试日志所示:

for (cmsgptr = CMSG_FIRSTHDR(&msg);
    cmsgptr != NULL;
    cmsgptr = CMSG_NXTHDR(&msg, cmsgptr)) {
    printf("Control Message: cmsg_level: %d, cmsg_type %d\n", cmsgptr->cmsg_level, cmsgptr->cmsg_type);
}
Run Code Online (Sandbox Code Playgroud)

对于收到的每个数据包,这只输出:

Control Message: cmsg_level: 1, cmsg_type 29
Run Code Online (Sandbox Code Playgroud)

作为参考,SOL_SOCKET = 1且SO_TIMESTAMP = 29.因此,虽然我正在请求3种不同的控制消息类型,但只填充了时间戳.此行为与我是在单个接口上加入单个UDP组还是在多个接口上加入多个组无关.

一种解决方案是重写应用程序以将每个接口放在其自己的套接字上,然后将所有内容汇集到队列中,但根据我的经验,上下文切换会破坏应用程序的性能.根据手册页ip(7),自Linux内核2.2以来,IP_PKTINFO已经可用.我正在运行Ubuntu 14.04.4,它使用内核3.13.0-24-generic.

任何帮助,见解或方向将不胜感激!

c sockets linux vlan

5
推荐指数
1
解决办法
1026
查看次数

标签 统计

vlan ×4

c ×2

linux ×2

kernel ×1

netlink ×1

networking ×1

offloading ×1

python ×1

scapy ×1

sockets ×1