instance = self._get_keepalived_instance()
# Filter out all of the old routes while keeping only the default route
+ default_gw = ('::/0', '0.0.0.0/0')
instance.virtual_routes = [route for route in instance.virtual_routes
- if route.destination == '0.0.0.0/0']
+ if route.destination in default_gw]
for route in new_routes:
instance.virtual_routes.append(keepalived.KeepalivedVirtualRoute(
route['destination'],
gw_ip = ex_gw_port['subnet']['gateway_ip']
if gw_ip:
# TODO(Carl) This is repeated everywhere. A method would be nice.
+ default_gw = ('0.0.0.0/0' if netaddr.IPAddress(gw_ip).version == 4
+ else '::/0')
instance = self._get_keepalived_instance()
instance.virtual_routes = (
[route for route in instance.virtual_routes
- if route.destination != '0.0.0.0/0'])
+ if route.destination != default_gw])
instance.virtual_routes.append(
keepalived.KeepalivedVirtualRoute(
- '0.0.0.0/0', gw_ip, interface_name))
+ default_gw, gw_ip, interface_name))
def _get_ipv6_lladdr(self, mac_addr):
return '%s/64' % netaddr.EUI(mac_addr).ipv6_link_local()
return agent
- def generate_router_info(self, enable_ha):
- return test_l3_agent.prepare_router_data(enable_snat=True,
- enable_floating_ip=True,
+ def generate_router_info(self, enable_ha, ip_version=4, extra_routes=True,
+ enable_fip=True, enable_snat=True):
+ if ip_version == 6:
+ enable_snat = False
+ enable_fip = False
+ extra_routes = False
+
+ return test_l3_agent.prepare_router_data(ip_version=ip_version,
+ enable_snat=enable_snat,
+ enable_floating_ip=enable_fip,
enable_ha=enable_ha,
- extra_routes=True)
+ extra_routes=extra_routes)
def manage_router(self, agent, router):
self.addCleanup(self._delete_router, agent, router['id'])
with testtools.ExpectedException(RuntimeError):
netcat.test_connectivity()
+ def test_ipv6_ha_router_lifecycle(self):
+ self._router_lifecycle(enable_ha=True, ip_version=6)
+
def test_keepalived_configuration(self):
router_info = self.generate_router_info(enable_ha=True)
router = self.manage_router(self.agent, router_info)
(new_external_device_ip, external_device_name),
new_config)
- def _router_lifecycle(self, enable_ha):
- router_info = self.generate_router_info(enable_ha)
+ def _router_lifecycle(self, enable_ha, ip_version=4):
+ router_info = self.generate_router_info(enable_ha, ip_version)
router = self.manage_router(self.agent, router_info)
if enable_ha:
self.assertTrue(self._metadata_proxy_exists(self.agent.conf, router))
self._assert_internal_devices(router)
self._assert_external_device(router)
- self._assert_gateway(router)
- self.assertTrue(self._floating_ips_configured(router))
- self._assert_snat_chains(router)
- self._assert_floating_ip_chains(router)
+ if ip_version == 4:
+ # Note(SridharG): enable the assert_gateway for IPv6 once
+ # keepalived on Ubuntu14.04 (i.e., check-neutron-dsvm-functional
+ # platform) is updated to 1.2.10 (or above).
+ # For more details: https://review.openstack.org/#/c/151284/
+ self._assert_gateway(router)
+ self.assertTrue(self._floating_ips_configured(router))
+ self._assert_snat_chains(router)
+ self._assert_floating_ip_chains(router)
+ self._assert_extra_routes(router)
self._assert_metadata_chains(router)
- self._assert_extra_routes(router)
if enable_ha:
self._assert_ha_device(router)