概要
このドキュメントでは、次を実行するために使用する手順について説明しますm ELAM(組み込みロジックおよびanalyzer Module)を使用して、最も関連性の高い出力をカバーし、結果の解釈方法を説明します。
ヒント:ELAMの概要については、『ELAMの概要』を参照してください。
該当ハードウェア
このドキュメントで説明する手順は、次のハードウェアにのみ適用されます。
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-C9236C |
N9K-C9336C-FX2 |
N9K-C93240YC-FX2
|
N9K-C93300YC-FX2 |
N9K-C9364C |
N9K-C9332C |
|
|
Nexus Tahoe ASIC ELAMの手順
トポロジ
手順1:ポートのASIC、スライス、および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
注意:各スライス、lu-a2dなどのグローバルコンテンツを保持するため、ELAMは1つのターミナルウィンドウでのみ使用してください。
たとえば、port-channel(PO;ポートチャネル)には、スライス0に対応するEth 1/53と、スライス1に対応するEth 1/54の2つのリンクがあります。異なるスライスに対して同時に2つの異なるターミナルウィンドウで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ブロックを通過せず、ELAMをバイパスするためです。
- 結果に基づくトリガーのリバースELAMにはlu-a2d 0、パケット属性に基づくトリガーのリバースELAMにはlu-a2d 1が使用されます
- in-selectにはalways 6を、out-selectには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
注:「set」コマンドはELAM全体に適用され、予期しないフィールドでトリガーまたはトリガーされない原因になる可能性があるため、「reset」を必ず実行してください。
手順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」を使用して、supインデックスを照合します
- 正しい「システムルーティングモード」が設定されていることを確認します(show system routing mode)。
- 「VXLANの導入に関する考慮事項」に記載されているガイドラインと制限事項による
-
「System Routing Mode: template-vxlan-scale」は、Cisco NX-OSリリース7.0(3)I5(2)以降には適用されません。
-
VXLAN BGP EVPNをCisco NX-OSリリース7.0(3)I4(x)またはNX-OSリリース7.0(3)I5(1)と組み合わせて使用する場合、次のハードウェアプラットフォームで「System Routing Mode: template-vxlan-scale」が必要です。
-
「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はOUTERヘッダーではなくINNERヘッダーでトリガーされる必要があります。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