u_int shutdown_on;
};
-METHOD(listener_t, ike_state_change, bool,
- private_load_tester_listener_t *this, ike_sa_t *ike_sa, ike_sa_state_t state)
+METHOD(listener_t, ike_updown, bool,
+ 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 (id->is_initiator(id))
{
- if (this->shutdown_on == ++this->established)
+ if (this->shutdown_on == this->established)
{
DBG1(DBG_CFG, "load-test complete, raising SIGTERM");
kill(0, SIGTERM);
}
}
}
+ else
+ {
+ this->established--;
+ }
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,
private_load_tester_listener_t *this)
{
INIT(this,
.public = {
.listener = {
- .ike_state_change = _ike_state_change,
+ .ike_updown = _ike_updown,
},
+ .get_established = _get_established,
.destroy = _destroy,
},
.delete_after_established = lib->settings->get_bool(lib->settings,
int delay;
/**
+ * Throttle initiation if half-open IKE_SA count reached
+ */
+ int init_limit;
+
+ /**
* mutex to lock running field
*/
mutex_t *mutex;
child_cfg_t *child_cfg = NULL;
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,
"load-test");
if (!peer_cfg)
"charon.plugins.load-tester.iterations", 1),
.initiators = lib->settings->get_int(lib->settings,
"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),
.condvar = condvar_create(CONDVAR_TYPE_DEFAULT),
.config = load_tester_config_create(),