network-utility 1.1.26 → 1.1.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/document/config.md +1 -0
- data/document/if-M6000-18S.md +40 -40
- data/document/if-V6000.md +210 -38
- data/document/if-ZXCTN9000-18EA.md +115 -42
- data/document/if-ZXCTN9000-8EA.md +84 -11
- data/network.rb +1 -1
- metadata +1 -2
- data/document/config.rb +0 -1294
|
@@ -7,8 +7,11 @@
|
|
|
7
7
|
@sign << ["ZXCTN9000-18EA", "接口基本信息"]
|
|
8
8
|
@sign << ["ZXCTN9000-18EA", "接口vlan信息"]
|
|
9
9
|
@sign << ["ZXCTN9000-18EA", "接口acl信息"]
|
|
10
|
+
@sign << ["ZXCTN9000-18EA", "接口urpf信息"]
|
|
10
11
|
@sign << ["ZXCTN9000-18EA", "接口mpls信息"]
|
|
11
12
|
@sign << ["ZXCTN9000-18EA", "接口lacp信息"]
|
|
13
|
+
@sign << ["ZXCTN9000-18EA", "接口am信息"]
|
|
14
|
+
@sign << ["ZXCTN9000-18EA", "接口uim信息"]
|
|
12
15
|
@sign << ["ZXCTN9000-18EA", "接口isis信息"]
|
|
13
16
|
@sign << ["ZXCTN9000-18EA", "接口multicast信息"]
|
|
14
17
|
@sign << ["ZXCTN9000-18EA", "接口firload信息"]
|
|
@@ -49,8 +52,20 @@ module ZXCTN9000_18EA
|
|
|
49
52
|
#####################################################################################################
|
|
50
53
|
# 接口/端口配置的基本查询
|
|
51
54
|
# 接口集合 => 接口分检 => 物理接口集合,子接口集合,特殊接口集合
|
|
52
|
-
|
|
53
|
-
#
|
|
55
|
+
# 1. 接口物理信息
|
|
56
|
+
# 2. 接口基本信息
|
|
57
|
+
# 3. 接口vlan信息
|
|
58
|
+
# 4. 接口acl信息
|
|
59
|
+
# 5. 接口urpf信息
|
|
60
|
+
# 6. 接口mpls信息
|
|
61
|
+
# 7. 接口lacp信息
|
|
62
|
+
# 8. 接口am信息
|
|
63
|
+
# 9. 接口uim信息
|
|
64
|
+
# 10.接口isis信息
|
|
65
|
+
# 11.接口multicast信息
|
|
66
|
+
#
|
|
67
|
+
# 新城更新模块:
|
|
68
|
+
# 1. 主动模块:
|
|
54
69
|
# firload
|
|
55
70
|
# port-request-info
|
|
56
71
|
# if-intf
|
|
@@ -68,8 +83,8 @@ module ZXCTN9000_18EA
|
|
|
68
83
|
# ospfv2
|
|
69
84
|
# ospfv3
|
|
70
85
|
# qos # 未实现
|
|
71
|
-
|
|
72
|
-
# 被动模块:(暂不关联)
|
|
86
|
+
#
|
|
87
|
+
# 2. 被动模块:(暂不关联)
|
|
73
88
|
# samgr
|
|
74
89
|
# monitor
|
|
75
90
|
# alarm
|
|
@@ -83,8 +98,8 @@ module ZXCTN9000_18EA
|
|
|
83
98
|
[self.接口物理信息(正文), self.接口基本信息(正文), self.接口vlan信息(正文), self.接口acl信息(正文),
|
|
84
99
|
self.接口mpls信息(正文), self.接口isis信息(正文), self.接口multicast信息(正文), self.接口lacp信息(正文),
|
|
85
100
|
self.接口firload信息(正文), self.接口port_request_info信息(正文), self.接口ospf信息(正文),
|
|
86
|
-
self.接口arp信息(正文), self.接口nd信息(正文), self.接口interface_performance信息(正文),
|
|
87
|
-
|
|
101
|
+
self.接口arp信息(正文), self.接口nd信息(正文), self.接口interface_performance信息(正文),
|
|
102
|
+
self.接口urpf信息(正文), self.接口am信息(正文), self.接口uim信息(正文),
|
|
88
103
|
].each do|infolist|
|
|
89
104
|
infolist.each do|intf,text|
|
|
90
105
|
接口表[intf]||=[]
|
|
@@ -93,7 +108,7 @@ module ZXCTN9000_18EA
|
|
|
93
108
|
end
|
|
94
109
|
接口表
|
|
95
110
|
end
|
|
96
|
-
|
|
111
|
+
|
|
97
112
|
def 接口物理信息 正文
|
|
98
113
|
tag = 正文["PORT-PHYSICAL-INFO"] ? "PORT-PHYSICAL-INFO" : "port-physical-config"
|
|
99
114
|
接口物理表 = {}
|
|
@@ -104,11 +119,11 @@ module ZXCTN9000_18EA
|
|
|
104
119
|
elsif tag == "port-physical-config"
|
|
105
120
|
(正文[tag]||"").split("\n$")\
|
|
106
121
|
.collect{|l|"<#{tag}>\n"+l.strip+"\n!\n</#{tag}>" if l!="\n!"}\
|
|
107
|
-
.compact.each{|接口|接口物理表[/interface (.)*/.match(接口)[0].to_s.strip] = 接口}
|
|
122
|
+
.compact.each{|接口|接口物理表[/interface (.)*/.match(接口)[0].to_s.strip] = 接口}
|
|
108
123
|
end
|
|
109
124
|
接口物理表
|
|
110
125
|
end
|
|
111
|
-
|
|
126
|
+
|
|
112
127
|
def 接口基本信息 正文
|
|
113
128
|
tag = 正文["INTERFACE"] ? "INTERFACE" : "if-intf"
|
|
114
129
|
接口基本表 = {}
|
|
@@ -125,7 +140,7 @@ module ZXCTN9000_18EA
|
|
|
125
140
|
end
|
|
126
141
|
接口基本表
|
|
127
142
|
end
|
|
128
|
-
|
|
143
|
+
|
|
129
144
|
def 接口vlan信息 正文
|
|
130
145
|
tag = 正文["VLAN"] ? "VLAN" : "vlan"
|
|
131
146
|
接口vlan表 = {}
|
|
@@ -155,7 +170,22 @@ module ZXCTN9000_18EA
|
|
|
155
170
|
end
|
|
156
171
|
接口acl表
|
|
157
172
|
end
|
|
158
|
-
|
|
173
|
+
|
|
174
|
+
def 接口urpf信息 正文
|
|
175
|
+
tag = 正文["URPF"] ? "URPF" : "urpf"
|
|
176
|
+
接口urpf表 = {}
|
|
177
|
+
if tag == "URPF"
|
|
178
|
+
(正文[tag]||"").split("\n!")\
|
|
179
|
+
.collect{|l|"<#{tag}>\n"+l.strip+"\n!\n</#{tag}>" if l!="\n!"}\
|
|
180
|
+
.compact.each{|接口|接口urpf表[/interface (.)*/.match(接口)[0].to_s.strip]=接口}
|
|
181
|
+
elsif tag == "urpf"
|
|
182
|
+
(正文[tag]||"").split("\n$")\
|
|
183
|
+
.collect{|l|"<#{tag}>\n"+l.strip+"\n!\n</#{tag}>" if l!="\n!"}\
|
|
184
|
+
.compact.each{|接口|接口urpf表[/interface (.)*/.match(接口)[0].to_s.strip]=接口}
|
|
185
|
+
end
|
|
186
|
+
接口urpf表
|
|
187
|
+
end
|
|
188
|
+
|
|
159
189
|
def 接口mpls信息 正文
|
|
160
190
|
tag = 正文["MPLS"] ? "MPLS" : "ldp"
|
|
161
191
|
接口mpls表 = {}
|
|
@@ -170,7 +200,7 @@ module ZXCTN9000_18EA
|
|
|
170
200
|
end
|
|
171
201
|
接口mpls表
|
|
172
202
|
end
|
|
173
|
-
|
|
203
|
+
|
|
174
204
|
def 接口lacp信息 正文 # trunk
|
|
175
205
|
tag = 正文["LACP"] ? "LACP" : "lacp"
|
|
176
206
|
接口lacp表 = {}
|
|
@@ -186,6 +216,50 @@ module ZXCTN9000_18EA
|
|
|
186
216
|
接口lacp表
|
|
187
217
|
end
|
|
188
218
|
|
|
219
|
+
def 接口am信息 正文
|
|
220
|
+
tag = 正文["AM"] ? "AM" : "am"
|
|
221
|
+
接口am表 = {}
|
|
222
|
+
if tag == "AM"
|
|
223
|
+
context,fragments = TextAbstract.draw_fragments (正文[tag]||""), /^ interface (.)*/, /^ \$/
|
|
224
|
+
head,tail = "<#{tag}>\n#{context[0..-3]}\n","!\n</#{tag}>" # context tail(!\n)
|
|
225
|
+
fragments.each{|frag|接口am表[/interface (.)*/.match(frag)[0].to_s.strip] = head+frag+tail}
|
|
226
|
+
elsif tag == "am"
|
|
227
|
+
context,fragments = TextAbstract.draw_fragments (正文[tag]||""), /^ interface (.)*/, /^ \$/
|
|
228
|
+
head,tail = "<#{tag}>\n#{context[0..-3]}\n","!\n</#{tag}>" # context tail(!\n)
|
|
229
|
+
fragments.each{|frag|接口am表[/interface (.)*/.match(frag)[0].to_s.strip] = head+frag+tail}
|
|
230
|
+
end
|
|
231
|
+
接口am表
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
def 接口uim信息 正文
|
|
235
|
+
tag = 正文["UIM"] ? "UIM" : "uim"
|
|
236
|
+
接口uim表 = {}
|
|
237
|
+
if tag =="UIM"
|
|
238
|
+
za,vcc = TextAbstract.draw_fragments (正文[tag]||""), /^vcc\-configuration/, /^\!/
|
|
239
|
+
za,vbui= TextAbstract.draw_fragments (正文[tag]||""), /^vbui\-configuration/, /^\!/
|
|
240
|
+
# vcc
|
|
241
|
+
context,fragments = TextAbstract.draw_fragments vcc.join, /^ interface (.)*/, /^ \$/
|
|
242
|
+
head,tail = "<#{tag}>\n#{context[0..-3]}","!\n</#{tag}>" # context tail(\n!\n)
|
|
243
|
+
fragments.each{|frag|接口uim表[/interface (.)*/.match(frag)[0].to_s.strip] = head+frag+tail}
|
|
244
|
+
# vbui
|
|
245
|
+
context,fragments = TextAbstract.draw_fragments vbui.join, /^ interface (.)*/, /^ \$/
|
|
246
|
+
head,tail = "<#{tag}>\n#{context[0..-3]}","!\n</#{tag}>" # context tail(\n!\n)
|
|
247
|
+
fragments.each{|frag|接口uim表[/interface (.)*/.match(frag)[0].to_s.strip] = head+frag+tail}
|
|
248
|
+
elsif tag =="uim"
|
|
249
|
+
za,vcc = TextAbstract.draw_fragments (正文[tag]||""), /^vcc\-configuration/, /^\$/
|
|
250
|
+
za,vbui= TextAbstract.draw_fragments (正文[tag]||""), /^vbui\-configuration/, /^\$/
|
|
251
|
+
# vcc
|
|
252
|
+
context,fragments = TextAbstract.draw_fragments vcc.join, /^ interface (.)*/, /^ \$/
|
|
253
|
+
head,tail = "<#{tag}>\n#{context[0..-3]}","!\n</#{tag}>" # context tail(\n!\n)
|
|
254
|
+
fragments.each{|frag|接口uim表[/interface (.)*/.match(frag)[0].to_s.strip] = head+frag+tail}
|
|
255
|
+
# vbui
|
|
256
|
+
context,fragments = TextAbstract.draw_fragments vbui.join, /^ interface (.)*/, /^ \$/
|
|
257
|
+
head,tail = "<#{tag}>\n#{context[0..-3]}","!\n</#{tag}>" # context tail(\n!\n)
|
|
258
|
+
fragments.each{|frag|接口uim表[/interface (.)*/.match(frag)[0].to_s.strip] = head+frag+tail}
|
|
259
|
+
end
|
|
260
|
+
接口uim表
|
|
261
|
+
end
|
|
262
|
+
|
|
189
263
|
def 接口isis信息 正文
|
|
190
264
|
tag = 正文["ISIS"] ? "ISIS" : "isis"
|
|
191
265
|
接口isis表 = {}
|
|
@@ -200,7 +274,7 @@ module ZXCTN9000_18EA
|
|
|
200
274
|
end
|
|
201
275
|
接口isis表
|
|
202
276
|
end
|
|
203
|
-
|
|
277
|
+
|
|
204
278
|
def 接口multicast信息 正文
|
|
205
279
|
tag = 正文["MULTICAST"] ? "MULTICAST" : "multicast"
|
|
206
280
|
接口multicast表 = {}
|
|
@@ -309,7 +383,7 @@ module ZXCTN9000_18EA
|
|
|
309
383
|
end
|
|
310
384
|
end
|
|
311
385
|
end
|
|
312
|
-
|
|
386
|
+
|
|
313
387
|
tag = 正文["ospfv3"] ? "ospfv3" : "ospfv3"
|
|
314
388
|
接口ospfv3表 = {}
|
|
315
389
|
if tag == "ospfv3"
|
|
@@ -341,9 +415,9 @@ module ZXCTN9000_18EA
|
|
|
341
415
|
.collect{|l|"<#{tag}>\n"+l.strip+"\n!\n</#{tag}>" if l!="\n!"}\
|
|
342
416
|
.compact.each{|接口|接口urpf表[/interface (.)*/.match(接口)[0].to_s.strip]=接口}
|
|
343
417
|
end
|
|
344
|
-
接口urpf表
|
|
418
|
+
接口urpf表
|
|
345
419
|
end
|
|
346
|
-
|
|
420
|
+
|
|
347
421
|
def 接口am信息 正文
|
|
348
422
|
tag = 正文["AM"] ? "AM" : "am"
|
|
349
423
|
接口am表 = {}
|
|
@@ -358,7 +432,7 @@ module ZXCTN9000_18EA
|
|
|
358
432
|
end
|
|
359
433
|
接口am表
|
|
360
434
|
end
|
|
361
|
-
|
|
435
|
+
|
|
362
436
|
def 接口uim信息 正文
|
|
363
437
|
tag = 正文["UIM"] ? "UIM" : "uim"
|
|
364
438
|
接口uim表 = {}
|
|
@@ -411,8 +485,8 @@ module ZXCTN9000_18EA
|
|
|
411
485
|
cars[current]['cbs'] = words.index('cbs') ? words[words.index('cbs')+1]+'bytes' : ''
|
|
412
486
|
cars[current]['pbs'] = words.index('pbs') ? words[words.index('pbs')+1]+'bytes' : ''
|
|
413
487
|
cars[current]['action'] = [
|
|
414
|
-
words.index('conform-action') ? words[words.index('conform-action')+1] : '',
|
|
415
|
-
words.index('exceed-action') ? words[words.index('exceed-action')+1] : '',
|
|
488
|
+
words.index('conform-action') ? words[words.index('conform-action')+1] : '',
|
|
489
|
+
words.index('exceed-action') ? words[words.index('exceed-action')+1] : '',
|
|
416
490
|
words.index('violate-action') ? words[words.index('violate-action')+1] : ''
|
|
417
491
|
]
|
|
418
492
|
end
|
|
@@ -438,7 +512,7 @@ module ZXCTN9000_18EA
|
|
|
438
512
|
end
|
|
439
513
|
svc_policy
|
|
440
514
|
end
|
|
441
|
-
|
|
515
|
+
|
|
442
516
|
# func: 端口统计功能
|
|
443
517
|
def 接口统计 正文
|
|
444
518
|
tag = 正文["interface-performance"] ? 'interface-performance' : 'interface-performance'
|
|
@@ -455,7 +529,7 @@ module ZXCTN9000_18EA
|
|
|
455
529
|
intf_perf.delete(nil)
|
|
456
530
|
intf_perf
|
|
457
531
|
end
|
|
458
|
-
|
|
532
|
+
|
|
459
533
|
# func: 端口URPF功能
|
|
460
534
|
def 接口URPF 正文
|
|
461
535
|
接口urpf表 = self.接口urpf信息 正文
|
|
@@ -470,7 +544,7 @@ module ZXCTN9000_18EA
|
|
|
470
544
|
end
|
|
471
545
|
urpf
|
|
472
546
|
end
|
|
473
|
-
|
|
547
|
+
|
|
474
548
|
# func: 端口接入类型
|
|
475
549
|
def 接口接入类型 正文
|
|
476
550
|
接口uim表 = self.接口uim信息 正文
|
|
@@ -488,11 +562,11 @@ module ZXCTN9000_18EA
|
|
|
488
562
|
特殊接口集合 << [key]+configs if key.include?('loopback') || key.include?('null') || \
|
|
489
563
|
key.include?('extimer') || key.include?('vbui') || key.include?('spi') || \
|
|
490
564
|
key.include?('gcvi') || key.include?('guvi') || key.include?('mgmt_eth') || \
|
|
491
|
-
key.include?('qx_eth') || key.include?('qx') || key.include?('gre_tunnel')
|
|
565
|
+
key.include?('qx_eth') || key.include?('qx') || key.include?('gre_tunnel') || key.include?('vxlan_tunnel')
|
|
492
566
|
end
|
|
493
567
|
特殊接口集合
|
|
494
568
|
end
|
|
495
|
-
|
|
569
|
+
|
|
496
570
|
def 物理接口配置 接口集合,特殊接口集合=nil
|
|
497
571
|
物理接口集合 = []
|
|
498
572
|
例外 = (特殊接口集合 ? 特殊接口集合 : (self.特殊接口配置 接口集合)).collect{|c|c[0]}
|
|
@@ -501,7 +575,7 @@ module ZXCTN9000_18EA
|
|
|
501
575
|
end
|
|
502
576
|
物理接口集合
|
|
503
577
|
end
|
|
504
|
-
|
|
578
|
+
|
|
505
579
|
def 子接口配置 接口集合,特殊接口集合=nil
|
|
506
580
|
子接口集合 = []
|
|
507
581
|
例外 = (特殊接口集合 ? 特殊接口集合 : (self.特殊接口配置 接口集合)).collect{|c|c[0]}
|
|
@@ -510,7 +584,7 @@ module ZXCTN9000_18EA
|
|
|
510
584
|
end
|
|
511
585
|
子接口集合
|
|
512
586
|
end
|
|
513
|
-
|
|
587
|
+
|
|
514
588
|
def 接口分捡 接口集合
|
|
515
589
|
特殊接口集合 = self.特殊接口配置 接口集合
|
|
516
590
|
物理接口集合 = self.物理接口配置 接口集合,特殊接口集合
|
|
@@ -526,19 +600,19 @@ module ZXCTN9000_18EA
|
|
|
526
600
|
# func: 根据一个端口的描述信息,给出其格式化的类型、连接符、端口编号
|
|
527
601
|
def 端口识别 描述
|
|
528
602
|
描述 = 描述[0] if 描述.instance_of?(Array) # M6000取接口配置中名称部分 [name,<tag>...</tag>,...]
|
|
529
|
-
type = /xgei|gei|ulei|smartgroup|loopback|extimer|vbui|null|guvi|gcvi|mgmt_eth|
|
|
603
|
+
type = /xgei|gei|ulei|smartgroup|loopback|eth_dslgroup|extimer|vbui|vlan|virtual_template|vei|null|guvi|gcvi|gre_tunnel|mgmt_eth|ulei|irb|spi|vxlan_tunnel|flexe_client|flexe_group|ptp|gps|qx_eth|qx|bvi|pw|subvlan/.match(描述)
|
|
530
604
|
类型 = type ? type.to_s : '未知类型'
|
|
531
605
|
port = /(\d+|\/|\.)*(\d+)/.match(描述.split(类型).join)
|
|
532
606
|
端口 = port ? port.to_s : '未知端口'
|
|
533
607
|
端口 = '' if 类型=='mgmt_eth'
|
|
534
|
-
连接符 = if ['smartgroup','loopback','vbui','null','mgmt_eth','vei','flexe_client','flexe_group','qx','bvi','pw','subvlan'].include?(类型)
|
|
535
|
-
''
|
|
608
|
+
连接符 = if ['smartgroup','loopback','vlan','vbui','null','mgmt_eth','irb','vei','eth_dslgroup','vxlan_tunnel','flexe_client','flexe_group','qx','bvi','pw','subvlan','gre_tunnel','virtual_template'].include?(类型)
|
|
609
|
+
''
|
|
536
610
|
elsif ['xgei','gei','ulei','extimer','guvi','gcvi','spi','ptp','gps','qx_eth'].include?(类型)
|
|
537
611
|
'-'
|
|
538
612
|
end
|
|
539
613
|
return 类型,连接符,端口
|
|
540
614
|
end
|
|
541
|
-
|
|
615
|
+
|
|
542
616
|
# func: 根据一个端口的描述信息,给出其mac地址,若无mac则返回nil
|
|
543
617
|
def 端口MAC 描述
|
|
544
618
|
描述.each_line do|line|
|
|
@@ -549,7 +623,7 @@ module ZXCTN9000_18EA
|
|
|
549
623
|
end
|
|
550
624
|
return nil
|
|
551
625
|
end
|
|
552
|
-
|
|
626
|
+
|
|
553
627
|
# func: 根据一个端口的描述信息,给出其管理状态是打开/关闭的判断
|
|
554
628
|
def 端口管理状态 描述
|
|
555
629
|
描述 = 描述[1..-1].join("\n") if 描述.instance_of?(Array) # M6000取接口配置中名称部分 [name,<tag>...</tag>,...]
|
|
@@ -582,7 +656,7 @@ module ZXCTN9000_18EA
|
|
|
582
656
|
end
|
|
583
657
|
地址集
|
|
584
658
|
end
|
|
585
|
-
|
|
659
|
+
|
|
586
660
|
# func: 根据一个端口的配置给出其开关状态(配置层面的"端口管理状态")
|
|
587
661
|
def 接口开关 接口配置
|
|
588
662
|
描述 = '' # for phy_if is shutdown, for sub_if,smartgroup are open
|
|
@@ -599,7 +673,7 @@ module ZXCTN9000_18EA
|
|
|
599
673
|
end
|
|
600
674
|
描述
|
|
601
675
|
end
|
|
602
|
-
|
|
676
|
+
|
|
603
677
|
# func: 根据一个端口的配置给出其关联的vpn实例
|
|
604
678
|
def 接口vpn实例 接口配置
|
|
605
679
|
实例 = ''
|
|
@@ -609,15 +683,14 @@ module ZXCTN9000_18EA
|
|
|
609
683
|
实例
|
|
610
684
|
end
|
|
611
685
|
|
|
612
|
-
|
|
613
686
|
#####################################################################################################
|
|
614
687
|
# 聚合接口判定相关
|
|
615
688
|
#####################################################################################################
|
|
616
|
-
|
|
689
|
+
|
|
617
690
|
# func: 根据一个接口的描述信息,给出其所属聚合接口的信息,若非聚合端口返回空
|
|
618
691
|
def 聚合接口判定 配置
|
|
619
692
|
配置.join.split("\n").each do|描述|
|
|
620
|
-
if 描述.include?("smartgroup") && 描述.include?("mode") &&
|
|
693
|
+
if 描述.include?("smartgroup") && 描述.include?("mode") &&
|
|
621
694
|
!描述.include?("description") && !self.端口识别(配置).join.include?("smartgroup")
|
|
622
695
|
return {self.端口识别(配置).join=>"smartgroup"+描述.strip.split(" ")[1]}
|
|
623
696
|
end
|
|
@@ -673,7 +746,7 @@ module ZXCTN9000_18EA
|
|
|
673
746
|
invlan = eval(pattern[1].to_s.gsub('-','..'))
|
|
674
747
|
if exvlan.instance_of?(Range)
|
|
675
748
|
exvlan.each{|exv|vlan['qinq'] << [exv,invlan]}
|
|
676
|
-
elsif exvlan.instance_of?(Fixnum
|
|
749
|
+
elsif exvlan.instance_of?(Integer) # Fixnum
|
|
677
750
|
vlan['qinq'] << [exvlan,invlan]
|
|
678
751
|
end;next
|
|
679
752
|
end
|
|
@@ -684,7 +757,7 @@ module ZXCTN9000_18EA
|
|
|
684
757
|
end
|
|
685
758
|
return vlan # {vlan:[ int|range ] qinq:[ [int,int|range] ] dot1q:[ int ]}
|
|
686
759
|
end
|
|
687
|
-
|
|
760
|
+
|
|
688
761
|
def vlan统计 name,物理接口集合,子接口集合
|
|
689
762
|
bas子接口数据库,聚合接口表 = {},[]
|
|
690
763
|
聚合接口集合 = 物理接口集合.select{|物理接口|self.端口识别(物理接口)[0]=='smartgroup'}
|
|
@@ -695,7 +768,7 @@ module ZXCTN9000_18EA
|
|
|
695
768
|
物理接口 = 物理接口集合.find{|物理接口|物理接口[0].split(" ")[1]==(物理接口名称)}
|
|
696
769
|
next unless self.端口管理状态(物理接口) # 物理接口关闭的不统计
|
|
697
770
|
next unless self.端口管理状态(接口配置) # 子接口关闭的不统计
|
|
698
|
-
|
|
771
|
+
|
|
699
772
|
vlan配置 = {}
|
|
700
773
|
self.vlan分捡(接口配置).each do|type,data|
|
|
701
774
|
if type=='vlan' || type=='dot1q'
|
|
@@ -704,13 +777,13 @@ module ZXCTN9000_18EA
|
|
|
704
777
|
data.each{|pvlan,cvlan|vlan配置[pvlan] ||= []; vlan配置[pvlan] << cvlan}
|
|
705
778
|
end
|
|
706
779
|
end
|
|
707
|
-
|
|
780
|
+
|
|
708
781
|
子接口名称 = self.端口识别(接口配置)
|
|
709
782
|
if 子接口名称[0].include?("gei")
|
|
710
783
|
# 子接口索引 = ["eth--"+子接口名称[-1].split(".")[0].split('/')[-3..-1].join(',')] # AIBOS风格
|
|
711
784
|
子接口索引 = [子接口名称.join.split(".")[0]] # 原生风格
|
|
712
785
|
end
|
|
713
|
-
if 子接口名称[0].include?("smartgroup") &&
|
|
786
|
+
if 子接口名称[0].include?("smartgroup") &&
|
|
714
787
|
聚合接口组 = 聚合接口表.find{|聚合接口组|聚合接口组.include?(子接口名称.join.split('.')[0])}
|
|
715
788
|
聚合接口的等效名称 = 聚合接口组.clone;
|
|
716
789
|
# 聚合接口的等效名称.delete(子接口名称.join.split('.')[0]) # 除了smartgroup自身,为所有等效接口创建 # 是否保留smartgroup是个争议
|
|
@@ -739,7 +812,7 @@ module ZXCTN9000_18EA
|
|
|
739
812
|
#####################################################################################################
|
|
740
813
|
# 接口相关统计信息的处理
|
|
741
814
|
#####################################################################################################
|
|
742
|
-
|
|
815
|
+
|
|
743
816
|
# gei-x/x/x.00000xxx => gei-x/x/x.xxx
|
|
744
817
|
# 一些统计场合子接口会补前置0,这里可以将其去掉
|
|
745
818
|
def 端口去0 描述
|
|
@@ -7,8 +7,11 @@
|
|
|
7
7
|
@sign << ["ZXCTN9000-8EA", "接口基本信息"]
|
|
8
8
|
@sign << ["ZXCTN9000-8EA", "接口vlan信息"]
|
|
9
9
|
@sign << ["ZXCTN9000-8EA", "接口acl信息"]
|
|
10
|
+
@sign << ["ZXCTN9000-8EA", "接口urpf信息"]
|
|
10
11
|
@sign << ["ZXCTN9000-8EA", "接口mpls信息"]
|
|
11
12
|
@sign << ["ZXCTN9000-8EA", "接口lacp信息"]
|
|
13
|
+
@sign << ["ZXCTN9000-8EA", "接口am信息"]
|
|
14
|
+
@sign << ["ZXCTN9000-8EA", "接口uim信息"]
|
|
12
15
|
@sign << ["ZXCTN9000-8EA", "接口isis信息"]
|
|
13
16
|
@sign << ["ZXCTN9000-8EA", "接口multicast信息"]
|
|
14
17
|
@sign << ["ZXCTN9000-8EA", "接口firload信息"]
|
|
@@ -49,8 +52,20 @@ module ZXCTN9000_8EA
|
|
|
49
52
|
#####################################################################################################
|
|
50
53
|
# 接口/端口配置的基本查询
|
|
51
54
|
# 接口集合 => 接口分检 => 物理接口集合,子接口集合,特殊接口集合
|
|
52
|
-
|
|
53
|
-
#
|
|
55
|
+
# 1. 接口物理信息
|
|
56
|
+
# 2. 接口基本信息
|
|
57
|
+
# 3. 接口vlan信息
|
|
58
|
+
# 4. 接口acl信息
|
|
59
|
+
# 5. 接口urpf信息
|
|
60
|
+
# 6. 接口mpls信息
|
|
61
|
+
# 7. 接口lacp信息
|
|
62
|
+
# 8. 接口am信息
|
|
63
|
+
# 9. 接口uim信息
|
|
64
|
+
# 10.接口isis信息
|
|
65
|
+
# 11.接口multicast信息
|
|
66
|
+
#
|
|
67
|
+
# 新城更新模块:
|
|
68
|
+
# 1. 主动模块:
|
|
54
69
|
# firload
|
|
55
70
|
# port-request-info
|
|
56
71
|
# if-intf
|
|
@@ -68,8 +83,8 @@ module ZXCTN9000_8EA
|
|
|
68
83
|
# ospfv2
|
|
69
84
|
# ospfv3
|
|
70
85
|
# qos # 未实现
|
|
71
|
-
|
|
72
|
-
# 被动模块:(暂不关联)
|
|
86
|
+
#
|
|
87
|
+
# 2. 被动模块:(暂不关联)
|
|
73
88
|
# samgr
|
|
74
89
|
# monitor
|
|
75
90
|
# alarm
|
|
@@ -84,7 +99,7 @@ module ZXCTN9000_8EA
|
|
|
84
99
|
self.接口mpls信息(正文), self.接口isis信息(正文), self.接口multicast信息(正文), self.接口lacp信息(正文),
|
|
85
100
|
self.接口firload信息(正文), self.接口port_request_info信息(正文), self.接口ospf信息(正文),
|
|
86
101
|
self.接口arp信息(正文), self.接口nd信息(正文), self.接口interface_performance信息(正文),
|
|
87
|
-
|
|
102
|
+
self.接口urpf信息(正文), self.接口am信息(正文), self.接口uim信息(正文),
|
|
88
103
|
].each do|infolist|
|
|
89
104
|
infolist.each do|intf,text|
|
|
90
105
|
接口表[intf]||=[]
|
|
@@ -155,7 +170,22 @@ module ZXCTN9000_8EA
|
|
|
155
170
|
end
|
|
156
171
|
接口acl表
|
|
157
172
|
end
|
|
158
|
-
|
|
173
|
+
|
|
174
|
+
def 接口urpf信息 正文
|
|
175
|
+
tag = 正文["URPF"] ? "URPF" : "urpf"
|
|
176
|
+
接口urpf表 = {}
|
|
177
|
+
if tag == "URPF"
|
|
178
|
+
(正文[tag]||"").split("\n!")\
|
|
179
|
+
.collect{|l|"<#{tag}>\n"+l.strip+"\n!\n</#{tag}>" if l!="\n!"}\
|
|
180
|
+
.compact.each{|接口|接口urpf表[/interface (.)*/.match(接口)[0].to_s.strip]=接口}
|
|
181
|
+
elsif tag == "urpf"
|
|
182
|
+
(正文[tag]||"").split("\n$")\
|
|
183
|
+
.collect{|l|"<#{tag}>\n"+l.strip+"\n!\n</#{tag}>" if l!="\n!"}\
|
|
184
|
+
.compact.each{|接口|接口urpf表[/interface (.)*/.match(接口)[0].to_s.strip]=接口}
|
|
185
|
+
end
|
|
186
|
+
接口urpf表
|
|
187
|
+
end
|
|
188
|
+
|
|
159
189
|
def 接口mpls信息 正文
|
|
160
190
|
tag = 正文["MPLS"] ? "MPLS" : "ldp"
|
|
161
191
|
接口mpls表 = {}
|
|
@@ -186,6 +216,50 @@ module ZXCTN9000_8EA
|
|
|
186
216
|
接口lacp表
|
|
187
217
|
end
|
|
188
218
|
|
|
219
|
+
def 接口am信息 正文
|
|
220
|
+
tag = 正文["AM"] ? "AM" : "am"
|
|
221
|
+
接口am表 = {}
|
|
222
|
+
if tag == "AM"
|
|
223
|
+
context,fragments = TextAbstract.draw_fragments (正文[tag]||""), /^ interface (.)*/, /^ \$/
|
|
224
|
+
head,tail = "<#{tag}>\n#{context[0..-3]}\n","!\n</#{tag}>" # context tail(!\n)
|
|
225
|
+
fragments.each{|frag|接口am表[/interface (.)*/.match(frag)[0].to_s.strip] = head+frag+tail}
|
|
226
|
+
elsif tag == "am"
|
|
227
|
+
context,fragments = TextAbstract.draw_fragments (正文[tag]||""), /^ interface (.)*/, /^ \$/
|
|
228
|
+
head,tail = "<#{tag}>\n#{context[0..-3]}\n","!\n</#{tag}>" # context tail(!\n)
|
|
229
|
+
fragments.each{|frag|接口am表[/interface (.)*/.match(frag)[0].to_s.strip] = head+frag+tail}
|
|
230
|
+
end
|
|
231
|
+
接口am表
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
def 接口uim信息 正文
|
|
235
|
+
tag = 正文["UIM"] ? "UIM" : "uim"
|
|
236
|
+
接口uim表 = {}
|
|
237
|
+
if tag =="UIM"
|
|
238
|
+
za,vcc = TextAbstract.draw_fragments (正文[tag]||""), /^vcc\-configuration/, /^\!/
|
|
239
|
+
za,vbui= TextAbstract.draw_fragments (正文[tag]||""), /^vbui\-configuration/, /^\!/
|
|
240
|
+
# vcc
|
|
241
|
+
context,fragments = TextAbstract.draw_fragments vcc.join, /^ interface (.)*/, /^ \$/
|
|
242
|
+
head,tail = "<#{tag}>\n#{context[0..-3]}","!\n</#{tag}>" # context tail(\n!\n)
|
|
243
|
+
fragments.each{|frag|接口uim表[/interface (.)*/.match(frag)[0].to_s.strip] = head+frag+tail}
|
|
244
|
+
# vbui
|
|
245
|
+
context,fragments = TextAbstract.draw_fragments vbui.join, /^ interface (.)*/, /^ \$/
|
|
246
|
+
head,tail = "<#{tag}>\n#{context[0..-3]}","!\n</#{tag}>" # context tail(\n!\n)
|
|
247
|
+
fragments.each{|frag|接口uim表[/interface (.)*/.match(frag)[0].to_s.strip] = head+frag+tail}
|
|
248
|
+
elsif tag =="uim"
|
|
249
|
+
za,vcc = TextAbstract.draw_fragments (正文[tag]||""), /^vcc\-configuration/, /^\$/
|
|
250
|
+
za,vbui= TextAbstract.draw_fragments (正文[tag]||""), /^vbui\-configuration/, /^\$/
|
|
251
|
+
# vcc
|
|
252
|
+
context,fragments = TextAbstract.draw_fragments vcc.join, /^ interface (.)*/, /^ \$/
|
|
253
|
+
head,tail = "<#{tag}>\n#{context[0..-3]}","!\n</#{tag}>" # context tail(\n!\n)
|
|
254
|
+
fragments.each{|frag|接口uim表[/interface (.)*/.match(frag)[0].to_s.strip] = head+frag+tail}
|
|
255
|
+
# vbui
|
|
256
|
+
context,fragments = TextAbstract.draw_fragments vbui.join, /^ interface (.)*/, /^ \$/
|
|
257
|
+
head,tail = "<#{tag}>\n#{context[0..-3]}","!\n</#{tag}>" # context tail(\n!\n)
|
|
258
|
+
fragments.each{|frag|接口uim表[/interface (.)*/.match(frag)[0].to_s.strip] = head+frag+tail}
|
|
259
|
+
end
|
|
260
|
+
接口uim表
|
|
261
|
+
end
|
|
262
|
+
|
|
189
263
|
def 接口isis信息 正文
|
|
190
264
|
tag = 正文["ISIS"] ? "ISIS" : "isis"
|
|
191
265
|
接口isis表 = {}
|
|
@@ -488,7 +562,7 @@ module ZXCTN9000_8EA
|
|
|
488
562
|
特殊接口集合 << [key]+configs if key.include?('loopback') || key.include?('null') || \
|
|
489
563
|
key.include?('extimer') || key.include?('vbui') || key.include?('spi') || \
|
|
490
564
|
key.include?('gcvi') || key.include?('guvi') || key.include?('mgmt_eth') || \
|
|
491
|
-
key.include?('qx_eth') || key.include?('qx') || key.include?('gre_tunnel')
|
|
565
|
+
key.include?('qx_eth') || key.include?('qx') || key.include?('gre_tunnel') || key.include?('vxlan_tunnel')
|
|
492
566
|
end
|
|
493
567
|
特殊接口集合
|
|
494
568
|
end
|
|
@@ -526,12 +600,12 @@ module ZXCTN9000_8EA
|
|
|
526
600
|
# func: 根据一个端口的描述信息,给出其格式化的类型、连接符、端口编号
|
|
527
601
|
def 端口识别 描述
|
|
528
602
|
描述 = 描述[0] if 描述.instance_of?(Array) # M6000取接口配置中名称部分 [name,<tag>...</tag>,...]
|
|
529
|
-
type = /xgei|gei|ulei|smartgroup|loopback|extimer|vbui|null|guvi|gcvi|mgmt_eth|
|
|
603
|
+
type = /xgei|gei|ulei|smartgroup|loopback|eth_dslgroup|extimer|vbui|vlan|virtual_template|vei|null|guvi|gcvi|gre_tunnel|mgmt_eth|ulei|irb|spi|vxlan_tunnel|flexe_client|flexe_group|ptp|gps|qx_eth|qx|bvi|pw|subvlan/.match(描述)
|
|
530
604
|
类型 = type ? type.to_s : '未知类型'
|
|
531
605
|
port = /(\d+|\/|\.)*(\d+)/.match(描述.split(类型).join)
|
|
532
606
|
端口 = port ? port.to_s : '未知端口'
|
|
533
607
|
端口 = '' if 类型=='mgmt_eth'
|
|
534
|
-
连接符 = if ['smartgroup','loopback','vbui','null','mgmt_eth','vei','flexe_client','flexe_group','qx','bvi','pw','subvlan'].include?(类型)
|
|
608
|
+
连接符 = if ['smartgroup','loopback','vlan','vbui','null','mgmt_eth','irb','vei','eth_dslgroup','vxlan_tunnel','flexe_client','flexe_group','qx','bvi','pw','subvlan','gre_tunnel','virtual_template'].include?(类型)
|
|
535
609
|
''
|
|
536
610
|
elsif ['xgei','gei','ulei','extimer','guvi','gcvi','spi','ptp','gps','qx_eth'].include?(类型)
|
|
537
611
|
'-'
|
|
@@ -609,7 +683,6 @@ module ZXCTN9000_8EA
|
|
|
609
683
|
实例
|
|
610
684
|
end
|
|
611
685
|
|
|
612
|
-
|
|
613
686
|
#####################################################################################################
|
|
614
687
|
# 聚合接口判定相关
|
|
615
688
|
#####################################################################################################
|
|
@@ -673,7 +746,7 @@ module ZXCTN9000_8EA
|
|
|
673
746
|
invlan = eval(pattern[1].to_s.gsub('-','..'))
|
|
674
747
|
if exvlan.instance_of?(Range)
|
|
675
748
|
exvlan.each{|exv|vlan['qinq'] << [exv,invlan]}
|
|
676
|
-
elsif exvlan.instance_of?(Fixnum
|
|
749
|
+
elsif exvlan.instance_of?(Integer) # Fixnum
|
|
677
750
|
vlan['qinq'] << [exvlan,invlan]
|
|
678
751
|
end;next
|
|
679
752
|
end
|
data/network.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: network-utility
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.1.
|
|
4
|
+
version: 1.1.28
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Matt
|
|
@@ -82,7 +82,6 @@ files:
|
|
|
82
82
|
- document/bgp-NE5000E-X16A.md
|
|
83
83
|
- document/bgp-NE80E.md
|
|
84
84
|
- document/config.md
|
|
85
|
-
- document/config.rb
|
|
86
85
|
- document/document.rb
|
|
87
86
|
- document/if-ALCATEL7750.md
|
|
88
87
|
- document/if-C7609.md
|