Merge "Add tag to port more earlier"

This commit is contained in:
Zuul 2022-04-06 09:47:46 +00:00 committed by Gerrit Code Review
commit 4f9313fca1
3 changed files with 30 additions and 11 deletions

View File

@ -1117,6 +1117,16 @@ class OVSNeutronAgent(l2population_rpc.L2populationRpcCallBackTunnelMixin,
self.available_local_vlans.add(lvm.vlan)
def _set_port_vlan(self, port, vlan):
ovsdb = self.int_br.ovsdb
with self.int_br.ovsdb.transaction() as txn:
# When adding the port's tag,
# also clear port's vlan_mode and trunks,
# which were set to make sure all packets are dropped.
txn.add(ovsdb.db_set('Port', port.port_name, ('tag', vlan)))
txn.add(ovsdb.db_clear('Port', port.port_name, 'vlan_mode'))
txn.add(ovsdb.db_clear('Port', port.port_name, 'trunks'))
def port_bound(self, port, net_uuid,
network_type, physical_network,
segmentation_id, fixed_ips, device_owner,
@ -1157,10 +1167,12 @@ class OVSNeutronAgent(l2population_rpc.L2populationRpcCallBackTunnelMixin,
vlan_mapping = {'net_uuid': net_uuid,
'network_type': network_type,
'physical_network': str(physical_network)}
'physical_network': str(physical_network),
'tag': str(lvm.vlan)}
if segmentation_id is not None:
vlan_mapping['segmentation_id'] = str(segmentation_id)
port_other_config.update(vlan_mapping)
self._set_port_vlan(port, lvm.vlan)
self.int_br.set_db_attribute("Port", port.port_name, "other_config",
port_other_config)
return True

View File

@ -179,18 +179,21 @@ class TestOvsNeutronAgent(object):
self.agent.vlan_manager.add(
net_uuid, old_local_vlan, None, None, None)
with mock.patch.object(self.agent, 'int_br', autospec=True) as int_br:
int_br.db_get_val.return_value = db_get_val
int_br.set_db_attribute.return_value = True
needs_binding = self.agent.port_bound(
port, net_uuid, 'local', None, None,
fixed_ips, DEVICE_OWNER_COMPUTE, False)
with mock.patch.object(self.agent, '_set_port_vlan') as set_vlan:
int_br.db_get_val.return_value = db_get_val
int_br.set_db_attribute.return_value = True
needs_binding = self.agent.port_bound(
port, net_uuid, 'local', None, None,
fixed_ips, DEVICE_OWNER_COMPUTE, False)
if db_get_val is None:
int_br.assert_not_called()
self.assertFalse(needs_binding)
else:
vlan_mapping = {'net_uuid': net_uuid,
'network_type': 'local',
'physical_network': 'None'}
'physical_network': 'None',
'tag': str(new_local_vlan)}
set_vlan.assert_called_once_with(port, new_local_vlan)
int_br.set_db_attribute.assert_called_once_with(
"Port", mock.ANY, "other_config", vlan_mapping)
self.assertTrue(needs_binding)
@ -3102,6 +3105,7 @@ class TestOvsDvrNeutronAgent(object):
self.agent = self.mod_agent.OVSNeutronAgent(self._bridge_classes(),
ext_manager, cfg.CONF)
self.agent.tun_br = self.br_tun_cls(br_name='br-tun')
self.agent._set_port_vlan = mock.Mock()
self.agent.sg_agent = mock.Mock()
def _setup_for_dvr_test(self):

View File

@ -503,7 +503,8 @@ class TunnelTest(object):
vlan_mapping = {'segmentation_id': str(LS_ID),
'physical_network': 'None',
'net_uuid': NET_UUID,
'network_type': 'gre'}
'network_type': 'gre',
'tag': str(LV_ID)}
self.mock_int_bridge_expected += [
mock.call.db_get_val('Port', 'port', 'other_config'),
mock.call.set_db_attribute('Port', VIF_PORT.port_name,
@ -514,9 +515,11 @@ class TunnelTest(object):
a.vlan_manager.add(NET_UUID, *self.LVM_DATA)
a.local_dvr_map = {}
self.ovs_bridges[self.INT_BRIDGE].db_get_val.return_value = {}
a.port_bound(VIF_PORT, NET_UUID, 'gre', None, LS_ID,
FIXED_IPS, VM_DEVICE_OWNER, False)
self._verify_mock_calls()
with mock.patch.object(a, "_set_port_vlan") as set_vlan:
a.port_bound(VIF_PORT, NET_UUID, 'gre', None, LS_ID,
FIXED_IPS, VM_DEVICE_OWNER, False)
self._verify_mock_calls()
set_vlan.assert_called_once_with(VIF_PORT, LV_ID)
def test_port_unbound(self):
with mock.patch.object(self.mod_agent.OVSNeutronAgent,