目录
# lldptool工具简介
可使用lldptool在操作系统里查看网口和交换机连接的状态信息,
比如说:
和eth1网口相连的网络交换机的Vlan ID是多少?
网络交换机的名称和mac地址是什么?
网线插在网络交换机的哪个口上方?
交换机是否使能了PFC等
#LLDP协议
LLDP = Link Layer Discovery Protocol = 链路层发现协议,以太网交换机基本都内置该功能。
LLDP协议使一台设备可将其主要的 配置信息,发送给同一个局域网的其它设备。
lldptool是使用LLDP协议获取 设备的物理拓扑结构和 管理配置信息的工具。
#安装lldp包
yum install lldpad -y
启动lldpad 服务
systemctl start lldpad
client <-→server 模式
lldptool是client,lldpad 进程是server,它们之间通过收发LLDPDU (LLDP数据单元,可理解为报文)协商。
#守护进程及配置
1、首先确保交换机上已经启用lldp协议。
2、待安装完软件之后默认配置文件是没有的,当启动lldp守护进程时自动生成。
# lldpad –d 或 /etc/init.d/lldpad start
默认的配置文件存放路径:/var/lib/lldpad/lldpad.conf
#lldptool常用命令
(常用选项:-t、 获取tlv获取指定接口的TLV信息;-T、 设置tlv,设置指定接口的TLV信息;-i [ifname] 网口名,如eth0;-V[tlvid],指定TLV标识符)
##查询
加-i 指定网口,不加-i 就是对所有网口。
ethx=ens1f0
lldptool -t -n -i ${ethx} 查看端口所连接详细信息(链接哪个交换机等)
lldptool -l -i ${ethx} adminStatus 查询网口eth3的LLDP状态
lldptool -S -i ${ethx} adminStatus 查询网口eth3的LLDP统计
lldptool -t -i ${ethx} 查询已经传过来的给eth3用的TLV (TLV 可理解为信息段)
lldptool -t -n -i ${ethx} 查询eth3接收到的邻居(neighbor)的TLV (TLV 可理解为信息段)
--信息太多时,可以选择只显示某TLV 段(-V):lldptool -t -n -i eth3 -V sysDesc 查询eth3的邻居的sysDesc 段的信息
lldptool -T -i ${ethx} -V portDesc enableTx=yes #让lldp server 把portDesc信息段放入LLDPDU中(每次查询,lldp server会返回LLDPDU报文)
IEEE/CEE/CIN DCBX 协议版本,默认DCBX (lldptool-dcbx(8) —https://manpages.debian.org/testing/lldpad/lldptool-dcbx.8.en.html)
lldptool -t -i ${ethx} -V PFC
在返回的结果中,可以看到“IEEE 8021QAZ”,说明主机该接口和对端DCBX协商用的是IEEE 协议版本:
[root@master02 ~]# lldptool -t -i ${ethx} -V PFC
IEEE 8021QAZ PFC TLV
Willing: yes
MACsec Bypass Capable: no
PFC capable traffic classes: 8
PFC enabled: none
##设置
ethtool --set-priv-flags ens5f0 fw-lldp-agent off 设置端口的私有属性
lldptool -Ti ens5f0 -V PFC willing=no enabled=0 (如下信息,端口有多个TLV,设置端口的PFC TLV的willing为no enabled为0)[root@master03 ~]# lldptool -t -i ${INTERFACE}
……
Port ID TLV
MAC: b4:96:91:c1:aa:02
IEEE 8021QAZ ETS Configuration TLV
Willing: yes
CBS: not supported
MAX_TCS: 8
PRIO_MAP: 0:0 1:0 2:0 3:0 4:0 5:0 6:0 7:0
TC Bandwidth: 0% 0% 0% 0% 0% 0% 0% 0%
TSA_MAP: 0:strict 1:strict 2:strict 3:strict 4:strict 5:strict 6:strict 7:strict
IEEE 8021QAZ ETS Recommendation TLV
PRIO_MAP: 0:0 1:0 2:0 3:0 4:0 5:0 6:0 7:0
TC Bandwidth: 0% 0% 0% 0% 0% 0% 0% 0%
TSA_MAP: 0:strict 1:strict 2:strict 3:strict 4:strict 5:strict 6:strict 7:strict
IEEE 8021QAZ PFC TLV
Willing: yes
MACsec Bypass Capable: no
PFC capable traffic classes: 8
PFC enabled: none
End of LLDPDU TLV
设置PFC:
lldptool -T -i <ethX> -V PFC enabled=x,x,x,x,x,x,x,x
如:lldptool -T -i <ethX> -V PFC enabled=1,2,4
查看PFC:
lldptool -t -i <ethX> -V PFC
关闭所有prio的PFC
lldptool -T -i <ethX> -V PFC enabled=none
关闭willing(不从交换同步设置)
lldptool -Ti ens5f0 -V PFC willing=no enabled=0
ethtool -a ens5f0
lldpad -d
ethtool --set-priv-flags ens5f0 fw-lldp-agent off
lldptool -Ti ens5f0 -V PFC willing=no enabled=0
lldptool -Ti ens5f0 -V ETS-CFG willing=no up2tc=0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0 tsa=0:ets,1:strict,2:strict,3:strict,4:strict,5:strict,6:strict,7:strict
tcbw=100,0,0,0,0,0,0,0
lldptool set-lldp -i $i adminStatus=rxtx 【配置LLDP模式】
LLDP协议有4种工作模式:
TxRx:既发送也接收LLDP报文。
Tx:只发送不接收LLDP报文。
Rx:只接收不发送LLDP报文。
Disable:既不发送也不接收LLDP报文。
(rxtx 配置LLDP模式为既发送也接收LLDP 帧这样就和网络交换机建立了邻居关系,接下来就可以查询连接的交换机信息了)
lldptool -T -i $i -V sysName enableTx=yes; 【sysName TLV信息段的发送 使能】#让lldp server 把sysName 信息段放入返回给客户端LLDPDU报文中(每次查询,lldp server会返回LLDPDU报文)
lldptool -T -i $i -V portDesc enableTx=yes ; 【portDesc TLV信息段的发送 使能】#让lldp server 把portDesc 信息段放入返回给客户端LLDPDU报文中(每次查询,lldp server会返回LLDPDU报文)
lldptool -T -i $i -V sysDesc enableTx=yes; 【sysDesc TLV信息段的发送 使能】#让lldp server 把sysDesc 信息段放入返回给客户端LLDPDU报文中(每次查询,lldp server会返回LLDPDU报文)
TLV:(Type/Length/Value)
portDesc : Port Description TLV
sysName : System Name TLV
sysDesc : System Description TLV
-
#样例
查看端口所连接详细信息:lldptool -t -n -i eth1
查看端口所连接详细信息:lldptool -t -n -i eth1 (n 既 neighbor)
#为网口eth2配置LLDP的收发工作模式(Configure LLDP adminStatus to Receive and Transmit for interface eth2)
lldptool -L -i eth2 adminStatus=rxtx
#让所有网口都不可用LLDP(Disable the LLDP adminStatus for all interfaces )
lldptool set-lldp adminStatus=disabled#查询网口eth3的LLDP状态(Query the LLDP adminStatus for interface eth3)
lldptool -l -i eth3 adminStatus
#查询网口eth3的统计信息(Query the LLDP statistics for interface eth3 )
lldptool -S -i eth3 adminStatus
#查询为给定接口传输的本地(Query the local TLVs which are being transmitted for a given interface: )
lldptool -t -i eth3#查询给定接口上收到的接收邻居TLV(Query the received neighbor TLVs received on a given interface: )
lldptool -t -n -i eth3#查询从邻居给定接口上的接收的系统描述TLV的值:Query the value of the System Description TLV as received from the neighbor on a given interface:
lldptool -t -n -i eth3 -V sysDesc#禁用给定接口的IEEE 802.3 MAC/PHY配置状态TLV的传输:Disable transmit of the IEEE 802.3 MAC/PHY Configuration Status TLV for a given interface:
lldptool -T -i eth3 -V macPhyCfg enableTx=no
#启用所有接口的端口的“Description TLV”的传输:Enable transmit of the Port Description TLV for all interfaces:
lldptool -T -V portDesc enableTx=yes
#查询给定接口的"端口描述TLV传输"的设定值:Query value of the transmit setting for the Port Description TLV for a given interface:
lldptool -t -V portDesc -c enableTx
#在eth3上设置一个 管理地址的TLV 以携带IPv4地址192.168.10.10(Set a Management Address TLV on eth3 to carry IPv4 address 192.168.10.10)
lldptool -T -i eth3 -V mngAddr ipv4=192.168.10.10#在eth3上设置一个 管理地址的TLV 以携带IPv4地址192.168.10.10(Set a Management Address TLV on eth3 to carry IPv6 address ::192.168.10.10)
lldptool -T -i eth3 -V mngAddr ipv6=::192.168.10.10#获取eth3管理地址TLV里配置IPv4地址(Get the configured IPv4 address for the Management Address TLV on eth3)
lldptool -t -i eth3 -V mngAddr -c ipv4#获取eth3管理地址TLV里的所有信息(Get all configured attributes for the Management Address TLV on eth3)
lldptool -t -i eth3 -V mngAddr -c#查询lldpad重新启动时将使用的当前DCBX模式。(这不是持久设置)Query the current DCBX mode that will be used if lldpad is restarted. (this is not a persistent setting)
lldptool -t -i eth3 -V IEEE-DCBX -c mode#在下一次lldpad重启后,将DCBX模式重置为“自动”(以IEEE DCBX模式启动)Reset the DCBX mode to be 'auto' (start in IEEE DCBX mode) after the next lldpad restart
lldptool -T -i eth3 -V IEEE-DCBX mode=reset#启用接口eth4的Edge Virtual Bridging TLV传输(Enable transmit of the Edge Virtual Bridging TLV for interface eth4)
lldptool -i eth4 -T -V evbCfg enableTx=yes#配置EVB TLV以设置reflective relay 和RTE、ECP和VDP功能(Configure EVB TLV to set reflective relay and RTE,ECP and VDP capabilities)
lldptool -T -i eth4 -V evbCfg fmode=reflectiverelay
#启用接口eth4的VDP传输(Enable transmit of the VDP for interface eth4)
lldptool -i eth4 -T -V vdp enableTx=yes#上面的命令的等价表达
#为网口eth2配置LLDP的收发工作模式
lldptool -L -i eth2 adminStatus=rxtxlldptool set-lldp -i eth2 adminStatus=rxtx
#查询网口eth3的LLDP状态
lldptool -l -i eth3 adminStatuslldptool get-lldp -i eth3 adminStatus
#查询网口eth3的统计信息
lldptool -S -i eth3 adminStatuslldptool stats -i eth3 adminStatus
#查询为给定接口传输的本地
lldptool -t -i eth3lldptool get-tlv -i eth3
#查询给定接口上收到的接收邻居TLV
lldptool -t -n -i eth3lldptool get-tlv -n -i eth3
#查询从邻居给定接口上的接收的系统描述TLV的值:
lldptool -t -n -i eth3 -V sysDesclldptool get-tlv -n -i eth3 -V 6
#禁用给定接口的IEEE 802.3 MAC/PHY配置状态TLV的传输:
lldptool -T -i eth3 -V macPhyCfg enableTx=nolldptool set-tlv -i eth3 -V 0x120f01 enableTx=no
#启用所有接口的端口的“Description TLV”的传输:
lldptool -T -V portDesc enableTx=yes
lldptool set-tlv -V 4 enableTx=yes#查询给定接口的"端口描述TLV传输"的设定值:
lldptool -t -V portDesc -c enableTx
lldptool get-tlv -V 4 -c enableTx#配置EVB TLV以设置reflective relay 和RTE、ECP和VDP功能
lldptool -T -i eth4 -V evbCfg fmode=reflectiverelay
lldptool -T -i eth4 -V evbCfg capabilities=rte,ecp,vdp
使用lldptool查看网口与交换机连接状态:
```
[root@wow ~]# lldptool -t -n -i eth0
Chassis ID TLV
MAC: 48:xx:xx:xx:xx:51 #mac地址
Port ID TLV
Ifname: GE1/0/1 #网线插在交换机上的端口位置
Time to Live TLV
System Name TLV
xx-xx-CE5850-xxxxx #交换机设备名
System Description TLV
Huawei Versatile Routing Platform Software
VRP (R) software, Version 8.150 (CE5855EI V200R002C50SPC800)
Copyright (C) 2012-2017 Huawei Technologies Co., Ltd.
HUAWEI CE5855-xxxx-xxx #华为的交换机System Capabilities TLV
System capabilities: Bridge, Router
Enabled capabilities: Bridge, Router
Management Address TLV
IPv4: xx.xxx.xxx.xx #ip地址
Ifindex: 4
OID: +[)
Port VLAN ID TLV
PVID:
Port and Protocol VLAN ID TLV
PVID: 0, not supported, not enabled
VLAN Name TLV
VID 3652: Name VLAN3652
MAC/PHY Configuration Status TLV
Auto-negotiation supported and enabled
PMD auto-negotiation capabilities: 0xxxxx
MAU type: 1000 BaseXFD
Link Aggregation TLV
Aggregation capable
Currently not aggregated
Aggregated Port ID: 0
Maximum Frame Size TLV
End of LLDPDU TLV
``````
使能传输
ethx=ens1f0
[root@master02 ~]# lldptool -t -i ${ethx} -V portDesc #使能传输之前,portDesc信息没有在LLDPDU (lldp数据单元,可以理解为协商的包文)中,此时lldp server给lldp客户端lldptool返回portDesc段的信息
[root@master02 ~]# lldptool -T -i ${ethx} -V portDesc enableTx=yes
enableTx = yes
[root@master02 ~]# lldptool -t -i ${ethx} -V portDesc #使能传输之后,此时lldp server给lldp客户端lldptool返回portDesc段的信息
Port Description TLV
Interface 4 as ens1f0```
语法
格式
lldptool <command> [options] [argument]
command
license
显示许可证信息
-h、 帮助
显示使用信息
-v、 版本
显示版本信息
-S、 统计数据
获取指定接口的LLDP统计信息
-t、 获取tlv
获取指定接口的TLV信息
-T、 设置tlv
设置指定接口的TLV信息
-l、 获取lldp
获取指定接口的LLDP参数
-五十、 设置lldp
为指定接口设置LLDP参数
-p、 ping(ping)
显示正在运行的lldpad进程的进程标识符
-q、 退出
退出交互模式
options
-i [ifname]网口名,如eth0
-V[tlvid]
指定TLV标识符
tlvid是用于识别特定LLDP TLV的整数值。tlvid值是不等于127(组织特定类型)的类型的Type值。对于组织特定的TLV,tlvid是由3字节OUI和1字节子类型表示的值,其中子类型是tlvid的最低阶字节。
tlvid可以作为数值(例如10或0xa)输入,或者对于支持的TLV,可以作为关键字输入。查看lldptool帮助输出以查看支持的TLV关键字列表。-n
"neighbor" option for commands which can use it (e.g. get-tlv)-g[bridge scope]
指定此命令操作的网桥作用域。允许设置和查询所有LLDP TLV模块的“nearest_bridge”(简称:“nb”)、“nearest_customer_bridge”(“ncb”)和“nearest_nontpmr_bridge(“nntpmrb”)组mac地址。配置保存在lldpad.conf中的独立部分中。如果未提供网桥作用域,则默认为“最近的网桥”以保持先前的行为。
-c<参数列表>TLV查询的“config”选项。指示查询针对指定TLV的配置元素。参数列表指定要查询的特定元素。如果未列出任何参数,则返回TLV的所有配置元素。
-r(r)
显示原始客户端界面消息-R(R)
仅显示原始客户端界面消息
ARGUMENTS
本节列出了可用于LLDP参数管理的参数。还描述了基本TLV(非组织特定TLV)的论点。有关其他lldptool手册页的参考信息,请参阅See ORO部分,其中包含各种组织特定TLV的用法详细信息和参数。
adminStatus
get-lldp/set-lldp命令的参数。为指定接口配置LLDP adminStatus参数。有效值为:disabled、rx、tx、rxtx
enableTx
get-tlv/set-tlv命令的参数。可以针对指定TLV的每个接口应用。有效值为:yes,no。如果DCBX TLV enableTx设置为no,则所有DCB功能TLV DCBX通告设置也将关闭。将enableTx设置为yes将启用DCBX播发设置。
ipv4
与管理地址tlv相关的get-tlv/set-tlv命令的参数。get命令将检索配置的值。设置值采用IPv4地址的形式:A.B.C.D
ipv6
与管理地址tlv相关的get-tlv/set-tlv命令的参数。get命令将检索配置的值。设置值采用IPv6地址的形式:1111:2222:3333:4444:5555:66666:7777:8888和各种速记变体。
报错记录
1 Failed to connect to lldpad - clif_open: Connection refused
connect: Connection refused
Failed to connect to lldpad - clif_open: Connection refused
原因:lldpad 还没有启动
处理方法:
lldpad -d Or
service lldpad start
2 lldptool: command not found
原因:还没有安装ll
dpad
处理方法:
yum install -y ll
dpad
lldpad与lldpd的对比
实现交换机端口的抓取,目前我知道的有两种工具,一种是lldpad,另一种是lldpd。
这两个工具做了一下对比,最终选择了lldpd。原因如下:
- lldpd比较新。
lldpad:https://github.com/jrfastab/lldpad
lldpd:https://github.com/vincentbernat/lldpd
通过对比可以看到lldpad最近一次更新,已经是5年前了。而lldpd的最近一次更新在本月。
- lldpd使用方便。
lldpd可以将输出的信息转化为json格式,非常方便使用。
关于更多lldpd见链接:https://www.jianshu.com/p/1c4aca526f1f
LLDP的工作原理
LLDP协议,从本质上来讲就是一个信息发现和通告协议。设备中的LLDP实体维护了两个MIB(Management Information Base) 库,一个是local system MIB,用来维护本地设备的相关信息;一个是remote system MIB,用来维护远端设备的相关信息。
LLDP 通过与相关的MIB库交互来初始化并维护本地MIB,并经本地的相关信息通告出去,同时接收其他设备的通告信息,并将其更新到remote system MIB。通过这种方式,就可以获取设备的邻居信息。用户就可以使用这两个MIB 库来完成自己的需求。
LLDP 报文格式
封装有LLDPDU (lldp 协议的协议数据单元)的报文,称之为LLDP帧。其封装格式有两种:Ethernet II 和 SNAP(Subnetwork Access Protocol,子网访问协议)。我们经常使用的就是以太帧,所以这儿就重点说一下基于Ethernet II 的LLDP报文。
Destination MAC address:目的MAC地址,为固定的组播MAC地址0x0180-C200-000E。
Source MAC address:源MAC地址,为端口MAC地址或设备桥MAC地址(如果有端口地址则使用端口MAC地址,否则使用设备桥MAC地址)
Type:报文类型,固定为0x88CC。
Data:数据,为LLDPDU
FCS:帧检验序列
其中LLDPDU 就是封装在LLDP报文数据部分的数据单元。只不过在组成LLDPDU之前,设备会先将本地的相关信息封装成TLV,然后再将多个TLV组合成一个LLDPDU,封装在LLDP报文的数据部分进行传送。
LLDPDU 格式
每个LLDPDU 最多可以携带28种TLV,LLDP报文预订,Chasis ID TLV, Port ID TLV, TTL TLV 和 End TLV 这四种是必须携带的,其余的TLV则是可选的。
下面是一个基本TLV的list:
TLV 格式
TLV是组成LLDPDU的单元,其基本格式如下:
其中TLV Type 和 TLV Info String Length 称为TLV的header, 剩下的信息就是TLV的数据部分,根据TLV Length字段的值,就可以拿到具体的TLV数据。
其中 TLV Type的定义和分配如下表:
其中type 0-8为基本的TLV集合,其中Mandatory 则为必须的TLV,必须包含在lldp 数据报文中。
使用例子
ethtool -a ens5f0
lldpad -d
ethtool --set-priv-flags ens5f0 fw-lldp-agent off
lldptool -Ti ens5f0 -V PFC willing=no enabled=0
lldptool -Ti ens5f0 -V ETS-CFG willing=no up2tc=0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0 tsa=0:ets,1:strict,2:strict,3:strict,4:strict,5:strict,6:strict,7:strict tcbw=100,0,0,0,0,0,0,0
IEEE and CEE
MyMellanoxGen2
type-length-values (TLVs) (IEEE and CEE examples)
IEEE 格式用4个不同的帧分别表示: ETS configuration, ETS Recommendation, PFC, and Application priority.
CEE 格式用一个 TLV 帧: for PFC and Application priority, and does not include ETS. See attached.