Introdução
Este documento descreve as etapas usadas para executarm um ELAM (Embedded Logic AnCloudScale ASIC) em uma série de módulos Cisco Nexus 9000, aborda as saídas mais relevantes e descreve como interpretar os resultados.
Dica: consulte o documento Visão geral do ELAM para obter uma visão geral do ELAM.
Hardware aplicável
O procedimento abordado neste documento é aplicável apenas ao seguinte hardware:
N9K-C93180YC-EX |
N9K-C92304QC |
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-C933C-FX2 |
N9K-C93240YC-FX2
|
N9K-C93300YC-FX2 |
N9K-C9364C |
N9K-C9332C |
|
|
Procedimento de ELAM do Nexus Tahoe ASIC
Topologia
Etapa 1 - Verificar o ASIC, a Fatia e o SrcId da 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
Cuidado: o ELAM deve ser usado somente em uma janela de terminal, pois você mantém o conteúdo global para cada fatia, lu-a2d etc.
Por exemplo, um canal de porta (PO) pode ter dois links, Eth 1/53, que corresponde à fatia 0 e Eth 1/54, que corresponde à fatia 1. Configurar o ELAM em duas janelas de terminal separadas de uma vez para as diferentes fatias não ajudará, pois a última fatia (digamos a fatia 1) substituirá a primeira (fatia 0), terminando em obter o mesmo resultado em ambas as janelas de terminal.
Você pode verificar essas informações novamente através de:
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
Etapa 2 - Anexar ao módulo
N9K-C92160YC-X-2# attach mod 1
Etapa 3 - Entrar no modo de configuração do ELAM e especificar o ASIC apropriado na Etapa 1
module-1# debug platform internal tah elam asic 0
Etapa 4 - Configurar o acionador do ELAM
Observação: há muitas opções que você pode especificar aqui, dependendo do pacote/fluxo que está sendo capturado
module-1(TAH-elam)# trigger init asic 0 slice 1 lu-a2d 1 in-select 6 out-select 0 use-src-id 48
Tip:
- Se as portas de entrada e saída estiverem em fatias diferentes no mesmo ASIC, o ELAM na fatia de saída não capturará o pacote de saída porque o pacote não passará pelos blocos LUX na fatia de saída e, portanto, ignorará o ELAM.
- lu-a2d 0 é usado para ELAM reverso onde o acionador é baseado no resultado e lu-a2d 1 é usado para ELAM onde o acionador é baseado em atributos de pacote
- Use sempre 6 para seleção interna e 0 para seleção externa
Aviso: Não use 0 após lu-a2d, pois isso pode travar o switch - consulte CSCvd64106 para obter mais detalhes
Etapa 5 - Definir os acionadores do ELAM usando SRC e DEST IP
Neste exemplo, nosso IP de origem é 192.0.2.2 e o IP de destino é 192.0.2.1, como visto abaixo:
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: Certifique-se de "redefinir", pois o comando "set" prevalecerá em todos os ELAMs e poderá fazer com que ele não dispare ou dispare em campos inesperados.
Etapa 6 - Iniciar o 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
Etapa 7 - Verificar se o ELAM foi acionado e, em seguida, analisar os resultados
Observação: começando com o NX-OS 7.0(3)I5(2) e posterior, há uma versão resumida do relatório do ELAM, como visto abaixo. Se você estiver executando versões anteriores à 7.0(3)I5(2), continue na seção "Exibindo resultados do 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:
- A CLI "report detail" fornecerá uma saída mais detalhada descrita na seção posterior. Esta também é a saída padrão em versões mais antigas.
- O Dst Idx é o niv_idx da interface de saída. Isso pode ser verificado e/ou mencionado com "show hardware internal tah interface ex/y | i niv"
- O dmod e o dpid correspondem à interface de saída. Isso pode ser verificado com "show system internal ethpm info int ex/y | i dpid"
- Além disso, "show interface hardware-mapping" pode ser usado para validar o dmod/dpid.
NOTAS:
1. Quando se trata de confirmar se o pacote está realmente sendo descartado, o campo "Quedas Finais" é o ÚNICO a ser considerado. Em outras palavras, embora você possa ver exceções lançadas em outros campos como LUA/B/C/D, isso não significa necessariamente que o pacote está sendo descartado. Analise essa saída cuidadosamente (discuta com o TAC conforme necessário).
2. O tráfego apontado para a CPU terá o flag sup_hit definido (detalhe do relatório | grep sup_hit).
- Você pode decodificar o motivo usando 'show system internal access-list sup-redirect-stats all' e correspondendo ao índice sup
- Certifique-se de que o 'modo de roteamento do sistema' correto esteja configurado (show system routing mode)
- De acordo com as diretrizes e limitações documentadas em Considerações para implantação de VXLAN
-
O "Modo de roteamento do sistema: template-vxlan-scale" não se aplica ao Cisco NX-OS versão 7.0(3)I5(2) e posteriores.
-
Ao usar o VXLAN BGP EVPN em combinação com o Cisco NX-OS Versão 7.0(3)I4(x) ou NX-OS Versão 7.0(3)I5(1), o "Modo de roteamento do sistema: modelo-vxlan-escala" é necessário nas seguintes plataformas de hardware:
-
Alterar o "Modo de roteamento do sistema" exige uma recarga do switch.
Exemplo de tráfego que passa por punt de 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
Exibindo resultados do ELAM para versões do NX-OS anteriores à 7.0(3)I5(2)
+ Isso tem um cabeçalho 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
+ Verificar 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
+ Verifique o SRC MAC (você também pode ver isso na etapa anterior):
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
+ Isso é um novo aprendizado?
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
+ Verificar 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
+ Verifique seu SRC_ID de entrada:
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 o ELAM não for acionado, ele terá a seguinte aparência:
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 <<<<<<
ELAM encapsulado de VXLAN:
Como os pacotes VXLAN seriam encapsulados, o ELAM precisa ser disparado no cabeçalho INTERNO em vez do cabeçalho EXTERNO - Consulte o exemplo abaixo para obter um quadro 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
Configuração do ELAM após o NX-OS 7.0(3)I7(2)
Após o NX-OS 7.0(3)I7(2), o ELAM agora pode ser acionado globalmente sem especificar o número ASIC ou de Fatia para facilitar - Veja o exemplo abaixo:
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