diff options
author | Matias Elo <matias.elo@nokia.com> | 2021-10-11 16:37:51 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-11 16:37:51 +0300 |
commit | 50c7b605b97474d26fcf600b4061968e3543b45b (patch) | |
tree | bb5541aab05c99d762a054a9f1fe64cd002d7f86 /test/validation/api/ipsec | |
parent | 54ca03915ddf070a3c67f6a3c89f442c202a1adb (diff) | |
parent | ec77bf59d3407278625c28a8d47c3dab9627a91f (diff) |
Merge ODP v1.32.0.0v1.32.0.0_DPDK_19.11
Merge ODP linux-generic v1.32.0.0 into ODP-DPDK.
Diffstat (limited to 'test/validation/api/ipsec')
-rw-r--r-- | test/validation/api/ipsec/Makefile.am | 3 | ||||
-rw-r--r-- | test/validation/api/ipsec/ipsec.c | 227 | ||||
-rw-r--r-- | test/validation/api/ipsec/ipsec.h | 9 | ||||
-rw-r--r-- | test/validation/api/ipsec/ipsec_async.c | 19 | ||||
-rw-r--r-- | test/validation/api/ipsec/ipsec_inline_in.c | 14 | ||||
-rw-r--r-- | test/validation/api/ipsec/ipsec_inline_out.c | 14 | ||||
-rw-r--r-- | test/validation/api/ipsec/ipsec_sync.c | 10 | ||||
-rw-r--r-- | test/validation/api/ipsec/ipsec_test_in.c | 35 | ||||
-rw-r--r-- | test/validation/api/ipsec/reass_test_vectors.c | 353 | ||||
-rw-r--r-- | test/validation/api/ipsec/reass_test_vectors.h | 362 |
10 files changed, 623 insertions, 423 deletions
diff --git a/test/validation/api/ipsec/Makefile.am b/test/validation/api/ipsec/Makefile.am index 8417a5776..1a29d687d 100644 --- a/test/validation/api/ipsec/Makefile.am +++ b/test/validation/api/ipsec/Makefile.am @@ -7,7 +7,8 @@ libtestipsec_la_SOURCES = \ ipsec_test_in.c \ ipsec_test_out.c \ ipsec.h \ - ipsec.c + ipsec.c \ + reass_test_vectors.c test_PROGRAMS = \ ipsec_sync \ diff --git a/test/validation/api/ipsec/ipsec.c b/test/validation/api/ipsec/ipsec.c index 5bbc9c025..c6fbe6f91 100644 --- a/test/validation/api/ipsec/ipsec.c +++ b/test/validation/api/ipsec/ipsec.c @@ -20,6 +20,7 @@ struct suite_context_s suite_context; static odp_ipsec_capability_t capa; #define PKT_POOL_NUM 64 +#define EVENT_WAIT_TIME ODP_TIME_SEC_IN_NS #define PACKET_USER_PTR ((void *)0x1212fefe) #define IPSEC_SA_CTX ((void *)0xfefefafa) @@ -100,6 +101,41 @@ static int pktio_start(odp_pktio_t pktio, odp_bool_t in, odp_bool_t out) return 1; } +static odp_event_t sched_queue_deq(uint64_t wait_ns) +{ + uint64_t wait = odp_schedule_wait_time(wait_ns); + + return odp_schedule(NULL, wait); +} + +static odp_event_t plain_queue_deq(odp_queue_t queue, uint64_t wait_ns) +{ + odp_time_t cur, wait, next; + odp_event_t event; + + wait = odp_time_local_from_ns(wait_ns); + next = odp_time_sum(odp_time_local(), wait); + + do { + event = odp_queue_deq(queue); + cur = odp_time_local(); + } while (event == ODP_EVENT_INVALID && odp_time_cmp(next, cur) >= 0); + + return event; +} + +static odp_event_t recv_event(odp_queue_t queue, uint64_t wait_ns) +{ + odp_event_t event; + + if (odp_queue_type(queue) == ODP_QUEUE_TYPE_PLAIN) + event = plain_queue_deq(queue, wait_ns); + else + event = sched_queue_deq(wait_ns); + + return event; +} + static void pktio_stop(odp_pktio_t pktio) { odp_queue_t queue = ODP_QUEUE_INVALID; @@ -110,7 +146,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, 0); if (ev != ODP_EVENT_INVALID) odp_event_free(ev); @@ -139,6 +175,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 && @@ -356,9 +403,7 @@ void ipsec_sa_destroy(odp_ipsec_sa_t sa) CU_ASSERT_EQUAL(ODP_IPSEC_OK, odp_ipsec_sa_disable(sa)); if (ODP_QUEUE_INVALID != suite_context.queue) { - do { - event = odp_queue_deq(suite_context.queue); - } while (event == ODP_EVENT_INVALID); + event = recv_event(suite_context.queue, EVENT_WAIT_TIME); CU_ASSERT(odp_event_is_valid(event) == 1); CU_ASSERT_EQUAL(ODP_EVENT_IPSEC_STATUS, odp_event_type(event)); @@ -516,12 +561,27 @@ static int send_pkts(const ipsec_test_part part[], int num_part) return num_part; } +/* Receive async inbound packet */ +static odp_event_t recv_pkt_async_inbound(odp_ipsec_op_status_t status) +{ + odp_queue_t queue; + + /* + * In case of SA lookup failure, the event is enqueued to the default + * queue specified during odp_ipsec_config() + */ + if (status.error.sa_lookup == 0) + queue = suite_context.queue; + else + queue = suite_context.default_queue; + + return recv_event(queue, EVENT_WAIT_TIME); +} + /* Receive inline processed packets */ static int recv_pkts_inline(const ipsec_test_part *part, odp_packet_t *pkto) { - odp_packet_reass_partial_state_t reass_state; - odp_packet_reass_status_t reass_status; odp_queue_t queue = ODP_QUEUE_INVALID; int i; @@ -532,7 +592,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, 0); if (ODP_EVENT_INVALID != ev) { CU_ASSERT(odp_event_is_valid(ev) == 1); CU_ASSERT_EQUAL(ODP_EVENT_PACKET, @@ -547,10 +607,15 @@ static int recv_pkts_inline(const ipsec_test_part *part, continue; } - ev = odp_queue_deq(suite_context.queue); + ev = recv_event(suite_context.queue, 0); if (ODP_EVENT_INVALID != ev) { odp_packet_t pkt; int num_pkts = 0; + odp_packet_reass_status_t reass_status; + odp_packet_reass_info_t reass = {0}; + odp_packet_reass_partial_state_t reass_state; + odp_packet_t frags[MAX_FRAGS]; + int j; CU_ASSERT(odp_event_is_valid(ev) == 1); CU_ASSERT_EQUAL(ODP_EVENT_PACKET, odp_event_type(ev)); @@ -559,13 +624,18 @@ static int recv_pkts_inline(const ipsec_test_part *part, CU_ASSERT(!part->out[i].status.error.sa_lookup); reass_status = odp_packet_reass_status(pkt); - if (ODP_PACKET_REASS_INCOMPLETE != reass_status) { + CU_ASSERT(reass_status == part->out[i].reass_status); + + switch (reass_status) { + case ODP_PACKET_REASS_COMPLETE: + CU_ASSERT(odp_packet_reass_info(pkt, &reass) == 0); + CU_ASSERT(part->out[i].num_frags == reass.num_frags); + /* FALLTHROUGH */ + case ODP_PACKET_REASS_NONE: pkto[i] = pkt; num_pkts = 1; - } else { - odp_packet_t frags[MAX_FRAGS]; - int j; - + break; + case ODP_PACKET_REASS_INCOMPLETE: CU_ASSERT(0 == odp_packet_reass_partial_state(pkt, frags, &reass_state)); num_pkts = reass_state.num_frags; @@ -573,6 +643,10 @@ static int recv_pkts_inline(const ipsec_test_part *part, CU_ASSERT_FATAL(i + num_pkts <= part->num_pkt); for (j = 0; j < num_pkts; j++) pkto[i + j] = frags[j]; + break; + default: + CU_FAIL("Unknown reassembly status"); + break; } for (; num_pkts > 0; num_pkts--) @@ -625,9 +699,7 @@ static int ipsec_process_in(const ipsec_test_part *part, odp_event_t event; odp_event_subtype_t subtype; - do { - event = odp_queue_deq(suite_context.queue); - } while (event == ODP_EVENT_INVALID); + event = recv_pkt_async_inbound(part->out[i].status); CU_ASSERT(odp_event_is_valid(event) == 1); CU_ASSERT_EQUAL(ODP_EVENT_PACKET, @@ -680,9 +752,7 @@ static int ipsec_send_out_one(const ipsec_test_part *part, odp_event_t event; odp_event_subtype_t subtype; - do { - event = odp_queue_deq(suite_context.queue); - } while (event == ODP_EVENT_INVALID); + event = recv_event(suite_context.queue, EVENT_WAIT_TIME); CU_ASSERT(odp_event_is_valid(event) == 1); CU_ASSERT_EQUAL(ODP_EVENT_PACKET, @@ -764,7 +834,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, 0); if (ODP_EVENT_INVALID != ev) { CU_ASSERT(odp_event_is_valid(ev) == 1); CU_ASSERT_EQUAL(ODP_EVENT_PACKET, @@ -779,7 +849,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, 0); if (ODP_EVENT_INVALID != ev) { CU_ASSERT(odp_event_is_valid(ev) == 1); CU_ASSERT_EQUAL(ODP_EVENT_PACKET, @@ -878,6 +948,11 @@ static void verify_in(const ipsec_test_part *part, if (ODP_IPSEC_SA_INVALID != sa) CU_ASSERT_EQUAL(IPSEC_SA_CTX, odp_ipsec_sa_context(sa)); + if (suite_context.inbound_op_mode != ODP_IPSEC_OP_MODE_SYNC) { + uint32_t len = part->pkt_in->len - part->pkt_in->l3_offset; + + CU_ASSERT(result.orig_ip_len == len); + } } ipsec_check_packet(part->out[i].pkt_res, pkto[i], @@ -1005,7 +1080,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; @@ -1033,11 +1108,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; @@ -1054,19 +1134,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_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"); @@ -1086,6 +1227,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; @@ -1115,14 +1261,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; - } - } if (mode == ODP_IPSEC_OP_MODE_INLINE) { pktio = pktio_create(pool); @@ -1159,6 +1297,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); @@ -1166,7 +1317,7 @@ int ipsec_config(odp_instance_t ODP_UNUSED inst) ipsec_config.inbound_mode = suite_context.inbound_op_mode; ipsec_config.outbound_mode = suite_context.outbound_op_mode; ipsec_config.outbound.all_chksum = ~0; - ipsec_config.inbound.default_queue = suite_context.queue; + ipsec_config.inbound.default_queue = suite_context.default_queue; ipsec_config.inbound.parse_level = ODP_PROTO_LAYER_ALL; ipsec_config.inbound.chksums.all_chksum = ~0; ipsec_config.stats_en = true; @@ -1242,7 +1393,7 @@ 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. */ odp_pktio_t pktio = odp_pktio_lookup("loop"); @@ -1252,9 +1403,9 @@ 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"); } if (ODP_POOL_INVALID != pool) { diff --git a/test/validation/api/ipsec/ipsec.h b/test/validation/api/ipsec/ipsec.h index b899fce48..6edce03d0 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); @@ -39,8 +42,10 @@ struct suite_context_s { odp_ipsec_op_mode_t inbound_op_mode; odp_ipsec_op_mode_t outbound_op_mode; odp_pool_t pool; + 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; @@ -85,6 +90,8 @@ typedef struct { int num_pkt; struct { odp_ipsec_op_status_t status; + odp_packet_reass_status_t reass_status; + uint16_t num_frags; const ipsec_test_packet *pkt_res; odp_proto_l3_type_t l3_type; odp_proto_l4_type_t l4_type; diff --git a/test/validation/api/ipsec/ipsec_async.c b/test/validation/api/ipsec/ipsec_async.c index 8f818a94e..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,19 +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.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 bd34f6cc4..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,21 +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.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 5cda43b74..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,21 +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.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, }; diff --git a/test/validation/api/ipsec/ipsec_test_in.c b/test/validation/api/ipsec/ipsec_test_in.c index ef6996f1d..bcdcd4e83 100644 --- a/test/validation/api/ipsec/ipsec_test_in.c +++ b/test/validation/api/ipsec/ipsec_test_in.c @@ -1772,7 +1772,8 @@ static void test_multi_out_in(odp_ipsec_sa_t out_sa, uint8_t tunnel_ip_ver, int num_input_packets, ipsec_test_packet *input_packets[], - ipsec_test_packet *result_packet) + ipsec_test_packet *result_packet, + odp_packet_reass_status_t reass_status) { uint8_t ver_ihl = result_packet->data[result_packet->l3_offset]; odp_bool_t is_result_ipv6 = (ODPH_IPV4HDR_VER(ver_ihl) == ODPH_IPV6); @@ -1800,6 +1801,8 @@ static void test_multi_out_in(odp_ipsec_sa_t out_sa, if (i == num_input_packets - 1) { part_prep_plain(&test_in, 1, is_result_ipv6, true); test_in.out[0].pkt_res = result_packet; + test_in.out[0].reass_status = reass_status; + test_in.out[0].num_frags = num_input_packets; } ipsec_test_packet_from_pkt(&test_pkt, &pkt); test_in.pkt_in = &test_pkt; @@ -1820,7 +1823,8 @@ static void test_in_ipv4_esp_reass_success_two_frags(odp_ipsec_sa_t out_sa, test_multi_out_in(out_sa, in_sa, ODPH_IPV4, ARRAY_SIZE(input_packets), input_packets, - result_packet); + result_packet, + ODP_PACKET_REASS_COMPLETE); } static void test_in_ipv4_esp_reass_success_four_frags(odp_ipsec_sa_t out_sa, @@ -1837,7 +1841,8 @@ static void test_in_ipv4_esp_reass_success_four_frags(odp_ipsec_sa_t out_sa, test_multi_out_in(out_sa, in_sa, ODPH_IPV4, ARRAY_SIZE(input_packets), input_packets, - result_packet); + result_packet, + ODP_PACKET_REASS_COMPLETE); } static void test_in_ipv4_esp_reass_success_two_frags_ooo(odp_ipsec_sa_t out_sa, @@ -1852,7 +1857,8 @@ static void test_in_ipv4_esp_reass_success_two_frags_ooo(odp_ipsec_sa_t out_sa, test_multi_out_in(out_sa, in_sa, ODPH_IPV4, ARRAY_SIZE(input_packets), input_packets, - result_packet); + result_packet, + ODP_PACKET_REASS_COMPLETE); } static void test_in_ipv4_esp_reass_success_four_frags_ooo(odp_ipsec_sa_t out_sa, @@ -1869,7 +1875,8 @@ static void test_in_ipv4_esp_reass_success_four_frags_ooo(odp_ipsec_sa_t out_sa, test_multi_out_in(out_sa, in_sa, ODPH_IPV4, ARRAY_SIZE(input_packets), input_packets, - result_packet); + result_packet, + ODP_PACKET_REASS_COMPLETE); } static void test_in_ipv4_esp_reass_incomp_missing(odp_ipsec_sa_t out_sa, @@ -1883,7 +1890,8 @@ static void test_in_ipv4_esp_reass_incomp_missing(odp_ipsec_sa_t out_sa, test_multi_out_in(out_sa, in_sa, ODPH_IPV4, ARRAY_SIZE(input_packets), input_packets, - result_packet); + result_packet, + ODP_PACKET_REASS_INCOMPLETE); } static void test_in_ipv4_esp_reass_success(void) @@ -2001,7 +2009,8 @@ static void test_in_ipv6_esp_reass_success_two_frags(odp_ipsec_sa_t out_sa, test_multi_out_in(out_sa, in_sa, ODPH_IPV6, ARRAY_SIZE(input_packets), input_packets, - result_packet); + result_packet, + ODP_PACKET_REASS_COMPLETE); } static void test_in_ipv6_esp_reass_success_four_frags(odp_ipsec_sa_t out_sa, @@ -2018,7 +2027,8 @@ static void test_in_ipv6_esp_reass_success_four_frags(odp_ipsec_sa_t out_sa, test_multi_out_in(out_sa, in_sa, ODPH_IPV6, ARRAY_SIZE(input_packets), input_packets, - result_packet); + result_packet, + ODP_PACKET_REASS_COMPLETE); } static void test_in_ipv6_esp_reass_success_two_frags_ooo(odp_ipsec_sa_t out_sa, @@ -2033,7 +2043,8 @@ static void test_in_ipv6_esp_reass_success_two_frags_ooo(odp_ipsec_sa_t out_sa, test_multi_out_in(out_sa, in_sa, ODPH_IPV6, ARRAY_SIZE(input_packets), input_packets, - result_packet); + result_packet, + ODP_PACKET_REASS_COMPLETE); } static void test_in_ipv6_esp_reass_success_four_frags_ooo(odp_ipsec_sa_t out_sa, @@ -2050,7 +2061,8 @@ static void test_in_ipv6_esp_reass_success_four_frags_ooo(odp_ipsec_sa_t out_sa, test_multi_out_in(out_sa, in_sa, ODPH_IPV6, ARRAY_SIZE(input_packets), input_packets, - result_packet); + result_packet, + ODP_PACKET_REASS_COMPLETE); } static void test_in_ipv6_esp_reass_incomp_missing(odp_ipsec_sa_t out_sa, @@ -2064,7 +2076,8 @@ static void test_in_ipv6_esp_reass_incomp_missing(odp_ipsec_sa_t out_sa, test_multi_out_in(out_sa, in_sa, ODPH_IPV6, ARRAY_SIZE(input_packets), input_packets, - result_packet); + result_packet, + ODP_PACKET_REASS_INCOMPLETE); } static void test_in_ipv6_esp_reass_success(void) diff --git a/test/validation/api/ipsec/reass_test_vectors.c b/test/validation/api/ipsec/reass_test_vectors.c new file mode 100644 index 000000000..c3bb2bfd4 --- /dev/null +++ b/test/validation/api/ipsec/reass_test_vectors.c @@ -0,0 +1,353 @@ +/* Copyright (c) 2021, Marvell + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "ipsec.h" + +/* The source file includes below test vectors */ + +/* IPv6: + * + * 1) pkt_ipv6_udp_p1 + * pkt_ipv6_udp_p1_f1 + * pkt_ipv6_udp_p1_f2 + * + * 2) pkt_ipv6_udp_p2 + * pkt_ipv6_udp_p2_f1 + * pkt_ipv6_udp_p2_f2 + * pkt_ipv6_udp_p2_f3 + * pkt_ipv6_udp_p2_f4 + */ + +/* IPv4: + * + * 1) pkt_ipv4_udp_p1 + * pkt_ipv4_udp_p1_f1 + * pkt_ipv4_udp_p1_f2 + * + * 2) pkt_ipv4_udp_p2 + * pkt_ipv4_udp_p2_f1 + * pkt_ipv4_udp_p2_f2 + * pkt_ipv4_udp_p2_f3 + * pkt_ipv4_udp_p2_f4 + */ + +ipsec_test_packet pkt_ipv6_udp_p1 = { + .len = 1514, + .l2_offset = 0, + .l3_offset = 14, + .l4_offset = 54, + .data = { + /* ETH */ + 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, + 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x86, 0xdd, + + /* IP */ + 0x60, 0x00, 0x00, 0x00, 0x05, 0xb4, 0x11, 0x40, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x0d, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x02, 0x00, 0x00, 0x02, + + /* UDP */ + 0x08, 0x00, 0x27, 0x10, 0x05, 0xb4, 0x2b, 0xe8, + }, +}; + +ipsec_test_packet pkt_ipv6_udp_p1_f1 = { + .len = 1398, + .l2_offset = 0, + .l3_offset = 14, + .l4_offset = 62, + .data = { + /* ETH */ + 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, + 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x86, 0xdd, + + /* IP */ + 0x60, 0x00, 0x00, 0x00, 0x05, 0x40, 0x2c, 0x40, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x0d, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x02, 0x00, 0x00, 0x02, + 0x11, 0x00, 0x00, 0x01, 0x5c, 0x92, 0xac, 0xf1, + + /* UDP */ + 0x08, 0x00, 0x27, 0x10, 0x05, 0xb4, 0x2b, 0xe8, + }, +}; + +ipsec_test_packet pkt_ipv6_udp_p1_f2 = { + .len = 186, + .l2_offset = 0, + .l3_offset = 14, + .l4_offset = 62, + .data = { + /* ETH */ + 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, + 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x86, 0xdd, + + /* IP */ + 0x60, 0x00, 0x00, 0x00, 0x00, 0x84, 0x2c, 0x40, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x0d, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x02, 0x00, 0x00, 0x02, + 0x11, 0x00, 0x05, 0x38, 0x5c, 0x92, 0xac, 0xf1, + }, +}; + +ipsec_test_packet pkt_ipv6_udp_p2 = { + .len = 4496, + .l2_offset = 0, + .l3_offset = 14, + .l4_offset = 54, + .data = { + /* ETH */ + 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, + 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x86, 0xdd, + + /* IP */ + 0x60, 0x00, 0x00, 0x00, 0x11, 0x5a, 0x11, 0x40, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x0d, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x02, 0x00, 0x00, 0x02, + + /* UDP */ + 0x08, 0x00, 0x27, 0x10, 0x11, 0x5a, 0x8a, 0x11, + }, +}; + +ipsec_test_packet pkt_ipv6_udp_p2_f1 = { + .len = 1398, + .l2_offset = 0, + .l3_offset = 14, + .l4_offset = 62, + .data = { + /* ETH */ + 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, + 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x86, 0xdd, + + /* IP */ + 0x60, 0x00, 0x00, 0x00, 0x05, 0x40, 0x2c, 0x40, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x0d, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x02, 0x00, 0x00, 0x02, + 0x11, 0x00, 0x00, 0x01, 0x64, 0x6c, 0x68, 0x9f, + + /* UDP */ + 0x08, 0x00, 0x27, 0x10, 0x11, 0x5a, 0x8a, 0x11, + }, +}; + +ipsec_test_packet pkt_ipv6_udp_p2_f2 = { + .len = 1398, + .l2_offset = 0, + .l3_offset = 14, + .l4_offset = 62, + .data = { + /* ETH */ + 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, + 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x86, 0xdd, + + /* IP */ + 0x60, 0x00, 0x00, 0x00, 0x05, 0x40, 0x2c, 0x40, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x0d, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x02, 0x00, 0x00, 0x02, + 0x11, 0x00, 0x05, 0x39, 0x64, 0x6c, 0x68, 0x9f, + }, +}; + +ipsec_test_packet pkt_ipv6_udp_p2_f3 = { + .len = 1398, + .l2_offset = 0, + .l3_offset = 14, + .l4_offset = 62, + .data = { + /* ETH */ + 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, + 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x86, 0xdd, + + /* IP */ + 0x60, 0x00, 0x00, 0x00, 0x05, 0x40, 0x2c, 0x40, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x0d, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x02, 0x00, 0x00, 0x02, + 0x11, 0x00, 0x0a, 0x71, 0x64, 0x6c, 0x68, 0x9f, + }, +}; + +ipsec_test_packet pkt_ipv6_udp_p2_f4 = { + .len = 496, + .l2_offset = 0, + .l3_offset = 14, + .l4_offset = 62, + .data = { + /* ETH */ + 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, + 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x86, 0xdd, + + /* IP */ + 0x60, 0x00, 0x00, 0x00, 0x01, 0xba, 0x2c, 0x40, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x0d, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x02, 0x00, 0x00, 0x02, + 0x11, 0x00, 0x0f, 0xa8, 0x64, 0x6c, 0x68, 0x9f, + }, +}; + +ipsec_test_packet pkt_ipv4_udp_p1 = { + .len = 1514, + .l2_offset = 0, + .l3_offset = 14, + .l4_offset = 34, + .data = { + /* ETH */ + 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, + 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x08, 0x00, + + /* IP */ + 0x45, 0x00, 0x05, 0xdc, 0x00, 0x01, 0x00, 0x00, + 0x40, 0x11, 0x66, 0x0d, 0x0d, 0x00, 0x00, 0x02, + 0x02, 0x00, 0x00, 0x02, + + /* UDP */ + 0x08, 0x00, 0x27, 0x10, 0x05, 0xc8, 0xb8, 0x4c, + }, +}; + +ipsec_test_packet pkt_ipv4_udp_p1_f1 = { + .len = 1434, + .l2_offset = 0, + .l3_offset = 14, + .l4_offset = 34, + .data = { + /* ETH */ + 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, + 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x08, 0x00, + + /* IP */ + 0x45, 0x00, 0x05, 0x8c, 0x00, 0x01, 0x20, 0x00, + 0x40, 0x11, 0x46, 0x5d, 0x0d, 0x00, 0x00, 0x02, + 0x02, 0x00, 0x00, 0x02, + + /* UDP */ + 0x08, 0x00, 0x27, 0x10, 0x05, 0xc8, 0xb8, 0x4c, + }, +}; + +ipsec_test_packet pkt_ipv4_udp_p1_f2 = { + .len = 114, + .l2_offset = 0, + .l3_offset = 14, + .l4_offset = 34, + .data = { + /* ETH */ + 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, + 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x08, 0x00, + + /* IP */ + 0x45, 0x00, 0x00, 0x64, 0x00, 0x01, 0x00, 0xaf, + 0x40, 0x11, 0x6a, 0xd6, 0x0d, 0x00, 0x00, 0x02, + 0x02, 0x00, 0x00, 0x02, + }, +}; + +ipsec_test_packet pkt_ipv4_udp_p2 = { + .len = 4496, + .l2_offset = 0, + .l3_offset = 14, + .l4_offset = 34, + .data = { + /* ETH */ + 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, + 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x08, 0x00, + + /* IP */ + 0x45, 0x00, 0x11, 0x82, 0x00, 0x02, 0x00, 0x00, + 0x40, 0x11, 0x5a, 0x66, 0x0d, 0x00, 0x00, 0x02, + 0x02, 0x00, 0x00, 0x02, + + /* UDP */ + 0x08, 0x00, 0x27, 0x10, 0x11, 0x6e, 0x16, 0x76, + }, +}; + +ipsec_test_packet pkt_ipv4_udp_p2_f1 = { + .len = 1434, + .l2_offset = 0, + .l3_offset = 14, + .l4_offset = 34, + .data = { + /* ETH */ + 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, + 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x08, 0x00, + + /* IP */ + 0x45, 0x00, 0x05, 0x8c, 0x00, 0x02, 0x20, 0x00, + 0x40, 0x11, 0x46, 0x5c, 0x0d, 0x00, 0x00, 0x02, + 0x02, 0x00, 0x00, 0x02, + + /* UDP */ + 0x08, 0x00, 0x27, 0x10, 0x11, 0x6e, 0x16, 0x76, + }, +}; + +ipsec_test_packet pkt_ipv4_udp_p2_f2 = { + .len = 1434, + .l2_offset = 0, + .l3_offset = 14, + .l4_offset = 34, + .data = { + /* ETH */ + 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, + 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x08, 0x00, + + /* IP */ + 0x45, 0x00, 0x05, 0x8c, 0x00, 0x02, 0x20, 0xaf, + 0x40, 0x11, 0x45, 0xad, 0x0d, 0x00, 0x00, 0x02, + 0x02, 0x00, 0x00, 0x02, + }, +}; + +ipsec_test_packet pkt_ipv4_udp_p2_f3 = { + .len = 1434, + .l2_offset = 0, + .l3_offset = 14, + .l4_offset = 34, + .data = { + /* ETH */ + 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, + 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x08, 0x00, + + /* IP */ + 0x45, 0x00, 0x05, 0x8c, 0x00, 0x02, 0x21, 0x5e, + 0x40, 0x11, 0x44, 0xfe, 0x0d, 0x00, 0x00, 0x02, + 0x02, 0x00, 0x00, 0x02, + }, +}; + +ipsec_test_packet pkt_ipv4_udp_p2_f4 = { + .len = 296, + .l2_offset = 0, + .l3_offset = 14, + .l4_offset = 34, + .data = { + /* ETH */ + 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, + 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x08, 0x00, + + /* IP */ + 0x45, 0x00, 0x01, 0x1a, 0x00, 0x02, 0x02, 0x0d, + 0x40, 0x11, 0x68, 0xc1, 0x0d, 0x00, 0x00, 0x02, + 0x02, 0x00, 0x00, 0x02, + }, +}; diff --git a/test/validation/api/ipsec/reass_test_vectors.h b/test/validation/api/ipsec/reass_test_vectors.h index 4fbb1ebaf..02b41c573 100644 --- a/test/validation/api/ipsec/reass_test_vectors.h +++ b/test/validation/api/ipsec/reass_test_vectors.h @@ -7,351 +7,23 @@ #ifndef _ODP_REASS_TEST_VECTORS_H_ #define _ODP_REASS_TEST_VECTORS_H_ -/* The header file includes below test vectors */ - -/* IPv6: - * - * 1) pkt_ipv6_udp_p1 - * pkt_ipv6_udp_p1_f1 - * pkt_ipv6_udp_p1_f2 - * - * 2) pkt_ipv6_udp_p2 - * pkt_ipv6_udp_p2_f1 - * pkt_ipv6_udp_p2_f2 - * pkt_ipv6_udp_p2_f3 - * pkt_ipv6_udp_p2_f4 - */ - -/* IPv4: - * - * 1) pkt_ipv4_udp_p1 - * pkt_ipv4_udp_p1_f1 - * pkt_ipv4_udp_p1_f2 - * - * 2) pkt_ipv4_udp_p2 - * pkt_ipv4_udp_p2_f1 - * pkt_ipv4_udp_p2_f2 - * pkt_ipv4_udp_p2_f3 - * pkt_ipv4_udp_p2_f4 - */ - -static ipsec_test_packet pkt_ipv6_udp_p1 = { - .len = 1514, - .l2_offset = 0, - .l3_offset = 14, - .l4_offset = 54, - .data = { - /* ETH */ - 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, - 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x86, 0xdd, - - /* IP */ - 0x60, 0x00, 0x00, 0x00, 0x05, 0xb4, 0x11, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x0d, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x02, 0x00, 0x00, 0x02, - - /* UDP */ - 0x08, 0x00, 0x27, 0x10, 0x05, 0xb4, 0x2b, 0xe8, - }, -}; - -static ipsec_test_packet pkt_ipv6_udp_p1_f1 = { - .len = 1398, - .l2_offset = 0, - .l3_offset = 14, - .l4_offset = 62, - .data = { - /* ETH */ - 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, - 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x86, 0xdd, - - /* IP */ - 0x60, 0x00, 0x00, 0x00, 0x05, 0x40, 0x2c, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x0d, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x02, 0x00, 0x00, 0x02, - 0x11, 0x00, 0x00, 0x01, 0x5c, 0x92, 0xac, 0xf1, - - /* UDP */ - 0x08, 0x00, 0x27, 0x10, 0x05, 0xb4, 0x2b, 0xe8, - }, -}; - -static ipsec_test_packet pkt_ipv6_udp_p1_f2 = { - .len = 186, - .l2_offset = 0, - .l3_offset = 14, - .l4_offset = 62, - .data = { - /* ETH */ - 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, - 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x86, 0xdd, - - /* IP */ - 0x60, 0x00, 0x00, 0x00, 0x00, 0x84, 0x2c, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x0d, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x02, 0x00, 0x00, 0x02, - 0x11, 0x00, 0x05, 0x38, 0x5c, 0x92, 0xac, 0xf1, - }, -}; - -static ipsec_test_packet pkt_ipv6_udp_p2 = { - .len = 4496, - .l2_offset = 0, - .l3_offset = 14, - .l4_offset = 54, - .data = { - /* ETH */ - 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, - 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x86, 0xdd, - - /* IP */ - 0x60, 0x00, 0x00, 0x00, 0x11, 0x5a, 0x11, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x0d, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x02, 0x00, 0x00, 0x02, - - /* UDP */ - 0x08, 0x00, 0x27, 0x10, 0x11, 0x5a, 0x8a, 0x11, - }, -}; - -static ipsec_test_packet pkt_ipv6_udp_p2_f1 = { - .len = 1398, - .l2_offset = 0, - .l3_offset = 14, - .l4_offset = 62, - .data = { - /* ETH */ - 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, - 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x86, 0xdd, - - /* IP */ - 0x60, 0x00, 0x00, 0x00, 0x05, 0x40, 0x2c, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x0d, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x02, 0x00, 0x00, 0x02, - 0x11, 0x00, 0x00, 0x01, 0x64, 0x6c, 0x68, 0x9f, - - /* UDP */ - 0x08, 0x00, 0x27, 0x10, 0x11, 0x5a, 0x8a, 0x11, - }, -}; - -static ipsec_test_packet pkt_ipv6_udp_p2_f2 = { - .len = 1398, - .l2_offset = 0, - .l3_offset = 14, - .l4_offset = 62, - .data = { - /* ETH */ - 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, - 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x86, 0xdd, - - /* IP */ - 0x60, 0x00, 0x00, 0x00, 0x05, 0x40, 0x2c, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x0d, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x02, 0x00, 0x00, 0x02, - 0x11, 0x00, 0x05, 0x39, 0x64, 0x6c, 0x68, 0x9f, - }, -}; - -static ipsec_test_packet pkt_ipv6_udp_p2_f3 = { - .len = 1398, - .l2_offset = 0, - .l3_offset = 14, - .l4_offset = 62, - .data = { - /* ETH */ - 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, - 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x86, 0xdd, - - /* IP */ - 0x60, 0x00, 0x00, 0x00, 0x05, 0x40, 0x2c, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x0d, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x02, 0x00, 0x00, 0x02, - 0x11, 0x00, 0x0a, 0x71, 0x64, 0x6c, 0x68, 0x9f, - }, -}; - -static ipsec_test_packet pkt_ipv6_udp_p2_f4 = { - .len = 496, - .l2_offset = 0, - .l3_offset = 14, - .l4_offset = 62, - .data = { - /* ETH */ - 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, - 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x86, 0xdd, - - /* IP */ - 0x60, 0x00, 0x00, 0x00, 0x01, 0xba, 0x2c, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x0d, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x02, 0x00, 0x00, 0x02, - 0x11, 0x00, 0x0f, 0xa8, 0x64, 0x6c, 0x68, 0x9f, - }, -}; - -static ipsec_test_packet pkt_ipv4_udp_p1 = { - .len = 1514, - .l2_offset = 0, - .l3_offset = 14, - .l4_offset = 34, - .data = { - /* ETH */ - 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, - 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x08, 0x00, - - /* IP */ - 0x45, 0x00, 0x05, 0xdc, 0x00, 0x01, 0x00, 0x00, - 0x40, 0x11, 0x66, 0x0d, 0x0d, 0x00, 0x00, 0x02, - 0x02, 0x00, 0x00, 0x02, - - /* UDP */ - 0x08, 0x00, 0x27, 0x10, 0x05, 0xc8, 0xb8, 0x4c, - }, -}; - -static ipsec_test_packet pkt_ipv4_udp_p1_f1 = { - .len = 1434, - .l2_offset = 0, - .l3_offset = 14, - .l4_offset = 34, - .data = { - /* ETH */ - 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, - 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x08, 0x00, - - /* IP */ - 0x45, 0x00, 0x05, 0x8c, 0x00, 0x01, 0x20, 0x00, - 0x40, 0x11, 0x46, 0x5d, 0x0d, 0x00, 0x00, 0x02, - 0x02, 0x00, 0x00, 0x02, - - /* UDP */ - 0x08, 0x00, 0x27, 0x10, 0x05, 0xc8, 0xb8, 0x4c, - }, -}; - -static ipsec_test_packet pkt_ipv4_udp_p1_f2 = { - .len = 114, - .l2_offset = 0, - .l3_offset = 14, - .l4_offset = 34, - .data = { - /* ETH */ - 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, - 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x08, 0x00, - - /* IP */ - 0x45, 0x00, 0x00, 0x64, 0x00, 0x01, 0x00, 0xaf, - 0x40, 0x11, 0x6a, 0xd6, 0x0d, 0x00, 0x00, 0x02, - 0x02, 0x00, 0x00, 0x02, - }, -}; - -static ipsec_test_packet pkt_ipv4_udp_p2 = { - .len = 4496, - .l2_offset = 0, - .l3_offset = 14, - .l4_offset = 34, - .data = { - /* ETH */ - 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, - 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x08, 0x00, - - /* IP */ - 0x45, 0x00, 0x11, 0x82, 0x00, 0x02, 0x00, 0x00, - 0x40, 0x11, 0x5a, 0x66, 0x0d, 0x00, 0x00, 0x02, - 0x02, 0x00, 0x00, 0x02, - - /* UDP */ - 0x08, 0x00, 0x27, 0x10, 0x11, 0x6e, 0x16, 0x76, - }, -}; - -static ipsec_test_packet pkt_ipv4_udp_p2_f1 = { - .len = 1434, - .l2_offset = 0, - .l3_offset = 14, - .l4_offset = 34, - .data = { - /* ETH */ - 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, - 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x08, 0x00, - - /* IP */ - 0x45, 0x00, 0x05, 0x8c, 0x00, 0x02, 0x20, 0x00, - 0x40, 0x11, 0x46, 0x5c, 0x0d, 0x00, 0x00, 0x02, - 0x02, 0x00, 0x00, 0x02, - - /* UDP */ - 0x08, 0x00, 0x27, 0x10, 0x11, 0x6e, 0x16, 0x76, - }, -}; - -static ipsec_test_packet pkt_ipv4_udp_p2_f2 = { - .len = 1434, - .l2_offset = 0, - .l3_offset = 14, - .l4_offset = 34, - .data = { - /* ETH */ - 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, - 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x08, 0x00, - - /* IP */ - 0x45, 0x00, 0x05, 0x8c, 0x00, 0x02, 0x20, 0xaf, - 0x40, 0x11, 0x45, 0xad, 0x0d, 0x00, 0x00, 0x02, - 0x02, 0x00, 0x00, 0x02, - }, -}; - -static ipsec_test_packet pkt_ipv4_udp_p2_f3 = { - .len = 1434, - .l2_offset = 0, - .l3_offset = 14, - .l4_offset = 34, - .data = { - /* ETH */ - 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, - 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x08, 0x00, - - /* IP */ - 0x45, 0x00, 0x05, 0x8c, 0x00, 0x02, 0x21, 0x5e, - 0x40, 0x11, 0x44, 0xfe, 0x0d, 0x00, 0x00, 0x02, - 0x02, 0x00, 0x00, 0x02, - }, -}; - -static ipsec_test_packet pkt_ipv4_udp_p2_f4 = { - .len = 296, - .l2_offset = 0, - .l3_offset = 14, - .l4_offset = 34, - .data = { - /* ETH */ - 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, - 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0x08, 0x00, - - /* IP */ - 0x45, 0x00, 0x01, 0x1a, 0x00, 0x02, 0x02, 0x0d, - 0x40, 0x11, 0x68, 0xc1, 0x0d, 0x00, 0x00, 0x02, - 0x02, 0x00, 0x00, 0x02, - }, -}; +extern ipsec_test_packet pkt_ipv6_udp_p1; +extern ipsec_test_packet pkt_ipv6_udp_p1_f1; +extern ipsec_test_packet pkt_ipv6_udp_p1_f2; +extern ipsec_test_packet pkt_ipv6_udp_p2; +extern ipsec_test_packet pkt_ipv6_udp_p2_f1; +extern ipsec_test_packet pkt_ipv6_udp_p2_f2; +extern ipsec_test_packet pkt_ipv6_udp_p2_f3; +extern ipsec_test_packet pkt_ipv6_udp_p2_f4; + +extern ipsec_test_packet pkt_ipv4_udp_p1; +extern ipsec_test_packet pkt_ipv4_udp_p1_f1; +extern ipsec_test_packet pkt_ipv4_udp_p1_f2; +extern ipsec_test_packet pkt_ipv4_udp_p2; +extern ipsec_test_packet pkt_ipv4_udp_p2_f1; +extern ipsec_test_packet pkt_ipv4_udp_p2_f2; +extern ipsec_test_packet pkt_ipv4_udp_p2_f3; +extern ipsec_test_packet pkt_ipv4_udp_p2_f4; static inline void test_vector_payload_populate(ipsec_test_packet *pkt, odp_bool_t first_frag) |