Introduzione
In questo documento vengono descritti i passaggi da eseguirem an ELAM (Embedded Logic Analyzer Module) su una serie di moduli ASIC Cisco Nexus 9000 CloudScale, descrive gli output più rilevanti e come interpretare i risultati.
Suggerimento: consultare il documento Panoramica ELAM per una panoramica su ELAM.
Dispositivi interessati
La procedura illustrata in questo documento è applicabile solo ai seguenti componenti hardware:
N9K-C93180YC-EX |
N9K-C9230QC |
N9K-X9736C-EX |
N9K-C92300YC |
N9K-C93108TC-EX |
N9K-X9788TC-FX |
N9K-X9732C-EX |
N9K-X97284YC-FX |
N9K-X97160YC-EX |
N9K-C93180YC-FX |
N9K-C93180LC-EX |
N9K-C93108TC-FX |
N9K-C92160YC-X |
N9K-C9348GC-FXP |
N9K-C9272Q |
N9K-X9732C-FX |
N9K-C923C |
N9K-C9336C-FX2 |
N9K-C93240YC-FX2
|
N9K-C93300YC-FX2 |
N9K-C9364C |
N9K-C932C |
|
|
Procedura Nexus Tahoe ASIC ELAM
Topologia
Passaggio 1 - Verifica dell'ASIC, della slice e dell'SrcId della porta
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
Attenzione: ELAM deve essere utilizzato solo su una finestra di terminale in quanto si gestisce il contenuto globale per ciascuna slice, lu-a2d, ecc.
Ad esempio, un canale porta (PO) può avere due collegamenti, Eth 1/53 che corrisponde alla slice 0 e Eth 1/54 che corrisponde alla slice 1. L'impostazione di ELAM su due finestre di terminale separate alla volta per le diverse slice non è di aiuto in quanto l'ultima slice (ad esempio la slice 1) sovrascriverà la prima (la slice 0), ottenendo lo stesso risultato su entrambe le finestre di terminale.
È possibile verificare queste informazioni tramite:
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
Fase 2 - Collegamento al modulo
N9K-C92160YC-X-2# attach mod 1
Passaggio 3 - Accedere alla modalità di configurazione ELAM e specificare l'ASIC corretto dal Passaggio 1
module-1# debug platform internal tah elam asic 0
Passaggio 4 - Configurare il trigger ELAM
Nota: esistono molte opzioni che è possibile specificare qui a seconda del pacchetto/flusso da acquisire
module-1(TAH-elam)# trigger init asic 0 slice 1 lu-a2d 1 in-select 6 out-select 0 use-src-id 48
Suggerimento:
- Se le porte in entrata e in uscita si trovano su fette diverse sullo stesso ASIC, ELAM sulla fetta in uscita non acquisirà il pacchetto in uscita perché il pacchetto non attraverserà i blocchi LUX sulla fetta in uscita e quindi ignorerà ELAM.
- lu-a2d 0 è utilizzato per l'ELAM inverso, in cui il trigger è basato sul risultato, e lu-a2d 1 è utilizzato per l'ELAM, in cui il trigger è basato sugli attributi del pacchetto
- Utilizzare sempre 6 per la selezione interna e 0 per la selezione finale
Avviso: non usare 0 dopo lu-a2d in quanto potrebbe causare un arresto anomalo dello switch. Per ulteriori informazioni, vedere CSCvd64106
Fase 5 - Impostazione dei trigger ELAM utilizzando SRC e DEST IP
Nell'esempio, l'indirizzo IP di origine è 192.0.2.2 e l'indirizzo IP di destinazione è 192.0.2.1, come mostrato di seguito:
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
Nota: assicurarsi di "reimpostare" poiché il comando "set" prevarrà in tutti i moduli ELAM e può impedire che venga attivato o attivato su campi imprevisti.
Passaggio 6 - Avviare l'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
Passaggio 7 - Verificare se il sistema ELAM è stato attivato, quindi esaminare i risultati
Nota: a partire da NX-OS 7.0(3)I5(2) e versioni successive, è disponibile una breve versione del report ELAM, come illustrato di seguito. Se si esegue una versione precedente alla 7.0(3)I5(2), passare alla sezione "Visualizzazione dei risultati 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:
- La CLI "report detail" fornisce un output più dettagliato descritto nella sezione successiva. questo è anche l'output predefinito delle versioni precedenti.
- Dst Idx è il valore niv_idx dell'interfaccia di uscita. Per controllare questa condizione, fare riferimento a "show hardware internal tah interface ex/y" | i."
- dmod e dpid corrispondono all'interfaccia in uscita. È possibile controllare questa condizione tramite il comando "show system internal ethpm info int ex/y" | dpid"
- Inoltre, il comando "show interface hardware-mapping" può essere usato per convalidare il dmod/dpid.
NOTE:
1. Quando si tratta di confermare se il pacchetto viene effettivamente scartato, il campo "Gocce finali" è l'UNICO da considerare. In altre parole, mentre si possono vedere eccezioni generate in altri campi come LUA/B/C/D, ciò non significa necessariamente che il pacchetto venga scartato. Esaminare attentamente i risultati ottenuti (se necessario, consultare il centro TAC).
2. Per il traffico indirizzato alla CPU viene impostato il flag sup_hit (rapporto dettagliato | grep sup_hit).
- È possibile decodificare il motivo utilizzando 'show system internal access-list sup-redirect-stats all' e associando l'indice sup
- Verificare che sia configurata la modalità di routing del sistema corretta (show system routing mode)
- Per linee guida e limitazioni documentate in Considerazioni sull'implementazione di VXLAN
-
la modalità "System Routing Mode: template-vxlan-scale" non è applicabile a Cisco NX-OS versione 7.0(3)I5(2) e successive.
-
Quando si utilizza VXLAN BGP EVPN in combinazione con Cisco NX-OS versione 7.0(3)I4(x) o NX-OS versione 7.0(3)I5(1), è necessario "System Routing Mode: template-vxlan-scale" sulle seguenti piattaforme hardware:
-
La modifica della modalità "System Routing Mode" richiede un ricaricamento dello switch.
Esempio di traffico con punt 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
Visualizzazione dei risultati ELAM per le versioni NX-OS precedenti alla 7.0(3)I5(2)
+ L'intestazione è 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
+ Controllo 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
+ Controllare SRC MAC (è possibile vedere anche questo nel passaggio precedente):
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
+ Si tratta di una novità?
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
+ Controllare SRC e 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
+ Verificare il codice SRC_ID in entrata:
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
+ Se ELAM non si attiva, avrà il seguente aspetto:
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 Encapsulated ELAM:
Poiché i pacchetti VXLAN verrebbero incapsulati, l'ELAM deve essere attivato sull'intestazione INNER in contrapposizione all'intestazione OUTER - Vedere l'esempio seguente per un frame 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
Configurazione ELAM dopo NX-OS 7.0(3)I7(2)
Dopo NX-OS 7.0(3)I7(2), ELAM può ora essere attivato a livello globale senza specificare il numero ASIC o Slice per maggiore facilità. Vedere l'esempio seguente:
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