Commit Graph
27 Commits
Author SHA1 Message Date
Tobias Brunner 72b282cf20 ike: Properly support high number of retransmission tries
Due to the exponential backoff a high number of retransmits only
makes sense if retransmit_limit is set.  However, even with that there
was a problem.

We first calculated the timeout for the next retransmit and only then
compared that to the configured limit.  Depending on the configured
base and timeout the calculation overflowed the range of uint32_t after
a relatively low number of retransmits (with the default values after 23)
causing the timeout to first get lower (on a high level) before constantly
resulting in 0 (with the default settings after 60 retransmits).

Since that's obviously lower than any configured limit, all remaining
retransmits were then sent without any delay, causing a lot of concurrent
messages if the number of retransmits was high.

This change determines the maximum number of retransmits until an
overflow occurs based on the configuration and defaults to UINT32_MAX
if that value is exceeded.  Note that since the timeout is in milliseconds
UINT32_MAX equals nearly 50 days.

The calculation in task_manager_total_retransmit_timeout() uses a double
variable and the result is in seconds so the maximum number would be higher
there (with the default settings 1205).  However, we want its result to
be based on the actual IKE retransmission behavior.
2020-05-07 15:05:55 +02:00
Tobias Brunner 1b67166921 Unify format of HSR copyright statements 2018-05-23 16:32:53 +02:00
Tobias Brunner bfbd3af850 task-manager: Add helper function to calculate the total retransmit timeout 2017-05-23 18:05:58 +02:00
Martin Willi 7d0a3a427d Factories honor charon IKEv1/IKEv2 protocol support flags 2012-03-20 17:31:26 +01:00
Martin Willi 15a682f4c2 Separated libcharon/sa directory with ikev1 and ikev2 subfolders 2012-03-20 17:31:26 +01:00
Martin Willi d94c923648 Support an "any" IKE version for both IKEv1 or IKEv2 2012-03-20 17:31:25 +01:00
Tobias Brunner 273f2f8054 Added factory function to create task_manager_t implementations. 2012-03-20 17:30:43 +01:00
Martin Willi e69f7dcddf Use task manager as generic interface, renamed implementation to _v2. 2012-03-20 17:30:41 +01:00
Tobias Brunner 4ed52db2bb Allow creation of message_t objects for IKEv1 packets. 2012-03-20 17:30:40 +01:00
Tobias Brunner d46f857511 Fixed unintentional fall-through in task_manager.
Reported by Howard Windsor.
2011-10-06 13:55:50 +02:00
Tobias Brunner e26304348c Replaced simple iterator usages. 2011-07-06 09:43:45 +02:00
Martin Willi 3ced6b51e4 Move establish/inherit of rekeyed IKE_SAs to delete messages
Having the inherit() function delayed to the IKE_SA establish procedure
was problematic. The task destroy function was never a good place and
results in locking/cleanup problems. After establishing the SA, it
should be really checked in ASAP to avoid any triggered DPD checks
to get lost.
2011-03-15 15:20:09 +01:00
Martin Willi e44ebdcfc8 Slightly change IKE_SA destruction order to inherit properly during ike_rekey task destruction 2011-02-28 10:31:36 +00:00
Martin Willi 2082417df3 Force port update as responder when initiator switches to 4500 in IKE_AUTH 2011-01-12 14:37:15 +01:00
Martin Willi 8ba805f4db Avoid variable name overloading 2011-01-12 14:37:09 +01:00
Martin Willi c67de660d2 Move critical bit checking to ike_sa, notify payload includes unsupported payload type 2011-01-05 16:45:44 +01:00
Martin Willi c146c3c4e1 Ingore messages with exchange type altered to UNDEFINED in message() hook 2011-01-05 16:45:42 +01:00
Martin Willi 89fda1abb5 Moved message()-hook invocation to generate_message(), catch pre-generated IKE_SA_INITs, too 2011-01-05 16:45:41 +01:00
Tobias Brunner cd26eedc5c Do not update hosts based on retransmitted messages. 2010-10-12 11:11:04 +02:00
Tobias Brunner bb381e26c6 Refer to scheduler and processor via lib and not hydra. 2010-09-02 19:04:18 +02:00
Tobias Brunner 61e8e73206 Refer to scheduler via hydra and not charon. 2010-09-02 19:01:24 +02:00
Thomas Egerer 31d0efd7e9 Use enumerator for queued_tasks migration to avoid infinite loop 2010-06-30 13:24:43 +02:00
Thomas Egerer 7f1eb89517 Migrate queued_tasks tasks, to avoid dangling pointers 2010-06-29 09:20:05 +02:00
Thomas Egerer 03ffa88531 Add extra information in debug output for IKE_SA check{out, in}
This output helps tracing checkout and checkin of IKE_SAs when there is
more than one IKE_SAs with the same name. I also added the type of
in-air-exchange to the debug output issued by the task_manager in case
a task initiation is delayed, came in handy for me.
2010-06-07 15:12:13 +02:00
Martin Willi 665c18bd85 Added support for task enumeration in task_manager_t 2010-06-07 10:45:25 +02:00
Martin Willi 9560a3166f Migrated task_manager_t to INIT/METHOD macros 2010-06-07 10:37:00 +02:00
Tobias Brunner 08c5572602 Moving charon to libcharon. 2010-03-19 13:34:52 +01:00