network-utility 1.1.4
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 +7 -0
- data/README.md +2 -0
- data/document/acl-M6000-16E.md +27 -0
- data/document/acl-M6000-18S.md +27 -0
- data/document/acl-M6000-8.md +27 -0
- data/document/acl-M6000-8E.md +27 -0
- data/document/acl-MA5200G-8.md +204 -0
- data/document/acl-ME60-16.md +177 -0
- data/document/acl-ME60-X16.md +177 -0
- data/document/acl-NE40E-X16.md +204 -0
- data/document/acl-NE40E-X16A.md +204 -0
- data/document/acl-NE40E-X8.md +204 -0
- data/document/acl-NE40E.md +204 -0
- data/document/acl-NE5000E-20.md +25 -0
- data/document/acl-NE5000E-X16.md +25 -0
- data/document/acl-NE5000E-X16A.md +25 -0
- data/document/acl-NE80E.md +204 -0
- data/document/bgp-CR16010H-F.md +25 -0
- data/document/bgp-CR16018-F.md +25 -0
- data/document/bgp-CR19000-20.md +25 -0
- data/document/bgp-M6000-16E.md +25 -0
- data/document/bgp-M6000-18S.md +25 -0
- data/document/bgp-M6000-8.md +25 -0
- data/document/bgp-M6000-8E.md +25 -0
- data/document/bgp-MA5200G-8.md +25 -0
- data/document/bgp-ME60-16.md +25 -0
- data/document/bgp-ME60-X16.md +25 -0
- data/document/bgp-NE40E-X16.md +25 -0
- data/document/bgp-NE40E-X16A.md +25 -0
- data/document/bgp-NE40E-X8.md +25 -0
- data/document/bgp-NE40E.md +25 -0
- data/document/bgp-NE5000E-20.md +25 -0
- data/document/bgp-NE5000E-X16.md +25 -0
- data/document/bgp-NE5000E-X16A.md +25 -0
- data/document/bgp-NE80E.md +25 -0
- data/document/config.md +1153 -0
- data/document/document.rb +27 -0
- data/document/if-ALCATEL7750.md +48 -0
- data/document/if-C7609.md +47 -0
- data/document/if-CR16010H-F.md +300 -0
- data/document/if-CR16018-F.md +300 -0
- data/document/if-CR19000-20.md +300 -0
- data/document/if-CRS-16.md +47 -0
- data/document/if-CX600-X16A.md +349 -0
- data/document/if-CX600-X8A.md +349 -0
- data/document/if-M6000-16E.md +652 -0
- data/document/if-M6000-18S.md +846 -0
- data/document/if-M6000-8.md +653 -0
- data/document/if-M6000-8E.md +653 -0
- data/document/if-MA5200G-8.md +357 -0
- data/document/if-ME60-16.md +357 -0
- data/document/if-ME60-X16.md +357 -0
- data/document/if-NE40E-X16.md +357 -0
- data/document/if-NE40E-X16A.md +357 -0
- data/document/if-NE40E-X8.md +357 -0
- data/document/if-NE40E.md +357 -0
- data/document/if-NE5000E-20.md +357 -0
- data/document/if-NE5000E-X16.md +357 -0
- data/document/if-NE5000E-X16A.md +357 -0
- data/document/if-NE8000E-X8.md +357 -0
- data/document/if-NE80E.md +357 -0
- data/document/if-NE8100-X8.md +357 -0
- data/document/if-Nokia7750.md +48 -0
- data/document/if-T8000-18.md +653 -0
- data/document/if-V6000.md +663 -0
- data/document/if-VNE9000.md +357 -0
- data/document/if-ZXCTN9000-18EA.md +762 -0
- data/document/if-ZXCTN9000-8EA.md +762 -0
- data/document/lic-M6000-16E.md +28 -0
- data/document/lic-M6000-18S.md +28 -0
- data/document/lic-M6000-8.md +28 -0
- data/document/lic-M6000-8E.md +28 -0
- data/document/lic-MA5200G-8.md +27 -0
- data/document/lic-ME60-16.md +27 -0
- data/document/lic-ME60-X16.md +27 -0
- data/document/lic-NE40E-X16.md +27 -0
- data/document/lic-NE40E-X16A.md +27 -0
- data/document/lic-NE40E-X8.md +27 -0
- data/document/log-M6000-16E.md +36 -0
- data/document/log-M6000-18S.md +36 -0
- data/document/log-M6000-8.md +36 -0
- data/document/log-M6000-8E.md +36 -0
- data/document/log-MA5200G-8.md +61 -0
- data/document/log-ME60-16.md +61 -0
- data/document/log-ME60-X16.md +61 -0
- data/document/log-NE40E-X16.md +61 -0
- data/document/log-NE40E-X16A.md +61 -0
- data/document/log-NE40E-X8.md +61 -0
- data/document/log-NE40E.md +61 -0
- data/document/log-NE5000E-20.md +61 -0
- data/document/log-NE5000E-X16.md +61 -0
- data/document/log-NE5000E-X16A.md +61 -0
- data/document/log-NE80E.md +61 -0
- data/document/nat-CR16010H-F.md +27 -0
- data/document/nat-CR16018-F.md +27 -0
- data/document/nat-M6000-16E.md +27 -0
- data/document/nat-M6000-18S.md +27 -0
- data/document/nat-M6000-8.md +27 -0
- data/document/nat-M6000-8E.md +27 -0
- data/document/nat-ME60-16.md +44 -0
- data/document/nat-ME60-X16.md +44 -0
- data/document/nat-NE40E-X16.md +44 -0
- data/document/nat-NE40E-X16A.md +44 -0
- data/document/policy-M6000-16E.md +13 -0
- data/document/policy-M6000-18S.md +13 -0
- data/document/policy-M6000-8.md +13 -0
- data/document/policy-M6000-8E.md +13 -0
- data/document/policy-MA5200G-8.md +87 -0
- data/document/policy-ME60-16.md +87 -0
- data/document/policy-ME60-X16.md +87 -0
- data/document/policy-NE40E-X16.md +87 -0
- data/document/policy-NE40E-X16A.md +87 -0
- data/document/policy-NE40E-X8.md +87 -0
- data/document/policy-NE40E.md +87 -0
- data/document/policy-NE5000E-20.md +87 -0
- data/document/policy-NE5000E-X16.md +87 -0
- data/document/policy-NE5000E-X16A.md +87 -0
- data/document/policy-NE80E.md +87 -0
- data/document/pool-M6000-16E.md +126 -0
- data/document/pool-M6000-18S.md +126 -0
- data/document/pool-M6000-8.md +126 -0
- data/document/pool-M6000-8E.md +126 -0
- data/document/pool-MA5200G-8.md +138 -0
- data/document/pool-ME60-16.md +138 -0
- data/document/pool-ME60-X16.md +138 -0
- data/document/pool-NE40E-X16.md +138 -0
- data/document/pool-NE40E-X16A.md +138 -0
- data/document/pool-NE40E-X8.md +138 -0
- data/document/pool-NE40E.md +138 -0
- data/document/pool-NE80E.md +138 -0
- data/document/static-CR16010H-F.md +60 -0
- data/document/static-CR16018-F.md +60 -0
- data/document/static-CR19000-20.md +60 -0
- data/document/static-CX600-X16A.md +26 -0
- data/document/static-CX600-X8A.md +26 -0
- data/document/static-M6000-16E.md +104 -0
- data/document/static-M6000-18S.md +104 -0
- data/document/static-M6000-8.md +104 -0
- data/document/static-M6000-8E.md +104 -0
- data/document/static-MA5200G-8.md +82 -0
- data/document/static-ME60-16.md +82 -0
- data/document/static-ME60-X16.md +82 -0
- data/document/static-NE40E-X16.md +82 -0
- data/document/static-NE40E-X16A.md +81 -0
- data/document/static-NE40E-X8.md +82 -0
- data/document/static-NE40E.md +67 -0
- data/document/static-NE5000E-20.md +67 -0
- data/document/static-NE5000E-X16.md +67 -0
- data/document/static-NE5000E-X16A.md +67 -0
- data/document/static-NE8000E-X8.md +26 -0
- data/document/static-NE80E.md +67 -0
- data/document/static-NE8100-X8.md +26 -0
- data/document/static-T8000-18.md +34 -0
- data/document/static-ZXCTN9000-18EA.md +34 -0
- data/document/static-ZXCTN9000-8EA.md +34 -0
- data/document/system-M6000-16E.md +75 -0
- data/document/system-M6000-18S.md +76 -0
- data/document/system-M6000-8.md +75 -0
- data/document/system-M6000-8E.md +75 -0
- data/document/system-MA5200G-8.md +51 -0
- data/document/system-ME60-16.md +51 -0
- data/document/system-ME60-X16.md +51 -0
- data/document/system-NE40E-X16.md +51 -0
- data/document/system-NE40E-X16A.md +51 -0
- data/document/system-NE40E-X8.md +51 -0
- data/document/system-NE40E.md +51 -0
- data/document/system-NE5000E-20.md +51 -0
- data/document/system-NE5000E-X16.md +51 -0
- data/document/system-NE5000E-X16A.md +51 -0
- data/document/system-NE80E.md +51 -0
- data/document/telnet.md +332 -0
- data/network.rb +24 -0
- data/utility/ipv4_address.rb +266 -0
- data/utility/ipv6_address.rb +201 -0
- data/utility/mac_address.rb +77 -0
- data/utility/netmerge.rb +46 -0
- data/utility/route.rb +79 -0
- data/utility/whitelist.rb +21 -0
- metadata +258 -0
@@ -0,0 +1,44 @@
|
|
1
|
+
|
2
|
+
# ME60-16 NAT
|
3
|
+
|
4
|
+
```ruby
|
5
|
+
@sign << ['ME60-16', '流量解析']
|
6
|
+
|
7
|
+
module ME60_16
|
8
|
+
module_function
|
9
|
+
|
10
|
+
def 流量解析 统计回显
|
11
|
+
text = 统计回显.split("This operation will take a few minutes. Press 'Ctrl+C' to break ...").last.to_s.split("<").first.to_s
|
12
|
+
segments = text.split("\nSlot: ").select{|s|!s.empty?}
|
13
|
+
list = {}
|
14
|
+
segments.map do|s|
|
15
|
+
next unless s.split(" ").first
|
16
|
+
title="Slot: "+s.split("\n").first
|
17
|
+
list[title]={}
|
18
|
+
s.split("\n")[1..-1].each do|sl|next if sl.include?('----')
|
19
|
+
sp=sl.split(":")
|
20
|
+
next unless sp[0]
|
21
|
+
name,unit=sp[0].strip.split('(')
|
22
|
+
if unit
|
23
|
+
unit = unit.split(')').first
|
24
|
+
name = name + ' ' + unit.split(')').last.to_s.strip
|
25
|
+
list[title][name] = {"value"=>sp[1..-1].join(':').strip}
|
26
|
+
list[title][name].merge!("unit"=>unit)
|
27
|
+
else
|
28
|
+
list[title][name] = {"value"=>sp[1..-1].join(':').strip}
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
records = []
|
33
|
+
list.each do|slot, info|
|
34
|
+
receive = info['current receive packet bit speed'] || info['current receive packet bit speed bps'] || info['Current receive packet bit speed'] || info['Current receive packet bit speed bps']
|
35
|
+
transmit= info['current transmit packet bit speed'] || info['current transmit packet bit speed bps'] || info['Current transmit packet bit speed'] || info['Current transmit packet bit speed bps']
|
36
|
+
next unless receive || transmit
|
37
|
+
recv_spd = receive['unit'] ? (receive['value'].to_f/(1024*1024*1024)).round(2) : receive['unit']
|
38
|
+
send_spd = transmit['unit'] ? (transmit['value'].to_f/(1024*1024*1024)).round(2) : transmit['unit']
|
39
|
+
records << [slot, recv_spd, send_spd]
|
40
|
+
end
|
41
|
+
records
|
42
|
+
end
|
43
|
+
end
|
44
|
+
```
|
@@ -0,0 +1,44 @@
|
|
1
|
+
|
2
|
+
# ME60-X16 NAT
|
3
|
+
|
4
|
+
```ruby
|
5
|
+
@sign << ['ME60-X16', '流量解析']
|
6
|
+
|
7
|
+
module ME60_X16
|
8
|
+
module_function
|
9
|
+
|
10
|
+
def 流量解析 统计回显
|
11
|
+
text = 统计回显.split("This operation will take a few minutes. Press 'Ctrl+C' to break ...").last.to_s.split("<").first.to_s
|
12
|
+
segments = text.split("\nSlot: ").select{|s|!s.empty?}
|
13
|
+
list = {}
|
14
|
+
segments.map do|s|
|
15
|
+
next unless s.split(" ").first
|
16
|
+
title="Slot: "+s.split("\n").first
|
17
|
+
list[title]={}
|
18
|
+
s.split("\n")[1..-1].each do|sl|next if sl.include?('----')
|
19
|
+
sp=sl.split(":")
|
20
|
+
next unless sp[0]
|
21
|
+
name,unit=sp[0].strip.split('(')
|
22
|
+
if unit
|
23
|
+
unit = unit.split(')').first
|
24
|
+
name = name + ' ' + unit.split(')').last.to_s.strip
|
25
|
+
list[title][name] = {"value"=>sp[1..-1].join(':').strip}
|
26
|
+
list[title][name].merge!("unit"=>unit)
|
27
|
+
else
|
28
|
+
list[title][name] = {"value"=>sp[1..-1].join(':').strip}
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
records = []
|
33
|
+
list.each do|slot, info|
|
34
|
+
receive = info['current receive packet bit speed'] || info['current receive packet bit speed bps'] || info['Current receive packet bit speed'] || info['Current receive packet bit speed bps']
|
35
|
+
transmit= info['current transmit packet bit speed'] || info['current transmit packet bit speed bps'] || info['Current transmit packet bit speed'] || info['Current transmit packet bit speed bps']
|
36
|
+
next unless receive || transmit
|
37
|
+
recv_spd = receive['unit'] ? (receive['value'].to_f/(1024*1024*1024)).round(2) : receive['unit']
|
38
|
+
send_spd = transmit['unit'] ? (transmit['value'].to_f/(1024*1024*1024)).round(2) : transmit['unit']
|
39
|
+
records << [slot, recv_spd, send_spd]
|
40
|
+
end
|
41
|
+
records
|
42
|
+
end
|
43
|
+
end
|
44
|
+
```
|
@@ -0,0 +1,44 @@
|
|
1
|
+
|
2
|
+
# NE40E-X16 NAT
|
3
|
+
|
4
|
+
```ruby
|
5
|
+
@sign << ['NE40E-X16', '流量解析']
|
6
|
+
|
7
|
+
module NE40E_X16
|
8
|
+
module_function
|
9
|
+
|
10
|
+
def 流量解析 统计回显
|
11
|
+
text = 统计回显.split("This operation will take a few minutes. Press 'Ctrl+C' to break ...").last.to_s.split("<").first.to_s
|
12
|
+
segments = text.split("\nSlot: ").select{|s|!s.empty?}
|
13
|
+
list = {}
|
14
|
+
segments.map do|s|
|
15
|
+
next unless s.split(" ").first
|
16
|
+
title="Slot: "+s.split("\n").first
|
17
|
+
list[title]={}
|
18
|
+
s.split("\n")[1..-1].each do|sl|next if sl.include?('----')
|
19
|
+
sp=sl.split(":")
|
20
|
+
next unless sp[0]
|
21
|
+
name,unit=sp[0].strip.split('(')
|
22
|
+
if unit
|
23
|
+
unit = unit.split(')').first
|
24
|
+
name = name + ' ' + unit.split(')').last.to_s.strip
|
25
|
+
list[title][name] = {"value"=>sp[1..-1].join(':').strip}
|
26
|
+
list[title][name].merge!("unit"=>unit)
|
27
|
+
else
|
28
|
+
list[title][name] = {"value"=>sp[1..-1].join(':').strip}
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
records = []
|
33
|
+
list.each do|slot, info|
|
34
|
+
receive = info['current receive packet bit speed'] || info['current receive packet bit speed bps'] || info['Current receive packet bit speed'] || info['Current receive packet bit speed bps']
|
35
|
+
transmit= info['current transmit packet bit speed'] || info['current transmit packet bit speed bps'] || info['Current transmit packet bit speed'] || info['Current transmit packet bit speed bps']
|
36
|
+
next unless receive || transmit
|
37
|
+
recv_spd = receive['unit'] ? (receive['value'].to_f/(1024*1024*1024)).round(2) : receive['unit']
|
38
|
+
send_spd = transmit['unit'] ? (transmit['value'].to_f/(1024*1024*1024)).round(2) : transmit['unit']
|
39
|
+
records << [slot, recv_spd, send_spd]
|
40
|
+
end
|
41
|
+
records
|
42
|
+
end
|
43
|
+
end
|
44
|
+
```
|
@@ -0,0 +1,44 @@
|
|
1
|
+
|
2
|
+
# NE40E-X16A NAT
|
3
|
+
|
4
|
+
```ruby
|
5
|
+
@sign << ['NE40E-X16A', '流量解析']
|
6
|
+
|
7
|
+
module NE40E_X16A
|
8
|
+
module_function
|
9
|
+
|
10
|
+
def 流量解析 统计回显
|
11
|
+
text = 统计回显.split("This operation will take a few minutes. Press 'Ctrl+C' to break ...").last.to_s.split("<").first.to_s
|
12
|
+
segments = text.split("\nSlot: ").select{|s|!s.empty?}
|
13
|
+
list = {}
|
14
|
+
segments.map do|s|
|
15
|
+
next unless s.split(" ").first
|
16
|
+
title="Slot: "+s.split("\n").first
|
17
|
+
list[title]={}
|
18
|
+
s.split("\n")[1..-1].each do|sl|next if sl.include?('----')
|
19
|
+
sp=sl.split(":")
|
20
|
+
next unless sp[0]
|
21
|
+
name,unit=sp[0].strip.split('(')
|
22
|
+
if unit
|
23
|
+
unit = unit.split(')').first
|
24
|
+
name = name + ' ' + unit.split(')').last.to_s.strip
|
25
|
+
list[title][name] = {"value"=>sp[1..-1].join(':').strip}
|
26
|
+
list[title][name].merge!("unit"=>unit)
|
27
|
+
else
|
28
|
+
list[title][name] = {"value"=>sp[1..-1].join(':').strip}
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
records = []
|
33
|
+
list.each do|slot, info|
|
34
|
+
receive = info['current receive packet bit speed'] || info['current receive packet bit speed bps'] || info['Current receive packet bit speed'] || info['Current receive packet bit speed bps']
|
35
|
+
transmit= info['current transmit packet bit speed'] || info['current transmit packet bit speed bps'] || info['Current transmit packet bit speed'] || info['Current transmit packet bit speed bps']
|
36
|
+
next unless receive || transmit
|
37
|
+
recv_spd = receive['unit'] ? (receive['value'].to_f/(1024*1024*1024)).round(2) : receive['unit']
|
38
|
+
send_spd = transmit['unit'] ? (transmit['value'].to_f/(1024*1024*1024)).round(2) : transmit['unit']
|
39
|
+
records << [slot, recv_spd, send_spd]
|
40
|
+
end
|
41
|
+
records
|
42
|
+
end
|
43
|
+
end
|
44
|
+
```
|
@@ -0,0 +1,87 @@
|
|
1
|
+
|
2
|
+
# MA5200G-8 流策略、路由策略
|
3
|
+
|
4
|
+
```ruby
|
5
|
+
@sign << ['MA5200G-8', 'traffic']
|
6
|
+
@sign << ['MA5200G-8', 'traffic_classifier']
|
7
|
+
@sign << ['MA5200G-8', 'traffic_behavior']
|
8
|
+
@sign << ['MA5200G-8', 'traffic_policy']
|
9
|
+
|
10
|
+
module MA5200G_8
|
11
|
+
module_function
|
12
|
+
|
13
|
+
def traffic conflist
|
14
|
+
tc,tb,tp = ['traffic_classifier','traffic_behavior','traffic_policy'].map{|t|self.send(t,conflist)}
|
15
|
+
end
|
16
|
+
|
17
|
+
# {name => {classifier => [matchers], operator => opt}, ...}
|
18
|
+
def traffic_classifier conflist
|
19
|
+
tc = {}
|
20
|
+
conflist['traffic'].each do|traffic|
|
21
|
+
next unless traffic.include?('classifier')
|
22
|
+
name,tab = nil,{'operator'=>''}
|
23
|
+
traffic.split("\n").each do|line|
|
24
|
+
if line.include?('traffic classifier ')
|
25
|
+
tc[name] = tab
|
26
|
+
name, opt, op = line.split(' ')[2..4]
|
27
|
+
tab = {'operator'=>op}
|
28
|
+
else
|
29
|
+
matcher = line.split(' ')
|
30
|
+
tab['classifier'] ||= []
|
31
|
+
tab['classifier'] << matcher # sequences
|
32
|
+
end
|
33
|
+
end
|
34
|
+
tc[name] = tab # last tc
|
35
|
+
tc.delete(nil)
|
36
|
+
end if conflist['traffic']
|
37
|
+
return tc
|
38
|
+
end
|
39
|
+
|
40
|
+
# {name => [behaviors], ...}
|
41
|
+
def traffic_behavior conflist
|
42
|
+
tb = {}
|
43
|
+
conflist['traffic'].each do|traffic|
|
44
|
+
next unless traffic.include?('behavior')
|
45
|
+
name,tab = nil,{'behavior'=>[]}
|
46
|
+
traffic.split("\n").each do|line|
|
47
|
+
if line.include?('traffic behavior ')
|
48
|
+
tb[name] = tab
|
49
|
+
name,tab = line.split(' ')[2],{'behavior'=>[]}
|
50
|
+
else
|
51
|
+
behavior = line.split(' ')
|
52
|
+
tab['behavior'] << behavior # sequences
|
53
|
+
end
|
54
|
+
end
|
55
|
+
tb[name] = tab # last tb
|
56
|
+
tb.delete(nil)
|
57
|
+
end if conflist['traffic']
|
58
|
+
return tb
|
59
|
+
end
|
60
|
+
|
61
|
+
# {name => {policy => {classifier => [behavior,precedence], ...}, mode => mode}, ...}
|
62
|
+
def traffic_policy conflist
|
63
|
+
tp = {}
|
64
|
+
conflist['traffic'].each do|traffic|
|
65
|
+
next unless traffic.include?('policy')
|
66
|
+
name,tab = nil,{'policy'=>{}}
|
67
|
+
traffic.split("\n").each do|line|
|
68
|
+
if line.include?('traffic policy ')
|
69
|
+
tp[name] = tab
|
70
|
+
name,tab = line.split(' ')[2],{'policy'=>{}}
|
71
|
+
elsif line.include?('-mode')
|
72
|
+
tab['mode'] = 'share-mode'
|
73
|
+
elsif line.include?('statistics ')
|
74
|
+
tab['statistics'] = line.split(' ')[1]
|
75
|
+
else
|
76
|
+
policy = line.split(' ')
|
77
|
+
classifier, behavior, precedence = policy[1],policy[3],policy[5]
|
78
|
+
tab['policy'].merge!({ classifier => (precedence ? [behavior,precedence] : [behavior]) }) # tree
|
79
|
+
end
|
80
|
+
end
|
81
|
+
tp[name] = tab # last tb
|
82
|
+
tp.delete(nil)
|
83
|
+
end if conflist['traffic']
|
84
|
+
return tp
|
85
|
+
end
|
86
|
+
end
|
87
|
+
```
|
@@ -0,0 +1,87 @@
|
|
1
|
+
|
2
|
+
# ME60-16 流策略、路由策略
|
3
|
+
|
4
|
+
```ruby
|
5
|
+
@sign << ['ME60-16', 'traffic']
|
6
|
+
@sign << ['ME60-16', 'traffic_classifier']
|
7
|
+
@sign << ['ME60-16', 'traffic_behavior']
|
8
|
+
@sign << ['ME60-16', 'traffic_policy']
|
9
|
+
|
10
|
+
module ME60_16
|
11
|
+
module_function
|
12
|
+
|
13
|
+
def traffic conflist
|
14
|
+
tc,tb,tp = ['traffic_classifier','traffic_behavior','traffic_policy'].map{|t|self.send(t,conflist)}
|
15
|
+
end
|
16
|
+
|
17
|
+
# {name => {classifier => [matchers], operator => opt}, ...}
|
18
|
+
def traffic_classifier conflist
|
19
|
+
tc = {}
|
20
|
+
conflist['traffic'].each do|traffic|
|
21
|
+
next unless traffic.include?('classifier')
|
22
|
+
name,tab = nil,{'operator'=>''}
|
23
|
+
traffic.split("\n").each do|line|
|
24
|
+
if line.include?('traffic classifier ')
|
25
|
+
tc[name] = tab
|
26
|
+
name, opt, op = line.split(' ')[2..4]
|
27
|
+
tab = {'operator'=>op}
|
28
|
+
else
|
29
|
+
matcher = line.split(' ')
|
30
|
+
tab['classifier'] ||= []
|
31
|
+
tab['classifier'] << matcher # sequences
|
32
|
+
end
|
33
|
+
end
|
34
|
+
tc[name] = tab # last tc
|
35
|
+
tc.delete(nil)
|
36
|
+
end if conflist['traffic']
|
37
|
+
return tc
|
38
|
+
end
|
39
|
+
|
40
|
+
# {name => [behaviors], ...}
|
41
|
+
def traffic_behavior conflist
|
42
|
+
tb = {}
|
43
|
+
conflist['traffic'].each do|traffic|
|
44
|
+
next unless traffic.include?('behavior')
|
45
|
+
name,tab = nil,{'behavior'=>[]}
|
46
|
+
traffic.split("\n").each do|line|
|
47
|
+
if line.include?('traffic behavior ')
|
48
|
+
tb[name] = tab
|
49
|
+
name,tab = line.split(' ')[2],{'behavior'=>[]}
|
50
|
+
else
|
51
|
+
behavior = line.split(' ')
|
52
|
+
tab['behavior'] << behavior # sequences
|
53
|
+
end
|
54
|
+
end
|
55
|
+
tb[name] = tab # last tb
|
56
|
+
tb.delete(nil)
|
57
|
+
end if conflist['traffic']
|
58
|
+
return tb
|
59
|
+
end
|
60
|
+
|
61
|
+
# {name => {policy => {classifier => [behavior,precedence], ...}, mode => mode}, ...}
|
62
|
+
def traffic_policy conflist
|
63
|
+
tp = {}
|
64
|
+
conflist['traffic'].each do|traffic|
|
65
|
+
next unless traffic.include?('policy')
|
66
|
+
name,tab = nil,{'policy'=>{}}
|
67
|
+
traffic.split("\n").each do|line|
|
68
|
+
if line.include?('traffic policy ')
|
69
|
+
tp[name] = tab
|
70
|
+
name,tab = line.split(' ')[2],{'policy'=>{}}
|
71
|
+
elsif line.include?('-mode')
|
72
|
+
tab['mode'] = 'share-mode'
|
73
|
+
elsif line.include?('statistics ')
|
74
|
+
tab['statistics'] = line.split(' ')[1]
|
75
|
+
else
|
76
|
+
policy = line.split(' ')
|
77
|
+
classifier, behavior, precedence = policy[1],policy[3],policy[5]
|
78
|
+
tab['policy'].merge!({ classifier => (precedence ? [behavior,precedence] : [behavior]) }) # tree
|
79
|
+
end
|
80
|
+
end
|
81
|
+
tp[name] = tab # last tb
|
82
|
+
tp.delete(nil)
|
83
|
+
end if conflist['traffic']
|
84
|
+
return tp
|
85
|
+
end
|
86
|
+
end
|
87
|
+
```
|
@@ -0,0 +1,87 @@
|
|
1
|
+
|
2
|
+
# ME60-X16 流策略、路由策略
|
3
|
+
|
4
|
+
```ruby
|
5
|
+
@sign << ['ME60-X16', 'traffic']
|
6
|
+
@sign << ['ME60-X16', 'traffic_classifier']
|
7
|
+
@sign << ['ME60-X16', 'traffic_behavior']
|
8
|
+
@sign << ['ME60-X16', 'traffic_policy']
|
9
|
+
|
10
|
+
module ME60_X16
|
11
|
+
module_function
|
12
|
+
|
13
|
+
def traffic conflist
|
14
|
+
tc,tb,tp = ['traffic_classifier','traffic_behavior','traffic_policy'].map{|t|self.send(t,conflist)}
|
15
|
+
end
|
16
|
+
|
17
|
+
# {name => {classifier => [matchers], operator => opt}, ...}
|
18
|
+
def traffic_classifier conflist
|
19
|
+
tc = {}
|
20
|
+
conflist['traffic'].each do|traffic|
|
21
|
+
next unless traffic.include?('classifier')
|
22
|
+
name,tab = nil,{'operator'=>''}
|
23
|
+
traffic.split("\n").each do|line|
|
24
|
+
if line.include?('traffic classifier ')
|
25
|
+
tc[name] = tab
|
26
|
+
name, opt, op = line.split(' ')[2..4]
|
27
|
+
tab = {'operator'=>op}
|
28
|
+
else
|
29
|
+
matcher = line.split(' ')
|
30
|
+
tab['classifier'] ||= []
|
31
|
+
tab['classifier'] << matcher # sequences
|
32
|
+
end
|
33
|
+
end
|
34
|
+
tc[name] = tab # last tc
|
35
|
+
tc.delete(nil)
|
36
|
+
end if conflist['traffic']
|
37
|
+
return tc
|
38
|
+
end
|
39
|
+
|
40
|
+
# {name => [behaviors], ...}
|
41
|
+
def traffic_behavior conflist
|
42
|
+
tb = {}
|
43
|
+
conflist['traffic'].each do|traffic|
|
44
|
+
next unless traffic.include?('behavior')
|
45
|
+
name,tab = nil,{'behavior'=>[]}
|
46
|
+
traffic.split("\n").each do|line|
|
47
|
+
if line.include?('traffic behavior ')
|
48
|
+
tb[name] = tab
|
49
|
+
name,tab = line.split(' ')[2],{'behavior'=>[]}
|
50
|
+
else
|
51
|
+
behavior = line.split(' ')
|
52
|
+
tab['behavior'] << behavior # sequences
|
53
|
+
end
|
54
|
+
end
|
55
|
+
tb[name] = tab # last tb
|
56
|
+
tb.delete(nil)
|
57
|
+
end if conflist['traffic']
|
58
|
+
return tb
|
59
|
+
end
|
60
|
+
|
61
|
+
# {name => {policy => {classifier => [behavior,precedence], ...}, mode => mode}, ...}
|
62
|
+
def traffic_policy conflist
|
63
|
+
tp = {}
|
64
|
+
conflist['traffic'].each do|traffic|
|
65
|
+
next unless traffic.include?('policy')
|
66
|
+
name,tab = nil,{'policy'=>{}}
|
67
|
+
traffic.split("\n").each do|line|
|
68
|
+
if line.include?('traffic policy ')
|
69
|
+
tp[name] = tab
|
70
|
+
name,tab = line.split(' ')[2],{'policy'=>{}}
|
71
|
+
elsif line.include?('-mode')
|
72
|
+
tab['mode'] = 'share-mode'
|
73
|
+
elsif line.include?('statistics ')
|
74
|
+
tab['statistics'] = line.split(' ')[1]
|
75
|
+
else
|
76
|
+
policy = line.split(' ')
|
77
|
+
classifier, behavior, precedence = policy[1],policy[3],policy[5]
|
78
|
+
tab['policy'].merge!({ classifier => (precedence ? [behavior,precedence] : [behavior]) }) # tree
|
79
|
+
end
|
80
|
+
end
|
81
|
+
tp[name] = tab # last tb
|
82
|
+
tp.delete(nil)
|
83
|
+
end if conflist['traffic']
|
84
|
+
return tp
|
85
|
+
end
|
86
|
+
end
|
87
|
+
```
|
@@ -0,0 +1,87 @@
|
|
1
|
+
|
2
|
+
# NE40E-X16 流策略、路由策略
|
3
|
+
|
4
|
+
```ruby
|
5
|
+
@sign << ['NE40E-X16', 'traffic']
|
6
|
+
@sign << ['NE40E-X16', 'traffic_classifier']
|
7
|
+
@sign << ['NE40E-X16', 'traffic_behavior']
|
8
|
+
@sign << ['NE40E-X16', 'traffic_policy']
|
9
|
+
|
10
|
+
module NE40E_X16
|
11
|
+
module_function
|
12
|
+
|
13
|
+
def traffic conflist
|
14
|
+
tc,tb,tp = ['traffic_classifier','traffic_behavior','traffic_policy'].map{|t|self.send(t,conflist)}
|
15
|
+
end
|
16
|
+
|
17
|
+
# {name => {classifier => [matchers], operator => opt}, ...}
|
18
|
+
def traffic_classifier conflist
|
19
|
+
tc = {}
|
20
|
+
conflist['traffic'].each do|traffic|
|
21
|
+
next unless traffic.include?('classifier')
|
22
|
+
name,tab = nil,{'operator'=>''}
|
23
|
+
traffic.split("\n").each do|line|
|
24
|
+
if line.include?('traffic classifier ')
|
25
|
+
tc[name] = tab
|
26
|
+
name, opt, op = line.split(' ')[2..4]
|
27
|
+
tab = {'operator'=>op}
|
28
|
+
else
|
29
|
+
matcher = line.split(' ')
|
30
|
+
tab['classifier'] ||= []
|
31
|
+
tab['classifier'] << matcher # sequences
|
32
|
+
end
|
33
|
+
end
|
34
|
+
tc[name] = tab # last tc
|
35
|
+
tc.delete(nil)
|
36
|
+
end if conflist['traffic']
|
37
|
+
return tc
|
38
|
+
end
|
39
|
+
|
40
|
+
# {name => [behaviors], ...}
|
41
|
+
def traffic_behavior conflist
|
42
|
+
tb = {}
|
43
|
+
conflist['traffic'].each do|traffic|
|
44
|
+
next unless traffic.include?('behavior')
|
45
|
+
name,tab = nil,{'behavior'=>[]}
|
46
|
+
traffic.split("\n").each do|line|
|
47
|
+
if line.include?('traffic behavior ')
|
48
|
+
tb[name] = tab
|
49
|
+
name,tab = line.split(' ')[2],{'behavior'=>[]}
|
50
|
+
else
|
51
|
+
behavior = line.split(' ')
|
52
|
+
tab['behavior'] << behavior # sequences
|
53
|
+
end
|
54
|
+
end
|
55
|
+
tb[name] = tab # last tb
|
56
|
+
tb.delete(nil)
|
57
|
+
end if conflist['traffic']
|
58
|
+
return tb
|
59
|
+
end
|
60
|
+
|
61
|
+
# {name => {policy => {classifier => [behavior,precedence], ...}, mode => mode}, ...}
|
62
|
+
def traffic_policy conflist
|
63
|
+
tp = {}
|
64
|
+
conflist['traffic'].each do|traffic|
|
65
|
+
next unless traffic.include?('policy')
|
66
|
+
name,tab = nil,{'policy'=>{}}
|
67
|
+
traffic.split("\n").each do|line|
|
68
|
+
if line.include?('traffic policy ')
|
69
|
+
tp[name] = tab
|
70
|
+
name,tab = line.split(' ')[2],{'policy'=>{}}
|
71
|
+
elsif line.include?('-mode')
|
72
|
+
tab['mode'] = 'share-mode'
|
73
|
+
elsif line.include?('statistics ')
|
74
|
+
tab['statistics'] = line.split(' ')[1]
|
75
|
+
else
|
76
|
+
policy = line.split(' ')
|
77
|
+
classifier, behavior, precedence = policy[1],policy[3],policy[5]
|
78
|
+
tab['policy'].merge!({ classifier => (precedence ? [behavior,precedence] : [behavior]) }) # tree
|
79
|
+
end
|
80
|
+
end
|
81
|
+
tp[name] = tab # last tb
|
82
|
+
tp.delete(nil)
|
83
|
+
end if conflist['traffic']
|
84
|
+
return tp
|
85
|
+
end
|
86
|
+
end
|
87
|
+
```
|
@@ -0,0 +1,87 @@
|
|
1
|
+
|
2
|
+
# NE40E-X16A 流策略、路由策略
|
3
|
+
|
4
|
+
```ruby
|
5
|
+
@sign << ['NE40E-X16A', 'traffic']
|
6
|
+
@sign << ['NE40E-X16A', 'traffic_classifier']
|
7
|
+
@sign << ['NE40E-X16A', 'traffic_behavior']
|
8
|
+
@sign << ['NE40E-X16A', 'traffic_policy']
|
9
|
+
|
10
|
+
module NE40E_X16A
|
11
|
+
module_function
|
12
|
+
|
13
|
+
def traffic conflist
|
14
|
+
tc,tb,tp = ['traffic_classifier','traffic_behavior','traffic_policy'].map{|t|self.send(t,conflist)}
|
15
|
+
end
|
16
|
+
|
17
|
+
# {name => {classifier => [matchers], operator => opt}, ...}
|
18
|
+
def traffic_classifier conflist
|
19
|
+
tc = {}
|
20
|
+
conflist['traffic'].each do|traffic|
|
21
|
+
next unless traffic.include?('classifier')
|
22
|
+
name,tab = nil,{'operator'=>''}
|
23
|
+
traffic.split("\n").each do|line|
|
24
|
+
if line.include?('traffic classifier ')
|
25
|
+
tc[name] = tab
|
26
|
+
name, opt, op = line.split(' ')[2..4]
|
27
|
+
tab = {'operator'=>op}
|
28
|
+
else
|
29
|
+
matcher = line.split(' ')
|
30
|
+
tab['classifier'] ||= []
|
31
|
+
tab['classifier'] << matcher # sequences
|
32
|
+
end
|
33
|
+
end
|
34
|
+
tc[name] = tab # last tc
|
35
|
+
tc.delete(nil)
|
36
|
+
end if conflist['traffic']
|
37
|
+
return tc
|
38
|
+
end
|
39
|
+
|
40
|
+
# {name => [behaviors], ...}
|
41
|
+
def traffic_behavior conflist
|
42
|
+
tb = {}
|
43
|
+
conflist['traffic'].each do|traffic|
|
44
|
+
next unless traffic.include?('behavior')
|
45
|
+
name,tab = nil,{'behavior'=>[]}
|
46
|
+
traffic.split("\n").each do|line|
|
47
|
+
if line.include?('traffic behavior ')
|
48
|
+
tb[name] = tab
|
49
|
+
name,tab = line.split(' ')[2],{'behavior'=>[]}
|
50
|
+
else
|
51
|
+
behavior = line.split(' ')
|
52
|
+
tab['behavior'] << behavior # sequences
|
53
|
+
end
|
54
|
+
end
|
55
|
+
tb[name] = tab # last tb
|
56
|
+
tb.delete(nil)
|
57
|
+
end if conflist['traffic']
|
58
|
+
return tb
|
59
|
+
end
|
60
|
+
|
61
|
+
# {name => {policy => {classifier => [behavior,precedence], ...}, mode => mode}, ...}
|
62
|
+
def traffic_policy conflist
|
63
|
+
tp = {}
|
64
|
+
conflist['traffic'].each do|traffic|
|
65
|
+
next unless traffic.include?('policy')
|
66
|
+
name,tab = nil,{'policy'=>{}}
|
67
|
+
traffic.split("\n").each do|line|
|
68
|
+
if line.include?('traffic policy ')
|
69
|
+
tp[name] = tab
|
70
|
+
name,tab = line.split(' ')[2],{'policy'=>{}}
|
71
|
+
elsif line.include?('-mode')
|
72
|
+
tab['mode'] = 'share-mode'
|
73
|
+
elsif line.include?('statistics ')
|
74
|
+
tab['statistics'] = line.split(' ')[1]
|
75
|
+
else
|
76
|
+
policy = line.split(' ')
|
77
|
+
classifier, behavior, precedence = policy[1],policy[3],policy[5]
|
78
|
+
tab['policy'].merge!({ classifier => (precedence ? [behavior,precedence] : [behavior]) }) # tree
|
79
|
+
end
|
80
|
+
end
|
81
|
+
tp[name] = tab # last tb
|
82
|
+
tp.delete(nil)
|
83
|
+
end if conflist['traffic']
|
84
|
+
return tp
|
85
|
+
end
|
86
|
+
end
|
87
|
+
```
|