aboutsummaryrefslogtreecommitdiffstats
path: root/src/libcharon/plugins/load_tester/load_tester_config.c
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2012-11-12 10:06:09 +0100
committerMartin Willi <martin@revosec.ch>2012-11-29 10:22:51 +0100
commitb185cdd16d1d7553fabf7792928df31ad9eea427 (patch)
tree3b2d62992ad1d2051d770495722b7b75b30e5b23 /src/libcharon/plugins/load_tester/load_tester_config.c
parent0a54d3e1a19915f81dea1b942e88e5d637214e0e (diff)
downloadstrongswan-b185cdd16d1d7553fabf7792928df31ad9eea427.tar.bz2
strongswan-b185cdd16d1d7553fabf7792928df31ad9eea427.tar.xz
Install virtual IPs via interface name, and use an interface lookup where required
Diffstat (limited to 'src/libcharon/plugins/load_tester/load_tester_config.c')
-rw-r--r--src/libcharon/plugins/load_tester/load_tester_config.c42
1 files changed, 13 insertions, 29 deletions
diff --git a/src/libcharon/plugins/load_tester/load_tester_config.c b/src/libcharon/plugins/load_tester/load_tester_config.c
index 1d678f1e5..7dc90c1f0 100644
--- a/src/libcharon/plugins/load_tester/load_tester_config.c
+++ b/src/libcharon/plugins/load_tester/load_tester_config.c
@@ -342,58 +342,42 @@ static void add_ts(char *string, child_cfg_t *cfg, bool local)
*/
static host_t *allocate_addr(private_load_tester_config_t *this, uint num)
{
- enumerator_t *pools, *addrs;
+ enumerator_t *enumerator;
mem_pool_t *pool;
- host_t *addr, *iface = NULL, *found = NULL, *requested;
+ host_t *found = NULL, *requested;
identification_t *id;
- char *name, buf[32];
+ char *iface = NULL, buf[32];
requested = host_create_any(AF_INET);
snprintf(buf, sizeof(buf), "ext-%d", num);
id = identification_create_from_string(buf);
- pools = this->pools->create_enumerator(this->pools);
- while (!found && pools->enumerate(pools, &pool))
+ enumerator = this->pools->create_enumerator(this->pools);
+ while (enumerator->enumerate(enumerator, &pool))
{
- addrs = hydra->kernel_interface->create_address_enumerator(
- hydra->kernel_interface, ADDR_TYPE_REGULAR);
- while (!found && addrs->enumerate(addrs, &addr))
+ found = pool->acquire_address(pool, id, requested, MEM_POOL_NEW);
+ if (found)
{
- if (hydra->kernel_interface->get_interface(hydra->kernel_interface,
- addr, &name))
- {
- if (streq(pool->get_name(pool), name))
- {
- found = pool->acquire_address(pool, id, requested,
- MEM_POOL_NEW);
- if (found)
- {
- iface = addr->clone(addr);
- }
- }
- free(name);
- }
+ iface = (char*)pool->get_name(pool);
+ break;
}
- addrs->destroy(addrs);
}
- pools->destroy(pools);
+ enumerator->destroy(enumerator);
requested->destroy(requested);
id->destroy(id);
if (!found)
{
- DBG1(DBG_CFG, "no interface found to install load-tester IP");
+ DBG1(DBG_CFG, "no address found to install as load-tester external IP");
return NULL;
}
if (hydra->kernel_interface->add_ip(hydra->kernel_interface,
found, this->prefix, iface) != SUCCESS)
{
- DBG1(DBG_CFG, "installing load-tester IP %H failed", found);
- iface->destroy(iface);
+ DBG1(DBG_CFG, "installing load-tester IP %H on %s failed", found, iface);
found->destroy(found);
return NULL;
}
- DBG1(DBG_CFG, "installed load-tester IP %H", found);
- iface->destroy(iface);
+ DBG1(DBG_CFG, "installed load-tester IP %H on %s", found, iface);
return found;
}