diff --git a/ovn_bgp_agent/drivers/openstack/ovn_bgp_driver.py b/ovn_bgp_agent/drivers/openstack/ovn_bgp_driver.py index 6bf7095b..aac6d023 100644 --- a/ovn_bgp_agent/drivers/openstack/ovn_bgp_driver.py +++ b/ovn_bgp_agent/drivers/openstack/ovn_bgp_driver.py @@ -177,17 +177,16 @@ class OVNBGPDriver(driver_api.AgentDriverBase): linux_net.ensure_routing_table_for_bridge( self.ovn_routing_tables, bridge, CONF.bgp_vrf_table_id)) - vlan_tag = self.sb_idl.get_network_vlan_tag_by_network_name( + vlan_tags = self.sb_idl.get_network_vlan_tag_by_network_name( network) - if vlan_tag: - vlan_tag = vlan_tag[0] + for vlan_tag in vlan_tags: linux_net.ensure_vlan_device_for_network(bridge, vlan_tag) linux_net.ensure_arp_ndp_enabled_for_bridge(bridge, bridge_index, - vlan_tag) + vlan_tags) if self.ovs_flows.get(bridge): continue diff --git a/ovn_bgp_agent/drivers/openstack/utils/ovn.py b/ovn_bgp_agent/drivers/openstack/utils/ovn.py index b133915e..ee8ac4bc 100644 --- a/ovn_bgp_agent/drivers/openstack/utils/ovn.py +++ b/ovn_bgp_agent/drivers/openstack/utils/ovn.py @@ -157,12 +157,14 @@ class OvsdbNbOvnIdl(nb_impl_idl.OvnNbApiIdlImpl, Backend): self.idl._session.reconnect.set_probe_interval(60000) def get_network_vlan_tag_by_network_name(self, network_name): + tags = [] cmd = self.db_find_rows('Logical_Switch_Port', ('type', '=', constants.OVN_LOCALNET_VIF_PORT_TYPE)) for row in cmd.execute(check_error=True): if (row.options and row.options.get('network_name') == network_name): - return row.tag + tags.append(row.tag[0]) + return tags def ls_has_virtual_ports(self, logical_switch): ls = self.lookup('Logical_Switch', logical_switch) @@ -297,12 +299,14 @@ class OvsdbSbOvnIdl(sb_impl_idl.OvnSbApiIdlImpl, Backend): return None, None def get_network_vlan_tag_by_network_name(self, network_name): + tags = [] cmd = self.db_find_rows('Port_Binding', ('type', '=', constants.OVN_LOCALNET_VIF_PORT_TYPE)) for row in cmd.execute(check_error=True): if (row.options and row.options.get('network_name') == network_name): - return row.tag + tags.append(row.tag[0]) + return tags def is_router_gateway_on_chassis(self, datapath, chassis): port_info = self.get_ports_on_datapath( diff --git a/ovn_bgp_agent/drivers/openstack/utils/wire.py b/ovn_bgp_agent/drivers/openstack/utils/wire.py index 64343c78..d8043eea 100644 --- a/ovn_bgp_agent/drivers/openstack/utils/wire.py +++ b/ovn_bgp_agent/drivers/openstack/utils/wire.py @@ -45,16 +45,15 @@ def _ensure_base_wiring_config_underlay(idl, bridge_mappings, routing_tables): linux_net.ensure_routing_table_for_bridge( routing_tables, bridge, CONF.bgp_vrf_table_id) - vlan_tag = idl.get_network_vlan_tag_by_network_name(network) + vlan_tags = idl.get_network_vlan_tag_by_network_name(network) - if vlan_tag: - vlan_tag = vlan_tag[0] + for vlan_tag in vlan_tags: linux_net.ensure_vlan_device_for_network(bridge, vlan_tag) linux_net.ensure_arp_ndp_enabled_for_bridge(bridge, bridge_index, - vlan_tag) + vlan_tags) if not flows_info.get(bridge): with pyroute2.NDB() as ndb: flows_info[bridge] = { diff --git a/ovn_bgp_agent/tests/unit/drivers/openstack/test_nb_ovn_bgp_driver.py b/ovn_bgp_agent/tests/unit/drivers/openstack/test_nb_ovn_bgp_driver.py index 60dc64bc..c0857813 100644 --- a/ovn_bgp_agent/tests/unit/drivers/openstack/test_nb_ovn_bgp_driver.py +++ b/ovn_bgp_agent/tests/unit/drivers/openstack/test_nb_ovn_bgp_driver.py @@ -160,8 +160,8 @@ class TestNBOVNBGPDriver(test_base.TestCase): mock_routing_bridge.assert_has_calls(expected_calls) expected_calls = [mock.call('bridge0', 10), mock.call('bridge1', 11)] mock_ensure_vlan_network.assert_has_calls(expected_calls) - expected_calls = [mock.call('bridge0', 1, 10), - mock.call('bridge1', 2, 11)] + expected_calls = [mock.call('bridge0', 1, [10]), + mock.call('bridge1', 2, [11])] mock_ensure_arp.assert_has_calls(expected_calls) expected_calls = [ mock.call('bridge0'), mock.call('bridge1')] diff --git a/ovn_bgp_agent/tests/unit/drivers/openstack/test_ovn_bgp_driver.py b/ovn_bgp_agent/tests/unit/drivers/openstack/test_ovn_bgp_driver.py index e19d6c21..95a3d01e 100644 --- a/ovn_bgp_agent/tests/unit/drivers/openstack/test_ovn_bgp_driver.py +++ b/ovn_bgp_agent/tests/unit/drivers/openstack/test_ovn_bgp_driver.py @@ -144,8 +144,8 @@ class TestOVNBGPDriver(test_base.TestCase): self.bgp_driver.sync() - expected_calls = [mock.call('bridge0', 1, 10), - mock.call('bridge1', 2, 11)] + expected_calls = [mock.call('bridge0', 1, [10]), + mock.call('bridge1', 2, [11])] mock_ensure_arp.assert_has_calls(expected_calls) expected_calls = [mock.call({}, 'bridge0', CONF.bgp_vrf_table_id), diff --git a/ovn_bgp_agent/tests/unit/drivers/openstack/utils/test_ovn.py b/ovn_bgp_agent/tests/unit/drivers/openstack/utils/test_ovn.py index 4aa3dd14..be6580a6 100644 --- a/ovn_bgp_agent/tests/unit/drivers/openstack/utils/test_ovn.py +++ b/ovn_bgp_agent/tests/unit/drivers/openstack/utils/test_ovn.py @@ -42,7 +42,7 @@ class TestOvsdbNbOvnIdl(test_base.TestCase): def test_get_network_vlan_tag_by_network_name(self): network_name = 'net0' - tag = 123 + tag = [123] lsp = fakes.create_object({'name': 'port-0', 'options': {'network_name': network_name}, 'tag': tag}) @@ -325,7 +325,7 @@ class TestOvsdbSbOvnIdl(test_base.TestCase): def _test_get_network_vlan_tag_by_network_name(self, match=True): network = 'public' if match else 'spongebob' - tag = 1001 + tag = [1001] row = fakes.create_object({ 'options': {'network_name': 'public'}, 'tag': tag}) @@ -335,7 +335,7 @@ class TestOvsdbSbOvnIdl(test_base.TestCase): if match: self.assertEqual(tag, ret) else: - self.assertIsNone(ret) + self.assertEqual([], ret) def test_get_network_vlan_tag_by_network_name(self): self._test_get_network_vlan_tag_by_network_name() diff --git a/tox.ini b/tox.ini index 6501eb59..810e902a 100644 --- a/tox.ini +++ b/tox.ini @@ -36,7 +36,7 @@ commands = coverage combine coverage html -d cover --omit='*tests*' coverage xml -o cover/coverage.xml --omit='*tests*' - coverage report --fail-under=87 --skip-covered --omit='*tests*' + coverage report --fail-under=92 --skip-covered --omit='*tests*' [testenv:docs] deps = -r{toxinidir}/doc/requirements.txt