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,87 @@
|
|
1
|
+
|
2
|
+
# NE40E-X8 流策略、路由策略
|
3
|
+
|
4
|
+
```ruby
|
5
|
+
@sign << ['NE40E-X8', 'traffic']
|
6
|
+
@sign << ['NE40E-X8', 'traffic_classifier']
|
7
|
+
@sign << ['NE40E-X8', 'traffic_behavior']
|
8
|
+
@sign << ['NE40E-X8', 'traffic_policy']
|
9
|
+
|
10
|
+
module NE40E_X8
|
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 流策略、路由策略
|
3
|
+
|
4
|
+
```ruby
|
5
|
+
@sign << ['NE40E', 'traffic']
|
6
|
+
@sign << ['NE40E', 'traffic_classifier']
|
7
|
+
@sign << ['NE40E', 'traffic_behavior']
|
8
|
+
@sign << ['NE40E', 'traffic_policy']
|
9
|
+
|
10
|
+
module NE40E
|
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
|
+
# NE5000E-20 流策略、路由策略
|
3
|
+
|
4
|
+
```ruby
|
5
|
+
@sign << ['NE5000E-20', 'traffic']
|
6
|
+
@sign << ['NE5000E-20', 'traffic_classifier']
|
7
|
+
@sign << ['NE5000E-20', 'traffic_behavior']
|
8
|
+
@sign << ['NE5000E-20', 'traffic_policy']
|
9
|
+
|
10
|
+
module NE5000E_20
|
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
|
+
# NE5000E-X16 流策略、路由策略
|
3
|
+
|
4
|
+
```ruby
|
5
|
+
@sign << ['NE5000E-X16', 'traffic']
|
6
|
+
@sign << ['NE5000E-X16', 'traffic_classifier']
|
7
|
+
@sign << ['NE5000E-X16', 'traffic_behavior']
|
8
|
+
@sign << ['NE5000E-X16', 'traffic_policy']
|
9
|
+
|
10
|
+
module NE5000E_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
|
+
# NE5000E-X16A 流策略、路由策略
|
3
|
+
|
4
|
+
```ruby
|
5
|
+
@sign << ['NE5000E-X16A', 'traffic']
|
6
|
+
@sign << ['NE5000E-X16A', 'traffic_classifier']
|
7
|
+
@sign << ['NE5000E-X16A', 'traffic_behavior']
|
8
|
+
@sign << ['NE5000E-X16A', 'traffic_policy']
|
9
|
+
|
10
|
+
module NE5000E_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
|
+
```
|
@@ -0,0 +1,87 @@
|
|
1
|
+
|
2
|
+
# NE80E 流策略、路由策略
|
3
|
+
|
4
|
+
```ruby
|
5
|
+
@sign << ['NE80E', 'traffic']
|
6
|
+
@sign << ['NE80E', 'traffic_classifier']
|
7
|
+
@sign << ['NE80E', 'traffic_behavior']
|
8
|
+
@sign << ['NE80E', 'traffic_policy']
|
9
|
+
|
10
|
+
module NE80E
|
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,126 @@
|
|
1
|
+
|
2
|
+
# M6000-16E 地址池
|
3
|
+
|
4
|
+
```ruby
|
5
|
+
@sign << ['M6000-16E', '地址池接口']
|
6
|
+
@sign << ['M6000-16E', '地址池配置']
|
7
|
+
@sign << ['M6000-16E', '地址池解析']
|
8
|
+
@sign << ['M6000-16E', 'nat地址配置']
|
9
|
+
@sign << ['M6000-16E', '地址池日志']
|
10
|
+
|
11
|
+
module M6000_16E
|
12
|
+
module_function
|
13
|
+
|
14
|
+
def 地址池接口 配置散列
|
15
|
+
虚接口正文,录入 = '',false;虚接口列表,虚接口散列 = [],{}
|
16
|
+
(配置散列['AM'] || 配置散列['am']).each_line do|line|
|
17
|
+
录入 = true if / interface vbui(.)*/.match(line)
|
18
|
+
虚接口正文 << line if 录入
|
19
|
+
(虚接口列表 << 虚接口正文;虚接口正文,录入 = '',false) if " \$\n"==line # M6k-8 is / \$/.match(line)
|
20
|
+
end
|
21
|
+
虚接口列表.delete("")
|
22
|
+
虚接口列表.each{|虚接口|虚接口散列[虚接口.split("\n")[0].split(' ')[1].strip]=虚接口}
|
23
|
+
虚接口散列
|
24
|
+
end
|
25
|
+
|
26
|
+
def 地址池配置 虚接口文本
|
27
|
+
地址池正文,录入 = '',false;地址池列表 = []
|
28
|
+
虚接口文本.each_line do|line|
|
29
|
+
录入 = true if / ip-pool pool-name(.)*/.match(line)
|
30
|
+
地址池正文 << line if 录入
|
31
|
+
(地址池列表 << 地址池正文;地址池正文,录入 = '',false) if " \$\n"==line # M6k-8 is / \$/.match(line)
|
32
|
+
end
|
33
|
+
地址池列表
|
34
|
+
end
|
35
|
+
|
36
|
+
def 地址池解析 配置散列
|
37
|
+
地址池列表,地址池配置,虚接口散列 = [],[],地址池接口(配置散列)
|
38
|
+
虚接口散列.values.each{|虚接口|地址池配置 += 地址池配置(虚接口)}
|
39
|
+
地址池配置.each do|地址池|参数 = {};index = 1
|
40
|
+
地址池.each_line do|line|
|
41
|
+
if line.include?('ip-pool')
|
42
|
+
参数['name'] = line.chop.strip.split(' ')[-3]
|
43
|
+
参数['id'] = line.chop.strip.split(' ')[-1]
|
44
|
+
end
|
45
|
+
if line.include?('access-domain')
|
46
|
+
参数['access-domain'] ||= []
|
47
|
+
参数['access-domain'] << line.chop.strip.split(' ')[-1]
|
48
|
+
end
|
49
|
+
if line.include?('pppoe-dns-server') || line.include?('ipoe-dns-server')
|
50
|
+
参数['dns-server'] ||= []
|
51
|
+
参数['dns-server'] << line.chop.gsub('second','').strip.split(' ')[-1]
|
52
|
+
参数['dns-server'].uniq!
|
53
|
+
end
|
54
|
+
if line.include?('member')
|
55
|
+
index = line.split(' ').last.strip
|
56
|
+
end
|
57
|
+
if line.include?('start-ip') and line.include?('end-ip')
|
58
|
+
参数['member'] ||= []
|
59
|
+
开始ip = line.chop.strip.split(' ')[-3]
|
60
|
+
结束ip = line.chop.strip.split(' ')[-1]
|
61
|
+
参数['member'] << [index,开始ip,结束ip]
|
62
|
+
end
|
63
|
+
end
|
64
|
+
地址池列表 << 参数
|
65
|
+
end
|
66
|
+
地址池列表
|
67
|
+
end
|
68
|
+
|
69
|
+
def nat地址配置 配置散列
|
70
|
+
地址池列表 = [];参数 = {}
|
71
|
+
(配置散列['CGN'] || 配置散列['cgn'] || "").each_line do|line|
|
72
|
+
if line.include?("node")
|
73
|
+
参数['node'] ||= []
|
74
|
+
a,node_id,board = line.split(" ")
|
75
|
+
参数['node'] << [node_id,board]
|
76
|
+
end
|
77
|
+
参数['tcp-mss-clamping'] = line.split(" ")[-1].strip if line.include?("tcp-mss-clamping")
|
78
|
+
if line.include?("cgn-pool")
|
79
|
+
参数['pool'] ||= {}
|
80
|
+
参数['pool']['name'] = line.split(" ")[1]
|
81
|
+
参数['pool']['id'] = line.split(" ")[3]
|
82
|
+
end
|
83
|
+
参数['pool']['port-range'] = line.split(" ")[-1] if line.include?("port-range")
|
84
|
+
if line.include?("section")
|
85
|
+
参数['pool']['section'] ||= []
|
86
|
+
a,section,stip,edip = line.split(" ")
|
87
|
+
参数['pool']['section'] << [section,stip,edip]
|
88
|
+
end
|
89
|
+
if line.include?("domain")
|
90
|
+
参数['domain name'] = line.split(" ")[1]
|
91
|
+
参数['domain id'] = line.split(" ")[2]
|
92
|
+
参数['domain type'] = line.split(" ")[4..5].join(" ")
|
93
|
+
end
|
94
|
+
参数['tcp-timeout-unwell-known-fin-rst'] = line.split(" ")[-1] if line.include?("unwell-known-port")
|
95
|
+
参数['tcp-timeout-well-known-fin-rst'] = line.split(" ")[-1] if line.include?("well-known-port")
|
96
|
+
if line.include?("dynamic")
|
97
|
+
参数['acl rule'] ||= []
|
98
|
+
参数['acl rule'] << line.strip
|
99
|
+
end
|
100
|
+
end
|
101
|
+
地址池列表 << 参数
|
102
|
+
地址池列表
|
103
|
+
end
|
104
|
+
|
105
|
+
def 地址池日志 详细信息
|
106
|
+
地址池列表 = [];时间标签 = Time.now.form
|
107
|
+
分片信息 = 详细信息.split("----------------------------------------\n")[1..-1]
|
108
|
+
分片信息.each do|片段|单池 = {"Scan Time"=>时间标签}
|
109
|
+
单池['Pool Id'] = /pool\-id( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip.split(" ")[0]
|
110
|
+
单池['Pool Name'] = /pool\-name( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip#.split(" ")[0]
|
111
|
+
单池['Description'] = /description( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip#.split(" ")[0]
|
112
|
+
单池['Domain Name'] = /domain\-name( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip#.split(" ")[0]
|
113
|
+
其他域名 = 片段.split("\n").select{|line|line.split(" ").size==1 and !line.include?("#") and !line.include?("^")}
|
114
|
+
单池['Domain Name'] = ( [单池['Domain Name']] + 其他域名.select{|l|!l.include?("[TelnetMajin]")}.map{|line|line.strip} ).join(";")
|
115
|
+
单池['Vpn Id'] = /vpn\-id( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip.split(" ")[0]
|
116
|
+
单池['Vbui Name'] = /vbui\-name( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip#.split(" ")[0]
|
117
|
+
单池['Address Total'] = /address\-total( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip.split(" ")[0]
|
118
|
+
单池['Unusable Rate'] = /unusable\-rate( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip#.split(" ")[0]
|
119
|
+
单池['Used Rate'] = /used\-rate( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip.split(" ")[0]
|
120
|
+
单池['Free Rate'] = /free\-rate( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip#.split(" ")[0]
|
121
|
+
地址池列表 << 单池
|
122
|
+
end
|
123
|
+
地址池列表
|
124
|
+
end
|
125
|
+
end
|
126
|
+
```
|