From b03c1d415c507652995aaa4ad36910f3308718bc Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Mon, 7 Apr 2008 11:26:15 +0000 Subject: [PATCH] changed how retransmissions of connectivity checks are sent --- src/charon/sa/connect_manager.c | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/src/charon/sa/connect_manager.c b/src/charon/sa/connect_manager.c index 016679fcc..709f12502 100644 --- a/src/charon/sa/connect_manager.c +++ b/src/charon/sa/connect_manager.c @@ -29,16 +29,16 @@ #include /* base timeout - * the check interval is ME_INTERVAL * active checklists (N) */ - #define ME_INTERVAL 20 /* ms */ -/* retransmission timeout is first ME_RTO_B * N for ME_BOOST retransmissions - * then gets reduced to ME_RTO * N. */ + * the check interval is ME_INTERVAL */ + #define ME_INTERVAL 25 /* ms */ +/* retransmission timeout is first ME_INTERVAL for ME_BOOST retransmissions + * then gets reduced to ME_INTERVAL * ME_RETRANS_BASE ^ (sent retransmissions - ME_BOOST). */ /* number of initial retransmissions sent in short interval */ #define ME_BOOST 2 -/* retransmission timeout */ -#define ME_RTO 100 /* ms */ +/* base for retransmissions */ +#define ME_RETRANS_BASE 1.8 /* max number of retransmissions */ -#define ME_MAX_RETRANS 9 +#define ME_MAX_RETRANS 14 typedef struct private_connect_manager_t private_connect_manager_t; @@ -996,18 +996,12 @@ static void queue_retransmission(private_connect_manager_t *this, check_list_t * retransmit_data_t *data = retransmit_data_create(this, chunk_clone(checklist->connect_id), pair->id); job_t *job = (job_t*)callback_job_create((callback_job_cb_t)retransmit, data, (callback_job_cleanup_t)retransmit_data_destroy, NULL); - /* - u_int32_t NW = 0; - checklist->pairs->invoke_function(checklist->pairs, (linked_list_invoke_t)count_waiting_pairs, &NW); - u_int32_t rto = max(ME_INTERVAL * N * (NW + 1), ME_RTO_MIN); - */ - u_int32_t N = this->checklists->get_count(this->checklists); - u_int32_t rto = ME_INTERVAL * N; + u_int32_t rto = ME_INTERVAL; if (pair->retransmitted > ME_BOOST) { - rto = ME_RTO * N; + rto = (u_int32_t)(ME_INTERVAL * pow(ME_RETRANS_BASE, pair->retransmitted - ME_BOOST)); } - DBG2(DBG_IKE, "retransmission of pair '%d' in %dms - %d active checklist(s)", pair->id, rto, N); + DBG2(DBG_IKE, "retransmission %d of pair '%d' in %dms", pair->retransmitted, pair->id, rto); charon->scheduler->schedule_job(charon->scheduler, (job_t*)job, rto); }