Wrap getters for dpd/close action into CHILD_SA, allows us to override them

This commit is contained in:
Martin Willi
2010-06-02 11:48:44 +02:00
parent 616b13c7a5
commit 4c401ea216
2 changed files with 76 additions and 0 deletions
+48
View File
@@ -127,6 +127,16 @@ struct private_child_sa_t {
*/
ipsec_mode_t mode;
/**
* Action to enforce if peer closes the CHILD_SA
*/
action_t close_action;
/**
* Action to enforce if peer is considered dead
*/
action_t dpd_action;
/**
* selected proposal
*/
@@ -271,6 +281,38 @@ static void set_ipcomp(private_child_sa_t *this, ipcomp_transform_t ipcomp)
this->ipcomp = ipcomp;
}
/**
* Implementation of child_sa_t.set_close_action.
*/
static void set_close_action(private_child_sa_t *this, action_t action)
{
this->close_action = action;
}
/**
* Implementation of child_sa_t.get_close_action.
*/
static action_t get_close_action(private_child_sa_t *this)
{
return this->close_action;
}
/**
* Implementation of child_sa_t.set_dpd_action.
*/
static void set_dpd_action(private_child_sa_t *this, action_t action)
{
this->dpd_action = action;
}
/**
* Implementation of child_sa_t.get_dpd_action.
*/
static action_t get_dpd_action(private_child_sa_t *this)
{
return this->dpd_action;
}
/**
* Implementation of child_sa_t.get_proposal
*/
@@ -919,6 +961,10 @@ child_sa_t * child_sa_create(host_t *me, host_t* other,
this->public.has_encap = (bool(*)(child_sa_t*))has_encap;
this->public.get_ipcomp = (ipcomp_transform_t(*)(child_sa_t*))get_ipcomp;
this->public.set_ipcomp = (void(*)(child_sa_t*,ipcomp_transform_t))set_ipcomp;
this->public.get_close_action = (action_t(*)(child_sa_t*))get_close_action;
this->public.set_close_action = (void(*)(child_sa_t*,action_t))set_close_action;
this->public.get_dpd_action = (action_t(*)(child_sa_t*))get_dpd_action;
this->public.set_dpd_action = (void(*)(child_sa_t*,action_t))set_dpd_action;
this->public.alloc_spi = (u_int32_t(*)(child_sa_t*, protocol_id_t protocol))alloc_spi;
this->public.alloc_cpi = (u_int16_t(*)(child_sa_t*))alloc_cpi;
this->public.install = (status_t(*)(child_sa_t*, chunk_t encr, chunk_t integ, u_int32_t spi, u_int16_t cpi, bool inbound, linked_list_t *my_ts_list, linked_list_t *other_ts_list))install;
@@ -946,6 +992,8 @@ child_sa_t * child_sa_create(host_t *me, host_t* other,
this->other_ts = linked_list_create();
this->protocol = PROTO_NONE;
this->mode = MODE_TUNNEL;
this->close_action = config->get_close_action(config);
this->dpd_action = config->get_dpd_action(config);
this->proposal = NULL;
this->rekey_time = 0;
this->expire_time = 0;
+28
View File
@@ -207,6 +207,34 @@ struct child_sa_t {
*/
void (*set_ipcomp)(child_sa_t *this, ipcomp_transform_t ipcomp);
/**
* Get the action to enforce if the remote peer closes the CHILD_SA.
*
* @return close action
*/
action_t (*get_close_action)(child_sa_t *this);
/**
* Override the close action specified by the CHILD_SA config.
*
* @param close action to enforce
*/
void (*set_close_action)(child_sa_t *this, action_t action);
/**
* Get the action to enforce if the peer is considered dead.
*
* @return dpd action
*/
action_t (*get_dpd_action)(child_sa_t *this);
/**
* Override the DPD action specified by the CHILD_SA config.
*
* @param close action to enforce
*/
void (*set_dpd_action)(child_sa_t *this, action_t action);
/**
* Get the selected proposal.
*