static int send_packets(odp_pktout_queue_t pktout, odp_packet_t *pkt_tbl, unsigned pkts) { unsigned tx_drops; unsigned sent = 0; if (pkts == 0) return 0; while (sent < pkts) { int ret; ret = odp_pktout_send(pktout, &pkt_tbl[sent], pkts - sent); if (odp_likely(ret > 0)) sent += ret; else break; } tx_drops = pkts - sent; if (odp_unlikely(tx_drops)) odp_packet_free_multi(&pkt_tbl[sent], tx_drops); return sent; }
static int send_recv(odp_packet_t packet, int send_nb, int expt_nb) { static int test_id = 0; printf("send_recv %d\n", test_id++); odp_pktio_t pktio; odp_queue_t outq_def; odp_packet_t pkt_tbl[MAX_PKT_BURST]; pktio = odp_pktio_lookup(pktio_valid_name); if (pktio == ODP_PKTIO_INVALID) { printf("Error: lookup of pktio %s failed\n", pktio_valid_name); return 1; } outq_def = odp_pktio_outq_getdef(pktio); if (outq_def == ODP_QUEUE_INVALID) { printf("Error: def output-Q query\n"); return 1; } int i; for ( i = 0; i < send_nb; ++i ) { odp_queue_enq(outq_def, (odp_event_t)packet); } int ret = 0; int start = __k1_read_dsu_timestamp(); while ( ret >= 0 && ret < expt_nb && ( __k1_read_dsu_timestamp() - start ) < 10 * __bsp_frequency ) { int n_pkt = odp_pktio_recv(pktio, pkt_tbl, MAX_PKT_BURST); ret += n_pkt; if (n_pkt > 0) odp_packet_free_multi(pkt_tbl, n_pkt); } test_assert_ret(ret == expt_nb); odp_packet_free(packet); printf("send_recv %d OK\n", test_id); return 0; }