};
/**
- * check if multiple authentication extension is enabled, configuration-wise
+ * check if multiple authentication extension is disabled in the config
*/
static bool multiple_auth_enabled()
{
"%s.multiple_authentication", TRUE, lib->ns);
}
+/**
+ * check if optimized rekeying is disabled in the config
+ */
+static bool optimized_rekey_enabled()
+{
+ return lib->settings->get_bool(lib->settings,
+ "%s.optimized_rekeying", TRUE, lib->ns);
+}
+
/**
* collect the needed information in the IKE_SA_INIT exchange from our message
*/
message->add_notify(message, FALSE, MULTIPLE_AUTH_SUPPORTED,
chunk_empty);
}
+ if (optimized_rekey_enabled())
+ { /* indicate support for optmized rekeying */
+ message->add_notify(message, FALSE, OPTIMIZED_REKEY_SUPPORTED,
+ chunk_empty);
+ }
/* indicate support for EAP-only authentication */
message->add_notify(message, FALSE, EAP_ONLY_AUTHENTICATION,
chunk_empty);
{
this->ike_sa->enable_extension(this->ike_sa, EXT_MULTIPLE_AUTH);
}
+ if (message->get_notify(message, OPTIMIZED_REKEY_SUPPORTED) &&
+ optimized_rekey_enabled())
+ {
+ this->ike_sa->enable_extension(this->ike_sa, EXT_OPTIMIZED_REKEY);
+ }
if (message->get_notify(message, EAP_ONLY_AUTHENTICATION))
{
this->ike_sa->enable_extension(this->ike_sa,
"%s.half_open_timeout", HALF_OPEN_IKE_SA_TIMEOUT,
lib->ns));
}
+ else if (this->ike_sa->supports_extension(this->ike_sa, EXT_OPTIMIZED_REKEY))
+ {
+ /* indicate support for optimized rekeying in last IKE_AUTH message */
+ message->add_notify(message, FALSE, OPTIMIZED_REKEY_SUPPORTED,
+ chunk_empty);
+ }
this->ike_sa->set_condition(this->ike_sa, COND_AUTHENTICATED, TRUE);
return SUCCESS;
this->ike_sa->enable_extension(this->ike_sa,
EXT_IKE_MESSAGE_ID_SYNC);
break;
+ case OPTIMIZED_REKEY_SUPPORTED:
+ if (optimized_rekey_enabled())
+ {
+ this->ike_sa->enable_extension(this->ike_sa,
+ EXT_OPTIMIZED_REKEY);
+ }
+ break;
case PPK_IDENTITY:
ppk_id_received = TRUE;
break;