child-cfg: Generalize get_ke_method() method

This commit is contained in:
Tobias Brunner 2018-07-20 11:11:00 +02:00 committed by Andreas Steffen
parent d30f1a6418
commit 0c7412391a
4 changed files with 18 additions and 12 deletions

View File

@ -473,24 +473,23 @@ METHOD(child_cfg_t, get_close_action, action_t,
return this->close_action; return this->close_action;
} }
METHOD(child_cfg_t, get_ke_method, key_exchange_method_t, METHOD(child_cfg_t, get_algorithm, uint16_t,
private_child_cfg_t *this) private_child_cfg_t *this, transform_type_t type)
{ {
enumerator_t *enumerator; enumerator_t *enumerator;
proposal_t *proposal; proposal_t *proposal;
uint16_t method = KE_NONE; uint16_t alg = 0;
enumerator = this->proposals->create_enumerator(this->proposals); enumerator = this->proposals->create_enumerator(this->proposals);
while (enumerator->enumerate(enumerator, &proposal)) while (enumerator->enumerate(enumerator, &proposal))
{ {
if (proposal->get_algorithm(proposal, KEY_EXCHANGE_METHOD, &method, if (proposal->get_algorithm(proposal, type, &alg, NULL))
NULL))
{ {
break; break;
} }
} }
enumerator->destroy(enumerator); enumerator->destroy(enumerator);
return method; return alg;
} }
METHOD(child_cfg_t, get_inactivity, uint32_t, METHOD(child_cfg_t, get_inactivity, uint32_t,
@ -654,7 +653,7 @@ child_cfg_t *child_cfg_create(char *name, child_cfg_create_t *data)
.get_dpd_action = _get_dpd_action, .get_dpd_action = _get_dpd_action,
.get_close_action = _get_close_action, .get_close_action = _get_close_action,
.get_lifetime = _get_lifetime, .get_lifetime = _get_lifetime,
.get_ke_method = _get_ke_method, .get_algorithm = _get_algorithm,
.get_inactivity = _get_inactivity, .get_inactivity = _get_inactivity,
.get_reqid = _get_reqid, .get_reqid = _get_reqid,
.get_if_id = _get_if_id, .get_if_id = _get_if_id,

View File

@ -203,11 +203,16 @@ struct child_cfg_t {
action_t (*get_close_action) (child_cfg_t *this); action_t (*get_close_action) (child_cfg_t *this);
/** /**
* Get the key exchange method to use for CHILD_SA setup. * Get the first algorithm of a certain transform type that's contained in
* any of the configured proposals.
* *
* @return key exchange method to use * For instance, use with KEY_EXCHANGE_METHOD to get the KE method to use
* for the CHILD_SA initiation.
*
* @param type transform type to look for
* @return algorithm identifier (0 for none)
*/ */
key_exchange_method_t (*get_ke_method)(child_cfg_t *this); uint16_t (*get_algorithm)(child_cfg_t *this, transform_type_t type);
/** /**
* Get the inactivity timeout value. * Get the inactivity timeout value.

View File

@ -865,7 +865,8 @@ METHOD(task_t, build_i, status_t,
return FAILED; return FAILED;
} }
group = this->config->get_ke_method(this->config); group = this->config->get_algorithm(this->config,
KEY_EXCHANGE_METHOD);
if (group != KE_NONE) if (group != KE_NONE)
{ {
proposal_t *proposal; proposal_t *proposal;

View File

@ -1103,7 +1103,8 @@ METHOD(task_t, build_i, status_t,
} }
if (!this->retry && this->dh_group == KE_NONE) if (!this->retry && this->dh_group == KE_NONE)
{ /* during a rekeying the group might already be set */ { /* during a rekeying the group might already be set */
this->dh_group = this->config->get_ke_method(this->config); this->dh_group = this->config->get_algorithm(this->config,
KEY_EXCHANGE_METHOD);
} }
break; break;
case IKE_AUTH: case IKE_AUTH: