简介
本文档介绍如何从安装了IOS-XR软件的路由器的CLI输出创建中间系统到中间系统(IS-IS)拓扑。
作者:思科TAC工程师Agung Semarajaya。
先决条件
要求
思科建议您对以下主题有充分的了解:
使用的组件
本文档中的信息基于以下软件和硬件版本:
- ASR 9001,带IOS-XR版本6.3.2
- 具有64位Windows 10企业版操作系统的联想P50
- 图形版本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
此示例显示如何使用Circo 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
您可以通过图形可视化软件文档查找有关CLI的更多详细信息。
注意:在步骤5中,您只需将路径变量设置到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工具的输出。