简介
本文档介绍在Cisco Nexus 7000/7700 F3模块上执行ELAM(嵌入式逻辑分析器模块)的步骤。
先决条件
要求
思科建议您先熟悉Cisco Nexus操作系统(NX-OS)和基本Nexus架构,然后再继续本文档中介绍的信息。
ELAM只能由network-admin角色完成。请确保以具有网络管理员权限的用户身份登录。
使用的组件
本文档中的信息基于以下软件和硬件版本:
- 思科 Nexus 7700 系列交换机
- 思科N7700 F3系列模块(N77-F324FQ-25,24端口10/40千兆以太网模块)
- 思科NX-OS版本8.4.9
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
什么是ELAM?
ELAM通过捕获实时数据包而不中断来帮助排除网络转发问题,并且不会影响性能或控制平面资源。ELAM是思科技术支持中心(TAC)工程师最常使用的强大、精细且非侵入性工具。但是,了解ELAM工具一次仅捕获一个数据包(ELAM启动后收到的第一个数据包)至关重要。如果需要捕获流的所有数据包,请使用SPAN或ERSPAN。
ELAM可以回答以下问题:
- 感兴趣的帧是否进入交换机?
- 数据包是从哪个端口和VLAN接收的?
- 传入数据包的源MAC地址和目的MAC地址分别是什么?
- 数据包如何重写,发送到哪个端口?
拓扑
在本文中,连接到N77-F3端口E5/23的Host1将流量发送到Host2。ELAM用于捕获从主机1到Host2的单个帧。
要在N7K上运行ELAM,首先需要以使用网络管理员的用户身份登录,然后需要连接到模块。
N77-F3# attach module 5
Attaching to module 5 ...
To exit type 'exit', to abort type '$.'
Last login: Thu Jan 18 05:31:04 pst 2024 from 127.1.1.3 on pts/0
识别入口转发引擎
Nexus 7000作为全分布式交换机运行,由入口线卡的转发引擎做出转发决策。
在本文中,相关流量预期将通过端口5/23进入交换机。在N7K示例中,m模块5 是F3模块。
N77-F3# show module 5
Mod Ports Module-Type Model Status
--- ----- ----------------------------------- ------------------ ----------
5 24 10/40 Gbps Ethernet Module N77-F324FQ-25 ok
Mod Sw Hw
--- --------------- ------
5 8.4(9) 1.3
对于F3模块,请使用内部代号Flanker在第2层(L2)转发引擎(FE)上执行ELAM。
module-5# show hardware internal dev-port-map
--------------------------------------------------------------
CARD_TYPE: 24 port 40G
>Front Panel ports:24
--------------------------------------------------------------
Device name Dev role Abbr num_inst:
--------------------------------------------------------------
> Flanker Fwd Driver DEV_LAYER_2_LOOKUP L2LKP 12
FP port | PHYS | MAC_0 | L2LKP | L3LKP | QUEUE |SWICHF
22 10 10 10 10 0,1
23 11 11 11 11 0,1 >>>Port 23 belongs to FE instance 11
24 11 11 11 11 0,1
+-----------------------------------------------------------------------+
在此输出中,端口E5/23显然属于FE实例11。
第2层FE数据总线(DBUS)在第2层(L2)和第3层(L3)查找之前传输原始报头信息,而结果总线(RBUS)包含L3和L2查找的结果。对于大多数故障排除场景,第2层ELAM捕获就足够了。
N77-F3# attach module 5
Attaching to module 5 ...
To exit type 'exit', to abort type '$.'
Last login: Thu Jan 18 05:31:04 pst 2024 from 127.1.1.3 on pts/0
module-5# elam asic flanker instance 11
module-5(fln-elam)# ?
layer2 ELAMs for layer 2
layer3 ELAMs for layer 3
module-5(fln-elam)# layer2
示例:ARP ELAM捕获
在本例中,VLAN 100(IP地址为192.168.1.1,MAC地址为8c60.4fc7.c5bc)上链接到端口E5/23的Host1发送地址解析协议(ARP)请求。此请求旨在解析IP地址为192.168.1.2的同一VLAN 100上另一台主机的MAC地址。
配置触发器
Flanker ASIC支持各种帧类型的ELAM触发器。ELAM触发器必须与帧类型对应。如果该帧是ARP帧,则触发器也必须设置为ARP选项。其他L2触发器无法捕获ARP帧。如果使用ELAM捕获MPLS帧,请选择IPv4或IPv6而不是MPLS。有关详细信息,请参阅Bug部分。
module-5(fln-l2-elam)# trigger dbus ?
arp ARP Frame Format >>>capture ARP packet. Other L2 does not work for ARP
fc Fc hdr Frame Format
ipv4 IPV4 Frame Format >>>capture IPv4 frame
ipv6 IPV6 Frame Format >>>capture IPv6 frame
mpls MPLS
other L2 hdr Frame Format >>>capture non-ip l2 frame
rarp RARP Frame Format
在本示例中,根据ARP帧的目标IP地址字段捕获帧,因此仅指定此值。
侧翼需要为DBUS和RBUS设置触发器。RBUS触发器被简化trig
,与DBUS触发器的条件相同。
module-5(fln-l2-elam)# trigger dbus arp ingress if target-ip-address 192.168.1.2
module-5(fln-l2-elam)# trigger rbus ingress if trig
配置触发器后,即可开始捕获。
module-5(fln-l2-elam)# start
要验证ELAM是否捕获了任何数据包,可以运行该status
命令。 术语Armed表示尚未捕获匹配的数据包。
module-5(fln-l2-elam)# status
ELAM Slot 5 instance 11: L2 DBUS Configuration: trigger dbus arp ingress if target-ip-address 192.168.1.2
L2 DBUS: Armed >>>no matched packet
ELAM Slot 5 instance 11: L2 RBUS Configuration: trigger rbus ingress if trig
L2 RBUS: Armed >>>no matched packet
从Host1(192.168.1.1)对192.168.1.2执行ping操作。由于Host1上没有ARP条目,因此Host1在广播数据包中发出ARP请求。FE收到ARP帧后,会检查触发器。如果存在匹配,ELAM将捕获此帧的转发决策,然后ELAM状态将显示为Triggered。
module-5(fln-l2-elam)# status
ELAM Slot 5 instance 11: L2 DBUS Configuration: trigger dbus arp ingress if target-ip-address 192.168.1.2
L2 DBUS: Triggered >>Packet hit
ELAM Slot 5 instance 11: L2 RBUS Configuration: trigger rbus ingress if trig
L2 RBUS: Triggered >>Packet hit
解释结果
只有DBUS和RBUS捕获了相同的数据包时,结果才有效。因此,有必要检查DBUS和RBUS结果中的序列号。如果它们不匹配,您可以重新启动并再次捕获它们,直到它们对齐。
module-5(fln-l2-elam)# show dbus | in seq
sequence-number : 0x7 vl : 0x0
module-5(fln-l2-elam)# show rbus | in seq
l2-rbus-trigger : 0x1 sequence-number : 0x7
建议首先检查DBUS输出,因为它包含数据,然后再进行任何重写。以下是ARP ELAM捕获的一个示例。请注意,某些输出已省略。
module-5(fln-l2-elam)# show dbus
cp = 0x20c6ad1c, buf = 0x20c6ad1c, end = 0x20c7706c
--------------------------------------------------------------------
Flanker Instance 11 - Capture Buffer On L2 DBUS:
<snip>
--------------------------------------------------------------------
L2 DBUS PRS MLH ARP/RARP
--------------------------------------------------------------------
valid : 0x1 requst-response : 0x1 >>>ARP request
(1:for ARP request,2: for ARP reply, 3:for RARP request, 4:for RARP reply)
port-id : 0x0 last-ethertype : 0x806 >>>Ethernet type, 0x0806 means ARP
packet-type : 0x0 l2-length-check : 0x0 >>>0 for ingress, 1 for egress
vqi : 0x0 packet-length : 0x40 >>>L2 ethernet frame totally length 64 byte
vlan : 0x64 destination-index : 0x0 >>>VLAN100
source-index : 0xb79 bundle-port : 0x0 >>>source port ltl index
status-is-1q : 0x0 trill-encap : 0x0 >>>0 means frame without vlan tag
sender-ip-address: 192.168.1.1 >>>sender-ip-address in ARP header
target-ip-address: 192.168.1.2 >>>target-ip-address in ARP header
sender-mac-address : 8c60.4fc7.c5bc >>>sender-mac-address in ARP header
target-mac-address : ffff.ffff.ffff >>>target-mac-address in ARP header
destination-mac-address : ffff.ffff.ffff >>>sestination mac in ethernet header
source-mac-address : 8c60.4fc7.c5bc >>>source mac in ethernet header
通过DBUS数据,您可以确认帧是否在VLAN100(vlan:0x64)上接收,其中源MAC地址为8c60.4fc7.c5bc,目的MAC地址为ffff.ffff.ffff。您还可以确定这是源自IP 192.168.1.1的ARP请求帧。
要检验接收帧的端口,请使用(端口索引PIXM
管理器)命令。此命令显示本地目标逻辑(LTL)到前端口或前端口组的映射。
N77-F3# show system internal pixm info ltl 0xb79
------------------
Type LTL
---------------------------------
PHY_PORT Eth5/23
FLOOD_W_FPOE 0xc031
输出显示,源索引0xb79映射到端口E5/23。这将验证端口E5/23上是否收到该帧。
在确认ELAM已捕获所需帧后,您可以使用RBUS数据验证转发决策的结果(请注意,某些输出已忽略)。
module-5(fln-l2-elam)# show rbus
--------------------------------------------------------------------
L2 RBUS INGRESS CONTENT
--------------------------------------------------------------------
di-ltl-index : 0xc031 l3-multicast-di : 0xc00 >>> destination ltl index
source-index : 0xb79 vlan : 0x64 >>> vlan id after rewritten
vqi : 0x0 di2-valid : 0x0 >>> use l3-multicast-di as di if this is 1
routed-frame : 0x0 copy-cause : 0x0 >>> 0x0 means N7K performs layer 2 switching
通过RBUS数据,您可以确认帧已在VLAN 100(0x64)上交换。要从di-ltl-index确定出口端口,请再次使用pixm命令。
N77-F3# show system internal pixm info ltl 0xc031
Member info
------------------
IFIDX LTL
---------------------------------
Eth5/24 0x0b78
Eth5/23 0x0b79
输出显示,端口E5/23和E5/24均属于LTL 0xc031。ARP数据包会交换到这两个端口。当从E5/23接收时,它仅从E5/24发出。
示例:IPv4 ELAM捕获
ipv4 l3 elam
在本示例中,VLAN 100上的Host1(IP地址为192.168.1.1/24,MAC地址为8c60.4fc7.c5bc)连接到端口E5/23,并向Host2发送Internet控制消息协议(ICMP)请求。Host2的IP地址为192.168.2.2/24,位于不同的VLAN(VLAN200)上。
配置触发器
在本示例中,由于Host1和Host2位于不同的VLAN中,因此从Host1到Host2的ICMP数据包通过N77-F3上的第3层路由。第2层ELAM用于捕获ICMP请求数据包。
源IP(192.168.1.2)和目的IP(192.168.2.2)都组合为DBUS触发器。ELAM仅捕获与所有触发器匹配的数据包。
N77-F3# attach module 5
Attaching to module 5 ...
To exit type 'exit', to abort type '$.'
Last login: Thu Jan 18 11:19:46 pst 2024 from 127.1.1.3 on pts/0
module-5# elam asic flanker instance 11
module-5(fln-elam)# layer2
module-5(fln-l2-elam)# trigger dbus ipv4 ingress if destination-ipv4-address 192.168.2.2 source-ipv4-address 192.168.1.2
module-5(fln-l2-elam)# trigger rbus ingress if trig
module-5(fln-l2-elam)# start
module-5(fln-l2-elam)# status
ELAM Slot 5 instance 11: L2 DBUS Configuration: trigger dbus ipv4 ingress if destination-ipv4-address 192.168.2.2 source-ipv4-address 192.168.1.2
L2 DBUS: Armed
ELAM Slot 5 instance 11: L2 RBUS Configuration: trigger rbus ingress if trig
L2 RBUS: Armed
从Host1(192.168.1.2)开始ping Host2(192.168.2.2)。FE实例11收到与触发器匹配的数据包后,ELAM状态将显示为Triggered。
module-5(fln-l2-elam)# status
ELAM Slot 5 instance 11: L2 DBUS Configuration: trigger dbus ipv4 ingress if destination-ipv4-address 192.168.2.2 source-ipv4-address 192.168.1.2
L2 DBUS: Triggered
ELAM Slot 5 instance 11: L2 RBUS Configuration: trigger rbus ingress if trig
L2 RBUS: Triggered
解释结果
确保RBUS和DBUS具有相同的序列号。此步骤对于每次捕获都是必需的。
module-5(fln-l2-elam)# show dbus | in seq
sequence-number : 0x74 vl : 0x0
module-5(fln-l2-elam)# show rbus | in seq
l2-rbus-trigger : 0x1 sequence-number : 0x74 >>same sequence number, valid elam result
以下是IPv4 ICMP ELAM捕获的示例。请注意,某些输出已省略。
module-5(fln-l2-elam)# show dbus
--------------------------------------------------------------------
L2 DBUS PRS MLH IPV4
--------------------------------------------------------------------
l4-protocol : 0x1 df : 0x0 >>>L4 protocol id, 1 means icmp packet
ttl : 0xff l3-packet-length : 0x54 >>>ip total length is 84 in this packet, ttl is 255
port-id : 0x0 last-ethertype : 0x800 >>>Ethernet type, 0x0800 means IPv4
vqi : 0x0 packet-length : 0x66 >>>L2 frame length field
vlan : 0x64 destination-index : 0x0 >>>vlan id 100
source-index : 0xb79 bundle-port : 0x0 >>>source port ltl index
status-is-1q : 0x1 trill-encap : 0x0 >>>1 means frame with vlan tag
source-ipv4-address: 192.168.1.2 >>>Packet source IP
destination-ipv4-address: 192.168.2.2 >>>Packet destination IP
destination-mac-address : 003a.9c40.8ac3 >>>Packet destination mac
source-mac-address : 8c60.4fc7.c5bc >>>Packet source mac
使用DBUS数据,您可以确认数据包是在源IP为192.168.1.2,目的IP为192.168.2.2的VLAN100(vlan:0x64)上收到的。您还可以确定这是IPv4 ICMP数据包。
要验证接收帧的端口,请运行(端口索引管理器PIXM
)命令。此命令显示本地目标逻辑(LTL)到前端口或前端口组的映射。
N77-F3# show system internal pixm info ltl 0xb79
------------------
Type LTL
---------------------------------
PHY_PORT Eth5/23
FLOOD_W_FPOE 0xc032
FLOOD_W_FPOE 0xc031
FLOOD_W_FPOE 0xc029
输出显示,源索引0xb79映射到端口E5/23。这确认该帧是在端口E5/23上收到的。
在确认ELAM已捕获感兴趣的ICMP数据包后,您可以使用RBUS数据验证转发决策的结果(请注意,某些输出已忽略)。从RBUS数据中,您可以看到帧从VLAN 100(0x64)路由到VLAN200。
module-5(fln-l2-elam)# show rbus
--------------------------------------------------------------------
L2 RBUS INGRESS CONTENT
--------------------------------------------------------------------
segment-id-valid : 0x0 ttl-out : 0xfe >>>TTL is 254
di-ltl-index : 0xb78 l3-multicast-di : 0x0 >>>destination port ltl
source-index : 0xb79 vlan : 0xc8 >>>vlan id is 200
routed-frame : 0x1 copy-cause : 0x0 >>>routed on N7K
要从di-ltl-index确定出口端口,请运行命PIXM
令。输出显示出口端口为E5/24。
N77-F3# show system internal pixm info ltl 0xb78
Member info
------------------
Type LTL
---------------------------------
PHY_PORT Eth5/24
FLOOD_W_FPOE 0xc032
FLOOD_W_FPOE 0xc031
FLOOD_W_FPOE 0xc029
其他验证(F3 ltl-region)
此命令的输出有助于了解LTL不匹配物理端口时的用途。示例包括丢弃LTL和带内LTL:
N77-F3# show system internal pixm info ltl-region
===========================================================
PIXM VDC 1 LTL MAP Version: 3
Description: LTL Map for Crossbow
===========================================================
LTL_TYPE SIZE START END
========================================================================
LIBLTLMAP_LTL_TYPE_SUP_ETH_INBAND 64 0xc00 0xc3f
-------------------------------------------------------------------
LIBLTLMAP_LTL_TYPE_DROP_DI_WO_HW_BITSET 0xcae
LIBLTLMAP_LTL_TYPE_DROP_DI 0xcad
ELAM漏洞
Cisco Bug ID |
Bug标题 |
修复版本 |
Cisco Bug ID CSCux73273 |
F3上ELAM的MPLS触发器不工作 |
没有固定版本,请使用解决方法 |
Cisco Bug ID CSCvm65736 |
N7k:ELAM释放触发器clp_elam crash/LC重新加载 |
7.3(3)D1(1)或8.2(3)或8.3(2) |