]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
Added charon.send/receive_delay options to simulate different RTTs
authorMartin Willi <martin@revosec.ch>
Wed, 3 Mar 2010 14:57:06 +0000 (15:57 +0100)
committerMartin Willi <martin@revosec.ch>
Wed, 3 Mar 2010 14:59:29 +0000 (15:59 +0100)
src/charon/network/receiver.c
src/charon/network/sender.c

index 39d1f447a0e4a664de6a467293e698b049ce1108..df897021a996ff9b9558af211768f8b283b2aa61 100644 (file)
@@ -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)
        {
index 13da140d65df6a8b5c711404a39b76160e9117ea..c18f1138e5fff5d3cbf65758222763e31a2a90f0 100644 (file)
@@ -14,6 +14,7 @@
  * for more details.
  */
 
+#include <unistd.h>
 #include <stdlib.h>
 
 #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);