【问题标题】:Broadcast message are discarded by 40G NIC广播报文被 40G 网卡丢弃
【发布时间】:2020-07-08 10:20:14
【问题描述】:

我在使用 DPDK 18 时遇到以下 40G NIC 适配器的问题:

04:00.3 以太网控制器:英特尔公司以太网控制器 用于 10GbE SFP+ 的 X710(修订版 02)

DPDK 使用驱动程序net_i40e

显然 NIC 丢弃了它拥有的源 MAC 的广播数据包。

这里是对正在发生的事情的更详细描述。 我有一个带有两个路由器的高可用性环境。 通过 rte_eth_dev_mac_addr_add() 注册的两个路由器 虚拟 MAC (00:00:5e:00:01:64) 以及物理烧录 MAC。 当主路由器发送广播 VRRP-advertise 消息时 源 MAC 设置为虚拟 MAC,辅助路由的适配器似乎掉线了 包。

消息如下所示:

> Ethernet II, Src: 00:00:5e:00:01:64, Dst: ff:ff:ff:ff:ff:ff
>     Destination: ff:ff:ff:ff:ff:ff
>         Address: ff:ff:ff:ff:ff:ff
>         .... ..1. .... .... .... .... = LG bit: Locally administered
> address (this is NOT the factory default)
>         .... ...1 .... .... .... .... = IG bit: Group address
> (multicast/broadcast)
>     Source: 00:00:5e:00:01:64
>         Address: 00:00:5e:00:01:64
>         .... ..0. .... .... .... .... = LG bit: Globally unique address
> (factory default)
>         .... ...0 .... .... .... .... = IG bit: Individual address
> (unicast)
>     Type: IPv4 (0x0800)
> Internet Protocol Version 4, Src: 10.93.0.1, Dst: 255.255.255.255
>     0100 .... = Version: 4
>     .... 0101 = Header Length: 20 bytes (5)
>     Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)
>         0000 00.. = Differentiated Services Codepoint: Default (0)
>         .... ..00 = Explicit Congestion Notification: Not ECN-Capable
> Transport (0)
>     Total Length: 32
>     Identification: 0x0000 (0)
>     Flags: 0x0000
>         0... .... .... .... = Reserved bit: Not set
>         .0.. .... .... .... = Don't fragment: Not set
>         ..0. .... .... .... = More fragments: Not set
>     ...0 0000 0000 0000 = Fragment offset: 0
>     Time to live: 255
>     Protocol: VRRP (112)
>     Header checksum: 0x0000 incorrect, should be 0xb110(may be caused by
> "IP checksum offload"?)
>     Source: 10.93.0.1
>     Destination: 255.255.255.255
> Virtual Router Redundancy Protocol
>     Version 3, Packet type 1 (Advertisement)
>         0011 .... = VRRP protocol version: 3
>         .... 0001 = VRRP packet type: Advertisement (1)
>     Virtual Rtr ID: 100
>     Priority: 254 (Non-default backup priority)
>     Addr Count: 1
>     0000 .... = Reserved: 0
>     .... 0000 0000 0001 = Adver Int: 1
>     Checksum: 0xf896 [correct]
>     [Checksum Status: Good]
>     IP Address: 0.31.205.8
>

相同的代码,相同的 DPDK 版本但使用 1G 网卡可以完美运行。

我错过了什么?

谢谢 迪玛

【问题讨论】:

  • 您的网卡是 X710,但端口是 10G(请正确)。如果您想接收具有不同 MAC 地址的数据包,请确保您启用了rte_eth_dev_promiscous。请使用您正在使用的示例代码或 DPDK 示例进行更新,以供参考以帮助您。
  • @VipinVarghese 感谢您的回复。是的,网卡是 40G,但自动配置为 10G 速度。我不想在混杂模式下工作,所以我注册了一个额外的 MAC。它适用于我们正在使用的 1G 汽车。我不能发布代码,它对 SO 来说太嘈杂了 :)
  • 感谢您的回复,APIrte_eth_dev_mac_addr_add 将添加 DST mac 地址列表作为白名单。在您的解释中,您添加了00:00:5e:00:01:64。但是您收到的数据包是Dst: ff:ff:ff:ff:ff:ff,所以我不清楚 DPDK 接口上接收的数据包是什么
  • @VipinVarghese 数据包被广播(DST MAC ff:ff:ff:ff:ff:FF)。由于它是广播的,我希望 NIC 能够接受它。示例中的消息是 VRRP 协议的一部分,用于在高可用性 (HA) 环境中选举主路由器。 00:00:5e:00:01:64 是虚拟 MAC(也是 VRRP 协议的一部分)。在任何特定时间,只有处于 HA 模式主机的路由器拥有它。另一台路由器处于 HA 备份模式,不会发送带有 MAC 的数据包,并且会丢弃任何带有 MAC 的入口数据包。
  • 我认为我们应该只关注 i40e DPDK PMD 和行为,因为 DPDK 库与 HA 或 VRRP 无关。由于没有共享代码 sn-p,我最终修改了examples/skeleton 以禁用混杂模式,但在rte_eth_dev_start 之前通过rte_eth_allmulticast_enable 启用多播。使用 ff:ff:ff:ff:ff:ff1:ee:ee:ee:ee:ee 进行测试对我有用。而44:44:44:44:44:44 被删除。如果你愿意,我可以在 stackoverflwo 聊天 dpdk-debug 上联系我。 networklessons.com/multicast/…

标签: networking broadcast high-availability dpdk


【解决方案1】:

[EDIT based on chat dpdk-debug] 问题陈述被缩小为 Unable to receive packet with FF:FF:FF:FF:FF:FF when promiscuous mode is disabled on X710.

我在DPDK/examples/l2fwdDPDK/examples/skeleton 中禁用了rte_eth_promiscuous_enable,并在DST-MAC of NIC and FF:FF:FF:FF:FF:FF 中使用PKT-GEN 进行测试。

要允许多播/广播帧x1:xx:xx:xx:xx:xx,需要启用rte_eth_allmulticast_enable

@dimba 请随意测试,看看rte_eth_dev_mac_addr_add 是否引起问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多