簡介
本檔案介紹如何從安裝有IOS-XR軟體的路由器的CLI輸出建立中間系統到中間系統(IS-IS)拓撲。
作者:Agung Semarajaya,思科TAC工程師。
必要條件
需求
思科建議您充分瞭解以下主題:
採用元件
本文中的資訊係根據以下軟體和硬體版本:
- 採用IOS-XR版本6.3.2的ASR 9001
- 採用64位Windows 10企業版作業系統的聯想P50
- Graphviz版本2.38
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
背景資訊
為了對IS-IS網路進行故障排除,瞭解路由器由於各種原因如何互連非常重要。您可以獲得拓撲資訊,但拓撲已過時。
從IOS-XR版本6.3.2開始,引入show isis database graph verbose 命令,以生成一個DOT格式的網路拓撲圖,它可以用作渲染工具的輸入。
設定
確保已建立IS-IS鄰接關係,並至少安裝一台安裝了IOS-XR 6.3.2版或更高版本的路由器。使用以下步驟從CLI輸出建立更新的IS-IS拓撲。
步驟1.在IOS-XR裝置上運行命令show isis database graph verbose。
步驟2.將步驟1中的命令內容複製到文本檔案,並以.txt格式儲存檔案。
步驟3.下載並在您的電腦上安裝DOT轉換器軟體包,例如Graphviz - Graph Visualization Software。
步驟4.安裝後,開啟命令提示符(適用於Windows)並導航到Graphviz CLI執行檔所在的目錄。以下是導航的範例。
C:\Users\user>cd "C:\Program Files (x86)\Graphviz2.38"\bin
步驟5.使用CLI將步驟1中儲存的檔案轉換為其他格式,例如.png。
此示例說明如何使用DOT CLI。
C:\Program Files (x86)\Graphviz2.38\bin>dot.exe -Tpng C:\Users\user\Desktop\isis_graph_verbose.txt -o C:\Users\user\Desktop\isis_graph_verbose.png
此示例說明如何使用Cisco CLI。
C:\Program Files (x86)\Graphviz2.38\bin>circo.exe -Tpng :\Users\user\Desktop\isis_graph_verbose.txt -o C:\Users\user\Desktop\isis_graph_verbose.png
您可通過Graphviz - Graph Visualization Software文檔找到有關CLI的更多詳細資訊。
附註:在步驟5中,您只需將path變數設定為Graphviz CLI執行檔所在的目錄。
已知限制
1.如果在IS-IS中運行級別1和級別2,並且兩者都存在,則在show isis database graph verbose輸出(第一個有向圖)中只顯示級別1。 要解決此問題,您可以編輯輸入檔案並刪除級別1或級別2的有向圖,或者可以接受輸入並使用帶有1級或級別2關鍵字的命令。
show isis database graph level 1 verbose
show isis database graph level 2 verbose
2.當檔案包含[label=0]元素時,DOT趨於崩潰。一種方法是簡單地編輯這些檔案,然後執行CLI。
附註:其他工具(如Circo)沒有這個問題。
範例
- 運行show isis database graph verbose 命令。
RP/0/RSP0/CPU0:ASR10_9001-A#show isis database graph verbose
Wed Sep 12 11:23:38.651 AEST
/*
* Network topology in DOT format. For information on using this to
* generate graphical representations see http://www.graphviz.org
*/
digraph "level-2" {
graph [rankdir=LR];
node [fontsize=9];
edge [fontsize=6];
"ASR1" [label="\N\n172.16.0.1"];
"ASR1" -> "AASR6--9904.05" [constraint=false];
"ASR2" [label="\N\n172.16.0.2"];
"ASR2" -> "ASR2.01" [constraint=false];
"ASR2" -> "ASR2.03" [constraint=false];
"ASR2" -> "ASR3-9010";
"ASR2.01" -> "ASR2" [label=0] [constraint=false];
"ASR2.01" -> "AASR6--9904" [label=0] [constraint=false];
"ASR2.03" -> "ASR2" [label=0] [constraint=false];
"ASR2.03" -> "ASR7-9912" [label=0] [constraint=false];
"ASR3-9010" [label="\N\n172.16.0.3"];
"ASR3-9010" -> "ASR2";
"ASR3-9010" -> "AASR6--9904.09" [constraint=false];
"ASR3-9010" -> "ASR7-9912.03" [label=20] [constraint=false];
"ASR4-9006" [label="\N\n172.16.0.4"];
"ASR4-9006" -> "ASR4-9006.01" [constraint=false];
"ASR4-9006.01" -> "ASR4-9006" [label=0] [constraint=false];
"ASR4-9006.01" -> "ASR7-9912" [label=0] [constraint=false];
"AASR6--9904" [label="\N\n172.16.0.6"];
"AASR6--9904" -> "AASR6--9904.05" [constraint=false];
"AASR6--9904" -> "AASR6--9904.09" [constraint=false];
"AASR6--9904" -> "AASR6--9904.01" [constraint=false];
"AASR6--9904" -> "ASR2.01" [constraint=false];
"AASR6--9904" -> "ASR10_9001-A.01" [constraint=false];
"AASR6--9904.01" -> "AASR6--9904" [label=0] [constraint=false];
"AASR6--9904.01" -> "ASR7-9912" [label=0] [constraint=false];
"AASR6--9904.05" -> "AASR6--9904" [label=0] [constraint=false];
"AASR6--9904.05" -> "ASR1" [label=0] [constraint=false];
"AASR6--9904.09" -> "AASR6--9904" [label=0] [constraint=false];
"AASR6--9904.09" -> "ASR3-9010" [label=0] [constraint=false];
"ASR7-9912" [label="\N\n172.16.0.7"];
"ASR7-9912" -> "ASR7-9912.03" [label=20] [constraint=false];
"ASR7-9912" -> "ASR2.03" [constraint=false];
"ASR7-9912" -> "ASR4-9006.01" [constraint=false];
"ASR7-9912" -> "AASR6--9904.01" [constraint=false];
"ASR7-9912" -> "ASR10_9001-A.03" [constraint=false];
"ASR7-9912" -> "ASR11_9001-B.03" [constraint=false];
"ASR7-9912.03" -> "ASR7-9912" [label=0] [constraint=false];
"ASR7-9912.03" -> "ASR3-9010" [label=0] [constraint=false];
"ASR10_9001-A" [label="\N\n172.16.0.10"];
"ASR10_9001-A" -> "ASR10_9001-A.01" [constraint=false];
"ASR10_9001-A" -> "ASR10_9001-A.03" [constraint=false];
"ASR10_9001-A" -> "ASR10_9001-A.05" [constraint=false];
"ASR10_9001-A.01" -> "ASR10_9001-A" [label=0] [constraint=false];
"ASR10_9001-A.01" -> "AASR6--9904" [label=0] [constraint=false];
"ASR10_9001-A.03" -> "ASR10_9001-A" [label=0] [constraint=false];
"ASR10_9001-A.03" -> "ASR7-9912" [label=0] [constraint=false];
"ASR10_9001-A.05" -> "ASR10_9001-A" [label=0] [constraint=false];
"ASR10_9001-A.05" -> "ASR11_9001-B" [label=0] [constraint=false];
"ASR11_9001-B" [label="\N\n172.16.0.11"];
"ASR11_9001-B" -> "ASR11_9001-B.03" [constraint=false];
"ASR11_9001-B" -> "ASR11_9001-B.01" [constraint=false];
"ASR11_9001-B" -> "ASR10_9001-A.05" [constraint=false];
"ASR11_9001-B.01" -> "ASR11_9001-B" [label=0] [constraint=false];
"ASR11_9001-B.01" -> "WAN02" [label=0] [constraint=false];
"ASR11_9001-B.01" -> "ASR11_9001-B" [label=0] [constraint=false];
"ASR11_9001-B.01" -> "WAN02" [label=0] [constraint=false];
"ASR11_9001-B.03" -> "ASR11_9001-B" [label=0] [constraint=false];
"ASR11_9001-B.03" -> "ASR7-9912" [label=0] [constraint=false];
"ASR11_9001-B.03" -> "ASR11_9001-B" [label=0] [constraint=false];
"ASR11_9001-B.03" -> "ASR7-9912" [label=0] [constraint=false];
"WAN02" [label="\N\n172.16.151.2"];
"WAN02" -> "ASR11_9001-B.01" [constraint=false];
}
- 使用CLI轉換輸出。此結果顯示了通過Circo工具得到的輸出。