aboutsummaryrefslogtreecommitdiffstats
path: root/src/charon/config/configuration.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/charon/config/configuration.c')
-rwxr-xr-xsrc/charon/config/configuration.c50
1 files changed, 10 insertions, 40 deletions
diff --git a/src/charon/config/configuration.c b/src/charon/config/configuration.c
index 39fc4d922..f43afdaa4 100755
--- a/src/charon/config/configuration.c
+++ b/src/charon/config/configuration.c
@@ -33,25 +33,11 @@
#define HALF_OPEN_IKE_SA_TIMEOUT 30000
/**
- * The retransmission algorithm uses a multiple sequences.
- * Each sequence contains multiple retransmits. Those retransmits
- * are sent using a exponential backoff algorithm. The sequences
- * are retried with linear timings:
+ * Retransmission uses a backoff algorithm. The timeout is calculated using
+ * TIMEOUT * (BASE ** try).
+ * When try reaches TRIES, retransmission is given up.
*
- * <------sequence---------><------sequence---------><------sequence--------->
- *
- * T-R---R-----R---------R--R-R---R-----R---------R--R-R---R-----R---------R--X
- *
- * T = first transmit
- * R = retransmit
- * X = giving up, peer is dead
- *
- * if (retransmit >= TRIES * sequences)
- * => abort
- * TIMEOUT * (BASE ** (try % TRIES))
- *
- * Using an initial TIMEOUT of 4s, a BASE of 1.8, 5 TRIES
- * per sequnce and 3 sequences, this gives us:
+ * Using an initial TIMEOUT of 4s, a BASE of 1.8, and 5 TRIES gives us:
*
* | relative | absolute
* ---------------------------------------------------------
@@ -61,22 +47,8 @@
* 4s * (1.8 ** (3 % 5)) = 23s 47s
* 4s * (1.8 ** (4 % 5)) = 42s 89s
* 4s * (1.8 ** (5 % 5)) = 76s 165s
- * 4s * (1.8 ** (6 % 5)) = 4s 169s
- * 4s * (1.8 ** (7 % 5)) = 7s 176s
- * 4s * (1.8 ** (8 % 5)) = 13s 189s
- * 4s * (1.8 ** (9 % 5)) = 23s 212s
- * 4s * (1.8 ** (10 % 5)) = 42s 254s
- * 4s * (1.8 ** (11 % 5)) = 76s 330s
- * 4s * (1.8 ** (12 % 5)) = 4s 334
- * 4s * (1.8 ** (13 % 5)) = 7s 341s
- * 4s * (1.8 ** (14 % 5)) = 13s 354s
- * 4s * (1.8 ** (15 % 5)) = 23s 377s
- * 4s * (1.8 ** (16 % 5)) = 42s 419s
- * 4s * (1.8 ** (17 % 5)) = 76s 495s
*
- * If the configuration uses 1 sequence, the peer is considered dead
- * after 2min 45s when no reply comes in. If it uses 3 sequences, after
- * 8min 15s the DPD action is executed...
+ * The peer is considered dead after 2min 45s when no reply comes in.
*/
/**
@@ -119,17 +91,15 @@ struct private_configuration_t {
* Implementation of configuration_t.get_retransmit_timeout.
*/
static u_int32_t get_retransmit_timeout (private_configuration_t *this,
- u_int32_t retransmit_count,
- u_int32_t max_sequences)
+ u_int32_t retransmit_count)
{
- if (max_sequences != 0 &&
- retransmit_count >= RETRANSMIT_TRIES * max_sequences)
+ if (retransmit_count > RETRANSMIT_TRIES)
{
/* give up */
return 0;
}
- return (u_int32_t)(RETRANSMIT_TIMEOUT *
- pow(RETRANSMIT_BASE, retransmit_count % RETRANSMIT_TRIES));
+ return (u_int32_t)
+ (RETRANSMIT_TIMEOUT * pow(RETRANSMIT_BASE, retransmit_count));
}
/**
@@ -165,7 +135,7 @@ configuration_t *configuration_create()
/* public functions */
this->public.destroy = (void(*)(configuration_t*))destroy;
- this->public.get_retransmit_timeout = (u_int32_t (*) (configuration_t*,u_int32_t,u_int32_t))get_retransmit_timeout;
+ this->public.get_retransmit_timeout = (u_int32_t (*) (configuration_t*,u_int32_t))get_retransmit_timeout;
this->public.get_half_open_ike_sa_timeout = (u_int32_t (*) (configuration_t*)) get_half_open_ike_sa_timeout;
this->public.get_keepalive_interval = (u_int32_t (*) (configuration_t*)) get_keepalive_interval;