简介
本文档介绍嵌入式逻辑分析器模块(ELAM)的特点、其缺点以及如何最好地使用它。
背景信息
随着网络设备和协议的复杂性增加,发现网络问题的根源可能极其困难。通常,您必须确定帧是否在特定设备上正确接收和转发。有多种捕获工具、调试和技巧可帮助回答此问题。但是,并非所有设备都可行或可在生产网络中运行。
ELAM是一种工程工具,让您能够查看思科ASIC内部,并了解数据包的转发方式。它嵌入到转发管道中,并且可以实时捕获数据包,而不会中断性能或控制平面资源。它有助于回答以下问题:
- 数据包是否到达转发引擎(FE)?
- 数据包在哪个端口和VLAN上接收?
- 数据包如何显示(第2层(L2) — 第4层(L4)数据)?
- 数据包如何更改,以及它在何处发送?
ELAM功能非常强大、精细且无干扰。对于在硬件交换平台上工作的思科技术支持中心(TAC)工程师而言,它是一个宝贵的故障排除工具。
ELAM挑战
ELAM被设计为用于内部使用的诊断工具。CLI语法使用思科ASIC的内部代码名称,因此解释ELAM数据需要硬件特定架构和转发知识。许多细节无法解释,因为它们暴露了使思科设备成为同类最佳设备的内部思科专有功能。
因此,ELAM不是客户支持的功能,而且一直是内部使用的诊断工具。没有外部配置指南,语法和操作可能会从版本更改为版本,恕不另行通知。
鉴于这些挑战和免责声明,以下是ELAM现在描述的原因:
- 首先,TAC工程师使用ELAM来隔离问题非常常见。如果问题间歇性,TAC可能会请求您执行ELAM。了解这些步骤是非侵入性的,以及它们如何帮助提供根本原因分析,这一点非常重要。
- 此外,有时没有其他可用工具可以帮助隔离问题。例如,当在SPAN、ACL命中或入侵调试的生产时间内不允许更改配置时。可能没有时间联系TAC,而ELAM可能是极有帮助的工具,可作为最后手段。
ELAM基础知识
ELAM无需对每个平台进行完整的架构知识即可执行。本节介绍在Cisco Catalyst 6500和7600系列交换机平台(分别简称为6500和7600)以及Nexus 7000系列交换机平台上执行ELAM所需的基础知识。
ELAM工作流程
如前所述,ELAM依赖于基础硬件;因此,CLI语法取决于使用中的硬件。但是,每个平台遵循类似的工作流程,如下图所示:
注意:请参阅ELAM示例部分,了解此工作流程如何应用于不同平台。
以下四个步骤(本节稍后将进一步详细介绍)描述工作流:
- 确定预期的入口FE。当平台有多个FE时,确定为要捕获的数据包做出转发决策的FE至关重要。在正确的FE上配置ELAM。
- 配置ELAM触发器。您必须配置触发器,其中包含要捕获的数据包的特定详细信息。常见触发器包括源IP地址和目的IP地址或L4端口号。ELAM允许指定多个字段,并对配置的所有字段执行逻辑AND。
- 启动ELAM。
- 等待ELAM触发并显示结果。
集中式转发与分布式转发
要执行ELAM,您必须完成的第一步是确定正确的FE。带有经典或集中转发(CFC)线卡的6500使用集中转发,其中主用管理引擎做出转发决策。对于在传统或CFC线卡上进入的数据包,必须在活动管理引擎上执行ELAM。
在启用了分布式转发(DFC)的线卡中,转发决策由线路卡上的FE在本地做出,而无需管理引擎。对于入口DFC线卡的数据包,必须在线卡本身上执行ELAM。
对于Nexus 7000系列交换机平台,所有线卡都是全分布式的。此外,大多数线卡具有多个FE。设置ELAM时,您必须知道接收数据包的端口,并确定映射到该端口的FE。
有关硬件和转发架构的其他信息,请参阅以下Cisco Live 365文章:
数据总线(DBUS)和结果总线(RBUS)
DBUS包含FE用于做出转发决策的信息。它包含多个特定于平台的内部字段以及帧的报头信息。查看DBUS,以帮助确定数据包的接收位置和数据包L2-L4信息。
RBUS包含FE作出的转发决策。查看RBUS,以帮助确定帧是否被更改以及帧的发送位置。
本地目标逻辑(LTL)
LTL是用于表示端口或端口组的索引。源LTL索引和目标LTL索引显示帧的接收位置和发送位置。
注意:不同的平台和管理引擎使用不同的命令来解码LTL值。
泛洪位
LTL值显示为五个或更少的十六进制数(例如0xa2c)。 泛洪位是LTL结果中的第16位。通常,RBUS会显示一个带有目的LTL索引的字段,并为泛洪位设置一个单独的字段。为正确的LTL合并这些结果非常重要。例如:
RBUS:
FLOOD ........................... [1] = 1
DEST_INDEX ...................... [19] = 0x48
在本示例中,目标LTL索引为0x48。由于泛洪位为1,因此必须将LTL中的16位设置为1:
0x00048 = 0000 0000 0000 0100 1000
|
+---- Flood bit, set to 1 = 0x08048
在计算泛洪位后,目标索引已变为0x8048。
ELAM示例
这些示例旨在说明如何使用ELAM来验证基本IPv4或IPV6单播流。如本文档的ELAM挑战部分所述,解释所有内部字段或数据包类型(如组播、隧道和MPLS的再循环)并不实际。
请按照以下链接查看ELAM与不同设备的使用示例:
内部ASIC名称
作为参考,下表列出了为每种模块类型分配给ELAM的内部ASIC名称:
Platform |
模块类型 |
内部ASIC名称 |
Catalyst 6500/ Cisco 7600 |
Sup720(PFC3、DFC3) |
超人 |
Catalyst 6500 |
Sup2T(PFC4、DFC4) |
尤里卡 |
Nexus 7000 |
M系列(M1和M2) |
尤里卡 |
Nexus 7000 |
M3模块 |
F4 |
Nexus 7000 |
F1 |
猎户座 |
Nexus 7000 |
F2 |
Clipper |
Nexus 7000 |
F3 |
弗兰克 |
Nexus 6000 |
不适用 |
比古尔 |
使用ELAM的其他方法
使用ELAM有一种更为客户友好的方式。在Cisco IOS®版本12.2(50)SY及更高版本中,思科为运行Supervisor Engine 2T(Sup2T)的6500添加了show platform datapath命令。 此命令使用ELAM来捕获和显示特定数据包的转发结果。
对于Nexus 7000系列交换机平台,Cisco IOS版本6.2(2)中添加了易于使用的脚本elame,以利用ELAM:
N7KA# source sys/elame
elam helper, version 1.015
Usage:
elame [<src>] <dest> [vlan <vlan#>] [vrf <vrf_name>] [int <interface> | vdc] [trace]
在输出中:
- <src>和<dest>是1.2.3.4形式的IPV4地址。
- <vlan>和<interface>表示入口VLAN/接口。
- vdc表示当前虚拟设备环境(VDC)中的所有ELAM都已使用。
- [trace]表示系统在易失性(elame.log)中保留所有输出的记录。
请注意,此时F3模块和其他N77xx线卡不支持elame脚本。为了改进Elame脚本,已经提交了一些增强错误,业务部门仍在检查它。
注意:Elam是内部工具,只能在TAC/BU监督下使用。
相关信息