linux - 无法使用 DPDK 捕获 VLAN 标记的数据包
问题描述
我们正在使用 DPDK 捕获多播 UDP 流,需要帮助来捕获来自 VLAN 中继端口的多播数据包。我们 Linux 服务器上的 pNIC(Intel x710)连接到交换机上的中继端口,因此接收来自 2 个 VLAN 的数据包。我们的 Linux 服务器在裸机上安装了 CentOS(没有使用管理程序)。
在非 VLAN 流量的正常情况下,我们将物理网卡与 DPDK 绑定并为其创建一个 KNI 端口(具有明确定义的 IP)(发出多播加入请求需要 KNI,如果没有 KNI 端口,我们将无法加入请求)。
对于 VLAN 流量,我们服务器的物理端口连接到交换机上的中继端口。在 Linux 服务器上,我们配置了两个 VLAN 接口 pNIC.10 和 pNIC.20 分别接收来自 VLAN 10 和 20 的数据包(参考https://www.linuxtechi.com/vlan-tagged-nic-ethernet-card-centos- rhel 服务器/)。在这种情况下,我们仍然需要将物理端口与 DPDK 绑定,因为绑定发生在 PCI 设备 id上(VLAN IF 没有 PCI id)。但是,我们无法确定要创建什么以及要创建多少个 KNI 端口。已尝试创建两个 KNI 端口 - 每个 VLAN ID 一个,但这对我们不起作用。在这种情况下无法启用 KNI 端口。
任何帮助将不胜感激 !!
解决方案
我们已经能够通过以下步骤解决手头的问题:
- 物理网卡端口 (p1p1) 绑定到 DPDK。
- 名称为 p1p1 的 KNI 端口在物理 NIC 端口之上创建。没有为该 KNI 端口分配 IP 地址。
- VLAN 接口使用 p1p1 作为主设备添加
- “ip 链接添加链接 p1p1 名称 p1p1.10 类型 vlan id 10”
- “ip 链接添加链接 p1p1 名称 p1p1.20 类型 vlan id 20”
- 启动 VLAN IF
- “ip link set dev p1p1.10 up”
- “ip 链接设置开发 p1p1.20 向上”
- 为 p1p1.10 和 p1p1.20 分配适当的 IP
发布此消息后,我们可以发送多播加入请求并在 DPDK 绑定端口上接收流。
推荐阅读
- terraform - 如何在 terraform 输出变量中附加到根模块中的列表?
- r - 通过字符变量将一列分成两列
- php - 将使用 FPDF 创建的 pdf 插入/保存到数据库中
- javascript - 有没有办法让 chrome 扩展在标签之间独立运行?
- assembly - 在调用 printf 的循环中与 nasm 中的 mul 相乘 - 结果意外增长
- vb.net - VB.net 中的数据网格视图值
- java - 在 html 的帮助下在 java 中创建一个多色的 JLabel
- ios - 如何阅读符号化的崩溃日志?
- javascript - 上传前压缩文件
- javascript - 如何在 CSS 样式中使用 JavaScript 变量?