int pktin_deq_multi(queue_entry_t *qentry, odp_buffer_hdr_t *buf_hdr[], int num) { int nbr; nbr = queue_deq_multi(qentry, buf_hdr, num); if (nbr < num) { odp_packet_t pkt_tbl[QUEUE_MULTI_MAX]; odp_buffer_hdr_t *tmp_hdr_tbl[QUEUE_MULTI_MAX]; odp_buffer_t buf; int pkts, i; pkts = odp_pktio_recv(qentry->s.pktin, pkt_tbl, QUEUE_MULTI_MAX); if (pkts > 0) { for (i = 0; i < pkts; ++i) { buf = odp_buffer_from_packet(pkt_tbl[i]); tmp_hdr_tbl[i] = odp_buf_to_hdr(buf); } queue_enq_multi(qentry, tmp_hdr_tbl, pkts); } } return nbr; }
odp_buffer_hdr_t *pktin_dequeue(queue_entry_t *qentry) { odp_buffer_hdr_t *buf_hdr; buf_hdr = queue_deq(qentry); if (buf_hdr == NULL) { odp_packet_t pkt; odp_buffer_t buf; odp_packet_t pkt_tbl[QUEUE_MULTI_MAX]; odp_buffer_hdr_t *tmp_hdr_tbl[QUEUE_MULTI_MAX]; int pkts, i, j; pkts = odp_pktio_recv(qentry->s.pktin, pkt_tbl, QUEUE_MULTI_MAX); if (pkts > 0) { pkt = pkt_tbl[0]; buf = odp_buffer_from_packet(pkt); buf_hdr = odp_buf_to_hdr(buf); for (i = 1, j = 0; i < pkts; ++i) { buf = odp_buffer_from_packet(pkt_tbl[i]); tmp_hdr_tbl[j++] = odp_buf_to_hdr(buf); } queue_enq_multi(qentry, tmp_hdr_tbl, j); } } return buf_hdr; }
int pktout_enq_multi(queue_entry_t *queue, odp_buffer_hdr_t *buf_hdr[], int num) { int i; uint32_t port_id = queue->s.out_port_id; for (i = 0; i < num; i++) ti_em_cppi_set_psflags(&buf_hdr[i]->desc, port_id); return queue_enq_multi(queue, buf_hdr, num); }
static int loopback_send(pktio_entry_t *pktio_entry, odp_packet_t pkt_tbl[], unsigned len) { odp_buffer_hdr_t *hdr_tbl[QUEUE_MULTI_MAX]; queue_entry_t *qentry; unsigned i; for (i = 0; i < len; ++i) hdr_tbl[i] = odp_buf_to_hdr(_odp_packet_to_buffer(pkt_tbl[i])); qentry = queue_to_qentry(pktio_entry->s.pkt_loop.loopq); return queue_enq_multi(qentry, hdr_tbl, len); }
int pktin_enq_multi(queue_entry_t *qentry, odp_buffer_hdr_t *buf_hdr[], int num) { /* Use default action */ return queue_enq_multi(qentry, buf_hdr, num); }