目录

简介

先决条件

要求

使用的组件

什么是ELAM?

拓扑

识别入口转发引擎

示例：ARP ELAM捕获

配置触发器

解释结果

示例：IPv4 ELAM捕获

配置触发器

解释结果

其他验证(F3 ltl-region)

ELAM漏洞

简介

本文档介绍在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)