diff options
author | Aakash Sasidharan <asasidharan@marvell.com> | 2021-05-31 12:03:29 +0530 |
---|---|---|
committer | Petri Savolainen <petri.savolainen@nokia.com> | 2021-09-29 13:16:01 +0300 |
commit | 7a56c3c2fee8027970414618b4e5047482aa4760 (patch) | |
tree | 2838ace233da7daa5c987438519d4e8ddf2bba8e | |
parent | 66743d3b14d32ba91b36e32f51d0e76f32b7b791 (diff) |
validation: ipsec: check dest queue capability
Create destination queue based on the queue type supported.
Add separate suites for plain and schedule type queues.
Signed-off-by: Aakash Sasidharan <asasidharan@marvell.com>
Reviewed-by: Anoob Joseph <anoobj@marvell.com>
Reviewed-by: Janne Peltonen <janne.peltonen@nokia.com>
-rw-r--r-- | test/validation/api/ipsec/ipsec.c | 148 | ||||
-rw-r--r-- | test/validation/api/ipsec/ipsec.h | 6 | ||||
-rw-r--r-- | test/validation/api/ipsec/ipsec_async.c | 22 | ||||
-rw-r--r-- | test/validation/api/ipsec/ipsec_inline_in.c | 17 | ||||
-rw-r--r-- | test/validation/api/ipsec/ipsec_inline_out.c | 17 | ||||
-rw-r--r-- | test/validation/api/ipsec/ipsec_sync.c | 10 |
6 files changed, 150 insertions, 70 deletions
diff --git a/test/validation/api/ipsec/ipsec.c b/test/validation/api/ipsec/ipsec.c index 7d4e096cd..f9eb759af 100644 --- a/test/validation/api/ipsec/ipsec.c +++ b/test/validation/api/ipsec/ipsec.c @@ -100,6 +100,14 @@ static int pktio_start(odp_pktio_t pktio, odp_bool_t in, odp_bool_t out) return 1; } +static odp_event_t recv_event(odp_queue_t queue) +{ + if (odp_queue_type(queue) == ODP_QUEUE_TYPE_PLAIN) + return odp_queue_deq(queue); + else + return odp_schedule(NULL, ODP_SCHED_NO_WAIT); +} + static void pktio_stop(odp_pktio_t pktio) { odp_queue_t queue = ODP_QUEUE_INVALID; @@ -110,7 +118,7 @@ static void pktio_stop(odp_pktio_t pktio) fprintf(stderr, "IPsec pktio stop failed.\n"); while (1) { - odp_event_t ev = odp_queue_deq(queue); + odp_event_t ev = recv_event(queue); if (ev != ODP_EVENT_INVALID) odp_event_free(ev); @@ -139,6 +147,17 @@ int ipsec_check(odp_bool_t ah, ODP_SUPPORT_NO == capa.op_mode_inline_out)) return ODP_TEST_INACTIVE; + if (!(ODP_IPSEC_OP_MODE_SYNC == suite_context.inbound_op_mode && + ODP_IPSEC_OP_MODE_SYNC == suite_context.outbound_op_mode) && + ODP_QUEUE_INVALID != suite_context.queue) { + if (suite_context.q_type == ODP_QUEUE_TYPE_PLAIN && + !capa.queue_type_plain) + return ODP_TEST_INACTIVE; + if (suite_context.q_type == ODP_QUEUE_TYPE_SCHED && + !capa.queue_type_sched) + return ODP_TEST_INACTIVE; + } + /* suite_context.pktio is set to ODP_PKTIO_INVALID in ipsec_suite_init() * if the pktio device doesn't support inline IPsec processing. */ if (suite_context.pktio == ODP_PKTIO_INVALID && @@ -357,7 +376,7 @@ void ipsec_sa_destroy(odp_ipsec_sa_t sa) if (ODP_QUEUE_INVALID != suite_context.queue) { do { - event = odp_queue_deq(suite_context.queue); + event = recv_event(suite_context.queue); } while (event == ODP_EVENT_INVALID); CU_ASSERT(odp_event_is_valid(event) == 1); @@ -532,7 +551,7 @@ static odp_event_t recv_pkt_async_inbound(odp_ipsec_op_status_t status) queue = suite_context.default_queue; do { - event = odp_queue_deq(queue); + event = recv_event(queue); } while (event == ODP_EVENT_INVALID); return event; @@ -554,7 +573,7 @@ static int recv_pkts_inline(const ipsec_test_part *part, odp_event_t ev; odp_event_subtype_t subtype; - ev = odp_queue_deq(queue); + ev = recv_event(queue); if (ODP_EVENT_INVALID != ev) { CU_ASSERT(odp_event_is_valid(ev) == 1); CU_ASSERT_EQUAL(ODP_EVENT_PACKET, @@ -569,7 +588,7 @@ static int recv_pkts_inline(const ipsec_test_part *part, continue; } - ev = odp_queue_deq(suite_context.queue); + ev = recv_event(suite_context.queue); if (ODP_EVENT_INVALID != ev) { odp_packet_t pkt; int num_pkts = 0; @@ -701,7 +720,7 @@ static int ipsec_send_out_one(const ipsec_test_part *part, odp_event_subtype_t subtype; do { - event = odp_queue_deq(suite_context.queue); + event = recv_event(suite_context.queue); } while (event == ODP_EVENT_INVALID); CU_ASSERT(odp_event_is_valid(event) == 1); @@ -784,7 +803,7 @@ static int ipsec_send_out_one(const ipsec_test_part *part, odp_event_t ev; odp_event_subtype_t subtype; - ev = odp_queue_deq(queue); + ev = recv_event(queue); if (ODP_EVENT_INVALID != ev) { CU_ASSERT(odp_event_is_valid(ev) == 1); CU_ASSERT_EQUAL(ODP_EVENT_PACKET, @@ -799,7 +818,7 @@ static int ipsec_send_out_one(const ipsec_test_part *part, continue; } - ev = odp_queue_deq(suite_context.queue); + ev = recv_event(suite_context.queue); if (ODP_EVENT_INVALID != ev) { CU_ASSERT(odp_event_is_valid(ev) == 1); CU_ASSERT_EQUAL(ODP_EVENT_PACKET, @@ -1025,7 +1044,7 @@ void ipsec_check_out_one(const ipsec_test_part *part, odp_ipsec_sa_t sa) odp_packet_free(pkto[i]); } -int ipsec_suite_init(void) +static int ipsec_suite_init(void) { int rc = 0; @@ -1053,11 +1072,16 @@ void ipsec_test_packet_from_pkt(ipsec_test_packet *test_pkt, odp_packet_t *pkt) odp_packet_free(*pkt); } -static int ipsec_suite_term(void) +int ipsec_suite_term(void) { if (suite_context.pktio != ODP_PKTIO_INVALID) pktio_stop(suite_context.pktio); + if (ODP_QUEUE_INVALID != suite_context.queue) { + if (odp_queue_destroy(suite_context.queue)) + fprintf(stderr, "IPsec destq destroy failed.\n"); + } + if (odp_cunit_print_inactive()) return -1; @@ -1074,20 +1098,80 @@ int ipsec_out_term(void) return ipsec_suite_term(); } +static odp_queue_t sched_queue_create(const char *name) +{ + odp_queue_param_t qparam; + + odp_queue_param_init(&qparam); + qparam.type = ODP_QUEUE_TYPE_SCHED; + qparam.sched.prio = ODP_SCHED_PRIO_DEFAULT; + qparam.sched.sync = ODP_SCHED_SYNC_PARALLEL; + qparam.sched.group = ODP_SCHED_GROUP_ALL; + + return odp_queue_create(name, &qparam); +} + +static odp_queue_t plain_queue_create(const char *name) +{ + return odp_queue_create(name, NULL); +} + +int ipsec_suite_sync_init(void) +{ + suite_context.queue = ODP_QUEUE_INVALID; + + /* q_type doesn't matter when queue handle is invalid. */ + suite_context.q_type = ODP_QUEUE_TYPE_PLAIN; + + return ipsec_suite_init(); +} + +int ipsec_suite_plain_init(void) +{ + odp_queue_t dest_queue; + + dest_queue = plain_queue_create("ipsec-out"); + if (ODP_QUEUE_INVALID == dest_queue) { + fprintf(stderr, "IPsec destq creation failed.\n"); + return -1; + } + + suite_context.queue = dest_queue; + suite_context.q_type = ODP_QUEUE_TYPE_PLAIN; + + return ipsec_suite_init(); +} + +int ipsec_suite_sched_init(void) +{ + odp_queue_t dest_queue; + + dest_queue = sched_queue_create("ipsec-out"); + if (ODP_QUEUE_INVALID == dest_queue) { + fprintf(stderr, "IPsec destq creation failed.\n"); + return -1; + } + + suite_context.queue = dest_queue; + suite_context.q_type = ODP_QUEUE_TYPE_SCHED; + + return ipsec_suite_init(); +} + int ipsec_init(odp_instance_t *inst, odp_ipsec_op_mode_t mode) { odp_pool_param_t params; odp_pool_t pool; - odp_queue_t out_queue; odp_pool_capability_t pool_capa; - odp_queue_t default_queue; odp_pktio_t pktio; odp_init_t init_param; odph_helper_options_t helper_options; + suite_context.reass_ipv4 = false; + suite_context.reass_ipv6 = false; suite_context.pool = ODP_POOL_INVALID; - suite_context.queue = ODP_QUEUE_INVALID; suite_context.pktio = ODP_PKTIO_INVALID; + suite_context.default_queue = ODP_QUEUE_INVALID; if (odph_options(&helper_options)) { fprintf(stderr, "error: odph_options() failed.\n"); @@ -1107,6 +1191,11 @@ int ipsec_init(odp_instance_t *inst, odp_ipsec_op_mode_t mode) return -1; } + if (odp_schedule_config(NULL)) { + fprintf(stderr, "odp_schedule_config() failed.\n"); + return -1; + } + if (odp_pool_capability(&pool_capa) < 0) { fprintf(stderr, "error: odp_pool_capability() failed.\n"); return -1; @@ -1136,20 +1225,6 @@ int ipsec_init(odp_instance_t *inst, odp_ipsec_op_mode_t mode) fprintf(stderr, "Packet pool creation failed.\n"); return -1; } - if (mode == ODP_IPSEC_OP_MODE_ASYNC || - mode == ODP_IPSEC_OP_MODE_INLINE) { - out_queue = odp_queue_create("ipsec-out", NULL); - if (ODP_QUEUE_INVALID == out_queue) { - fprintf(stderr, "IPsec outq creation failed.\n"); - return -1; - } - - default_queue = odp_queue_create("ipsec-default", NULL); - if (ODP_QUEUE_INVALID == default_queue) { - fprintf(stderr, "IPsec defaultq creation failed.\n"); - return -1; - } - } if (mode == ODP_IPSEC_OP_MODE_INLINE) { pktio = pktio_create(pool); @@ -1186,6 +1261,19 @@ int ipsec_config(odp_instance_t ODP_UNUSED inst) ODP_SUPPORT_NO == capa.op_mode_inline_out)) return 0; + if (suite_context.inbound_op_mode == ODP_IPSEC_OP_MODE_ASYNC || + suite_context.inbound_op_mode == ODP_IPSEC_OP_MODE_INLINE) { + if (capa.queue_type_plain) + suite_context.default_queue = plain_queue_create("ipsec-default"); + else if (capa.queue_type_sched) + suite_context.default_queue = sched_queue_create("ipsec-default"); + + if (ODP_QUEUE_INVALID == suite_context.default_queue) { + fprintf(stderr, "IPsec defaultq creation failed.\n"); + return -1; + } + } + reass_test_vectors_init(); odp_ipsec_config_init(&ipsec_config); @@ -1269,7 +1357,6 @@ int ipsec_config(odp_instance_t ODP_UNUSED inst) int ipsec_term(odp_instance_t inst) { odp_pool_t pool = suite_context.pool; - odp_queue_t out_queue = suite_context.queue; odp_queue_t default_queue = suite_context.default_queue; /* suite_context.pktio is set to ODP_PKTIO_INVALID by ipsec_suite_init() if inline processing is not supported. */ @@ -1280,11 +1367,6 @@ int ipsec_term(odp_instance_t inst) fprintf(stderr, "IPsec pktio close failed.\n"); } - if (ODP_QUEUE_INVALID != out_queue) { - if (odp_queue_destroy(out_queue)) - fprintf(stderr, "IPsec outq destroy failed.\n"); - } - if (ODP_QUEUE_INVALID != default_queue) { if (odp_queue_destroy(default_queue)) fprintf(stderr, "IPsec defaultq destroy failed.\n"); diff --git a/test/validation/api/ipsec/ipsec.h b/test/validation/api/ipsec/ipsec.h index 96cc3ae14..60e250f42 100644 --- a/test/validation/api/ipsec/ipsec.h +++ b/test/validation/api/ipsec/ipsec.h @@ -29,7 +29,10 @@ int ipsec_config(odp_instance_t inst); int ipsec_in_inline_init(void); int ipsec_out_inline_init(void); -int ipsec_suite_init(void); +int ipsec_suite_sync_init(void); +int ipsec_suite_plain_init(void); +int ipsec_suite_sched_init(void); +int ipsec_suite_term(void); int ipsec_in_term(void); int ipsec_out_term(void); @@ -42,6 +45,7 @@ struct suite_context_s { odp_queue_t default_queue; odp_queue_t queue; odp_pktio_t pktio; + odp_queue_type_t q_type; }; extern struct suite_context_s suite_context; diff --git a/test/validation/api/ipsec/ipsec_async.c b/test/validation/api/ipsec/ipsec_async.c index 5a594460d..44c968a4d 100644 --- a/test/validation/api/ipsec/ipsec_async.c +++ b/test/validation/api/ipsec/ipsec_async.c @@ -10,6 +10,9 @@ static int ipsec_async_init(odp_instance_t *inst) { int rc; + suite_context.inbound_op_mode = ODP_IPSEC_OP_MODE_ASYNC; + suite_context.outbound_op_mode = ODP_IPSEC_OP_MODE_ASYNC; + rc = ipsec_init(inst, ODP_IPSEC_OP_MODE_ASYNC); if (rc != 0) return rc; @@ -17,22 +20,19 @@ static int ipsec_async_init(odp_instance_t *inst) suite_context.pool = odp_pool_lookup("packet_pool"); if (suite_context.pool == ODP_POOL_INVALID) return -1; - suite_context.queue = odp_queue_lookup("ipsec-out"); - if (suite_context.queue == ODP_QUEUE_INVALID) - return -1; - suite_context.default_queue = odp_queue_lookup("ipsec-default"); - if (suite_context.default_queue == ODP_QUEUE_INVALID) - return -1; - - suite_context.inbound_op_mode = ODP_IPSEC_OP_MODE_ASYNC; - suite_context.outbound_op_mode = ODP_IPSEC_OP_MODE_ASYNC; return ipsec_config(*inst); } odp_suiteinfo_t ipsec_suites[] = { - {"IPsec-in", ipsec_suite_init, ipsec_in_term, ipsec_in_suite}, - {"IPsec-out", ipsec_suite_init, ipsec_out_term, ipsec_out_suite}, + {"IPsec-plain-in", ipsec_suite_plain_init, ipsec_suite_term, + ipsec_in_suite}, + {"IPsec-sched-in", ipsec_suite_sched_init, ipsec_suite_term, + ipsec_in_suite}, + {"IPsec-plain-out", ipsec_suite_plain_init, ipsec_suite_term, + ipsec_out_suite}, + {"IPsec-sched-out", ipsec_suite_sched_init, ipsec_suite_term, + ipsec_out_suite}, ODP_SUITE_INFO_NULL, }; diff --git a/test/validation/api/ipsec/ipsec_inline_in.c b/test/validation/api/ipsec/ipsec_inline_in.c index d28a1bf46..cbb3a178a 100644 --- a/test/validation/api/ipsec/ipsec_inline_in.c +++ b/test/validation/api/ipsec/ipsec_inline_in.c @@ -10,6 +10,9 @@ static int ipsec_sync_init(odp_instance_t *inst) { int rc; + suite_context.inbound_op_mode = ODP_IPSEC_OP_MODE_INLINE; + suite_context.outbound_op_mode = ODP_IPSEC_OP_MODE_ASYNC; + rc = ipsec_init(inst, ODP_IPSEC_OP_MODE_INLINE); if (rc != 0) return rc; @@ -17,24 +20,18 @@ static int ipsec_sync_init(odp_instance_t *inst) suite_context.pool = odp_pool_lookup("packet_pool"); if (suite_context.pool == ODP_POOL_INVALID) return -1; - suite_context.queue = odp_queue_lookup("ipsec-out"); - if (suite_context.queue == ODP_QUEUE_INVALID) - return -1; - suite_context.default_queue = odp_queue_lookup("ipsec-default"); - if (suite_context.default_queue == ODP_QUEUE_INVALID) - return -1; suite_context.pktio = odp_pktio_lookup("loop"); if (suite_context.pktio == ODP_PKTIO_INVALID) return -1; - suite_context.inbound_op_mode = ODP_IPSEC_OP_MODE_INLINE; - suite_context.outbound_op_mode = ODP_IPSEC_OP_MODE_ASYNC; - return ipsec_config(*inst); } odp_suiteinfo_t ipsec_suites[] = { - {"IPsec-in", ipsec_suite_init, ipsec_in_term, ipsec_in_suite}, + {"IPsec-plain-in", ipsec_suite_plain_init, ipsec_suite_term, + ipsec_in_suite}, + {"IPsec-sched-in", ipsec_suite_sched_init, ipsec_suite_term, + ipsec_in_suite}, ODP_SUITE_INFO_NULL, }; diff --git a/test/validation/api/ipsec/ipsec_inline_out.c b/test/validation/api/ipsec/ipsec_inline_out.c index 937d7dad0..3da19892b 100644 --- a/test/validation/api/ipsec/ipsec_inline_out.c +++ b/test/validation/api/ipsec/ipsec_inline_out.c @@ -10,6 +10,9 @@ static int ipsec_sync_init(odp_instance_t *inst) { int rc; + suite_context.inbound_op_mode = ODP_IPSEC_OP_MODE_ASYNC; + suite_context.outbound_op_mode = ODP_IPSEC_OP_MODE_INLINE; + rc = ipsec_init(inst, ODP_IPSEC_OP_MODE_INLINE); if (rc != 0) return rc; @@ -17,24 +20,18 @@ static int ipsec_sync_init(odp_instance_t *inst) suite_context.pool = odp_pool_lookup("packet_pool"); if (suite_context.pool == ODP_POOL_INVALID) return -1; - suite_context.queue = odp_queue_lookup("ipsec-out"); - if (suite_context.queue == ODP_QUEUE_INVALID) - return -1; - suite_context.default_queue = odp_queue_lookup("ipsec-default"); - if (suite_context.default_queue == ODP_QUEUE_INVALID) - return -1; suite_context.pktio = odp_pktio_lookup("loop"); if (suite_context.pktio == ODP_PKTIO_INVALID) return -1; - suite_context.inbound_op_mode = ODP_IPSEC_OP_MODE_ASYNC; - suite_context.outbound_op_mode = ODP_IPSEC_OP_MODE_INLINE; - return ipsec_config(*inst); } odp_suiteinfo_t ipsec_suites[] = { - {"IPsec-out", ipsec_suite_init, ipsec_out_term, ipsec_out_suite}, + {"IPsec-plain-out", ipsec_suite_plain_init, ipsec_suite_term, + ipsec_out_suite}, + {"IPsec-sched-out", ipsec_suite_sched_init, ipsec_suite_term, + ipsec_out_suite}, ODP_SUITE_INFO_NULL, }; diff --git a/test/validation/api/ipsec/ipsec_sync.c b/test/validation/api/ipsec/ipsec_sync.c index f77bb1c51..74ae1fe19 100644 --- a/test/validation/api/ipsec/ipsec_sync.c +++ b/test/validation/api/ipsec/ipsec_sync.c @@ -10,6 +10,9 @@ static int ipsec_sync_init(odp_instance_t *inst) { int rc; + suite_context.inbound_op_mode = ODP_IPSEC_OP_MODE_SYNC; + suite_context.outbound_op_mode = ODP_IPSEC_OP_MODE_SYNC; + rc = ipsec_init(inst, ODP_IPSEC_OP_MODE_SYNC); if (rc != 0) return rc; @@ -18,15 +21,12 @@ static int ipsec_sync_init(odp_instance_t *inst) if (suite_context.pool == ODP_POOL_INVALID) return -1; - suite_context.inbound_op_mode = ODP_IPSEC_OP_MODE_SYNC; - suite_context.outbound_op_mode = ODP_IPSEC_OP_MODE_SYNC; - return ipsec_config(*inst); } odp_suiteinfo_t ipsec_suites[] = { - {"IPsec-in", ipsec_suite_init, ipsec_in_term, ipsec_in_suite}, - {"IPsec-out", ipsec_suite_init, ipsec_out_term, ipsec_out_suite}, + {"IPsec-in", ipsec_suite_sync_init, ipsec_in_term, ipsec_in_suite}, + {"IPsec-out", ipsec_suite_sync_init, ipsec_out_term, ipsec_out_suite}, ODP_SUITE_INFO_NULL, }; |