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.
Files changed (179) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +2 -0
  3. data/document/acl-M6000-16E.md +27 -0
  4. data/document/acl-M6000-18S.md +27 -0
  5. data/document/acl-M6000-8.md +27 -0
  6. data/document/acl-M6000-8E.md +27 -0
  7. data/document/acl-MA5200G-8.md +204 -0
  8. data/document/acl-ME60-16.md +177 -0
  9. data/document/acl-ME60-X16.md +177 -0
  10. data/document/acl-NE40E-X16.md +204 -0
  11. data/document/acl-NE40E-X16A.md +204 -0
  12. data/document/acl-NE40E-X8.md +204 -0
  13. data/document/acl-NE40E.md +204 -0
  14. data/document/acl-NE5000E-20.md +25 -0
  15. data/document/acl-NE5000E-X16.md +25 -0
  16. data/document/acl-NE5000E-X16A.md +25 -0
  17. data/document/acl-NE80E.md +204 -0
  18. data/document/bgp-CR16010H-F.md +25 -0
  19. data/document/bgp-CR16018-F.md +25 -0
  20. data/document/bgp-CR19000-20.md +25 -0
  21. data/document/bgp-M6000-16E.md +25 -0
  22. data/document/bgp-M6000-18S.md +25 -0
  23. data/document/bgp-M6000-8.md +25 -0
  24. data/document/bgp-M6000-8E.md +25 -0
  25. data/document/bgp-MA5200G-8.md +25 -0
  26. data/document/bgp-ME60-16.md +25 -0
  27. data/document/bgp-ME60-X16.md +25 -0
  28. data/document/bgp-NE40E-X16.md +25 -0
  29. data/document/bgp-NE40E-X16A.md +25 -0
  30. data/document/bgp-NE40E-X8.md +25 -0
  31. data/document/bgp-NE40E.md +25 -0
  32. data/document/bgp-NE5000E-20.md +25 -0
  33. data/document/bgp-NE5000E-X16.md +25 -0
  34. data/document/bgp-NE5000E-X16A.md +25 -0
  35. data/document/bgp-NE80E.md +25 -0
  36. data/document/config.md +1153 -0
  37. data/document/document.rb +27 -0
  38. data/document/if-ALCATEL7750.md +48 -0
  39. data/document/if-C7609.md +47 -0
  40. data/document/if-CR16010H-F.md +300 -0
  41. data/document/if-CR16018-F.md +300 -0
  42. data/document/if-CR19000-20.md +300 -0
  43. data/document/if-CRS-16.md +47 -0
  44. data/document/if-CX600-X16A.md +349 -0
  45. data/document/if-CX600-X8A.md +349 -0
  46. data/document/if-M6000-16E.md +652 -0
  47. data/document/if-M6000-18S.md +846 -0
  48. data/document/if-M6000-8.md +653 -0
  49. data/document/if-M6000-8E.md +653 -0
  50. data/document/if-MA5200G-8.md +357 -0
  51. data/document/if-ME60-16.md +357 -0
  52. data/document/if-ME60-X16.md +357 -0
  53. data/document/if-NE40E-X16.md +357 -0
  54. data/document/if-NE40E-X16A.md +357 -0
  55. data/document/if-NE40E-X8.md +357 -0
  56. data/document/if-NE40E.md +357 -0
  57. data/document/if-NE5000E-20.md +357 -0
  58. data/document/if-NE5000E-X16.md +357 -0
  59. data/document/if-NE5000E-X16A.md +357 -0
  60. data/document/if-NE8000E-X8.md +357 -0
  61. data/document/if-NE80E.md +357 -0
  62. data/document/if-NE8100-X8.md +357 -0
  63. data/document/if-Nokia7750.md +48 -0
  64. data/document/if-T8000-18.md +653 -0
  65. data/document/if-V6000.md +663 -0
  66. data/document/if-VNE9000.md +357 -0
  67. data/document/if-ZXCTN9000-18EA.md +762 -0
  68. data/document/if-ZXCTN9000-8EA.md +762 -0
  69. data/document/lic-M6000-16E.md +28 -0
  70. data/document/lic-M6000-18S.md +28 -0
  71. data/document/lic-M6000-8.md +28 -0
  72. data/document/lic-M6000-8E.md +28 -0
  73. data/document/lic-MA5200G-8.md +27 -0
  74. data/document/lic-ME60-16.md +27 -0
  75. data/document/lic-ME60-X16.md +27 -0
  76. data/document/lic-NE40E-X16.md +27 -0
  77. data/document/lic-NE40E-X16A.md +27 -0
  78. data/document/lic-NE40E-X8.md +27 -0
  79. data/document/log-M6000-16E.md +36 -0
  80. data/document/log-M6000-18S.md +36 -0
  81. data/document/log-M6000-8.md +36 -0
  82. data/document/log-M6000-8E.md +36 -0
  83. data/document/log-MA5200G-8.md +61 -0
  84. data/document/log-ME60-16.md +61 -0
  85. data/document/log-ME60-X16.md +61 -0
  86. data/document/log-NE40E-X16.md +61 -0
  87. data/document/log-NE40E-X16A.md +61 -0
  88. data/document/log-NE40E-X8.md +61 -0
  89. data/document/log-NE40E.md +61 -0
  90. data/document/log-NE5000E-20.md +61 -0
  91. data/document/log-NE5000E-X16.md +61 -0
  92. data/document/log-NE5000E-X16A.md +61 -0
  93. data/document/log-NE80E.md +61 -0
  94. data/document/nat-CR16010H-F.md +27 -0
  95. data/document/nat-CR16018-F.md +27 -0
  96. data/document/nat-M6000-16E.md +27 -0
  97. data/document/nat-M6000-18S.md +27 -0
  98. data/document/nat-M6000-8.md +27 -0
  99. data/document/nat-M6000-8E.md +27 -0
  100. data/document/nat-ME60-16.md +44 -0
  101. data/document/nat-ME60-X16.md +44 -0
  102. data/document/nat-NE40E-X16.md +44 -0
  103. data/document/nat-NE40E-X16A.md +44 -0
  104. data/document/policy-M6000-16E.md +13 -0
  105. data/document/policy-M6000-18S.md +13 -0
  106. data/document/policy-M6000-8.md +13 -0
  107. data/document/policy-M6000-8E.md +13 -0
  108. data/document/policy-MA5200G-8.md +87 -0
  109. data/document/policy-ME60-16.md +87 -0
  110. data/document/policy-ME60-X16.md +87 -0
  111. data/document/policy-NE40E-X16.md +87 -0
  112. data/document/policy-NE40E-X16A.md +87 -0
  113. data/document/policy-NE40E-X8.md +87 -0
  114. data/document/policy-NE40E.md +87 -0
  115. data/document/policy-NE5000E-20.md +87 -0
  116. data/document/policy-NE5000E-X16.md +87 -0
  117. data/document/policy-NE5000E-X16A.md +87 -0
  118. data/document/policy-NE80E.md +87 -0
  119. data/document/pool-M6000-16E.md +126 -0
  120. data/document/pool-M6000-18S.md +126 -0
  121. data/document/pool-M6000-8.md +126 -0
  122. data/document/pool-M6000-8E.md +126 -0
  123. data/document/pool-MA5200G-8.md +138 -0
  124. data/document/pool-ME60-16.md +138 -0
  125. data/document/pool-ME60-X16.md +138 -0
  126. data/document/pool-NE40E-X16.md +138 -0
  127. data/document/pool-NE40E-X16A.md +138 -0
  128. data/document/pool-NE40E-X8.md +138 -0
  129. data/document/pool-NE40E.md +138 -0
  130. data/document/pool-NE80E.md +138 -0
  131. data/document/static-CR16010H-F.md +60 -0
  132. data/document/static-CR16018-F.md +60 -0
  133. data/document/static-CR19000-20.md +60 -0
  134. data/document/static-CX600-X16A.md +26 -0
  135. data/document/static-CX600-X8A.md +26 -0
  136. data/document/static-M6000-16E.md +104 -0
  137. data/document/static-M6000-18S.md +104 -0
  138. data/document/static-M6000-8.md +104 -0
  139. data/document/static-M6000-8E.md +104 -0
  140. data/document/static-MA5200G-8.md +82 -0
  141. data/document/static-ME60-16.md +82 -0
  142. data/document/static-ME60-X16.md +82 -0
  143. data/document/static-NE40E-X16.md +82 -0
  144. data/document/static-NE40E-X16A.md +81 -0
  145. data/document/static-NE40E-X8.md +82 -0
  146. data/document/static-NE40E.md +67 -0
  147. data/document/static-NE5000E-20.md +67 -0
  148. data/document/static-NE5000E-X16.md +67 -0
  149. data/document/static-NE5000E-X16A.md +67 -0
  150. data/document/static-NE8000E-X8.md +26 -0
  151. data/document/static-NE80E.md +67 -0
  152. data/document/static-NE8100-X8.md +26 -0
  153. data/document/static-T8000-18.md +34 -0
  154. data/document/static-ZXCTN9000-18EA.md +34 -0
  155. data/document/static-ZXCTN9000-8EA.md +34 -0
  156. data/document/system-M6000-16E.md +75 -0
  157. data/document/system-M6000-18S.md +76 -0
  158. data/document/system-M6000-8.md +75 -0
  159. data/document/system-M6000-8E.md +75 -0
  160. data/document/system-MA5200G-8.md +51 -0
  161. data/document/system-ME60-16.md +51 -0
  162. data/document/system-ME60-X16.md +51 -0
  163. data/document/system-NE40E-X16.md +51 -0
  164. data/document/system-NE40E-X16A.md +51 -0
  165. data/document/system-NE40E-X8.md +51 -0
  166. data/document/system-NE40E.md +51 -0
  167. data/document/system-NE5000E-20.md +51 -0
  168. data/document/system-NE5000E-X16.md +51 -0
  169. data/document/system-NE5000E-X16A.md +51 -0
  170. data/document/system-NE80E.md +51 -0
  171. data/document/telnet.md +332 -0
  172. data/network.rb +24 -0
  173. data/utility/ipv4_address.rb +266 -0
  174. data/utility/ipv6_address.rb +201 -0
  175. data/utility/mac_address.rb +77 -0
  176. data/utility/netmerge.rb +46 -0
  177. data/utility/route.rb +79 -0
  178. data/utility/whitelist.rb +21 -0
  179. 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
+ ```