network-utility 1.1.40 → 1.1.42

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 (44) hide show
  1. checksums.yaml +4 -4
  2. data/document/acl-T8000-18.md +26 -0
  3. data/document/flexe-CX600-X16A.md +74 -0
  4. data/document/flexe-CX600-X8A.md +73 -0
  5. data/document/flexe-NE8000E-X8.md +73 -0
  6. data/document/flexe-NE8100-X8.md +74 -0
  7. data/document/isis-CX600-X16A.md +140 -0
  8. data/document/isis-CX600-X8A.md +141 -0
  9. data/document/isis-NE40E-X16A.md +141 -0
  10. data/document/isis-NE8000E-X8.md +140 -0
  11. data/document/isis-NE8100-X8.md +140 -0
  12. data/document/policy-CX600-X16A.md +87 -0
  13. data/document/policy-CX600-X8A.md +87 -0
  14. data/document/policy-NE8000E-X8.md +87 -0
  15. data/document/policy-NE8100-X8.md +87 -0
  16. data/document/policy-VNE9000.md +87 -0
  17. data/document/static-CR16010H-F.md +1 -0
  18. data/document/static-CR16018-F.md +1 -0
  19. data/document/static-CR19000-20.md +1 -0
  20. data/document/static-CX600-X16A.md +2 -1
  21. data/document/static-CX600-X8A.md +2 -1
  22. data/document/static-MA5200G-8.md +2 -1
  23. data/document/static-ME60-16.md +2 -1
  24. data/document/static-ME60-X16.md +2 -1
  25. data/document/static-NE40E-X16.md +1 -0
  26. data/document/static-NE40E-X16A.md +1 -0
  27. data/document/static-NE40E-X8.md +2 -1
  28. data/document/static-NE40E.md +1 -0
  29. data/document/static-NE5000E-20.md +1 -1
  30. data/document/static-NE5000E-X16.md +1 -1
  31. data/document/static-NE5000E-X16A.md +1 -1
  32. data/document/static-NE8000E-X8.md +1 -1
  33. data/document/static-NE80E.md +1 -0
  34. data/document/static-NE8100-X8.md +1 -1
  35. data/document/statistics-M6000-16E.md +56 -0
  36. data/document/statistics-M6000-18S.md +147 -0
  37. data/document/statistics-M6000-8.md +56 -0
  38. data/document/statistics-M6000-8E.md +56 -0
  39. data/document/vpn-CX600-X16A.md +78 -0
  40. data/document/vpn-CX600-X8A.md +79 -0
  41. data/document/vpn-ZXCTN9000-18EA.md +74 -0
  42. data/document/vpn-ZXCTN9000-8EA.md +74 -0
  43. data/network.rb +1 -1
  44. metadata +24 -1
