簡介
本文說明什麼是嵌入式邏輯分析器模組(ELAM)、它的缺點以及如何最好地使用它。
背景資訊
隨著網路裝置和協定複雜性的增加,發現網路問題的根源會變得極其困難。通常,您必須確定在特定裝置上是否正確接收和轉發幀。有幾種捕獲工具、調試和技巧可用於幫助回答此問題。但是,並非所有協定都可以在生產網路中運行或可用。
ELAM是一個工程工具,使您能夠檢視思科ASIC的內部情況並瞭解資料包如何轉發。它嵌入轉發管道中,可以即時捕獲資料包,而不會中斷效能或控制平面資源。有助於回答以下問題:
- 封包是否已到達轉送引擎(FE)?
- 資料包是在哪個埠和VLAN上接收的?
- 資料包如何顯示(第2層(L2) — 第4層(L4)資料)?
- 資料包是如何更改的,它傳送到哪裡?
ELAM功能極其強大、顆粒度極高,且無入侵性。對於在硬體交換平台上工作的思科技術協助中心(TAC)工程師而言,這是一個很有價值的疑難排解工具。
ELAM挑戰
ELAM設計為內部使用的診斷工具。CLI語法使用Cisco 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地址或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名稱:
平台 |
模組型別 |
內部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和更新版本中,思科為執行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監督下使用。
相關資訊