[OVN] Remove VLAN check when setting external_mac
This patch reverts [0]. The code wasn't accounting for VLAN provider networks, as stated in the bug #1842988, DVR won't work if the provider network (where the FIP is created) is VLAN. There was also an incosistency in how the external_mac was set for the VLAN networks. Upon creating the FIP the code was checking for the network type and not setting the external_mac attribute in case the network was VLAN type. But, if the port went down and up again (e.g if you reboot the VM) the event handler that set/unset the external_mac [1] wasn't check for the type. This is how people worked around the DVR problem (as stated in bug #1842988). For more information see bug #1842988. [0]changes/49/705249/1c5aef51edc
[1]eda5d7f80d/networking_ovn/ml2/mech_driver.py (L794-L800)
Closes-Bug: #1842988 Signed-off-by: Lucas Alvares Gomes <lucasagomes@gmail.com> (Cherry-picked from Neutron Ifb795626dc9c2ac4f0104f491dd38c9b4cc902c9) Change-Id: I3e9e734b757f67d3e4ab1c5a02f8e7f9f0c9aa2e
parent
844540e2d0
commit
f9b1dffada
|
@ -735,10 +735,7 @@ class OVNClient(object):
|
|||
columns['logical_port'] = floatingip['port_id']
|
||||
ext_ids[ovn_const.OVN_FIP_EXT_MAC_KEY] = port['mac_address']
|
||||
if self._nb_idl.lsp_get_up(floatingip['port_id']).execute():
|
||||
port_net = self._plugin.get_network(context,
|
||||
port['network_id'])
|
||||
if port_net.get(pnet.NETWORK_TYPE) != const.TYPE_VLAN:
|
||||
columns['external_mac'] = port['mac_address']
|
||||
columns['external_mac'] = port['mac_address']
|
||||
|
||||
# TODO(dalvarez): remove this check once the minimum OVS required
|
||||
# version contains the column (when OVS 2.8.2 is released).
|
||||
|
|
|
@ -1055,8 +1055,7 @@ class OVNL3RouterPlugin(test_mech_driver.OVNMechanismDriverTestCase):
|
|||
@mock.patch('neutron.db.l3_db.L3_NAT_dbonly_mixin._get_floatingip')
|
||||
@mock.patch('neutron.db.extraroute_db.ExtraRoute_dbonly_mixin.'
|
||||
'update_floatingip')
|
||||
def _test_update_floatingip_associate_distributed(self, network_type,
|
||||
uf, gf, gp, gn):
|
||||
def test_update_floatingip_associate_distributed(self, uf, gf, gp, gn):
|
||||
self.l3_inst._ovn.is_col_present.return_value = True
|
||||
self.fake_floating_ip.update({'fixed_port_id': None})
|
||||
gp.return_value = {'mac_address': '00:01:02:03:04:05',
|
||||
|
@ -1065,7 +1064,7 @@ class OVNL3RouterPlugin(test_mech_driver.OVNMechanismDriverTestCase):
|
|||
uf.return_value = self.fake_floating_ip_new
|
||||
|
||||
fake_network_vlan = self.fake_network
|
||||
fake_network_vlan[pnet.NETWORK_TYPE] = network_type
|
||||
fake_network_vlan[pnet.NETWORK_TYPE] = constants.TYPE_FLAT
|
||||
gn.return_value = fake_network_vlan
|
||||
|
||||
config.cfg.CONF.set_override(
|
||||
|
@ -1080,23 +1079,11 @@ class OVNL3RouterPlugin(test_mech_driver.OVNMechanismDriverTestCase):
|
|||
ovn_const.OVN_ROUTER_NAME_EXT_ID_KEY: utils.ovn_name(
|
||||
self.fake_floating_ip_new['router_id']),
|
||||
ovn_const.OVN_FIP_EXT_MAC_KEY: '00:01:02:03:04:05'}
|
||||
if network_type == constants.TYPE_VLAN:
|
||||
self.l3_inst._ovn.add_nat_rule_in_lrouter.assert_called_once_with(
|
||||
'neutron-new-router-id', type='dnat_and_snat',
|
||||
logical_ip='10.10.10.10', external_ip='192.168.0.10',
|
||||
logical_port='new-port_id', external_ids=expected_ext_ids)
|
||||
else:
|
||||
self.l3_inst._ovn.add_nat_rule_in_lrouter.assert_called_once_with(
|
||||
'neutron-new-router-id', type='dnat_and_snat',
|
||||
logical_ip='10.10.10.10', external_ip='192.168.0.10',
|
||||
external_mac='00:01:02:03:04:05', logical_port='new-port_id',
|
||||
external_ids=expected_ext_ids)
|
||||
|
||||
def test_update_floatingip_associate_distributed_flat(self):
|
||||
self._test_update_floatingip_associate_distributed(constants.TYPE_FLAT)
|
||||
|
||||
def test_update_floatingip_associate_distributed_vlan(self):
|
||||
self._test_update_floatingip_associate_distributed(constants.TYPE_VLAN)
|
||||
self.l3_inst._ovn.add_nat_rule_in_lrouter.assert_called_once_with(
|
||||
'neutron-new-router-id', type='dnat_and_snat',
|
||||
logical_ip='10.10.10.10', external_ip='192.168.0.10',
|
||||
external_mac='00:01:02:03:04:05', logical_port='new-port_id',
|
||||
external_ids=expected_ext_ids)
|
||||
|
||||
@mock.patch('neutron.db.l3_db.L3_NAT_dbonly_mixin._get_floatingip')
|
||||
@mock.patch('neutron.db.extraroute_db.ExtraRoute_dbonly_mixin.'
|
||||
|
|
Loading…
Reference in New Issue