Added a load tester strongswan.conf option to throttle initiation
This commit is contained in:
@@ -47,12 +47,15 @@ struct private_load_tester_listener_t {
|
|||||||
u_int shutdown_on;
|
u_int shutdown_on;
|
||||||
};
|
};
|
||||||
|
|
||||||
METHOD(listener_t, ike_state_change, bool,
|
METHOD(listener_t, ike_updown, bool,
|
||||||
private_load_tester_listener_t *this, ike_sa_t *ike_sa, ike_sa_state_t state)
|
private_load_tester_listener_t *this, ike_sa_t *ike_sa, bool up)
|
||||||
{
|
{
|
||||||
if (state == IKE_ESTABLISHED)
|
if (up)
|
||||||
{
|
{
|
||||||
ike_sa_id_t *id = ike_sa->get_id(ike_sa);
|
ike_sa_id_t *id;
|
||||||
|
|
||||||
|
this->established++;
|
||||||
|
id = ike_sa->get_id(ike_sa);
|
||||||
|
|
||||||
if (this->delete_after_established)
|
if (this->delete_after_established)
|
||||||
{
|
{
|
||||||
@@ -62,16 +65,26 @@ METHOD(listener_t, ike_state_change, bool,
|
|||||||
|
|
||||||
if (id->is_initiator(id))
|
if (id->is_initiator(id))
|
||||||
{
|
{
|
||||||
if (this->shutdown_on == ++this->established)
|
if (this->shutdown_on == this->established)
|
||||||
{
|
{
|
||||||
DBG1(DBG_CFG, "load-test complete, raising SIGTERM");
|
DBG1(DBG_CFG, "load-test complete, raising SIGTERM");
|
||||||
kill(0, SIGTERM);
|
kill(0, SIGTERM);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this->established--;
|
||||||
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
METHOD(load_tester_listener_t, get_established, u_int,
|
||||||
|
private_load_tester_listener_t *this)
|
||||||
|
{
|
||||||
|
return this->established;
|
||||||
|
}
|
||||||
|
|
||||||
METHOD(load_tester_listener_t, destroy, void,
|
METHOD(load_tester_listener_t, destroy, void,
|
||||||
private_load_tester_listener_t *this)
|
private_load_tester_listener_t *this)
|
||||||
{
|
{
|
||||||
@@ -85,8 +98,9 @@ load_tester_listener_t *load_tester_listener_create(u_int shutdown_on)
|
|||||||
INIT(this,
|
INIT(this,
|
||||||
.public = {
|
.public = {
|
||||||
.listener = {
|
.listener = {
|
||||||
.ike_state_change = _ike_state_change,
|
.ike_updown = _ike_updown,
|
||||||
},
|
},
|
||||||
|
.get_established = _get_established,
|
||||||
.destroy = _destroy,
|
.destroy = _destroy,
|
||||||
},
|
},
|
||||||
.delete_after_established = lib->settings->get_bool(lib->settings,
|
.delete_after_established = lib->settings->get_bool(lib->settings,
|
||||||
|
|||||||
@@ -35,6 +35,13 @@ struct load_tester_listener_t {
|
|||||||
*/
|
*/
|
||||||
listener_t listener;
|
listener_t listener;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the number of established IKE_SAs.
|
||||||
|
*
|
||||||
|
* @return number of SAs currently established
|
||||||
|
*/
|
||||||
|
u_int (*get_established)(load_tester_listener_t *this);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Destroy the backend.
|
* Destroy the backend.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -77,6 +77,11 @@ struct private_load_tester_plugin_t {
|
|||||||
*/
|
*/
|
||||||
int delay;
|
int delay;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Throttle initiation if half-open IKE_SA count reached
|
||||||
|
*/
|
||||||
|
int init_limit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* mutex to lock running field
|
* mutex to lock running field
|
||||||
*/
|
*/
|
||||||
@@ -113,6 +118,23 @@ static job_requeue_t do_load_test(private_load_tester_plugin_t *this)
|
|||||||
child_cfg_t *child_cfg = NULL;
|
child_cfg_t *child_cfg = NULL;
|
||||||
enumerator_t *enumerator;
|
enumerator_t *enumerator;
|
||||||
|
|
||||||
|
if (this->init_limit)
|
||||||
|
{
|
||||||
|
while ((charon->ike_sa_manager->get_count(charon->ike_sa_manager) -
|
||||||
|
this->listener->get_established(this->listener)) >
|
||||||
|
this->init_limit)
|
||||||
|
{
|
||||||
|
if (s)
|
||||||
|
{
|
||||||
|
sleep(s);
|
||||||
|
}
|
||||||
|
if (ms)
|
||||||
|
{
|
||||||
|
usleep(ms * 1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
peer_cfg = charon->backends->get_peer_cfg_by_name(charon->backends,
|
peer_cfg = charon->backends->get_peer_cfg_by_name(charon->backends,
|
||||||
"load-test");
|
"load-test");
|
||||||
if (!peer_cfg)
|
if (!peer_cfg)
|
||||||
@@ -206,6 +228,8 @@ plugin_t *load_tester_plugin_create()
|
|||||||
"charon.plugins.load-tester.iterations", 1),
|
"charon.plugins.load-tester.iterations", 1),
|
||||||
.initiators = lib->settings->get_int(lib->settings,
|
.initiators = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.load-tester.initiators", 0),
|
"charon.plugins.load-tester.initiators", 0),
|
||||||
|
.init_limit = lib->settings->get_int(lib->settings,
|
||||||
|
"charon.plugins.load-tester.init_limit", 0),
|
||||||
.mutex = mutex_create(MUTEX_TYPE_DEFAULT),
|
.mutex = mutex_create(MUTEX_TYPE_DEFAULT),
|
||||||
.condvar = condvar_create(CONDVAR_TYPE_DEFAULT),
|
.condvar = condvar_create(CONDVAR_TYPE_DEFAULT),
|
||||||
.config = load_tester_config_create(),
|
.config = load_tester_config_create(),
|
||||||
|
|||||||
Reference in New Issue
Block a user