简介
本文档介绍执行操作所用的步骤m和ELAM(嵌入式逻辑和alyzer模块),涵盖最相关的输出,并说明如何解释结果。
提示:有关ELAM的概述,请参阅ELAM概述文档。
适用硬件
本文档中介绍的过程仅适用于以下硬件:
N9K-C93180YC-EX |
N9K-C92304QC |
N9K-X9736C-EX |
N9K-C92300YC |
N9K-C93108TC-EX |
N9K-X9788TC-FX |
N9K-X9732C-EX |
N9K-97284-YC-FX |
N9K-X97160YC-EX |
N9K-C-93180-FX |
N9K-C93180LC-EX |
N9K-C-93108-FX |
N9K-C92160YC-X |
N9K-C9348GC-FXP |
N9K-C9272Q |
N9K-X9732C-FX |
N9K-C9236C |
N9K-C9336C-FX2 |
N9K-C93240YC-FX2
|
N9K-C93300YC-FX2 |
N9K-C9364C |
N9K-C9332C |
|
|
Nexus Tahoe ASIC ELAM流程
拓扑
第1步 — 检验端口的ASIC、Slice和SrcId
N9K-C92160YC-X-2# show hardware internal tah interface e1/49
IfIndex: 436232192
DstIndex: 5952
IfType: 26
Asic: 0 <<<<<<<<< Asic: 0
AsicPort: 56
SrcId: 48 <<<<<<<< Slice: 1 <<<<<<<<< PortOnSlice: 24
注意:ELAM应仅用于一个终端窗口,因为您维护每个片段的全局内容、lu-a2d等。
例如,端口通道(PO)可能有两个链路,即Eth 1/53对应片0,Eth 1/54对应片1。一次在两个不同的终端窗口上为不同的切片设置ELAM不会有所帮助,因为后一个切片(例如切片1)将覆盖第一个切片(切片0),最终在两个终端窗口上获得相同的结果。
您可以通过以下方式仔细检查此信息:
N9K-C92160YC-X-2# show system internal ethpm info interface e1/49 | i i src
IF_STATIC_INFO: port_name=Ethernet1/49,if_index:0x1a006000,ltl=5952,slot=0, nxos_port=192,dmod=1,dpid=56,
unit=0,queue=65535,xbar_unitbmp=0x0,ns_pid=255,slice_num=1,port_on_slice=24,src_id=48
步骤2 — 连接到模块
N9K-C92160YC-X-2# attach mod 1
第3步 — 进入ELAM配置模式并指定第1步中的正确ASIC
module-1# debug platform internal tah elam asic 0
第4步 — 配置ELAM触发器
注意:根据捕获的数据包/流,您可以在此处指定许多选项
module-1(TAH-elam)# trigger init asic 0 slice 1 lu-a2d 1 in-select 6 out-select 0 use-src-id 48
提示:
- 如果入口和出口端口位于同一ASIC上的不同片上,则出口片上的ELAM不会捕获传出数据包,因为数据包不会通过出口片上的LUX Blocks,因此会绕过ELAM。
- lu-a2d 0用于反向ELAM,其中触发器基于结果,lu-a2d 1用于ELAM,其中触发器基于数据包属性
- 始终使用6表示内选,使用0表示外选
警告:请勿在lu-a2d后使用0,否则可能会使交换机崩溃 — 有关详细信息,请参阅CSCvd64106
第5步 — 使用SRC和DEST IP设置ELAM触发器
在本示例中,我们的源IP地址为192.0.2.2,而目的IP地址为192.0.2.1,如下所示:
module-1(TAH-elam-insel6)# reset
module-1(TAH-elam-insel6)# set outer ipv4 dst_ip 192.0.2.1 src_ip 192.0.2.2
注意:请确保“reset”,因为“set”命令在整个ELAM中有效,并且可能导致它不在意外字段上触发或触发。
第6步 — 启动ELAM
module-1(TAH-elam-insel6)# start
GBL_C++: [MSG] tahusd_elam_wrapper_init:36:asic type 5 inst 0 slice 1 a_to_d 1 insel 6 outsel 0
GBL_C++: [MSG] Inside tahusd_elam_wrapper_init
GBL_C++: [MSG] tahusd_elam_wrapper_enable:7e:asic type 5 inst 0 slice 1 a_to_d 1
GBL_C++: [MSG] - writing data=0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001FD901C4E2A0000000000000000000002000000000000000000000000000000000000000000000000000000030001
GBL_C++: [MSG] - writing mask=0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001FFFFFFFFFFFE00000000000000000000038000000000000000000000000000000000000000000000000000001FF001
第7步 — 验证您的ELAM是否触发,然后查看结果
注意:从NX-OS 7.0(3)I5(2)及更高版本开始,ELAM报告的简要版本如下所示。如果运行的是7.0(3)I5(2)之前的版本;请继续执行“查看ELAM结果……”部分。
module-1(TAH-elam-insel6)# report
SUGARBOWL ELAM REPORT SUMMARY
slot - 1, asic - 1, slice - 1
============================
Incoming Interface: Eth1/49
Src Idx : 0xd, Src BD : 10
Outgoing Interface Info: dmod 1, dpid 14
Dst Idx : 0x602, Dst BD : 10
Packet Type: IPv4
Dst MAC address: CC:46:D6:6E:28:DB Src MAC address: 00:FE:C8:0E:27:15
.1q Tag0 VLAN: 10, cos = 0x0
Dst IPv4 address: 192.0.2.1 Src IPv4 address: 192.0.2.2
Ver = 4, DSCP = 0, Don't Fragment = 0
Proto = 1, TTL = 64, More Fragments = 0
Hdr len = 20, Pkt len = 84, Checksum = 0x667f
L4 Protocol : 1
ICMP type : 0
ICMP code : 0
Drop Info:
----------
LUA:
LUB:
LUC:
LUD:
Final Drops:
- “report detail”CLI将为您提供更详细的输出,如下一节所述。这也是旧版本上的默认输出。
- Dst Idx是出口接口的niv_idx。这可以通过“show hardware internal tah interface ex/y”进行检查和/或引用 | i niv"
- dmod和dpid对应于出口接口。可以使用show system internal ethpm info int ex/y进行检查 | i dpid”
- 此外,“show interface hardware-mapping”可用于验证dmod/dpid。
注意:
1.在确认数据包是否实际被丢弃时,“Final Drops”字段是唯一要考虑的字段。 换句话说,虽然您可能会看到其他字段(如LUA/B/C/D)中抛出的异常,但这并不一定意味着数据包将被丢弃。请仔细查看此输出(根据需要与TAC讨论)。
2.传送到CPU的流量将设置sup_hit标志(报告详细信息 | grep sup_hit)。
- 您可以使用show system internal access-list sup-redirect-stats all并匹配管理引擎索引来解码原因
- 确保配置了正确的“system routing mode”(show system routing mode)
经历CPU传送的流量示例:
module-1(TAH-elam-insel6)# report
SUGARBOWL ELAM REPORT SUMMARY
=============================
Incoming Interface: Eth1/3
Src Idx : 0x9, Src BD : 23
Outgoing Interface Info: dmod 1, dpid 72
Dst Idx : 0x601, Dst BD : 802
Packet Type: IPv4
Dst MAC address: B0:8B:CF:A3:D0:4B
Src MAC address: 00:10:DB:FF:10:00
.1q Tag0 VLAN: 23, cos = 0x0
Dst IPv4 address: 192.0.2.1
Src IPv4 address: 192.0.2.2
Ver = 4, DSCP = 2, Don't Fragment = 1
Proto = 6, TTL = 49, More Fragments = 0
Hdr len = 20, Pkt len = 60, Checksum = 0x63c3
L4 Protocol : 6
TCP Dst Port : 80
TCP Src Port : 46340
Sup hit: 1, Sup Idx : 2720 <<---- CPU punt, use below CLI to resolve the meaning of Sup Idx
Drop Info:
----------
LUA:
LUB:
LUC:
LUD:
Final Drops:
# show system internal access-list sup-redirect-stats all | grep 2720 2720 copp-system-p-acl-http 63
查看NX-OS 7.0(3)I5(2)之前版本的ELAM结果
+它是否有dot1q报头?
module-1(TAH-elam-insel6)# report | grep pr_lu_vec_l2v.qtag0 GBL_C++: [MSG] pr_lu_vec_l2v.qtag0_vld: 0x1 << dot1q yes? 0x1 GBL_C++: [MSG] pr_lu_vec_l2v.qtag0_cos: 0x0 GBL_C++: [MSG] pr_lu_vec_l2v.qtag0_de: 0x0 GBL_C++: [MSG] pr_lu_vec_l2v.qtag0_vlan: 0xA << VL 10
+检查VLAN:
module-1(TAH-elam-insel6)# report | grep -1 fpx_lookup_vec.lkup.macsakey.key.fid
GBL_C++: [MSG] fpx_lookup_vec.lkup.macsakey.key.vld: 0x1
GBL_C++: [MSG] fpx_lookup_vec.lkup.macsakey.key.fid_type: 0x0
GBL_C++: [MSG] fpx_lookup_vec.lkup.macsakey.key.fid_vld: 0x0
GBL_C++: [MSG] fpx_lookup_vec.lkup.macsakey.key.fid: 0xA << dec 0xa = VL 10
GBL_C++: [MSG] fpx_lookup_vec.lkup.macsakey.key.mac: 0xFEC80E2715
+检查SRC MAC(您实际上也可在上一步中看到这一点):
module-1(TAH-elam-insel6)# report | grep -i fpx_lookup_vec.lkup.macsakey.key.mac
GBL_C++: [MSG] fpx_lookup_vec.lkup.macsakey.key.mac: 0xFEC80E2715 << 00fe.c80e.2715
GBL_C++: [MSG] fpx_lookup_vec.lkup.macsakey.key.mac: 0xFEC80E2715
GBL_C++: [MSG] fpx_lookup_vec.lkup.macsakey.key.mac: 0xFEC80E2715
GBL_C++: [MSG] fpx_lookup_vec.lkup.macsakey.key.mac: 0xFEC80E2715
GBL_C++: [MSG] fpx_lookup_vec.lkup.macsakey.key.mac: 0xFEC80E2715
+这是新学习内容吗?
module-1(TAH-elam-insel6)# report | grep -1 fpx_lookup_vec.sa_notify_info
GBL_C++: [MSG] fpx_lookup_vec.lkup.ptvec.misc1.tcp_flags: 0x0
GBL_C++: [MSG] fpx_lookup_vec.sa_notify_info: 0x5200000C060
GBL_C++: [MSG] fpx_lookup_vec.sa_notify_info.enable: 0x0 << This will be set to 0x1 for learning to happen
GBL_C++: [MSG] fpx_lookup_vec.sa_notify_info.conv_learn_only: 0x0
+检查SRC和DST IP:
module-1(TAH-elam-insel6)# report | grep vec_l3v.ip.*a
GBL_C++: [MSG] pr_lu_vec_l3v.ip.da: 0x00000000000000000c0000201 << DST IP: 192.0.2.1
GBL_C++: [MSG] pr_lu_vec_l3v.ip.sa: 0x00000000000000000c0000202 << SRC IP: 192.0.2.2
+验证您的入口SRC_ID:
module-1(TAH-elam-insel6)# report | egrep SRC
GBL_C++: [MSG] SRCID: 0x30
module-1(TAH-elam-insel6)# report | grep vec.ihdr.ieth.hdr.src_idx
GBL_C++: [MSG] lurw_vec.ihdr.ieth.hdr.src_idx: 0xA9 << sh hardware internal tah int e1/49 | i i niv_idx
+如果ELAM未触发,其显示如下:
module-1(TAH-elam-insel6)# report
GBL_C++: [MSG] tahusd_elam_wrapper_report:27d:asic type 5 inst 0 slice 1 a_to_d 1 insel 6 outsel 0
GBL_C++: [MSG] Inside tahusd_elam_wrapper_dav_report
GBL_C++: [MSG] ELAM not yet triggered <<<<<<
VXLAN封装的ELAM:
由于VXLAN数据包将被封装,因此ELAM需要在内部报头而非外部报头上触发 — 请参阅以下示例了解ARP帧:
module-1# debug platform internal tah elam asic 0
module-1(TAH-elam)# trigger init asic 0 slice 1 in-select 7 out-select 0 use-src-id 48
module-1(TAH-elam-insel7)# reset
module-1(TAH-elam-insel7)# set inner arp source-ip-addr 192.0.2.2 target-ip-addr 192.0.2.1
module-1(TAH-elam-insel7)# start
module-1(TAH-elam-insel7)# report
NX-OS 7.0(3)I7(2)后的ELAM配置
在NX-OS 7.0(3)I7(2)之后,ELAM现在无需指定ASIC或切片编号即可全局触发 — 请参阅以下示例:
Nexus-9K# debug platform internal tah elam
Nexus-9K(TAH-elam)# trigger init
Nexus-9K(TAH-elam-insel6)# reset
Nexus-9K(TAH-elam-insel6)# set outer ipv4 dst_ip 192.0.2.1 src_ip 192.0.2.2
Nexus-9K(TAH-elam-insel6)# start
Nexus-9K(TAH-elam-insel6)# report