禁用内部 Intel X710 LLDP 代理

Jim*_*Jim 6 intel dell centos6 lldp

我们进行需要大量使用 LLDP 的特殊硬件配置。我们有一些新的服务器机架,它们都使用 Intel X710 10Gb 网卡。LLDP 突然停止工作。我们的 LLDP 实现很简单。使用默认 TLV 在 TOR(架顶)交换机上启用 LLDP。使用 lldpad (CentOS 6.5) 在 Linux 映像上启用 LLDP,并使用 lldptool 提取邻居信息,这在过去已用于数千台机器。只是,对于这些带有这些 NIC 的机器,整个事情就停止了。

使用来自交换机和服务器的数据包转储显示帧从服务器正确发送到交换机,相反,交换机正确接收来自服务器的帧并将 TLV 帧发送回服务器。然而,服务器没有接收到交换帧 TLV,这让我们摸不着头脑。我们将使用不同 NIC 的其他机器放置在 TOR 上,它们按预期获得 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
Run Code Online (Sandbox Code Playgroud)

在 NIC 上禁用内部 LLDP 代理的方法不起作用。尽管如此,我仍在四处寻找,但我想我有几个选择:

  1. 找到在 NIC 上禁用内部 LLDP 代理的正确方法,并使用现有方法在这些机器上提取 LLDP 数据——首选。
  2. 使用 NIC LLDP 代理并找到从 NIC 中提取邻居 TLV 的方法。

有没有其他人遇到过与这些卡相同或类似的问题,如果有,您是如何解决这个问题的?

我认为,如果我想使用内部代理数据,它将通过ethtool或公开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
Run Code Online (Sandbox Code Playgroud)

Jim*_*Jim 8

好的。所以谷歌帮了我。以下是解决问题的方法。

事实证明,为了使用调试文件系统,需要先挂载它。我们使用 memfs 操作系统在我们正在调整的机器上运行命令,默认情况下我们不挂载 debugfs。所以这个脚本给了我我需要的答案。

...我的用例的以下步骤有效:

root@host (~)# mount -t debugfs none /sys/kernel/debug
root@host (~)# echo lldp stop > /sys/kernel/debug/i40e/0000:01:00.2/command
Run Code Online (Sandbox Code Playgroud)

产生:

root@host (~)# lldptool -i eth2 stat
Total Frames Transmitted        = 1834
Total Discarded Frames Received = 0
Total Error Frames Received     = 0
Total Frames Received           = 1
Total Discarded TLVs            = 0
Total Unrecognized TLVs         = 0
Total Ageouts                   = 0
root@host (~)# lldptool -t -n -i eth2
Chassis ID TLV
    MAC: ec:13:db:41:63:00
Port ID TLV
    Local: 508
Time to Live TLV
    120
System Name TLV
    sw1
System Description TLV
    Juniper Networks, Inc. qfx5100-48s-6q Ethernet Switch, kernel JUNOS 13.2X51-D38, Build date: 2015-06-12 02:33:47 UTC Copyright (c) 1996-2015 Juniper Networks, Inc.
System Capabilities TLV
    System capabilities:  Bridge, Router
    Enabled capabilities: Bridge, Router
Port Description TLV
    xe-0/0/0
MAC/PHY Configuration Status TLV
    Auto-negotiation not supported and not enabled
    PMD auto-negotiation capabilities: 0x8000
    MAU type: Unknown [0x0000]
Link Aggregation TLV
    Aggregation capable
    Currently not aggregated
    Aggregated Port ID: 0
Maximum Frame Size TLV
    1514
Port VLAN ID TLV
    PVID: 1
Unidentified Org Specific TLV
    OUI: 0x009069, Subtype: 1, Info: 564633373136303530303437
VLAN Name TLV
    VID 1: Name vlan-1
LLDP-MED Capabilities TLV
    Device Type:  netcon
    Capabilities: LLDP-MED, Network Policy, Location Identification, Extended Power via MDI-PSE
End of LLDPDU TLV
Run Code Online (Sandbox Code Playgroud)

其他有用的链接:

http://comments.gmane.org/gmane.linux.network/408868 https://communities.intel.com/thread/87759 https://sourceforge.net/p/e1000/mailman/message/34129092/

还有我的谷歌搜索


Jos*_*ush 5

这是一个可以关闭的固件功能

\n\n

自 2017 年 10 月 13 日起,Intel 发布了驱动程序2.3.6版本,支持使用私有标志关闭 LLDP 处理。这是通过执行以下命令来完成的:

\n\n
sudo ethtool --set-priv-flags <interface name> disable-fw-lldp on\n
Run Code Online (Sandbox Code Playgroud)\n\n
    \n
  • 替换<interface name>为您的接口名称。(例子 - eth0
  • \n
\n\n

下载适用于 X710/XL710 的英特尔 i40e 驱动程序版本 2.3.6

\n\n
\n\n

安装说明(来源

\n\n
1. Move the base driver tar file to the directory of your choice. For\n   example, use \'/home/username/i40e\' or \'/usr/local/src/i40e\'.\n\n2. Untar/unzip the archive, where <x.x.x> is the version number for the\n   driver tar file:\n   tar zxf i40e-<x.x.x>.tar.gz\n\n3. Change to the driver src directory, where <x.x.x> is the version number\n   for the driver tar:\n   cd i40e-<x.x.x>/src/\n\n4. Compile the driver module:\n   # make install\n   The binary will be installed as:\n   /lib/modules/<KERNEL VERSION>/updates/drivers/net/ethernet/intel/i40e/i40e.ko\n\n   The install location listed above is the default location. This may differ\n   for various Linux distributions.\n   NOTE:\xc3\x82 To compile the driver on some kernel/arch combinations, a\n   package with the development version of libelf (e.g. libelf-dev,\n   libelf-devel, elfutilsl-libelf-devel) may need to be installed.\n\n  NOTE: To gather and display additional statistics, use the\n  I40E_ADD_PROBES pre-processor macro:\n  #make CFLAGS_EXTRA=-DI40E_ADD_PROBES\n  Please note that this additional statistics gathering can impact\n  performance.\n\n5. Load the module using the modprobe command:\n   modprobe <i40e> [parameter=port1_value,port2_value]\n\n   Make sure that any older i40e drivers are removed from the kernel before\n   loading the new module:\n   rmmod i40e; modprobe i40e\n\n6. Assign an IP address to the interface by entering the following,\n   where ethX is the interface name that was shown in dmesg after modprobe:\n\n   ip address add <IP_address>/<netmask bits> dev ethX\n\n7. Verify that the interface works. Enter the following, where IP_address\n   is the IP address for another machine on the same subnet as the interface\n   that is being tested:\n   ping <IP_address>\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

这是来自英特尔的提交

\n\n
\n

来自:戴夫·厄特曼

\n\n

为 ethtool 实现私有标志disable-fw-lldp,以禁用固件对 LLDP 数据包的处理。这将阻止防火墙消耗 LLDPDU 并导致它们在堆栈中向上发送。

\n\n

固件还被配置为在链路上应用默认 DCB 配置。

\n\n

切换该标志的值也会导致 PF 复位。

\n\n

禁用 FW DCB 也会禁用 DCBx。

\n
\n