aboutsummaryrefslogtreecommitdiffstats
path: root/src/libcharon/plugins/load_tester/load_tester_control.c
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2012-10-19 10:57:27 +0200
committerMartin Willi <martin@revosec.ch>2012-11-29 10:22:51 +0100
commit93ceaa7e64a78c849c3b594c7861382f75cc24a4 (patch)
tree6553025b0f30fc0fb26c18f45be4658b22dc0506 /src/libcharon/plugins/load_tester/load_tester_control.c
parentb7acd90763f9fdc94b4be8952e872342ab7637bc (diff)
downloadstrongswan-93ceaa7e64a78c849c3b594c7861382f75cc24a4.tar.bz2
strongswan-93ceaa7e64a78c849c3b594c7861382f75cc24a4.tar.xz
Initiate each load-testing connection with a fresh peer config
Diffstat (limited to 'src/libcharon/plugins/load_tester/load_tester_control.c')
-rw-r--r--src/libcharon/plugins/load_tester/load_tester_control.c42
1 files changed, 23 insertions, 19 deletions
diff --git a/src/libcharon/plugins/load_tester/load_tester_control.c b/src/libcharon/plugins/load_tester/load_tester_control.c
index 51069e36a..d0e56176d 100644
--- a/src/libcharon/plugins/load_tester/load_tester_control.c
+++ b/src/libcharon/plugins/load_tester/load_tester_control.c
@@ -198,7 +198,7 @@ static job_requeue_t initiate(FILE *stream)
enumerator_t *enumerator;
peer_cfg_t *peer_cfg;
child_cfg_t *child_cfg;
- u_int i, count;
+ u_int i, count, failed = 0;
char buf[16] = "";
fflush(stream);
@@ -211,20 +211,6 @@ static job_requeue_t initiate(FILE *stream)
return JOB_REQUEUE_NONE;
}
- peer_cfg = charon->backends->get_peer_cfg_by_name(charon->backends,
- "load-test");
- if (!peer_cfg)
- {
- return JOB_REQUEUE_NONE;
- }
- enumerator = peer_cfg->create_child_cfg_enumerator(peer_cfg);
- if (!enumerator->enumerate(enumerator, &child_cfg))
- {
- enumerator->destroy(enumerator);
- return JOB_REQUEUE_NONE;
- }
- enumerator->destroy(enumerator);
-
INIT(listener,
.listener = {
.ike_state_change = _ike_state_change,
@@ -240,9 +226,28 @@ static job_requeue_t initiate(FILE *stream)
for (i = 0; i < count; i++)
{
+ peer_cfg = charon->backends->get_peer_cfg_by_name(charon->backends,
+ "load-test");
+ if (!peer_cfg)
+ {
+ failed++;
+ fprintf(stream, "!");
+ continue;
+ }
+ enumerator = peer_cfg->create_child_cfg_enumerator(peer_cfg);
+ if (!enumerator->enumerate(enumerator, &child_cfg))
+ {
+ enumerator->destroy(enumerator);
+ peer_cfg->destroy(peer_cfg);
+ failed++;
+ fprintf(stream, "!");
+ continue;
+ }
+ enumerator->destroy(enumerator);
+
switch (charon->controller->initiate(charon->controller,
- peer_cfg->get_ref(peer_cfg), child_cfg->get_ref(child_cfg),
- (void*)initiate_cb, listener, 0))
+ peer_cfg, child_cfg->get_ref(child_cfg),
+ (void*)initiate_cb, listener, 0))
{
case NEED_MORE:
/* Callback returns FALSE once it got track of this IKE_SA.
@@ -258,7 +263,7 @@ static job_requeue_t initiate(FILE *stream)
}
listener->mutex->lock(listener->mutex);
- while (listener->completed->get_count(listener->completed) < count)
+ while (listener->completed->get_count(listener->completed) < count - failed)
{
listener->condvar->wait(listener->condvar, listener->mutex);
}
@@ -272,7 +277,6 @@ static job_requeue_t initiate(FILE *stream)
listener->condvar->destroy(listener->condvar);
free(listener);
- peer_cfg->destroy(peer_cfg);
fprintf(stream, "\n");
return JOB_REQUEUE_NONE;