From: Martin Willi Date: Wed, 3 Mar 2010 14:57:06 +0000 (+0100) Subject: Added charon.send/receive_delay options to simulate different RTTs X-Git-Tag: 4.4.0~256 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a5a4b6c9d19e2660249452dcdc35b957ee7bf4a7;p=thirdparty%2Fstrongswan.git Added charon.send/receive_delay options to simulate different RTTs --- diff --git a/src/charon/network/receiver.c b/src/charon/network/receiver.c index 39d1f447a0..df897021a9 100644 --- a/src/charon/network/receiver.c +++ b/src/charon/network/receiver.c @@ -99,6 +99,11 @@ struct private_receiver_t { * how many half open IKE_SAs per peer before blocking */ u_int32_t block_threshold; + + /** + * Delay for receiving incoming packets, to simulate larger RTT + */ + u_int receive_delay; }; /** @@ -325,7 +330,15 @@ static job_requeue_t receive_packets(private_receiver_t *this) } } job = (job_t*)process_message_job_create(message); - charon->processor->queue_job(charon->processor, job); + if (this->receive_delay) + { + charon->scheduler->schedule_job_ms(charon->scheduler, + job, this->receive_delay); + } + else + { + charon->processor->queue_job(charon->processor, job); + } return JOB_REQUEUE_DIRECT; } @@ -359,6 +372,9 @@ receiver_t *receiver_create() this->block_threshold = lib->settings->get_int(lib->settings, "charon.block_threshold", BLOCK_THRESHOLD_DEFAULT); } + this->receive_delay = lib->settings->get_int(lib->settings, + "charon.receive_delay", 0); + this->hasher = lib->crypto->create_hasher(lib->crypto, HASH_PREFERRED); if (this->hasher == NULL) { diff --git a/src/charon/network/sender.c b/src/charon/network/sender.c index 13da140d65..c18f1138e5 100644 --- a/src/charon/network/sender.c +++ b/src/charon/network/sender.c @@ -14,6 +14,7 @@ * for more details. */ +#include #include #include "sender.h" @@ -61,6 +62,11 @@ struct private_sender_t { * condvar to signal for packets sent */ condvar_t *sent; + + /** + * Delay for sending outgoing packets, to simulate larger RTT + */ + int send_delay; }; METHOD(sender_t, send_, void, @@ -72,6 +78,11 @@ METHOD(sender_t, send_, void, dst = packet->get_destination(packet); DBG1(DBG_NET, "sending packet: from %#H to %#H", src, dst); + if (this->send_delay) + { + usleep(this->send_delay * 1000); + } + this->mutex->lock(this->mutex); this->list->insert_last(this->list, packet); this->got->signal(this->got); @@ -143,6 +154,8 @@ sender_t * sender_create() .sent = condvar_create(CONDVAR_TYPE_DEFAULT), .job = callback_job_create((callback_job_cb_t)send_packets, this, NULL, NULL), + .send_delay = lib->settings->get_int(lib->settings, + "charon.send_delay", 0), ); charon->processor->queue_job(charon->processor, (job_t*)this->job);