child-sa: Introduce a unique CHILD_SA identifier

As the reqid is not that unique even among multiple IKE_SAs anymore, we need
an identifier to uniquely identify a specific CHILD_SA instance.
This commit is contained in:
Martin Willi
2015-02-20 13:34:49 +01:00
parent 0da97f5060
commit 4ec397b894
2 changed files with 24 additions and 0 deletions
+14
View File
@@ -105,6 +105,11 @@ struct private_child_sa_t {
*/
bool reqid_allocated;
/*
* Unique CHILD_SA identifier
*/
u_int32_t unique_id;
/**
* inbound mark used for this child_sa
*/
@@ -234,6 +239,12 @@ METHOD(child_sa_t, get_reqid, u_int32_t,
return this->reqid;
}
METHOD(child_sa_t, get_unique_id, u_int32_t,
private_child_sa_t *this)
{
return this->unique_id;
}
METHOD(child_sa_t, get_config, child_cfg_t*,
private_child_sa_t *this)
{
@@ -1190,11 +1201,13 @@ child_sa_t * child_sa_create(host_t *me, host_t* other,
child_cfg_t *config, u_int32_t rekey, bool encap)
{
private_child_sa_t *this;
static refcount_t unique_id = 0;
INIT(this,
.public = {
.get_name = _get_name,
.get_reqid = _get_reqid,
.get_unique_id = _get_unique_id,
.get_config = _get_config,
.get_state = _get_state,
.set_state = _set_state,
@@ -1236,6 +1249,7 @@ child_sa_t * child_sa_create(host_t *me, host_t* other,
.close_action = config->get_close_action(config),
.dpd_action = config->get_dpd_action(config),
.reqid = config->get_reqid(config),
.unique_id = ref_get(&unique_id),
.mark_in = config->get_mark(config, TRUE),
.mark_out = config->get_mark(config, FALSE),
.install_time = time_monotonic(NULL),
+10
View File
@@ -125,6 +125,16 @@ struct child_sa_t {
*/
u_int32_t (*get_reqid)(child_sa_t *this);
/**
* Get the unique numerical identifier for this CHILD_SA.
*
* While the same reqid might be shared between multiple SAs, the unique_id
* is truly unique for all CHILD_SA instances.
*
* @return unique CHILD_SA identifier
*/
u_int32_t (*get_unique_id)(child_sa_t *this);
/**
* Get the config used to set up this child sa.
*