aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2012-11-12 11:14:03 +0100
committerMartin Willi <martin@revosec.ch>2012-11-29 10:22:51 +0100
commitd88597f0dd0df67e4096e917e118998d9066b770 (patch)
treeeac1f3b4dc6dc4f418ad256b44cb7a784d3db558
parentb185cdd16d1d7553fabf7792928df31ad9eea427 (diff)
downloadstrongswan-d88597f0dd0df67e4096e917e118998d9066b770.tar.bz2
strongswan-d88597f0dd0df67e4096e917e118998d9066b770.tar.xz
Don't wait while removing external IPs used for load testing
-rw-r--r--src/libcharon/plugins/load_tester/load_tester_config.c2
-rw-r--r--src/libcharon/sa/child_sa.c2
-rw-r--r--src/libcharon/sa/ike_sa.c5
-rw-r--r--src/libhydra/kernel/kernel_interface.c4
-rw-r--r--src/libhydra/kernel/kernel_interface.h4
-rw-r--r--src/libhydra/kernel/kernel_net.h4
-rw-r--r--src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c5
-rw-r--r--src/libhydra/plugins/kernel_pfroute/kernel_pfroute_net.c3
8 files changed, 18 insertions, 11 deletions
diff --git a/src/libcharon/plugins/load_tester/load_tester_config.c b/src/libcharon/plugins/load_tester/load_tester_config.c
index 7dc90c1f0..6024dd948 100644
--- a/src/libcharon/plugins/load_tester/load_tester_config.c
+++ b/src/libcharon/plugins/load_tester/load_tester_config.c
@@ -539,7 +539,7 @@ METHOD(load_tester_config_t, delete_ip, void,
if (pool->release_address(pool, ip, found))
{
hydra->kernel_interface->del_ip(hydra->kernel_interface,
- ip, this->prefix);
+ ip, this->prefix, FALSE);
}
found->destroy(found);
break;
diff --git a/src/libcharon/sa/child_sa.c b/src/libcharon/sa/child_sa.c
index 7083eb436..f02d836cf 100644
--- a/src/libcharon/sa/child_sa.c
+++ b/src/libcharon/sa/child_sa.c
@@ -829,7 +829,7 @@ static void reinstall_vip(host_t *vip, host_t *me)
if (hydra->kernel_interface->get_interface(hydra->kernel_interface,
me, &iface))
{
- hydra->kernel_interface->del_ip(hydra->kernel_interface, vip, -1);
+ hydra->kernel_interface->del_ip(hydra->kernel_interface, vip, -1, TRUE);
hydra->kernel_interface->add_ip(hydra->kernel_interface, vip, -1, iface);
free(iface);
}
diff --git a/src/libcharon/sa/ike_sa.c b/src/libcharon/sa/ike_sa.c
index 858574567..48621111d 100644
--- a/src/libcharon/sa/ike_sa.c
+++ b/src/libcharon/sa/ike_sa.c
@@ -780,7 +780,8 @@ METHOD(ike_sa_t, clear_virtual_ips, void,
{
if (local)
{
- hydra->kernel_interface->del_ip(hydra->kernel_interface, vip, -1);
+ hydra->kernel_interface->del_ip(hydra->kernel_interface,
+ vip, -1, TRUE);
}
vip->destroy(vip);
}
@@ -2087,7 +2088,7 @@ METHOD(ike_sa_t, destroy, void,
while (this->my_vips->remove_last(this->my_vips, (void**)&vip) == SUCCESS)
{
- hydra->kernel_interface->del_ip(hydra->kernel_interface, vip, -1);
+ hydra->kernel_interface->del_ip(hydra->kernel_interface, vip, -1, TRUE);
vip->destroy(vip);
}
this->my_vips->destroy(this->my_vips);
diff --git a/src/libhydra/kernel/kernel_interface.c b/src/libhydra/kernel/kernel_interface.c
index 733aced57..8948e0561 100644
--- a/src/libhydra/kernel/kernel_interface.c
+++ b/src/libhydra/kernel/kernel_interface.c
@@ -323,13 +323,13 @@ METHOD(kernel_interface_t, add_ip, status_t,
}
METHOD(kernel_interface_t, del_ip, status_t,
- private_kernel_interface_t *this, host_t *virtual_ip, int prefix)
+ private_kernel_interface_t *this, host_t *virtual_ip, int prefix, bool wait)
{
if (!this->net)
{
return NOT_SUPPORTED;
}
- return this->net->del_ip(this->net, virtual_ip, prefix);
+ return this->net->del_ip(this->net, virtual_ip, prefix, wait);
}
METHOD(kernel_interface_t, add_route, status_t,
diff --git a/src/libhydra/kernel/kernel_interface.h b/src/libhydra/kernel/kernel_interface.h
index a5ee0b55b..8d8ef2e83 100644
--- a/src/libhydra/kernel/kernel_interface.h
+++ b/src/libhydra/kernel/kernel_interface.h
@@ -349,9 +349,11 @@ struct kernel_interface_t {
*
* @param virtual_ip virtual ip address to assign
* @param prefix prefix length of the IP to uninstall, -1 for auto
+ * @param wait TRUE to wait untily IP is gone
* @return SUCCESS if operation completed
*/
- status_t (*del_ip) (kernel_interface_t *this, host_t *virtual_ip, int prefix);
+ status_t (*del_ip) (kernel_interface_t *this, host_t *virtual_ip,
+ int prefix, bool wait);
/**
* Add a route.
diff --git a/src/libhydra/kernel/kernel_net.h b/src/libhydra/kernel/kernel_net.h
index a6b7686b0..6a3b2cee7 100644
--- a/src/libhydra/kernel/kernel_net.h
+++ b/src/libhydra/kernel/kernel_net.h
@@ -128,9 +128,11 @@ struct kernel_net_t {
*
* @param virtual_ip virtual ip address to assign
* @param prefix prefix length of the IP to uninstall, -1 for auto
+ * @param wait TRUE to wait until IP is gone
* @return SUCCESS if operation completed
*/
- status_t (*del_ip) (kernel_net_t *this, host_t *virtual_ip, int prefix);
+ status_t (*del_ip) (kernel_net_t *this, host_t *virtual_ip, int prefix,
+ bool wait);
/**
* Add a route.
diff --git a/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c b/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c
index c00fa8800..23a354dba 100644
--- a/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c
+++ b/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c
@@ -1758,7 +1758,8 @@ METHOD(kernel_net_t, add_ip, status_t,
}
METHOD(kernel_net_t, del_ip, status_t,
- private_kernel_netlink_net_t *this, host_t *virtual_ip, int prefix)
+ private_kernel_netlink_net_t *this, host_t *virtual_ip, int prefix,
+ bool wait)
{
addr_map_entry_t *entry, lookup = {
.ip = virtual_ip,
@@ -1798,7 +1799,7 @@ METHOD(kernel_net_t, del_ip, status_t,
entry->addr->installed = FALSE;
status = manage_ipaddr(this, RTM_DELADDR, 0, entry->iface->ifindex,
virtual_ip, prefix);
- if (status == SUCCESS)
+ if (status == SUCCESS && wait)
{ /* wait until the address is really gone */
while (is_known_vip(this, virtual_ip))
{
diff --git a/src/libhydra/plugins/kernel_pfroute/kernel_pfroute_net.c b/src/libhydra/plugins/kernel_pfroute/kernel_pfroute_net.c
index 7311ded0f..7ac3e8a3c 100644
--- a/src/libhydra/plugins/kernel_pfroute/kernel_pfroute_net.c
+++ b/src/libhydra/plugins/kernel_pfroute/kernel_pfroute_net.c
@@ -647,7 +647,8 @@ METHOD(kernel_net_t, add_ip, status_t,
}
METHOD(kernel_net_t, del_ip, status_t,
- private_kernel_pfroute_net_t *this, host_t *virtual_ip, int prefix)
+ private_kernel_pfroute_net_t *this, host_t *virtual_ip, int prefix,
+ bool wait)
{
return FAILED;
}