@@ -4190,7 +4190,8 @@ static int pktio_check_pktout_dont_free(void)
41904190static 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
43664293static 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
43744301static int pktio_check_chksum_in_ipv4 (void )
0 commit comments