aboutsummaryrefslogtreecommitdiff
path: root/example/ipsec_api/odp_ipsec_cache.c
diff options
context:
space:
mode:
Diffstat (limited to 'example/ipsec_api/odp_ipsec_cache.c')
-rw-r--r--example/ipsec_api/odp_ipsec_cache.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/example/ipsec_api/odp_ipsec_cache.c b/example/ipsec_api/odp_ipsec_cache.c
index 3a28410eb..e408899ac 100644
--- a/example/ipsec_api/odp_ipsec_cache.c
+++ b/example/ipsec_api/odp_ipsec_cache.c
@@ -21,6 +21,7 @@ ipsec_cache_t *ipsec_cache;
void init_ipsec_cache(void)
{
odp_shm_t shm;
+ int i;
shm = odp_shm_reserve("shm_ipsec_cache",
sizeof(ipsec_cache_t),
@@ -39,6 +40,9 @@ void init_ipsec_cache(void)
exit(EXIT_FAILURE);
}
memset(ipsec_cache, 0, sizeof(*ipsec_cache));
+
+ for (i = 0; i < MAX_DB; i++)
+ ipsec_cache->array[i].ipsec_sa = ODP_IPSEC_SA_INVALID;
}
int create_ipsec_cache_entry(sa_db_entry_t *cipher_sa,
@@ -183,3 +187,20 @@ ipsec_cache_entry_t *find_ipsec_cache_entry_out(uint32_t src_ip,
}
return entry;
}
+
+int destroy_ipsec_cache(void)
+{
+ ipsec_cache_entry_t *entry;
+ int i;
+ int ret = 0;
+
+ for (i = 0; i < MAX_DB; i++) {
+ entry = &ipsec_cache->array[i];
+ if (entry->ipsec_sa != ODP_IPSEC_SA_INVALID) {
+ ret += odp_ipsec_sa_disable(entry->ipsec_sa);
+ ret += odp_ipsec_sa_destroy(entry->ipsec_sa);
+ }
+ }
+
+ return ret;
+}