我们进行需要大量使用 LLDP 的特殊硬件配置。我们有一些新的服务器机架,它们都使用 Intel X710 10Gb 网卡。LLDP 突然停止工作。我们的 LLDP 实现很简单。使用默认 TLV 在 TOR(机架顶部)交换机上启用 LLDP。使用 lldpad (CentOS 6.5) 在 Linux 映像上启用 LLDP,并使用 lldptool 提取邻居信息,这在过去已在数千台机器上运行。只是,对于这些带有这些 NIC 的机器,整个事情就停止了工作。
使用来自交换机和服务器的数据包转储表明,帧已从服务器正确发送到交换机,相反,交换机正在正确接收来自服务器的帧并将 TLV 帧发送回服务器。但是,服务器没有收到交换帧 TLV,这让我们摸不着头脑。我们在 TOR 上放置了使用不同 NIC 的其他机器,它们按预期获取 LLDP 数据。
我问谷歌...
根据此链接,这些 X710 似乎正在运行内部 LLDP 代理,该代理正在拦截来自交换机的 LLDP 帧。我们看到发生这种情况的受影响机器上的固件是:
# ethtool -i eth2
driver: i40e
version: 1.3.47
firmware-version: 4.53 0x80001e5d 17.0.10
bus-info: 0000:01:00.2
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: yes
在 NIC 上禁用内部 LLDP 代理的方法不起作用。尽管如此,我仍在挖掘,但我想我有几个选择:
- 找到正确的方法来禁用 NIC 上的内部 LLDP 代理,并使用现有方法在这些机器上提取 LLDP 数据 - 首选。
- 使用 NIC LLDP 代理并找到一种从 NIC 中提取邻居 TLV 的方法。
是否有其他人在使用这些卡时遇到过相同或类似的问题,如果有,您是如何解决这个问题的?
我想如果我想使用内部代理数据,它将通过ethtool
or公开snmp
,但我还没有找到一种方法来显示信息。
TIA
编辑 作为记录,当我尝试英特尔论坛中概述的步骤时,我得到以下输出:
root@host (~)# find /sys/kernel/debug/
/sys/kernel/debug/
root@host (~)# mkdir /sys/kernel/debug/i40e
mkdir: cannot create directory `/sys/kernel/debug/i40e': No such file or directory
好的。所以谷歌帮我解决了。以下是解决问题的方法。
事实证明,为了使用调试文件系统,需要先挂载它。我们使用 memfs 操作系统在我们正在调整的机器上运行命令,默认情况下我们不挂载 debugfs。所以这个脚本给了我需要的答案。
...并且我的用例的以下步骤有效:
产生:
其他有用的链接:
http://comments.gmane.org/gmane.linux.network/408868 https://communities.intel.com/thread/87759 https://sourceforge.net/p/e1000/mailman/message/34129092/
还有我的谷歌搜索
创建了一个初始化脚本来在机器启动时执行此操作。任何拉取请求表示赞赏。
如果有人知道如何判断嵌入式 lldp 代理的状态,将不胜感激。这可以适用于具有更好退出代码的 systemd。
https://github.com/timhughes/i40e-lldp-agent/
这是一个可以关闭的固件功能
自 2017 年 10 月 13 日以来,英特尔发布了他们的驱动程序2.3.6版本,支持使用私有标志切换 LLDP 处理。这是通过执行以下命令来完成的:
<interface name>
为您的接口名称。(示例 -eth0
)下载适用于 X710/ XL710 版本 2.3.6 的 Intel 驱动程序 i40e
安装说明(来源)
这是来自英特尔的承诺:
由于 ethtool 切换似乎不会在重新启动后持续存在,我们已按照 udev 规则进行设置。
/etc/udev/rules.d/10-disable-fw-lldp.rules: