aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnoob Joseph <anoobj@marvell.com>2021-03-27 07:02:21 +0000
committerMatias Elo <matias.elo@nokia.com>2021-05-05 10:33:29 +0300
commit2fb1886ebb0a7fef6688d0ffbecc9d51336c0c6c (patch)
treebe923e8b7d6bbf0fee3ffe8178d689d7f0d8d21b
parent5cd09224492a6c99b6d0f4fc521f913941693cf8 (diff)
validation: ipsec: add reassembly handling in recv_pkts_inline
Update internal function such that it would handle reassembled packets as well. Signed-off-by: Anoob Joseph <anoobj@marvell.com> Reviewed-by: Janne Peltonen <janne.peltonen@nokia.com>
-rw-r--r--test/validation/api/ipsec/ipsec.c37
1 files changed, 29 insertions, 8 deletions
diff --git a/test/validation/api/ipsec/ipsec.c b/test/validation/api/ipsec/ipsec.c
index ab2ea707c..ca6a4a316 100644
--- a/test/validation/api/ipsec/ipsec.c
+++ b/test/validation/api/ipsec/ipsec.c
@@ -507,6 +507,8 @@ static int send_pkts(const ipsec_test_part part[], int num_part)
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;
@@ -534,17 +536,36 @@ static int recv_pkts_inline(const ipsec_test_part *part,
ev = odp_queue_deq(suite_context.queue);
if (ODP_EVENT_INVALID != ev) {
+ odp_packet_t pkt;
+ int num_pkts = 0;
+
CU_ASSERT(odp_event_is_valid(ev) == 1);
- CU_ASSERT_EQUAL(ODP_EVENT_PACKET,
- odp_event_types(ev, &subtype));
- CU_ASSERT_EQUAL(ODP_EVENT_PACKET_IPSEC,
- subtype);
+ CU_ASSERT_EQUAL(ODP_EVENT_PACKET, odp_event_type(ev));
+ pkt = odp_packet_from_event(ev);
+
CU_ASSERT(!part->out[i].status.error.sa_lookup);
- pkto[i] = odp_ipsec_packet_from_event(ev);
- CU_ASSERT(odp_packet_subtype(pkto[i]) ==
- ODP_EVENT_PACKET_IPSEC);
- i++;
+ reass_status = odp_packet_reass_status(pkt);
+ if (ODP_PACKET_REASS_INCOMPLETE != reass_status) {
+ pkto[i] = pkt;
+ num_pkts = 1;
+ } else {
+ odp_packet_t frags[MAX_FRAGS];
+ int j;
+
+ CU_ASSERT(0 ==
+ odp_packet_reass_partial_state(pkt, frags, &reass_state));
+ num_pkts = reass_state.num_frags;
+
+ CU_ASSERT_FATAL(i + num_pkts <= part->num_pkt);
+ for (j = 0; j < num_pkts; j++)
+ pkto[i + j] = frags[j];
+ }
+
+ for (; num_pkts > 0; num_pkts--)
+ CU_ASSERT(odp_packet_subtype(pkto[i++]) ==
+ ODP_EVENT_PACKET_IPSEC);
+
continue;
}
}