aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMartin Willi <martin@strongswan.org>2010-01-11 16:42:12 +0100
committerMartin Willi <martin@strongswan.org>2010-01-11 16:42:12 +0100
commitbc6ff2fc99995f707e435eaf8c08d7491bfa1c42 (patch)
tree4a80a42361bda7c60179a0b754db62bdf46ba6e3 /src
parent527f7f9b1cebfdd3880ac510a7d7b4f2956b1815 (diff)
downloadstrongswan-bc6ff2fc99995f707e435eaf8c08d7491bfa1c42.tar.bz2
strongswan-bc6ff2fc99995f707e435eaf8c08d7491bfa1c42.tar.xz
Added strongswan.conf options to configure retransmission timeouts
Diffstat (limited to 'src')
-rw-r--r--src/charon/sa/task_manager.c29
-rw-r--r--src/charon/sa/task_manager.h4
2 files changed, 28 insertions, 5 deletions
diff --git a/src/charon/sa/task_manager.c b/src/charon/sa/task_manager.c
index e6b012885..1de0c06f0 100644
--- a/src/charon/sa/task_manager.c
+++ b/src/charon/sa/task_manager.c
@@ -137,6 +137,21 @@ struct private_task_manager_t {
* the task manager has been reset
*/
bool reset;
+
+ /**
+ * Number of times we retransmit messages before giving up
+ */
+ u_int retransmit_tries;
+
+ /**
+ * Retransmission timeout
+ */
+ double retransmit_timeout;
+
+ /**
+ * Base to calculate retransmission timeout
+ */
+ double retransmit_base;
};
/**
@@ -212,10 +227,10 @@ static status_t retransmit(private_task_manager_t *this, u_int32_t message_id)
if (mobike == NULL)
{
- if (this->initiating.retransmitted <= RETRANSMIT_TRIES)
+ if (this->initiating.retransmitted <= this->retransmit_tries)
{
- timeout = (u_int32_t)(RETRANSMIT_TIMEOUT *
- pow(RETRANSMIT_BASE, this->initiating.retransmitted));
+ timeout = (u_int32_t)(this->retransmit_timeout * 1000.0 *
+ pow(this->retransmit_base, this->initiating.retransmitted));
}
else
{
@@ -1055,5 +1070,13 @@ task_manager_t *task_manager_create(ike_sa_t *ike_sa)
this->passive_tasks = linked_list_create();
this->reset = FALSE;
+ this->retransmit_tries = lib->settings->get_int(lib->settings,
+ "charon.retransmit_tries", RETRANSMIT_TRIES);
+ this->retransmit_timeout = lib->settings->get_double(lib->settings,
+ "charon.retransmit_timeout", RETRANSMIT_TIMEOUT);
+ this->retransmit_base = lib->settings->get_double(lib->settings,
+ "charon.retransmit_base", RETRANSMIT_BASE);
+
return &this->public;
}
+
diff --git a/src/charon/sa/task_manager.h b/src/charon/sa/task_manager.h
index 11c85a837..720b7527e 100644
--- a/src/charon/sa/task_manager.h
+++ b/src/charon/sa/task_manager.h
@@ -31,9 +31,9 @@ typedef struct task_manager_t task_manager_t;
#include <sa/tasks/task.h>
/**
- * First retransmit timeout in milliseconds.
+ * First retransmit timeout in seconds.
*/
-#define RETRANSMIT_TIMEOUT 4000
+#define RETRANSMIT_TIMEOUT 4.0
/**
* Base which is raised to the power of the retransmission try.