charon-tkm: Store reqid in SAD

This commit is contained in:
Reto Buerki
2015-02-20 13:34:53 +01:00
committed by Martin Willi
parent e1e854bd0c
commit f5fc592ae1
4 changed files with 26 additions and 15 deletions
+2 -1
View File
@@ -136,7 +136,8 @@ METHOD(kernel_ipsec_t, add_sa, status_t,
} }
esa_id = tkm->idmgr->acquire_id(tkm->idmgr, TKM_CTX_ESA); esa_id = tkm->idmgr->acquire_id(tkm->idmgr, TKM_CTX_ESA);
if (!tkm->sad->insert(tkm->sad, esa_id, local, peer, spi_rem, protocol)) if (!tkm->sad->insert(tkm->sad, reqid, esa_id, local, peer, spi_rem,
protocol))
{ {
DBG1(DBG_KNL, "unable to add entry (%llu) to SAD", esa_id); DBG1(DBG_KNL, "unable to add entry (%llu) to SAD", esa_id);
goto sad_failure; goto sad_failure;
+13 -5
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2012 Reto Buerki * Copyright (C) 2012-2014 Reto Buerki
* Copyright (C) 2012 Adrian-Ken Rueegsegger * Copyright (C) 2012 Adrian-Ken Rueegsegger
* Hochschule fuer Technik Rapperswil * Hochschule fuer Technik Rapperswil
* *
@@ -56,6 +56,11 @@ struct sad_entry_t {
*/ */
esa_id_type esa_id; esa_id_type esa_id;
/**
* Reqid.
*/
u_int32_t reqid;
/** /**
* Source address of CHILD SA. * Source address of CHILD SA.
*/ */
@@ -119,6 +124,7 @@ static bool sad_entry_equal(sad_entry_t * const left, sad_entry_t * const right)
return FALSE; return FALSE;
} }
return left->esa_id == right->esa_id && return left->esa_id == right->esa_id &&
left->reqid == right->reqid &&
left->src->ip_equals(left->src, right->src) && left->src->ip_equals(left->src, right->src) &&
left->dst->ip_equals(left->dst, right->dst) && left->dst->ip_equals(left->dst, right->dst) &&
left->spi == right->spi && left->proto == right->proto; left->spi == right->spi && left->proto == right->proto;
@@ -126,14 +132,15 @@ static bool sad_entry_equal(sad_entry_t * const left, sad_entry_t * const right)
METHOD(tkm_kernel_sad_t, insert, bool, METHOD(tkm_kernel_sad_t, insert, bool,
private_tkm_kernel_sad_t * const this, const esa_id_type esa_id, private_tkm_kernel_sad_t * const this, const esa_id_type esa_id,
const host_t * const src, const host_t * const dst, const u_int32_t spi, const u_int32_t reqid, const host_t * const src, const host_t * const dst,
const u_int8_t proto) const u_int32_t spi, const u_int8_t proto)
{ {
status_t result; status_t result;
sad_entry_t *new_entry; sad_entry_t *new_entry;
INIT(new_entry, INIT(new_entry,
.esa_id = esa_id, .esa_id = esa_id,
.reqid = reqid,
.src = (host_t *)src, .src = (host_t *)src,
.dst = (host_t *)dst, .dst = (host_t *)dst,
.spi = spi, .spi = spi,
@@ -146,8 +153,9 @@ METHOD(tkm_kernel_sad_t, insert, bool,
new_entry); new_entry);
if (result == NOT_FOUND) if (result == NOT_FOUND)
{ {
DBG3(DBG_KNL, "inserting SAD entry (esa: %llu, src: %H, dst: %H, " DBG3(DBG_KNL, "inserting SAD entry (esa: %llu, reqid: %u, src: %H, "
"spi: %x, proto: %u)", esa_id, src, dst, ntohl(spi), proto); "dst: %H, spi: %x, proto: %u)", esa_id, reqid, src, dst,
ntohl(spi), proto);
new_entry->src = src->clone((host_t *)src); new_entry->src = src->clone((host_t *)src);
new_entry->dst = dst->clone((host_t *)dst); new_entry->dst = dst->clone((host_t *)dst);
this->data->insert_last(this->data, new_entry); this->data->insert_last(this->data, new_entry);
+5 -3
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2012 Reto Buerki * Copyright (C) 2012-2014 Reto Buerki
* Copyright (C) 2012 Adrian-Ken Rueegsegger * Copyright (C) 2012 Adrian-Ken Rueegsegger
* Hochschule fuer Technik Rapperswil * Hochschule fuer Technik Rapperswil
* *
@@ -37,6 +37,7 @@ struct tkm_kernel_sad_t {
* Insert new SAD entry with specified parameters. * Insert new SAD entry with specified parameters.
* *
* @param esa_id ESP SA context identifier * @param esa_id ESP SA context identifier
* @param reqid reqid of the SA
* @param src source address of CHILD SA * @param src source address of CHILD SA
* @param dst destination address of CHILD SA * @param dst destination address of CHILD SA
* @param spi SPI of CHILD SA * @param spi SPI of CHILD SA
@@ -44,8 +45,9 @@ struct tkm_kernel_sad_t {
* @return TRUE if entry was inserted, FALSE otherwise * @return TRUE if entry was inserted, FALSE otherwise
*/ */
bool (*insert)(tkm_kernel_sad_t * const this, const esa_id_type esa_id, bool (*insert)(tkm_kernel_sad_t * const this, const esa_id_type esa_id,
const host_t * const src, const host_t * const dst, const u_int32_t reqid, const host_t * const src,
const u_int32_t spi, const u_int8_t proto); const host_t * const dst, const u_int32_t spi,
const u_int8_t proto);
/** /**
* Get ESA id for entry with given parameters. * Get ESA id for entry with given parameters.
+6 -6
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2012 Reto Buerki * Copyright (C) 2012-2014 Reto Buerki
* Copyright (C) 2012 Adrian-Ken Rueegsegger * Copyright (C) 2012 Adrian-Ken Rueegsegger
* Hochschule fuer Technik Rapperswil * Hochschule fuer Technik Rapperswil
* *
@@ -34,7 +34,7 @@ START_TEST(test_insert)
host_t *addr = host_create_from_string("127.0.0.1", 1024); host_t *addr = host_create_from_string("127.0.0.1", 1024);
tkm_kernel_sad_t *sad = tkm_kernel_sad_create(); tkm_kernel_sad_t *sad = tkm_kernel_sad_create();
fail_unless(sad->insert(sad, 1, addr, addr, 42, 50), fail_unless(sad->insert(sad, 1, 2, addr, addr, 42, 50),
"Error inserting SAD entry"); "Error inserting SAD entry");
sad->destroy(sad); sad->destroy(sad);
@@ -47,9 +47,9 @@ START_TEST(test_insert_duplicate)
host_t *addr = host_create_from_string("127.0.0.1", 1024); host_t *addr = host_create_from_string("127.0.0.1", 1024);
tkm_kernel_sad_t *sad = tkm_kernel_sad_create(); tkm_kernel_sad_t *sad = tkm_kernel_sad_create();
fail_unless(sad->insert(sad, 1, addr, addr, 42, 50), fail_unless(sad->insert(sad, 1, 2, addr, addr, 42, 50),
"Error inserting SAD entry"); "Error inserting SAD entry");
fail_if(sad->insert(sad, 1, addr, addr, 42, 50), fail_if(sad->insert(sad, 1, 2, addr, addr, 42, 50),
"Expected error inserting duplicate entry"); "Expected error inserting duplicate entry");
sad->destroy(sad); sad->destroy(sad);
@@ -61,7 +61,7 @@ START_TEST(test_get_esa_id)
{ {
host_t *addr = host_create_from_string("127.0.0.1", 1024); host_t *addr = host_create_from_string("127.0.0.1", 1024);
tkm_kernel_sad_t *sad = tkm_kernel_sad_create(); tkm_kernel_sad_t *sad = tkm_kernel_sad_create();
fail_unless(sad->insert(sad, 23, addr, addr, 42, 50), fail_unless(sad->insert(sad, 23, 54, addr, addr, 42, 50),
"Error inserting SAD entry"); "Error inserting SAD entry");
fail_unless(sad->get_esa_id(sad, addr, addr, 42, 50) == 23, fail_unless(sad->get_esa_id(sad, addr, addr, 42, 50) == 23,
"Error getting esa id"); "Error getting esa id");
@@ -85,7 +85,7 @@ START_TEST(test_remove)
{ {
host_t *addr = host_create_from_string("127.0.0.1", 1024); host_t *addr = host_create_from_string("127.0.0.1", 1024);
tkm_kernel_sad_t *sad = tkm_kernel_sad_create(); tkm_kernel_sad_t *sad = tkm_kernel_sad_create();
fail_unless(sad->insert(sad, 23, addr, addr, 42, 50), fail_unless(sad->insert(sad, 23, 54, addr, addr, 42, 50),
"Error inserting SAD entry"); "Error inserting SAD entry");
fail_unless(sad->get_esa_id(sad, addr, addr, 42, 50) == 23, fail_unless(sad->get_esa_id(sad, addr, addr, 42, 50) == 23,
"Error getting esa id"); "Error getting esa id");