在尝试创建一个 textfsm 模板来解析特定的 Cisco IOS-XR 输出时,我不知道这里有什么问题。
这是我要解析的文本(IOS XR 上“show mrib route”命令的输出)。我想检索多播组、源和主要接口列表(在“传入”和“传出”部分下)。“传入”和“传出”部分可能存在也可能不存在(参见下面的示例)。
(*,224.0.0.0/24) Flags: D P
Up: 3w0d
(*,224.0.1.40) Flags: S P
Up: 3w0d
Outgoing Interface List
GigabitEthernet0/2/0/0 Flags: II LI, Up: 3w0d
(*,239.0.0.0/9) Flags: D P
Up: 3w0d
(192.168.251.147,239.0.2.1) RPF nbr: 172.18.1.49 Flags: RPF
Up: 2d03h
Incoming Interface List
TenGigE0/2/1/12 Flags: A, Up: 2d03h
Outgoing Interface List
TenGigE0/2/1/1 Flags: F NS, Up: 1d02h
TenGigE0/2/1/4 Flags: F NS, Up: 2d03h
这是我尝试应用的模板,但没有成功。
Value GROUPADDR (\d+\.\d+\.\d+\.\d+[/\d+]*)
Value SRC (\S+)
Value RPFNEIGHBOR (\d+.\d+.\d+.\d+)
Value RT_FLAGS ([^\r\n\t\f\v,]+)
Value RT_UPTIME (\S+)
Value List incomingintfname (\S+)
Value List outgoingintfname (\S+)
Start
^\(${SRC},${GROUPADDR}\)\sRPF\snbr:\s${RPFNEIGHBOR}\sFlags:\s${RT_FLAGS}
^\(${SRC},${GROUPADDR}\)\sFlags:\s${RT_FLAGS}
^\s+Up:\s${RT_UPTIME}
^\s+Incoming Interface List -> ingress
^\s+Outgoing Interface List -> egress
^[\n\r]* -> Record
ingress
^\s{4}${incomingintfname}
^[\n\r]* -> Start
egress
^\s{4}${outgoingintfname}
^[\n\r]* -> Start
这是输出
{
"GROUPADDR": "224.0.0.0/24",
"RPFNEIGHBOR": "",
"RT_FLAGS": "D P",
"RT_UPTIME": "3w0d",
"SRC": "*",
"incomingintfname": [],
"outgoingintfname": []
},
{
"GROUPADDR": "239.0.0.0/9",
"RPFNEIGHBOR": "",
"RT_FLAGS": "D P",
"RT_UPTIME": "3w0d",
"SRC": "*",
"incomingintfname": [],
"outgoingintfname": [
"GigabitEthernet0/2/0/0"
]
},
{
"GROUPADDR": "239.0.2.1",
"RPFNEIGHBOR": "172.18.1.49",
"RT_FLAGS": "RPF",
"RT_UPTIME": "2d03h",
"SRC": "192.168.251.147",
"incomingintfname": [
"TenGigE0/2/1/12"
],
"outgoingintfname": []
}
我试图弄清楚为什么我不能在模板中同时有“incomin”和“outgoing”。如果我删除其中一个,则另一个会正确填充。另外,当我只有“传出”部分时,似乎 intf 名称映射到另一个组,所以另一个记录(参见上面的示例:Gig0/2/0/0 属于 224.0.1.40 并关联到 239/9结果)。
有人对此有想法吗?谢谢!