diff options
author | Martin Willi <martin@revosec.ch> | 2012-10-19 10:57:27 +0200 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2012-11-29 10:22:51 +0100 |
commit | 93ceaa7e64a78c849c3b594c7861382f75cc24a4 (patch) | |
tree | 6553025b0f30fc0fb26c18f45be4658b22dc0506 /src/libcharon/plugins/load_tester/load_tester_control.c | |
parent | b7acd90763f9fdc94b4be8952e872342ab7637bc (diff) | |
download | strongswan-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.c | 42 |
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; |