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,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,13 @@
1
+
2
+ # M6000-16E 流策略、路由策略
3
+
4
+ ```ruby
5
+ @sign << ['M6000-16E', 'traffic', 'PENDING']
6
+
7
+ module M6000_16E
8
+ module_function
9
+
10
+ # at least not known for traffic-policy
11
+
12
+ end
13
+ ```
@@ -0,0 +1,13 @@
1
+
2
+ # M6000-18S 流策略、路由策略
3
+
4
+ ```ruby
5
+ @sign << ['M6000-18S', 'traffic', 'PENDING']
6
+
7
+ module M6000_18S
8
+ module_function
9
+
10
+ # at least not known for traffic-policy
11
+
12
+ end
13
+ ```
@@ -0,0 +1,13 @@
1
+
2
+ # M6000-8 流策略、路由策略
3
+
4
+ ```ruby
5
+ @sign << ['M6000-8', 'traffic', 'PENDING']
6
+
7
+ module M6000_8
8
+ module_function
9
+
10
+ # at least not known for traffic-policy
11
+
12
+ end
13
+ ```
@@ -0,0 +1,13 @@
1
+
2
+ # M6000-8E 流策略、路由策略
3
+
4
+ ```ruby
5
+ @sign << ['M6000-8E', 'traffic', 'PENDING']
6
+
7
+ module M6000_8E
8
+ module_function
9
+
10
+ # at least not known for traffic-policy
11
+
12
+ end
13
+ ```
@@ -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
+ ```