Merge "Update arp entry of snat port on qrouter ns"

This commit is contained in:
Zuul 2021-07-05 11:21:53 +00:00 committed by Gerrit Code Review
commit bf7a6061a0
3 changed files with 21 additions and 1 deletions

View File

@ -336,6 +336,19 @@ class DvrLocalRouter(dvr_router_base.DvrRouterBase):
'add',
device=device,
device_exists=device_exists)
# subnet_ports does not have snat port if the port is still unbound
# by the time this function is called. So ensure to add arp entry
# for snat port if port details are updated in router info.
for p in self.get_snat_interfaces():
for fixed_ip in p['fixed_ips']:
if fixed_ip['subnet_id'] == subnet_id:
self._update_arp_entry(fixed_ip['ip_address'],
p['mac_address'],
subnet_id,
'add',
device=device,
device_exists=device_exists)
self._process_arp_cache_for_internal_port(subnet_id)
@staticmethod

View File

@ -1271,6 +1271,7 @@ class TestBasicRouterOperations(BasicRouterOperationsFramework):
router[lib_constants.INTERFACE_KEY][0])
ri.router['distributed'] = True
ri.router['_snat_router_interfaces'] = [{
'mac_address': 'fa:16:3e:80:8d:80',
'fixed_ips': [{'subnet_id': subnet_id,
'ip_address': '1.2.3.4'}]}]
ri.router['gw_port_host'] = None

View File

@ -545,6 +545,11 @@ class TestDvrRouterOperations(base.BaseTestCase):
ri = dvr_router.DvrLocalRouter(HOSTNAME, **self.ri_kwargs)
ports = ri.router.get(lib_constants.INTERFACE_KEY, [])
subnet_id = l3_test_common.get_subnet_id(ports[0])
ri.router['_snat_router_interfaces'] = [{
'mac_address': 'fa:16:3e:80:8d:80',
'fixed_ips': [{'subnet_id': subnet_id,
'ip_address': '1.2.3.10'}]}]
test_ports = [{'mac_address': '00:11:22:33:44:55',
'device_owner': lib_constants.DEVICE_OWNER_DHCP,
'fixed_ips': [{'ip_address': '1.2.3.4',
@ -576,7 +581,8 @@ class TestDvrRouterOperations(base.BaseTestCase):
self.assertEqual(1, parp.call_count)
self.mock_ip_dev.neigh.add.assert_has_calls([
mock.call('1.2.3.4', '00:11:22:33:44:55'),
mock.call('10.20.30.40', '00:11:22:33:44:55')])
mock.call('10.20.30.40', '00:11:22:33:44:55'),
mock.call('1.2.3.10', 'fa:16:3e:80:8d:80')])
# Test negative case
router['distributed'] = False