diff options
Diffstat (limited to 'example/ipsec_api/odp_ipsec_cache.c')
-rw-r--r-- | example/ipsec_api/odp_ipsec_cache.c | 21 |
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; +} |