Skip to content

Commit 609d7a4

Browse files
JannePeltonenMatiasElo
authored andcommitted
validation: pktio: reduce code duplication in checksum tests
SCTP checksum has its own test function that is nearly identical to the test function for IPv4 and UDP checksums. Combine the functions into one to reduce code duplication. Signed-off-by: Janne Peltonen <janne.peltonen@nokia.com> Reviewed-by: Matias Elo <matias.elo@nokia.com>
1 parent b7ed79f commit 609d7a4

1 file changed

Lines changed: 20 additions & 93 deletions

File tree

test/validation/api/pktio/pktio.c

Lines changed: 20 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -4190,7 +4190,8 @@ static int pktio_check_pktout_dont_free(void)
41904190
static void test_chksum(void (*config_fn)(odp_pktio_t, odp_pktio_t),
41914191
void (*prep_fn)(odp_packet_t pkt),
41924192
void (*test_fn)(odp_packet_t pkt),
4193-
uint32_t test_flags)
4193+
uint32_t test_flags,
4194+
int is_sctp)
41944195
{
41954196
odp_pktio_t pktio_tx, pktio_rx;
41964197
odp_pktio_t pktio[MAX_NUM_IFACES] = {ODP_PKTIO_INVALID};
@@ -4201,6 +4202,7 @@ static void test_chksum(void (*config_fn)(odp_pktio_t, odp_pktio_t),
42014202
uint32_t pkt_seq[TX_BATCH_LEN];
42024203
int ret;
42034204
int i, num_rx;
4205+
size_t hdr_len = is_sctp ? ODPH_SCTPHDR_LEN : ODPH_UDPHDR_LEN;
42044206

42054207
CU_ASSERT_FATAL(global.num_ifaces >= 1);
42064208

@@ -4225,8 +4227,12 @@ static void test_chksum(void (*config_fn)(odp_pktio_t, odp_pktio_t),
42254227
_pktio_wait_linkup(pktio[i]);
42264228
}
42274229

4228-
ret = create_packets_udp(pkt_tbl, pkt_seq, TX_BATCH_LEN, pktio_tx,
4229-
pktio_rx, false, ETH_UNICAST);
4230+
if (is_sctp)
4231+
ret = create_packets_sctp(pkt_tbl, pkt_seq, TX_BATCH_LEN, pktio_tx,
4232+
pktio_rx);
4233+
else
4234+
ret = create_packets_udp(pkt_tbl, pkt_seq, TX_BATCH_LEN, pktio_tx,
4235+
pktio_rx, false, ETH_UNICAST);
42304236
CU_ASSERT(ret == TX_BATCH_LEN);
42314237
if (ret != TX_BATCH_LEN) {
42324238
for (i = 0; i < global.num_ifaces; i++) {
@@ -4239,7 +4245,10 @@ static void test_chksum(void (*config_fn)(odp_pktio_t, odp_pktio_t),
42394245
/* Provide L3 and L4 proto for pktout HW checksum generation */
42404246
for (i = 0; i < TX_BATCH_LEN; i++) {
42414247
odp_packet_has_ipv4_set(pkt_tbl[i], true);
4242-
odp_packet_has_udp_set(pkt_tbl[i], true);
4248+
if (is_sctp)
4249+
odp_packet_has_sctp_set(pkt_tbl[i], true);
4250+
else
4251+
odp_packet_has_udp_set(pkt_tbl[i], true);
42434252
}
42444253

42454254
ret = odp_pktout_queue(pktio_tx, &pktout_queue, 1);
@@ -4252,9 +4261,11 @@ static void test_chksum(void (*config_fn)(odp_pktio_t, odp_pktio_t),
42524261
if (test_flags & TEST_WITH_REFS)
42534262
make_refs(ref_tbl, pkt_tbl, TX_BATCH_LEN);
42544263
send_packets(pktout_queue, pkt_tbl, TX_BATCH_LEN);
4255-
num_rx = wait_for_packets(&pktio_rx_info, pkt_tbl, pkt_seq,
4256-
TX_BATCH_LEN, TXRX_MODE_MULTI,
4257-
ODP_TIME_SEC_IN_NS, VECTOR_MODE_DISABLED);
4264+
4265+
num_rx = wait_for_packets_hdr(&pktio_rx_info, pkt_tbl, pkt_seq,
4266+
TX_BATCH_LEN, TXRX_MODE_MULTI,
4267+
ODP_TIME_SEC_IN_NS, hdr_len,
4268+
VECTOR_MODE_DISABLED);
42584269
CU_ASSERT(num_rx == TX_BATCH_LEN);
42594270
if (test_flags & TEST_WITH_REFS)
42604271
free_refs(ref_tbl, TX_BATCH_LEN);
@@ -4276,99 +4287,15 @@ static void pktio_test_chksum(void (*config_fn)(odp_pktio_t, odp_pktio_t),
42764287
void (*test_fn)(odp_packet_t pkt))
42774288
{
42784289
for (uint32_t flags = 0; flags < NUM_TEST_FLAG_COMBOS; flags++)
4279-
test_chksum(config_fn, prep_fn, test_fn, flags);
4280-
}
4281-
4282-
static void test_chksum_sctp(void (*config_fn)(odp_pktio_t, odp_pktio_t),
4283-
void (*prep_fn)(odp_packet_t pkt),
4284-
void (*test_fn)(odp_packet_t pkt),
4285-
uint32_t test_flags)
4286-
{
4287-
odp_pktio_t pktio_tx, pktio_rx;
4288-
odp_pktio_t pktio[MAX_NUM_IFACES] = {ODP_PKTIO_INVALID};
4289-
pktio_info_t pktio_rx_info;
4290-
odp_pktout_queue_t pktout_queue;
4291-
odp_packet_t pkt_tbl[TX_BATCH_LEN];
4292-
odp_packet_t ref_tbl[TX_BATCH_LEN];
4293-
uint32_t pkt_seq[TX_BATCH_LEN];
4294-
int ret;
4295-
int i, num_rx;
4296-
4297-
CU_ASSERT_FATAL(global.num_ifaces >= 1);
4298-
4299-
/* Open and configure interfaces */
4300-
for (i = 0; i < global.num_ifaces; ++i) {
4301-
pktio[i] = create_pktio_with_flags(i, ODP_PKTIN_MODE_DIRECT,
4302-
ODP_PKTOUT_MODE_DIRECT,
4303-
test_flags);
4304-
CU_ASSERT_FATAL(pktio[i] != ODP_PKTIO_INVALID);
4305-
}
4306-
4307-
pktio_tx = pktio[0];
4308-
pktio_rx = (global.num_ifaces > 1) ? pktio[1] : pktio_tx;
4309-
pktio_rx_info.id = pktio_rx;
4310-
pktio_rx_info.inq = ODP_QUEUE_INVALID;
4311-
pktio_rx_info.in_mode = ODP_PKTIN_MODE_DIRECT;
4312-
4313-
config_fn(pktio_tx, pktio_rx);
4314-
4315-
for (i = 0; i < global.num_ifaces; ++i) {
4316-
CU_ASSERT_FATAL(odp_pktio_start(pktio[i]) == 0);
4317-
_pktio_wait_linkup(pktio[i]);
4318-
}
4319-
4320-
ret = create_packets_sctp(pkt_tbl, pkt_seq, TX_BATCH_LEN, pktio_tx,
4321-
pktio_rx);
4322-
CU_ASSERT(ret == TX_BATCH_LEN);
4323-
if (ret != TX_BATCH_LEN) {
4324-
for (i = 0; i < global.num_ifaces; i++) {
4325-
CU_ASSERT_FATAL(odp_pktio_stop(pktio[i]) == 0);
4326-
CU_ASSERT_FATAL(odp_pktio_close(pktio[i]) == 0);
4327-
}
4328-
return;
4329-
}
4330-
4331-
/* Provide L3 and L4 proto for pktout HW checksum generation */
4332-
for (i = 0; i < TX_BATCH_LEN; i++) {
4333-
odp_packet_has_ipv4_set(pkt_tbl[i], true);
4334-
odp_packet_has_sctp_set(pkt_tbl[i], true);
4335-
}
4336-
4337-
ret = odp_pktout_queue(pktio_tx, &pktout_queue, 1);
4338-
CU_ASSERT_FATAL(ret > 0);
4339-
4340-
for (i = 0; i < TX_BATCH_LEN; i++)
4341-
if (prep_fn)
4342-
prep_fn(pkt_tbl[i]);
4343-
4344-
if (test_flags & TEST_WITH_REFS)
4345-
make_refs(ref_tbl, pkt_tbl, TX_BATCH_LEN);
4346-
send_packets(pktout_queue, pkt_tbl, TX_BATCH_LEN);
4347-
num_rx = wait_for_packets_hdr(&pktio_rx_info, pkt_tbl, pkt_seq,
4348-
TX_BATCH_LEN, TXRX_MODE_MULTI,
4349-
ODP_TIME_SEC_IN_NS, ODPH_SCTPHDR_LEN, VECTOR_MODE_DISABLED);
4350-
CU_ASSERT(num_rx == TX_BATCH_LEN);
4351-
if (test_flags & TEST_WITH_REFS)
4352-
free_refs(ref_tbl, TX_BATCH_LEN);
4353-
for (i = 0; i < num_rx; i++) {
4354-
CU_ASSERT(odp_packet_pool(pkt_tbl[i]) == expected_rx_pool(test_flags));
4355-
CU_ASSERT(odp_packet_has_ref(pkt_tbl[i]) == 0);
4356-
test_fn(pkt_tbl[i]);
4357-
odp_packet_free(pkt_tbl[i]);
4358-
}
4359-
4360-
for (i = 0; i < global.num_ifaces; i++) {
4361-
CU_ASSERT_FATAL(odp_pktio_stop(pktio[i]) == 0);
4362-
CU_ASSERT_FATAL(odp_pktio_close(pktio[i]) == 0);
4363-
}
4290+
test_chksum(config_fn, prep_fn, test_fn, flags, 0);
43644291
}
43654292

43664293
static void pktio_test_chksum_sctp(void (*config_fn)(odp_pktio_t, odp_pktio_t),
43674294
void (*prep_fn)(odp_packet_t pkt),
43684295
void (*test_fn)(odp_packet_t pkt))
43694296
{
43704297
for (uint32_t flags = 0; flags < NUM_TEST_FLAG_COMBOS; flags++)
4371-
test_chksum_sctp(config_fn, prep_fn, test_fn, flags);
4298+
test_chksum(config_fn, prep_fn, test_fn, flags, 1);
43724299
}
43734300

43744301
static int pktio_check_chksum_in_ipv4(void)

0 commit comments

Comments
 (0)