From 93ceaa7e64a78c849c3b594c7861382f75cc24a4 Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Fri, 19 Oct 2012 10:57:27 +0200 Subject: Initiate each load-testing connection with a fresh peer config --- .../plugins/load_tester/load_tester_control.c | 42 ++++++++++++---------- 1 file changed, 23 insertions(+), 19 deletions(-) (limited to 'src/libcharon/plugins/load_tester/load_tester_control.c') 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; -- cgit v1.2.3