This fixed the problem that a gateway ip conntrack state not cleared
when user clears a router external gateway.
Change-Id: I77f22d9504430259b01366e6296a99ba1cd6a046
Closes-Bug: #
1488730
interface_name)
def delete(self, agent):
+ super(HaRouter, self).delete(agent)
self.destroy_state_change_monitor(self.process_monitor)
self.ha_network_removed()
self.disable_keepalived()
- super(HaRouter, self).delete(agent)
def process(self, agent):
super(HaRouter, self).process(agent)
def remove_floating_ip(self, device, ip_cidr):
device.delete_addr_and_conntrack_state(ip_cidr)
+ def remove_external_gateway_ip(self, device, ip_cidr):
+ device.delete_addr_and_conntrack_state(ip_cidr)
+
def get_router_cidrs(self, device):
return set([addr['cidr'] for addr in device.addr.list()])
def external_gateway_removed(self, ex_gw_port, interface_name):
LOG.debug("External gateway removed: port(%s), interface(%s)",
ex_gw_port, interface_name)
+ device = ip_lib.IPDevice(interface_name, namespace=self.ns_name)
+ for ip_addr in ex_gw_port['fixed_ips']:
+ self.remove_external_gateway_ip(device,
+ common_utils.ip_to_cidr(
+ ip_addr['ip_address'],
+ ip_addr['prefixlen']))
self.driver.unplug(interface_name,
bridge=self.agent_conf.external_network_bridge,
namespace=self.ns_name,
This terminates any active connections through an IP.
- cidr: the IP address for which state should be removed. This can be
- passed as a string with or without /NN. A netaddr.IPAddress or
- netaddr.Network representing the IP address can also be passed.
+ :param cidr: the IP address for which state should be removed.
+ This can be passed as a string with or without /NN.
+ A netaddr.IPAddress or netaddr.Network representing the IP address
+ can also be passed.
"""
self.addr.delete(cidr)
device.delete_addr_and_conntrack_state.assert_called_once_with(cidr)
+ def test_remove_external_gateway_ip(self):
+ ri = self._create_router(mock.MagicMock())
+ device = mock.Mock()
+ cidr = '172.16.0.0/24'
+
+ ri.remove_external_gateway_ip(device, cidr)
+
+ device.delete_addr_and_conntrack_state.assert_called_once_with(cidr)
+
@mock.patch.object(ip_lib, 'send_ip_addr_adv_notif')
class TestAddFloatingIpWithMockGarp(BasicRouterTestCaseFramework):