@@ -0,0 +1,141 @@
1
+
2
+ # NE40E-X16A isis
3
+
4
+ ```ruby
5
+ @sign << ['NE40E-X16A', '接口isis']
6
+ @sign << ['NE40E-X16A', 'isis']
7
+
8
+ module NE40E_X16A
9
+ module_function
10
+
11
+ def 接口isis 接口配置
12
+ isis = {}
13
+ port_name = self.端口识别(接口配置.split("\n").first.to_s).join()
14
+ lines = 接口配置.split("\n").select{|line|line.strip[0..4]=='isis '}
15
+ lines.each do|line|
16
+ isis['pid'] = line.strip.split(' ').last.to_i if line.include?('isis enable')
17
+ isis['ipv6-pid'] = line.strip.split(' ').last.to_i if line.include?('isis ipv6 enable')
18
+ isis['circuit-type'] = line.split('circuit-type').last.strip if line.include?('isis circuit-type')
19
+ isis['cost'] = line.strip.split(' ').last.to_i if line.include?('isis cost')
20
+ isis['ipv6-cost'] = line.strip.split(' ').last.to_i if line.include?('isis ipv6 cost')
21
+ if line.include?('isis ldp-sync')
22
+ isis['ldp-sync'] ||= {}
23
+ isis['ldp-sync']['state'] = 'enable'
24
+ isis['ldp-sync']['hold-max-cost-timer'] = line.strip.split(' ').last+'s' if line.include?('isis timer ldp-sync')
25
+ end
26
+ isis['hold-max-cost-timer'] = line.strip.split(' ').last+'ms' if line.include?('isis peer hold-max-cost')
27
+ end
28
+ return { port_name => isis }
29
+ end
30
+
31
+ def isis isis配置
32
+ isis = {};frr4_flag, frr6_flag = false, false
33
+ isis配置.split("\n").each do|line|
34
+ isis['pid'] = line.split(' ').last.strip if line[0..4]=='isis '
35
+ isis['level'] = line.split(' ').last.strip if line.include?('is-level')
36
+ isis['cost-style'] = line.split(' ').last.strip if line.include?('cost-style')
37
+ if line.include?('timer lsp-generation')
38
+ isis['lsp-generation-timer'] ||= {}
39
+ setter = line.split('lsp-generation').last.strip.split(' ')
40
+ setlevels = []
41
+ setlevels = ['level-1'] if setter[-1]=='level-1'
42
+ setlevels = ['level-2'] if setter[-1]=='level-2'
43
+ setlevels = ['level-1', 'level-2']
44
+ setlevels.each do|setlevel|
45
+ isis['lsp-generation-timer']['max-interval'] = setter[0]+'s'
46
+ isis['lsp-generation-timer']['init-interval'] = setter[1]+'ms' if setter[1] && !setter[1].include?('level')
47
+ isis['lsp-generation-timer']['incr-interval'] = setter[2]+'ms' if setter[2] && !setter[2].include?('level')
48
+ end
49
+ end
50
+ if line.include?('bfd all-interfaces') && line.strip[0..2]=='bfd'
51
+ isis['bfd'] ||= {}
52
+ isis['bfd']['interface'] = 'enable' if line.include?('enable')
53
+ words = line.split(' ')
54
+ isis['bfd']['min-tx-interval'] = words[words.index('min-tx-interval')+1] + 'ms' if words.index('min-tx-interval')
55
+ isis['bfd']['min-rx-interval'] = words[words.index('min-rx-interval')+1] + 'ms' if words.index('min-rx-interval')
56
+ isis['bfd']['detect-multiplier'] = words[words.index('detect-multiplier')+1].to_i if words.index('detect-multiplier')
57
+ isis['bfd']['tos-exp'] = words[words.index('tos-exp')+1].to_i if words.index('tos-exp')
58
+ isis['bfd']['frr-binding'] = 'enable' if line.include?('frr-binding')
59
+ end
60
+ if line.include?('ipv6 bfd all-interfaces')
61
+ isis['ipv6-bfd'] ||= {}
62
+ isis['ipv6-bfd']['interface'] = 'enable' if line.include?('enable')
63
+ words = line.split(' ')
64
+ isis['ipv6-bfd']['min-tx-interval'] = words[words.index('min-tx-interval')+1] + 'ms' if words.index('min-tx-interval')
65
+ isis['ipv6-bfd']['min-rx-interval'] = words[words.index('min-rx-interval')+1] + 'ms' if words.index('min-rx-interval')
66
+ isis['ipv6-bfd']['detect-multiplier'] = words[words.index('detect-multiplier')+1].to_i if words.index('detect-multiplier')
67
+ isis['ipv6-bfd']['frr-binding'] = 'enable' if line.include?('frr-binding')
68
+ end
69
+ isis['net'] = line.split(' ').last if line.include?('network-entity')
70
+ isis['is-name'] = line.split(' ').last if line.include?('is-name')
71
+ if line.include?('avoid-microloop') && line.strip[0..4]=='avoid'
72
+ isis['avoid-microloop'] ||= {}
73
+ isis['avoid-microloop']['frr-protected'] ||= {'rib-update-delay'=>'100ms'} if line.include?('frr-protected')
74
+ isis['avoid-microloop']['frr-protected']['rib-update-delay'] = line.split(' ').last+'ms' if line.include?('frr-protected') && line.include?('rib-update-delay')
75
+ isis['avoid-microloop']['te-tunnel'] ||= {'rib-update-delay'=>'1000ms'} if line.include?('te-tunnel')
76
+ isis['avoid-microloop']['te-tunnel']['rib-update-delay'] = line.split(' ').last+'ms' if line.include?('te-tunnel') && line.include?('rib-update-delay')
77
+ end
78
+ if line.include?('ipv6 avoid-microloop')
79
+ isis['ipv6-avoid-microloop'] ||= {}
80
+ isis['ipv6-avoid-microloop']['segment-routing'] ||= {'rib-update-delay'=>'5000ms'} if line.include?('segment-routing')
81
+ isis['ipv6-avoid-microloop']['segment-routing']['rib-update-delay'] = line.split(' ').last+'ms' if line.include?('segment-routing') && line.include?('rib-update-delay')
82
+ end
83
+ isis['preference'] = line.split(' ').last.to_i if line.strip[0..10]=='preference '
84
+ isis['ipv6-preference'] = line.split(' ').last.to_i if line.include?('ipv6 preference ')
85
+ if line.include?('timer spf')
86
+ setter = line.split('timer spf').last.strip.split(' ')
87
+ isis['spf-timer'] ||= {}
88
+ isis['spf-timer']['max-interval'] = setter[0]+'s'
89
+ isis['spf-timer']['init-interval'] = setter[1]+'ms' if setter[1]
90
+ isis['spf-timer']['incr-interval'] = setter[2]+'ms' if setter[2]
91
+ end
92
+ if line.include?('set-overload')
93
+ isis['set-overload'] ||= {}
94
+ isis['set-overload']['allow'] = 'interlevel' if line.include?('allow interlevel')
95
+ isis['set-overload']['allow'] = 'external' if line.include?('allow external')
96
+ isis['set-overload']['on-startup'] ||= {} if line.include?('on-startup')
97
+ words = line.strip.split(' ')
98
+ if line.include?('on-startup') && words[words.index('on-startup')+1].to_s.match(/^\d+$/)
99
+ isis['set-overload']['on-startup']['timeout'] = words[words.index('on-startup')+1]+'s'
100
+ else
101
+ # isis['set-overload']['on-startup']['timeout'] = '600s'
102
+ if line.include?('send-sa-bit') && words[words.index('send-sa-bit')+1].match(/^\d+$/)
103
+ isis['set-overload']['on-startup']['send-sa-bit'] = words[words.index('send-sa-bit')+1]+'s'
104
+ else
105
+ # isis['set-overload']['on-startup']['send-sa-bit'] = '30s'
106
+ end
107
+ # TODO: start-from-nbr | wait-for-bgp | route-delay-distribute
108
+ end
109
+ end
110
+ (isis['frr'] = {}; frr4_flag = true) if line.strip=='frr'
111
+ isis['frr']['loop-free-alternate'] = line.split(' ').last if line.include?('loop-free-alternate ') && frr4_flag
112
+ isis['frr']['ti-lfa'] = line.split(' ').last if line.include?('ti-lfa ') && frr4_flag
113
+ (frr4_flag = false) if frr4_flag && line==' #'
114
+ (isis['ipv6-frr'] = {}; frr6_flag = true) if line.include?('ipv6 frr')
115
+ isis['ipv6-frr']['loop-free-alternate'] = line.split(' ').last if line.include?('loop-free-alternate ') && frr6_flag
116
+ isis['ipv6-frr']['ti-lfa'] = line.split(' ').last if line.include?('ti-lfa ') && frr6_flag
117
+ (frr6_flag = false) if frr6_flag && line==' #'
118
+ isis['topology'] = line.split('topology ').last.strip if line.include?('ipv6 enable topology ')
119
+ isis['ipv6-advertise'] = 'link-attributes' if line.include?('ipv6 advertise link attributes')
120
+ isis['ipv6-traffic-eng'] = line.split(' ').last if line.include?('ipv6 traffic-eng')
121
+ if line.include?('ipv6 metric-delay')
122
+ isis['ipv6-metric-delay'] ||= {}
123
+ isis['ipv6-metric-delay']['advertisement'] = line.split(' ').last if line.include?('advertisement enable')
124
+ if line.include?('suppress')
125
+ words = line.split(' ')
126
+ isis['ipv6-metric-delay']['suppress'] ||= {}
127
+ isis['ipv6-metric-delay']['suppress']['timer'] = words[words.index('timer')+1]+'s' if words.index('timer')
128
+ isis['ipv6-metric-delay']['suppress']['percent-threshold'] = words[words.index('percent-threshold')+1]+'%' if words.index('percent-threshold')
129
+ isis['ipv6-metric-delay']['suppress']['absolute-threshold'] = words[words.index('absolute-threshold')+1]+'ms' if words.index('absolute-threshold')
130
+ end
131
+ end
132
+ if line.include?('segment-routing ipv6 locator')
133
+ isis['srv6-locator'] ||= {}
134
+ isis['srv6-locator']['name'] = line.split('locator').last.strip.split(' ').first
135
+ isis['srv6-locator']['auto-sid-disable'] = true if line.split('locator').last.strip.split(' ')[1]
136
+ end
137
+ end
138
+ return isis
139
+ end
140
+ end
141
+ ```
@@ -0,0 +1,140 @@
1
+ # NE8000E-X8 isis
2
+
3
+ ```ruby
4
+ @sign << ['NE8000E-X8', '接口isis']
5
+ @sign << ['NE8000E-X8', 'isis']
6
+
7
+ module NE8000E_X8
8
+ module_function
9
+
10
+ def 接口isis 接口配置
11
+ isis = {}
12
+ port_name = self.端口识别(接口配置.split("\n").first.to_s).join()
13
+ lines = 接口配置.split("\n").select{|line|line.strip[0..4]=='isis '}
14
+ lines.each do|line|
15
+ isis['pid'] = line.strip.split(' ').last.to_i if line.include?('isis enable')
16
+ isis['ipv6-pid'] = line.strip.split(' ').last.to_i if line.include?('isis ipv6 enable')
17
+ isis['circuit-type'] = line.split('circuit-type').last.strip if line.include?('isis circuit-type')
18
+ isis['cost'] = line.strip.split(' ').last.to_i if line.include?('isis cost')
19
+ isis['ipv6-cost'] = line.strip.split(' ').last.to_i if line.include?('isis ipv6 cost')
20
+ if line.include?('isis ldp-sync')
21
+ isis['ldp-sync'] ||= {}
22
+ isis['ldp-sync']['state'] = 'enable'
23
+ isis['ldp-sync']['hold-max-cost-timer'] = line.strip.split(' ').last+'s' if line.include?('isis timer ldp-sync')
24
+ end
25
+ isis['hold-max-cost-timer'] = line.strip.split(' ').last+'ms' if line.include?('isis peer hold-max-cost')
26
+ end
27
+ return { port_name => isis }
28
+ end
29
+
30
+ def isis isis配置
31
+ isis = {};frr4_flag, frr6_flag = false, false
32
+ isis配置.split("\n").each do|line|
33
+ isis['pid'] = line.split(' ').last.strip if line[0..4]=='isis '
34
+ isis['level'] = line.split(' ').last.strip if line.include?('is-level')
35
+ isis['cost-style'] = line.split(' ').last.strip if line.include?('cost-style')
36
+ if line.include?('timer lsp-generation')
37
+ isis['lsp-generation-timer'] ||= {}
38
+ setter = line.split('lsp-generation').last.strip.split(' ')
39
+ setlevels = []
40
+ setlevels = ['level-1'] if setter[-1]=='level-1'
41
+ setlevels = ['level-2'] if setter[-1]=='level-2'
42
+ setlevels = ['level-1', 'level-2']
43
+ setlevels.each do|setlevel|
44
+ isis['lsp-generation-timer']['max-interval'] = setter[0]+'s'
45
+ isis['lsp-generation-timer']['init-interval'] = setter[1]+'ms' if setter[1] && !setter[1].include?('level')
46
+ isis['lsp-generation-timer']['incr-interval'] = setter[2]+'ms' if setter[2] && !setter[2].include?('level')
47
+ end
48
+ end
49
+ if line.include?('bfd all-interfaces') && line.strip[0..2]=='bfd'
50
+ isis['bfd'] ||= {}
51
+ isis['bfd']['interface'] = 'enable' if line.include?('enable')
52
+ words = line.split(' ')
53
+ isis['bfd']['min-tx-interval'] = words[words.index('min-tx-interval')+1] + 'ms' if words.index('min-tx-interval')
54
+ isis['bfd']['min-rx-interval'] = words[words.index('min-rx-interval')+1] + 'ms' if words.index('min-rx-interval')
55
+ isis['bfd']['detect-multiplier'] = words[words.index('detect-multiplier')+1].to_i if words.index('detect-multiplier')
56
+ isis['bfd']['tos-exp'] = words[words.index('tos-exp')+1].to_i if words.index('tos-exp')
57
+ isis['bfd']['frr-binding'] = 'enable' if line.include?('frr-binding')
58
+ end
59
+ if line.include?('ipv6 bfd all-interfaces')
60
+ isis['ipv6-bfd'] ||= {}
61
+ isis['ipv6-bfd']['interface'] = 'enable' if line.include?('enable')
62
+ words = line.split(' ')
63
+ isis['ipv6-bfd']['min-tx-interval'] = words[words.index('min-tx-interval')+1] + 'ms' if words.index('min-tx-interval')
64
+ isis['ipv6-bfd']['min-rx-interval'] = words[words.index('min-rx-interval')+1] + 'ms' if words.index('min-rx-interval')
65
+ isis['ipv6-bfd']['detect-multiplier'] = words[words.index('detect-multiplier')+1].to_i if words.index('detect-multiplier')
66
+ isis['ipv6-bfd']['frr-binding'] = 'enable' if line.include?('frr-binding')
67
+ end
68
+ isis['net'] = line.split(' ').last if line.include?('network-entity')
69
+ isis['is-name'] = line.split(' ').last if line.include?('is-name')
70
+ if line.include?('avoid-microloop') && line.strip[0..4]=='avoid'
71
+ isis['avoid-microloop'] ||= {}
72
+ isis['avoid-microloop']['frr-protected'] ||= {'rib-update-delay'=>'100ms'} if line.include?('frr-protected')
73
+ isis['avoid-microloop']['frr-protected']['rib-update-delay'] = line.split(' ').last+'ms' if line.include?('frr-protected') && line.include?('rib-update-delay')
74
+ isis['avoid-microloop']['te-tunnel'] ||= {'rib-update-delay'=>'1000ms'} if line.include?('te-tunnel')
75
+ isis['avoid-microloop']['te-tunnel']['rib-update-delay'] = line.split(' ').last+'ms' if line.include?('te-tunnel') && line.include?('rib-update-delay')
76
+ end
77
+ if line.include?('ipv6 avoid-microloop')
78
+ isis['ipv6-avoid-microloop'] ||= {}
79
+ isis['ipv6-avoid-microloop']['segment-routing'] ||= {'rib-update-delay'=>'5000ms'} if line.include?('segment-routing')
80
+ isis['ipv6-avoid-microloop']['segment-routing']['rib-update-delay'] = line.split(' ').last+'ms' if line.include?('segment-routing') && line.include?('rib-update-delay')
81
+ end
82
+ isis['preference'] = line.split(' ').last.to_i if line.strip[0..10]=='preference '
83
+ isis['ipv6-preference'] = line.split(' ').last.to_i if line.include?('ipv6 preference ')
84
+ if line.include?('timer spf')
85
+ setter = line.split('timer spf').last.strip.split(' ')
86
+ isis['spf-timer'] ||= {}
87
+ isis['spf-timer']['max-interval'] = setter[0]+'s'
88
+ isis['spf-timer']['init-interval'] = setter[1]+'ms' if setter[1]
89
+ isis['spf-timer']['incr-interval'] = setter[2]+'ms' if setter[2]
90
+ end
91
+ if line.include?('set-overload')
92
+ isis['set-overload'] ||= {}
93
+ isis['set-overload']['allow'] = 'interlevel' if line.include?('allow interlevel')
94
+ isis['set-overload']['allow'] = 'external' if line.include?('allow external')
95
+ isis['set-overload']['on-startup'] ||= {} if line.include?('on-startup')
96
+ words = line.strip.split(' ')
97
+ if line.include?('on-startup') && words[words.index('on-startup')+1].to_s.match(/^\d+$/)
98
+ isis['set-overload']['on-startup']['timeout'] = words[words.index('on-startup')+1]+'s'
99
+ else
100
+ # isis['set-overload']['on-startup']['timeout'] = '600s'
101
+ if line.include?('send-sa-bit') && words[words.index('send-sa-bit')+1].match(/^\d+$/)
102
+ isis['set-overload']['on-startup']['send-sa-bit'] = words[words.index('send-sa-bit')+1]+'s'
103
+ else
104
+ # isis['set-overload']['on-startup']['send-sa-bit'] = '30s'
105
+ end
106
+ # TODO: start-from-nbr | wait-for-bgp | route-delay-distribute
107
+ end
108
+ end
109
+ (isis['frr'] = {}; frr4_flag = true) if line.strip=='frr'
110
+ isis['frr']['loop-free-alternate'] = line.split(' ').last if line.include?('loop-free-alternate ') && frr4_flag
111
+ isis['frr']['ti-lfa'] = line.split(' ').last if line.include?('ti-lfa ') && frr4_flag
112
+ (frr4_flag = false) if frr4_flag && line==' #'
113
+ (isis['ipv6-frr'] = {}; frr6_flag = true) if line.include?('ipv6 frr')
114
+ isis['ipv6-frr']['loop-free-alternate'] = line.split(' ').last if line.include?('loop-free-alternate ') && frr6_flag
115
+ isis['ipv6-frr']['ti-lfa'] = line.split(' ').last if line.include?('ti-lfa ') && frr6_flag
116
+ (frr6_flag = false) if frr6_flag && line==' #'
117
+ isis['topology'] = line.split('topology ').last.strip if line.include?('ipv6 enable topology ')
118
+ isis['ipv6-advertise'] = 'link-attributes' if line.include?('ipv6 advertise link attributes')
119
+ isis['ipv6-traffic-eng'] = line.split(' ').last if line.include?('ipv6 traffic-eng')
120
+ if line.include?('ipv6 metric-delay')
121
+ isis['ipv6-metric-delay'] ||= {}
122
+ isis['ipv6-metric-delay']['advertisement'] = line.split(' ').last if line.include?('advertisement enable')
123
+ if line.include?('suppress')
124
+ words = line.split(' ')
125
+ isis['ipv6-metric-delay']['suppress'] ||= {}
126
+ isis['ipv6-metric-delay']['suppress']['timer'] = words[words.index('timer')+1]+'s' if words.index('timer')
127
+ isis['ipv6-metric-delay']['suppress']['percent-threshold'] = words[words.index('percent-threshold')+1]+'%' if words.index('percent-threshold')
128
+ isis['ipv6-metric-delay']['suppress']['absolute-threshold'] = words[words.index('absolute-threshold')+1]+'ms' if words.index('absolute-threshold')
129
+ end
130
+ end
131
+ if line.include?('segment-routing ipv6 locator')
132
+ isis['srv6-locator'] ||= {}
133
+ isis['srv6-locator']['name'] = line.split('locator').last.strip.split(' ').first
134
+ isis['srv6-locator']['auto-sid-disable'] = true if line.split('locator').last.strip.split(' ')[1]
135
+ end
136
+ end
137
+ return isis
138
+ end
139
+ end
140
+ ```
@@ -0,0 +1,140 @@
1
+ # NE8100-X8 isis
2
+
3
+ ```ruby
4
+ @sign << ['NE8100-X8', '接口isis']
5
+ @sign << ['NE8100-X8', 'isis']
6
+
7
+ module NE8100_X8
8
+ module_function
9
+
10
+ def 接口isis 接口配置
11
+ isis = {}
12
+ port_name = self.端口识别(接口配置.split("\n").first.to_s).join()
13
+ lines = 接口配置.split("\n").select{|line|line.strip[0..4]=='isis '}
14
+ lines.each do|line|
15
+ isis['pid'] = line.strip.split(' ').last.to_i if line.include?('isis enable')
16
+ isis['ipv6-pid'] = line.strip.split(' ').last.to_i if line.include?('isis ipv6 enable')
17
+ isis['circuit-type'] = line.split('circuit-type').last.strip if line.include?('isis circuit-type')
18
+ isis['cost'] = line.strip.split(' ').last.to_i if line.include?('isis cost')
19
+ isis['ipv6-cost'] = line.strip.split(' ').last.to_i if line.include?('isis ipv6 cost')
20
+ if line.include?('isis ldp-sync')
21
+ isis['ldp-sync'] ||= {}
22
+ isis['ldp-sync']['state'] = 'enable'
23
+ isis['ldp-sync']['hold-max-cost-timer'] = line.strip.split(' ').last+'s' if line.include?('isis timer ldp-sync')
24
+ end
25
+ isis['hold-max-cost-timer'] = line.strip.split(' ').last+'ms' if line.include?('isis peer hold-max-cost')
26
+ end
27
+ return { port_name => isis }
28
+ end
29
+
30
+ def isis isis配置
31
+ isis = {};frr4_flag, frr6_flag = false, false
32
+ isis配置.split("\n").each do|line|
33
+ isis['pid'] = line.split(' ').last.strip if line[0..4]=='isis '
34
+ isis['level'] = line.split(' ').last.strip if line.include?('is-level')
35
+ isis['cost-style'] = line.split(' ').last.strip if line.include?('cost-style')
36
+ if line.include?('timer lsp-generation')
37
+ isis['lsp-generation-timer'] ||= {}
38
+ setter = line.split('lsp-generation').last.strip.split(' ')
39
+ setlevels = []
40
+ setlevels = ['level-1'] if setter[-1]=='level-1'
41
+ setlevels = ['level-2'] if setter[-1]=='level-2'
42
+ setlevels = ['level-1', 'level-2']
43
+ setlevels.each do|setlevel|
44
+ isis['lsp-generation-timer']['max-interval'] = setter[0]+'s'
45
+ isis['lsp-generation-timer']['init-interval'] = setter[1]+'ms' if setter[1] && !setter[1].include?('level')
46
+ isis['lsp-generation-timer']['incr-interval'] = setter[2]+'ms' if setter[2] && !setter[2].include?('level')
47
+ end
48
+ end
49
+ if line.include?('bfd all-interfaces') && line.strip[0..2]=='bfd'
50
+ isis['bfd'] ||= {}
51
+ isis['bfd']['interface'] = 'enable' if line.include?('enable')
52
+ words = line.split(' ')
53
+ isis['bfd']['min-tx-interval'] = words[words.index('min-tx-interval')+1] + 'ms' if words.index('min-tx-interval')
54
+ isis['bfd']['min-rx-interval'] = words[words.index('min-rx-interval')+1] + 'ms' if words.index('min-rx-interval')
55
+ isis['bfd']['detect-multiplier'] = words[words.index('detect-multiplier')+1].to_i if words.index('detect-multiplier')
56
+ isis['bfd']['tos-exp'] = words[words.index('tos-exp')+1].to_i if words.index('tos-exp')
57
+ isis['bfd']['frr-binding'] = 'enable' if line.include?('frr-binding')
58
+ end
59
+ if line.include?('ipv6 bfd all-interfaces')
60
+ isis['ipv6-bfd'] ||= {}
61
+ isis['ipv6-bfd']['interface'] = 'enable' if line.include?('enable')
62
+ words = line.split(' ')
63
+ isis['ipv6-bfd']['min-tx-interval'] = words[words.index('min-tx-interval')+1] + 'ms' if words.index('min-tx-interval')
64
+ isis['ipv6-bfd']['min-rx-interval'] = words[words.index('min-rx-interval')+1] + 'ms' if words.index('min-rx-interval')
65
+ isis['ipv6-bfd']['detect-multiplier'] = words[words.index('detect-multiplier')+1].to_i if words.index('detect-multiplier')
66
+ isis['ipv6-bfd']['frr-binding'] = 'enable' if line.include?('frr-binding')
67
+ end
68
+ isis['net'] = line.split(' ').last if line.include?('network-entity')
69
+ isis['is-name'] = line.split(' ').last if line.include?('is-name')
70
+ if line.include?('avoid-microloop') && line.strip[0..4]=='avoid'
71
+ isis['avoid-microloop'] ||= {}
72
+ isis['avoid-microloop']['frr-protected'] ||= {'rib-update-delay'=>'100ms'} if line.include?('frr-protected')
73
+ isis['avoid-microloop']['frr-protected']['rib-update-delay'] = line.split(' ').last+'ms' if line.include?('frr-protected') && line.include?('rib-update-delay')
74
+ isis['avoid-microloop']['te-tunnel'] ||= {'rib-update-delay'=>'1000ms'} if line.include?('te-tunnel')
75
+ isis['avoid-microloop']['te-tunnel']['rib-update-delay'] = line.split(' ').last+'ms' if line.include?('te-tunnel') && line.include?('rib-update-delay')
76
+ end
77
+ if line.include?('ipv6 avoid-microloop')
78
+ isis['ipv6-avoid-microloop'] ||= {}
79
+ isis['ipv6-avoid-microloop']['segment-routing'] ||= {'rib-update-delay'=>'5000ms'} if line.include?('segment-routing')
80
+ isis['ipv6-avoid-microloop']['segment-routing']['rib-update-delay'] = line.split(' ').last+'ms' if line.include?('segment-routing') && line.include?('rib-update-delay')
81
+ end
82
+ isis['preference'] = line.split(' ').last.to_i if line.strip[0..10]=='preference '
83
+ isis['ipv6-preference'] = line.split(' ').last.to_i if line.include?('ipv6 preference ')
84
+ if line.include?('timer spf')
85
+ setter = line.split('timer spf').last.strip.split(' ')
86
+ isis['spf-timer'] ||= {}
87
+ isis['spf-timer']['max-interval'] = setter[0]+'s'
88
+ isis['spf-timer']['init-interval'] = setter[1]+'ms' if setter[1]
89
+ isis['spf-timer']['incr-interval'] = setter[2]+'ms' if setter[2]
90
+ end
91
+ if line.include?('set-overload')
92
+ isis['set-overload'] ||= {}
93
+ isis['set-overload']['allow'] = 'interlevel' if line.include?('allow interlevel')
94
+ isis['set-overload']['allow'] = 'external' if line.include?('allow external')
95
+ isis['set-overload']['on-startup'] ||= {} if line.include?('on-startup')
96
+ words = line.strip.split(' ')
97
+ if line.include?('on-startup') && words[words.index('on-startup')+1].to_s.match(/^\d+$/)
98
+ isis['set-overload']['on-startup']['timeout'] = words[words.index('on-startup')+1]+'s'
99
+ else
100
+ # isis['set-overload']['on-startup']['timeout'] = '600s'
101
+ if line.include?('send-sa-bit') && words[words.index('send-sa-bit')+1].match(/^\d+$/)
102
+ isis['set-overload']['on-startup']['send-sa-bit'] = words[words.index('send-sa-bit')+1]+'s'
103
+ else
104
+ # isis['set-overload']['on-startup']['send-sa-bit'] = '30s'
105
+ end
106
+ # TODO: start-from-nbr | wait-for-bgp | route-delay-distribute
107
+ end
108
+ end
109
+ (isis['frr'] = {}; frr4_flag = true) if line.strip=='frr'
110
+ isis['frr']['loop-free-alternate'] = line.split(' ').last if line.include?('loop-free-alternate ') && frr4_flag
111
+ isis['frr']['ti-lfa'] = line.split(' ').last if line.include?('ti-lfa ') && frr4_flag
112
+ (frr4_flag = false) if frr4_flag && line==' #'
113
+ (isis['ipv6-frr'] = {}; frr6_flag = true) if line.include?('ipv6 frr')
114
+ isis['ipv6-frr']['loop-free-alternate'] = line.split(' ').last if line.include?('loop-free-alternate ') && frr6_flag
115
+ isis['ipv6-frr']['ti-lfa'] = line.split(' ').last if line.include?('ti-lfa ') && frr6_flag
116
+ (frr6_flag = false) if frr6_flag && line==' #'
117
+ isis['topology'] = line.split('topology ').last.strip if line.include?('ipv6 enable topology ')
118
+ isis['ipv6-advertise'] = 'link-attributes' if line.include?('ipv6 advertise link attributes')
119
+ isis['ipv6-traffic-eng'] = line.split(' ').last if line.include?('ipv6 traffic-eng')
120
+ if line.include?('ipv6 metric-delay')
121
+ isis['ipv6-metric-delay'] ||= {}
122
+ isis['ipv6-metric-delay']['advertisement'] = line.split(' ').last if line.include?('advertisement enable')
123
+ if line.include?('suppress')
124
+ words = line.split(' ')
125
+ isis['ipv6-metric-delay']['suppress'] ||= {}
126
+ isis['ipv6-metric-delay']['suppress']['timer'] = words[words.index('timer')+1]+'s' if words.index('timer')
127
+ isis['ipv6-metric-delay']['suppress']['percent-threshold'] = words[words.index('percent-threshold')+1]+'%' if words.index('percent-threshold')
128
+ isis['ipv6-metric-delay']['suppress']['absolute-threshold'] = words[words.index('absolute-threshold')+1]+'ms' if words.index('absolute-threshold')
129
+ end
130
+ end
131
+ if line.include?('segment-routing ipv6 locator')
132
+ isis['srv6-locator'] ||= {}
133
+ isis['srv6-locator']['name'] = line.split('locator').last.strip.split(' ').first
134
+ isis['srv6-locator']['auto-sid-disable'] = true if line.split('locator').last.strip.split(' ')[1]
135
+ end
136
+ end
137
+ return isis
138
+ end
139
+ end
140
+ ```
@@ -0,0 +1,87 @@
1
+
2
+ # CX600-X16A 流策略、路由策略
3
+
4
+ ```ruby
5
+ @sign << ['CX600-X16A', 'traffic']
6
+ @sign << ['CX600-X16A', 'traffic_classifier']
7
+ @sign << ['CX600-X16A', 'traffic_behavior']
8
+ @sign << ['CX600-X16A', 'traffic_policy']
9
+
10
+ module CX600_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
+ # CX600-X8A 流策略、路由策略
3
+
4
+ ```ruby
5
+ @sign << ['CX600-X8A', 'traffic']
6
+ @sign << ['CX600-X8A', 'traffic_classifier']
7
+ @sign << ['CX600-X8A', 'traffic_behavior']
8
+ @sign << ['CX600-X8A', 'traffic_policy']
9
+
10
+ module CX600_X8A
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
+ ```