cisco_node_utils 1.8.0 → 1.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +43 -1
- data/README.md +4 -4
- data/docs/README-maintainers.md +1 -0
- data/lib/cisco_node_utils/bgp_neighbor.rb +20 -0
- data/lib/cisco_node_utils/bgp_neighbor_af.rb +20 -0
- data/lib/cisco_node_utils/cmd_ref/bgp_neighbor.yaml +7 -0
- data/lib/cisco_node_utils/cmd_ref/bgp_neighbor_af.yaml +7 -0
- data/lib/cisco_node_utils/cmd_ref/evpn_multicast.yaml +12 -0
- data/lib/cisco_node_utils/cmd_ref/evpn_multisite.yaml +18 -0
- data/lib/cisco_node_utils/cmd_ref/evpn_stormcontrol.yaml +18 -0
- data/lib/cisco_node_utils/cmd_ref/feature.yaml +7 -0
- data/lib/cisco_node_utils/cmd_ref/interface_evpn_multisite.yaml +17 -0
- data/lib/cisco_node_utils/cmd_ref/ip_multicast.yaml +18 -0
- data/lib/cisco_node_utils/cmd_ref/vrf_af.yaml +21 -0
- data/lib/cisco_node_utils/cmd_ref/vxlan_vtep.yaml +6 -0
- data/lib/cisco_node_utils/cmd_ref/vxlan_vtep_vni.yaml +7 -0
- data/lib/cisco_node_utils/evpn_multicast.rb +66 -0
- data/lib/cisco_node_utils/evpn_multisite.rb +96 -0
- data/lib/cisco_node_utils/evpn_stormcontrol.rb +84 -0
- data/lib/cisco_node_utils/feature.rb +19 -0
- data/lib/cisco_node_utils/interface.rb +2 -1
- data/lib/cisco_node_utils/interface_evpn_multisite.rb +63 -0
- data/lib/cisco_node_utils/ip_multicast.rb +86 -0
- data/lib/cisco_node_utils/version.rb +2 -2
- data/lib/cisco_node_utils/vrf_af.rb +56 -5
- data/lib/cisco_node_utils/vxlan_vtep.rb +24 -0
- data/lib/cisco_node_utils/vxlan_vtep_vni.rb +21 -0
- data/tests/ciscotest.rb +36 -3
- data/tests/tacacs_server.yaml.example +1 -1
- data/tests/test_bgp_af.rb +1 -1
- data/tests/test_bgp_neighbor.rb +15 -0
- data/tests/test_bgp_neighbor_af.rb +27 -0
- data/tests/test_evpn_multicast.rb +65 -0
- data/tests/test_evpn_multisite.rb +70 -0
- data/tests/test_evpn_stormcontrol.rb +56 -0
- data/tests/test_feature.rb +6 -1
- data/tests/test_interface_evpn_multisite.rb +59 -0
- data/tests/test_ip_multicast.rb +69 -0
- data/tests/test_node_ext.rb +3 -2
- data/tests/test_radius_global.rb +7 -5
- data/tests/test_router_ospf_vrf.rb +2 -0
- data/tests/test_stp_global.rb +7 -0
- data/tests/test_tacacs_global.rb +10 -7
- data/tests/test_vrf_af.rb +52 -1
- data/tests/test_vxlan_vtep.rb +23 -0
- data/tests/test_vxlan_vtep_vni.rb +31 -0
- data/tests/yum_package.yaml +10 -0
- metadata +18 -3
@@ -0,0 +1,84 @@
|
|
1
|
+
# October 2017, Rahul Shenoy
|
2
|
+
#
|
3
|
+
# Copyright (c) 2017 Cisco and/or its affiliates.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
require_relative 'cisco_cmn_utils'
|
18
|
+
require_relative 'node_util'
|
19
|
+
require_relative 'feature'
|
20
|
+
|
21
|
+
module Cisco
|
22
|
+
# node_utils class for evpn_stormcontrol
|
23
|
+
class EvpnStormcontrol < NodeUtil
|
24
|
+
attr_reader :stormcontrol_type, :level
|
25
|
+
|
26
|
+
def initialize(stormcontrol_type, level, instantiate=true)
|
27
|
+
err_msg = 'storm control type must be one of the following:' \
|
28
|
+
' broadcast, multicast or unicast'
|
29
|
+
type_list = %w(broadcast multicast unicast)
|
30
|
+
fail ArgumentError, err_msg unless type_list.include?(stormcontrol_type)
|
31
|
+
@stormcontrol_type = stormcontrol_type
|
32
|
+
|
33
|
+
err_msg = "level must be either a 'String' or an" \
|
34
|
+
" 'Integer' object"
|
35
|
+
fail ArgumentError, err_msg unless level.is_a?(Integer) ||
|
36
|
+
level.is_a?(String)
|
37
|
+
@level = level.to_i
|
38
|
+
@get_args = @set_args = { stormcontrol_type: @stormcontrol_type,
|
39
|
+
level: @level }
|
40
|
+
create if instantiate
|
41
|
+
end
|
42
|
+
|
43
|
+
def config_stormcontrol
|
44
|
+
stormcontrol_type = @set_args[:stormcontrol_type]
|
45
|
+
config_set('evpn_stormcontrol', stormcontrol_type, @set_args)
|
46
|
+
end
|
47
|
+
|
48
|
+
def create
|
49
|
+
@set_args[:state] = ''
|
50
|
+
config_stormcontrol
|
51
|
+
end
|
52
|
+
|
53
|
+
def destroy
|
54
|
+
@set_args[:state] = 'no'
|
55
|
+
config_stormcontrol
|
56
|
+
end
|
57
|
+
|
58
|
+
# Create a hash of all stormcontrol instances
|
59
|
+
def self.stormcontrol
|
60
|
+
hash = {}
|
61
|
+
type_list = %w(broadcast multicast unicast)
|
62
|
+
type_list.each do |type|
|
63
|
+
level = config_get('evpn_stormcontrol', type)
|
64
|
+
hash[type] = EvpnStormcontrol.new(type, level, false) if level
|
65
|
+
end
|
66
|
+
hash
|
67
|
+
end
|
68
|
+
|
69
|
+
def level
|
70
|
+
config_get('evpn_stormcontrol', @get_args[:stormcontrol_type])
|
71
|
+
end
|
72
|
+
|
73
|
+
def level=(level)
|
74
|
+
err_msg = "level must be either a 'String' or an" \
|
75
|
+
" 'Integer' object"
|
76
|
+
fail ArgumentError, err_msg unless level.is_a?(Integer) ||
|
77
|
+
level.is_a?(String)
|
78
|
+
@level = level.to_i
|
79
|
+
@set_args[:level] = @level
|
80
|
+
@set_args[:state] = ''
|
81
|
+
config_stormcontrol
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -160,6 +160,25 @@ module Cisco
|
|
160
160
|
return false
|
161
161
|
end
|
162
162
|
|
163
|
+
# ---------------------------
|
164
|
+
def self.ngmvpn_enable
|
165
|
+
return if ngmvpn_enabled?
|
166
|
+
config_set('feature', 'ngmvpn', state: '')
|
167
|
+
end
|
168
|
+
|
169
|
+
def self.ngmvpn_enabled?
|
170
|
+
config_get('feature', 'ngmvpn')
|
171
|
+
rescue Cisco::CliError => e
|
172
|
+
# cmd will syntax reject when feature is not enabled.
|
173
|
+
raise unless e.clierror =~ /Syntax error/
|
174
|
+
return false
|
175
|
+
end
|
176
|
+
|
177
|
+
def self.ngmvpn_disable
|
178
|
+
return unless ngmvpn_enabled?
|
179
|
+
config_set('feature', 'ngmvpn', state: 'no')
|
180
|
+
end
|
181
|
+
|
163
182
|
# ---------------------------
|
164
183
|
def self.nv_overlay_enable
|
165
184
|
# Note: vdc platforms restrict this feature to F3 or newer linecards
|
@@ -1227,8 +1227,9 @@ module Cisco
|
|
1227
1227
|
if val
|
1228
1228
|
state = ''
|
1229
1229
|
else
|
1230
|
+
return unless stp_port_type
|
1230
1231
|
state = 'no'
|
1231
|
-
val =
|
1232
|
+
val = stp_port_type
|
1232
1233
|
end
|
1233
1234
|
config_set('interface', 'stp_port_type', name: @name,
|
1234
1235
|
state: state, type: val)
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# October 2017, Rahul Shenoy
|
2
|
+
#
|
3
|
+
# Copyright (c) 2017 Cisco and/or its affiliates.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
require_relative 'node_util'
|
18
|
+
|
19
|
+
module Cisco
|
20
|
+
# node_utils class for interface_evpn_multisite
|
21
|
+
class InterfaceEvpnMultisite < NodeUtil
|
22
|
+
attr_reader :interface, :tracking
|
23
|
+
|
24
|
+
def initialize(interface)
|
25
|
+
fail TypeError unless interface.is_a?(String)
|
26
|
+
@interface = interface.downcase
|
27
|
+
@get_args = @set_args = { interface: @interface }
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.interfaces
|
31
|
+
hash = {}
|
32
|
+
intf_list = config_get('interface_evpn_multisite', 'all_interfaces')
|
33
|
+
return hash if intf_list.nil?
|
34
|
+
|
35
|
+
intf_list.each do |id|
|
36
|
+
id = id.downcase
|
37
|
+
intf = InterfaceEvpnMultisite.new(id)
|
38
|
+
hash[id] = intf if intf.tracking
|
39
|
+
end
|
40
|
+
hash
|
41
|
+
end
|
42
|
+
|
43
|
+
def enable(tracking)
|
44
|
+
@set_args[:tracking] = tracking
|
45
|
+
@set_args[:state] = ''
|
46
|
+
config_set('interface_evpn_multisite', 'evpn_multisite', @set_args)
|
47
|
+
end
|
48
|
+
|
49
|
+
def disable(tracking='dci-tracking')
|
50
|
+
@set_args[:tracking] = tracking
|
51
|
+
@set_args[:state] = 'no'
|
52
|
+
config_set('interface_evpn_multisite', 'evpn_multisite', @set_args)
|
53
|
+
end
|
54
|
+
|
55
|
+
def tracking
|
56
|
+
config_get('interface_evpn_multisite', 'evpn_multisite', @get_args)
|
57
|
+
end
|
58
|
+
|
59
|
+
def tracking=(tracking)
|
60
|
+
enable(tracking)
|
61
|
+
end
|
62
|
+
end # class
|
63
|
+
end # module
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# January 2018, Rahul Shenoy
|
2
|
+
#
|
3
|
+
# Copyright (c) 2018 Cisco and/or its affiliates.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
require_relative 'cisco_cmn_utils'
|
18
|
+
require_relative 'node_util'
|
19
|
+
require_relative 'feature'
|
20
|
+
|
21
|
+
module Cisco
|
22
|
+
# node_utils class for evpn_multisite
|
23
|
+
class IpMulticast < NodeUtil
|
24
|
+
def initialize(instantiate=true)
|
25
|
+
@get_args = @set_args = {}
|
26
|
+
enable_features if instantiate
|
27
|
+
end
|
28
|
+
|
29
|
+
def destroy
|
30
|
+
@set_args[:state] = 'no'
|
31
|
+
config_set('ip_multicast', 'overlay_distributed_dr', @set_args)
|
32
|
+
config_set('ip_multicast', 'overlay_spt_only', @set_args)
|
33
|
+
Feature.ngmvpn_disable
|
34
|
+
end
|
35
|
+
|
36
|
+
def enable_features
|
37
|
+
Feature.nv_overlay_enable
|
38
|
+
Feature.nv_overlay_evpn_enable
|
39
|
+
Feature.ngmvpn_enable
|
40
|
+
end
|
41
|
+
|
42
|
+
def ip_multicast
|
43
|
+
Feature.ngmvpn_enabled?
|
44
|
+
end
|
45
|
+
|
46
|
+
def overlay_distributed_dr
|
47
|
+
config_get('ip_multicast', 'overlay_distributed_dr')
|
48
|
+
end
|
49
|
+
|
50
|
+
def overlay_distributed_dr=(bool)
|
51
|
+
fail TypeError unless [true, false].include?(bool)
|
52
|
+
@set_args[:state] = bool ? '' : 'no'
|
53
|
+
if @set_args[:state] == 'no'
|
54
|
+
unless overlay_distributed_dr == default_overlay_distributed_dr
|
55
|
+
config_set('ip_multicast', 'overlay_distributed_dr', @set_args)
|
56
|
+
end
|
57
|
+
else
|
58
|
+
config_set('ip_multicast', 'overlay_distributed_dr', @set_args)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def default_overlay_distributed_dr
|
63
|
+
config_get_default('ip_multicast', 'overlay_distributed_dr')
|
64
|
+
end
|
65
|
+
|
66
|
+
def overlay_spt_only
|
67
|
+
config_get('ip_multicast', 'overlay_spt_only')
|
68
|
+
end
|
69
|
+
|
70
|
+
def overlay_spt_only=(bool)
|
71
|
+
fail TypeError unless [true, false].include?(bool)
|
72
|
+
@set_args[:state] = bool ? '' : 'no'
|
73
|
+
if @set_args[:state] == 'no'
|
74
|
+
unless overlay_spt_only == default_overlay_spt_only
|
75
|
+
config_set('ip_multicast', 'overlay_spt_only', @set_args)
|
76
|
+
end
|
77
|
+
else
|
78
|
+
config_set('ip_multicast', 'overlay_spt_only', @set_args)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def default_overlay_spt_only
|
83
|
+
config_get_default('ip_multicast', 'overlay_spt_only')
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2015-
|
1
|
+
# Copyright (c) 2015-2018 Cisco and/or its affiliates.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
# Container module for version number only.
|
16
16
|
module CiscoNodeUtils
|
17
|
-
VERSION = '1.
|
17
|
+
VERSION = '1.9.0'
|
18
18
|
gem_version = Gem::Version.new(Gem::VERSION)
|
19
19
|
min_gem_version = Gem::Version.new('2.1.0')
|
20
20
|
fail 'Required rubygems version >= 2.1.0' if gem_version < min_gem_version
|
@@ -75,16 +75,20 @@ module Cisco
|
|
75
75
|
@set_args = @get_args.merge!(hash) unless hash.empty?
|
76
76
|
end
|
77
77
|
|
78
|
-
def route_target_feature_enable(require_nv_overlay=nil)
|
78
|
+
def route_target_feature_enable(require_nv_overlay=nil, require_ngmvpn=nil)
|
79
79
|
return unless platform == :nexus
|
80
80
|
|
81
81
|
# All NX route-target properties require feature bgp
|
82
82
|
Feature.bgp_enable
|
83
83
|
|
84
84
|
# Some platforms/versions also require nv overlay for some properties
|
85
|
-
|
86
|
-
|
87
|
-
|
85
|
+
if require_nv_overlay
|
86
|
+
Feature.nv_overlay_enable if Feature.nv_overlay_supported?
|
87
|
+
Feature.nv_overlay_evpn_enable if Feature.nv_overlay_evpn_supported?
|
88
|
+
end
|
89
|
+
|
90
|
+
# ngmvpn feature is required for 'mvpn' enablement
|
91
|
+
Feature.ngmvpn_enable if require_ngmvpn
|
88
92
|
end
|
89
93
|
|
90
94
|
########################################################
|
@@ -163,6 +167,21 @@ module Cisco
|
|
163
167
|
config_get_default('vrf_af', 'route_target_both_auto_evpn')
|
164
168
|
end
|
165
169
|
|
170
|
+
# --------------------------
|
171
|
+
def route_target_both_auto_mvpn
|
172
|
+
config_get('vrf_af', 'route_target_both_auto_mvpn', @get_args)
|
173
|
+
end
|
174
|
+
|
175
|
+
def route_target_both_auto_mvpn=(state)
|
176
|
+
route_target_feature_enable(nil, :require_ngmvpn)
|
177
|
+
set_args_keys(state: (state ? '' : 'no'))
|
178
|
+
config_set('vrf_af', 'route_target_both_auto_mvpn', @set_args)
|
179
|
+
end
|
180
|
+
|
181
|
+
def default_route_target_both_auto_mvpn
|
182
|
+
config_get_default('vrf_af', 'route_target_both_auto_mvpn')
|
183
|
+
end
|
184
|
+
|
166
185
|
# --------------------------
|
167
186
|
def route_target_export
|
168
187
|
cmds = config_get('vrf_af', 'route_target_export', @get_args)
|
@@ -194,6 +213,22 @@ module Cisco
|
|
194
213
|
config_get_default('vrf_af', 'route_target_export_evpn')
|
195
214
|
end
|
196
215
|
|
216
|
+
# --------------------------
|
217
|
+
def route_target_export_mvpn
|
218
|
+
cmds = config_get('vrf_af', 'route_target_export_mvpn', @get_args)
|
219
|
+
cmds.nil? ? nil : cmds.sort
|
220
|
+
end
|
221
|
+
|
222
|
+
def route_target_export_mvpn=(should)
|
223
|
+
route_target_feature_enable(nil, :require_ngmvpn)
|
224
|
+
route_target_delta(should, route_target_export_mvpn,
|
225
|
+
'route_target_export_mvpn')
|
226
|
+
end
|
227
|
+
|
228
|
+
def default_route_target_export_mvpn
|
229
|
+
config_get_default('vrf_af', 'route_target_export_mvpn')
|
230
|
+
end
|
231
|
+
|
197
232
|
# --------------------------
|
198
233
|
def route_target_export_stitching
|
199
234
|
cmds = config_get('vrf_af', 'route_target_export_stitching', @get_args)
|
@@ -226,12 +261,12 @@ module Cisco
|
|
226
261
|
|
227
262
|
# --------------------------
|
228
263
|
def route_target_import_evpn
|
229
|
-
route_target_feature_enable(:require_nv_overlay)
|
230
264
|
cmds = config_get('vrf_af', 'route_target_import_evpn', @get_args)
|
231
265
|
cmds.nil? ? nil : cmds.sort
|
232
266
|
end
|
233
267
|
|
234
268
|
def route_target_import_evpn=(should)
|
269
|
+
route_target_feature_enable(:require_nv_overlay)
|
235
270
|
route_target_delta(should, route_target_import_evpn,
|
236
271
|
'route_target_import_evpn')
|
237
272
|
end
|
@@ -240,6 +275,22 @@ module Cisco
|
|
240
275
|
config_get_default('vrf_af', 'route_target_import_evpn')
|
241
276
|
end
|
242
277
|
|
278
|
+
# --------------------------
|
279
|
+
def route_target_import_mvpn
|
280
|
+
cmds = config_get('vrf_af', 'route_target_import_mvpn', @get_args)
|
281
|
+
cmds.nil? ? nil : cmds.sort
|
282
|
+
end
|
283
|
+
|
284
|
+
def route_target_import_mvpn=(should)
|
285
|
+
route_target_feature_enable(nil, :require_ngmvpn)
|
286
|
+
route_target_delta(should, route_target_import_mvpn,
|
287
|
+
'route_target_import_mvpn')
|
288
|
+
end
|
289
|
+
|
290
|
+
def default_route_target_import_mvpn
|
291
|
+
config_get_default('vrf_af', 'route_target_import_mvpn')
|
292
|
+
end
|
293
|
+
|
243
294
|
# --------------------------
|
244
295
|
def route_target_import_stitching
|
245
296
|
cmds = config_get('vrf_af', 'route_target_import_stitching', @get_args)
|
@@ -173,5 +173,29 @@ module Cisco
|
|
173
173
|
def default_shutdown
|
174
174
|
config_get_default('vxlan_vtep', 'shutdown')
|
175
175
|
end
|
176
|
+
|
177
|
+
def multisite_border_gateway_interface
|
178
|
+
config_get('vxlan_vtep', 'multisite_bg_intf', name: @name)
|
179
|
+
end
|
180
|
+
|
181
|
+
def multisite_border_gateway_interface=(val)
|
182
|
+
set_args = { name: @name }
|
183
|
+
set_args[:state] = val.empty? ? 'no' : ''
|
184
|
+
set_args[:lpbk_intf] = val.empty? ? 'loopback0' : val
|
185
|
+
if set_args[:state] == 'no'
|
186
|
+
# 'no multisite border-gateway' doesn't work without interface
|
187
|
+
# defaulting to 'loopback0' still clears any configuration
|
188
|
+
intf = multisite_border_gateway_interface
|
189
|
+
unless intf == default_multisite_border_gateway_interface
|
190
|
+
config_set('vxlan_vtep', 'multisite_bg_intf', set_args)
|
191
|
+
end
|
192
|
+
else
|
193
|
+
config_set('vxlan_vtep', 'multisite_bg_intf', set_args)
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
def default_multisite_border_gateway_interface
|
198
|
+
config_get_default('vxlan_vtep', 'multisite_bg_intf')
|
199
|
+
end
|
176
200
|
end # Class
|
177
201
|
end # Module
|
@@ -262,5 +262,26 @@ module Cisco
|
|
262
262
|
def default_suppress_uuc
|
263
263
|
config_get_default('vxlan_vtep_vni', 'suppress_uuc')
|
264
264
|
end
|
265
|
+
|
266
|
+
def multisite_ingress_replication
|
267
|
+
config_get('vxlan_vtep_vni', 'multisite_ingress_replication', @get_args)
|
268
|
+
end
|
269
|
+
|
270
|
+
def multisite_ingress_replication=(state)
|
271
|
+
@set_args[:state] = state ? '' : 'no'
|
272
|
+
if @set_args[:state] == 'no'
|
273
|
+
unless multisite_ingress_replication ==
|
274
|
+
default_multisite_ingress_replication
|
275
|
+
config_set('vxlan_vtep_vni', 'multisite_ingress_replication',
|
276
|
+
@set_args)
|
277
|
+
end
|
278
|
+
else
|
279
|
+
config_set('vxlan_vtep_vni', 'multisite_ingress_replication', @set_args)
|
280
|
+
end
|
281
|
+
end
|
282
|
+
|
283
|
+
def default_multisite_ingress_replication
|
284
|
+
config_get_default('vxlan_vtep_vni', 'multisite_ingress_replication')
|
285
|
+
end
|
265
286
|
end
|
266
287
|
end
|