サマリー
Intel NICを搭載したLinuxサーバにおいて lldpd をインストールして設定を行ってもその設定が反映されず、ハードウェアの情報が表示される場合、Intel NIC (i40e) のLLDPオフロードが有効になっているためこれを無効にする必要がある。
詳細
lldpdを apt install lldpd でインストールしたのち、以下のように設定を行った。
configure system interface pattern eno*,ens* configure lldp portidsubtype ifname
ネットワークスイッチ側からLLDPネイバーを表示すると以下のようになった。Chassis IdにはMACアドレス、Port infoにはLinux上でのインターフェイス名が見えることが期待値であったが、ハードウェア固有の値が表示されている。
{master:0}
me@myswitch> show lldp neighbors
Local Interface Parent Interface Chassis Id Port info System Name
xe-0/0/8 ae2 39373638-3935-5099-4E99-303330309999Embedded ALOM, Port 1
xe-0/0/10 ae2 39373638-3935-5099-4E99-303330309999PCI-E Slot 1, Port 1
{master:0}
me@myswitch> show lldp neighbors interface xe-0/0/8
LLDP Neighbor Information:
Local Information:
Index: 147 Time to live: 121 Time mark: Tue Jun 2 06:27:34 2020 Age: 12 secs
Local Interface : xe-0/0/8
Parent Interface : ae2
Local Port ID : 521
Ageout Count : 0
Neighbour Information:
Chassis type : Locally assigned
Chassis ID : 39373638-3935-5099-4E99-303330309999
Port type : Mac address
Port ID : 00:00:5e:a2:72:00
Port description : Embedded ALOM, Port 1
System Description : HPE ProLiant DL360 Gen10
また、サーバ側からLLDPの自身の情報とネイバーの情報を表示すると、ChassisIDやPorIDが正しく設定されていることがわかり、ネイバーが見えていないこともわかる。スイッチ側の設定はスイッチ間のLLDP設定で正しく表示できていることが確認できていたため、これはスイッチからのLLDPDUがLinuxのレイヤーまで届いていないということになる。
root@myserver:~# lldpcli show chassis
-------------------------------------------------------------------------------
Local chassis:
-------------------------------------------------------------------------------
Chassis:
ChassisID: mac 00:00:5e:7b:a4:10
SysName: myserver
SysDescr: Ubuntu 18.04.3 LTS Linux 4.15.0-55-generic #60-Ubuntu SMP Tue Jul 2 18:22:20 UTC 2019 x86_64
MgmtIP: 10.102.253.54
MgmtIP: fe80::ac91:afff:fe1f:aee0
Capability: Bridge, on
Capability: Router, on
Capability: Wlan, off
Capability: Station, off
-------------------------------------------------------------------------------
[lldpcli] # show interfaces ports eno5
-------------------------------------------------------------------------------
LLDP interfaces:
-------------------------------------------------------------------------------
Interface: eno5, via: unknown
Chassis:
ChassisID: mac 00:00:5e:7b:a4:10
SysName: myserver
Port:
PortID: ifname eno5
PortDescr: eno5
TTL: 120
-------------------------------------------------------------------------------
root@myserver:~# lldpcli show neighbor ports eno5 ------------------------------------------------------------------------------- LLDP neighbors: -------------------------------------------------------------------------------
生のハードウェアIDが表示されていたため、BIOSの設定を疑って漁ってみたが、見つからなくて途方に暮れたので友人たちに訪ねてみると早速ヒントを貰った
NICか何かがオフロードしちゃって応答してたとかいう事象があったような… https://t.co/qOrKDpdi4u
— Masayuki Kobayashi (@markunet) 2020年6月2日
Intel NIC (i40eドライバ)でLLDPのオフロードが有効になっているようである。
centos6 - Disable internal Intel X710 LLDP agent - Server Fault
バージョン2.3.6以降のi40eのドライバーではethtool経由でLLDPオフロードを無効にできるようであるが、Ubuntu18.04で使っていたドライバはそれより若いバージョンであったため、 debugコマンド経由で無効にする方法を利用した。以下のようにdisable-lldp-offload.sh という名前でスクリプトを配置し、再起動時でもオフロードの無効化が自動でできるようにするため、/etc/cron.d/lldp から@rebootで呼び出すことにした(systemdではなく)。
#!/bin/bash i40e_path=/sys/kernel/debug/i40e for dev in $i40e_path/*; do [ -e "$dev" ] || break echo lldp stop > "${dev}/command” done
@reboot root sleep 60 && /root/disable-lldp-offload.sh
スイッチ側からも無事に正しい情報を参照できるようになった。
{master:0}
me@myswitch> show lldp neighbors
Local Interface Parent Interface Chassis Id Port info System Name
xe-0/0/8 ae2 00:00:5e:7b:a4:10 eno5 myserver
xe-0/0/10 ae2 00:00:5e:7b:a4:10 ens1f0 myserver
ありがとう @markunet !!