Merge "[OVN] Update the LRP gateway_mtu when the external network changes" into stable/2024.2
This commit is contained in:
commit
0b8a0b7d6a
@ -1694,13 +1694,13 @@ class OVNClient(object):
|
||||
for net in networks) else 'false'
|
||||
return reside_redir_ch
|
||||
|
||||
def _gen_router_port_options(self, port):
|
||||
def _gen_router_port_options(self, port, network_mtu=None):
|
||||
options = {}
|
||||
admin_context = n_context.get_admin_context()
|
||||
ls_name = utils.ovn_name(port['network_id'])
|
||||
ls = self._nb_idl.ls_get(ls_name).execute(check_error=True)
|
||||
network_type = ls.external_ids[ovn_const.OVN_NETTYPE_EXT_ID_KEY]
|
||||
network_mtu = int(
|
||||
network_mtu = network_mtu or int(
|
||||
ls.external_ids[ovn_const.OVN_NETWORK_MTU_EXT_ID_KEY])
|
||||
# For provider networks (VLAN, FLAT types) we need to set the
|
||||
# "reside-on-redirect-chassis" option so the routing for this
|
||||
@ -2140,7 +2140,8 @@ class OVNClient(object):
|
||||
commands = []
|
||||
for port in ports:
|
||||
lrp_name = utils.ovn_lrouter_port_name(port['id'])
|
||||
options = self._gen_router_port_options(port)
|
||||
options = self._gen_router_port_options(
|
||||
port, network_mtu=prov_net['mtu'])
|
||||
# Do not fail for cases where logical router port get deleted
|
||||
commands.append(self._nb_idl.lrp_set_options(lrp_name,
|
||||
if_exists=True,
|
||||
|
@ -13,6 +13,7 @@
|
||||
# under the License.
|
||||
|
||||
from neutron_lib.api.definitions import external_net
|
||||
from neutron_lib.api.definitions import network_mtu as mtu_def
|
||||
from neutron_lib.api.definitions import provider_net
|
||||
from neutron_lib import constants
|
||||
from oslo_config import cfg
|
||||
@ -180,3 +181,50 @@ class TestOVNClient(base.TestOVNFunctionalBase,
|
||||
|
||||
def test_router_reside_chassis_redirect_non_dvr_geneve_net(self):
|
||||
self._test_router_reside_chassis_redirect(False, 'geneve')
|
||||
|
||||
def test_update_network_lrp_mtu_updated(self):
|
||||
def check_gw_lrp_mtu(router_id, mtu):
|
||||
# Find gateway LRP and check the MTU value.
|
||||
lr = self.nb_api.lookup('Logical_Router',
|
||||
ovn_utils.ovn_name(router_id))
|
||||
for lrp in lr.ports:
|
||||
if strutils.bool_from_string(
|
||||
lrp.external_ids[
|
||||
ovn_const.OVN_ROUTER_IS_EXT_GW]):
|
||||
self.assertEqual(mtu, int(lrp.options['gateway_mtu']))
|
||||
return
|
||||
|
||||
self.fail('Gateway Logical_Router_Port not found for '
|
||||
'router %s' % router_id)
|
||||
|
||||
cfg.CONF.set_override('ovn_emit_need_to_frag', True, group='ovn')
|
||||
self.add_fake_chassis('host1', enable_chassis_as_gw=True, azs=[])
|
||||
net_ext_args = {provider_net.NETWORK_TYPE: 'geneve',
|
||||
external_net.EXTERNAL: True,
|
||||
mtu_def.MTU: 1300}
|
||||
net_int_args = {provider_net.NETWORK_TYPE: 'geneve',
|
||||
mtu_def.MTU: 1400}
|
||||
with self.network(
|
||||
'test-ext-net', as_admin=True,
|
||||
arg_list=tuple(net_ext_args.keys()), **net_ext_args) as \
|
||||
net_ext, self.network(
|
||||
'test-int-net', as_admin=True,
|
||||
arg_list=tuple(net_int_args.keys()), **net_int_args) as \
|
||||
net_int:
|
||||
with self.subnet(net_ext, cidr='10.1.0.0/24'), \
|
||||
self.subnet(net_int, cidr='10.2.0.0/24') as snet_int:
|
||||
ext_gw = {'network_id': net_ext['network']['id']}
|
||||
with self.router(external_gateway_info=ext_gw) as router:
|
||||
router_id = router['router']['id']
|
||||
self._router_interface_action(
|
||||
'add', router_id, snet_int['subnet']['id'],
|
||||
None)
|
||||
|
||||
check_gw_lrp_mtu(router_id, 1300)
|
||||
|
||||
# Update external network MTU.
|
||||
net_ext_args = {'network': {mtu_def.MTU: 1350}}
|
||||
req = self.new_update_request('networks', net_ext_args,
|
||||
net_ext['network']['id'])
|
||||
req.get_response(self.api)
|
||||
check_gw_lrp_mtu(router_id, 1350)
|
||||
|
Loading…
x
Reference in New Issue
Block a user