int handle_lb_qinq_bulk_set_port(struct task_base *tbase, struct rte_mbuf **mbufs, uint16_t n_pkts) { struct task_lb_qinq *task = (struct task_lb_qinq *)tbase; uint8_t out[MAX_PKT_BURST]; uint16_t j; #if RTE_VERSION < RTE_VERSION_NUM(1,8,0,0) uint32_t port_id = mbufs[0]->pkt.in_port; #else uint32_t port_id = mbufs[0]->port; #endif if (tbase->rx_pkt == rx_pkt_hw) { port_id = tbase->rx_params_hw.last_read_portid + tbase->rx_params_hw.nb_rxports; port_id = ( port_id - 1 ) % tbase->rx_params_hw.nb_rxports; port_id = tbase->rx_params_hw.rx_pq[port_id].port; } else if (tbase->rx_pkt == rx_pkt_hw1) { port_id = tbase->rx_params_hw1.rx_pq.port; } prefetch_first(mbufs, n_pkts); for (j = 0; j + PREFETCH_OFFSET < n_pkts; ++j) { #ifdef PROX_PREFETCH_OFFSET PREFETCH0(mbufs[j + PREFETCH_OFFSET]); PREFETCH0(rte_pktmbuf_mtod(mbufs[j + PREFETCH_OFFSET - 1], void *)); #endif #if RTE_VERSION < RTE_VERSION_NUM(1,8,0,0) mbufs[j]->pkt.in_port = port_id; #else mbufs[j]->port = port_id; #endif out[j] = handle_lb_qinq(task, mbufs[j]); } #ifdef PROX_PREFETCH_OFFSET PREFETCH0(rte_pktmbuf_mtod(mbufs[n_pkts - 1], void *)); for (; j < n_pkts; ++j) { #if RTE_VERSION < RTE_VERSION_NUM(1,8,0,0) mbufs[j]->pkt.in_port = port_id; #else mbufs[j]->port = port_id; #endif out[j] = handle_lb_qinq(task, mbufs[j]); } #endif return task->base.tx_pkt(&task->base, mbufs, n_pkts, out); }
void handle_unmpls_bulk(struct task_base *tbase, struct rte_mbuf **mbufs, uint16_t n_pkts) { struct task_unmpls *task = (struct task_unmpls *)tbase; uint16_t j; prefetch_first(mbufs, n_pkts); for (j = 0; j + PREFETCH_OFFSET < n_pkts; ++j) { #ifdef BRAS_PREFETCH_OFFSET PREFETCH0(mbufs[j + PREFETCH_OFFSET]); PREFETCH0(rte_pktmbuf_mtod(mbufs[j + PREFETCH_OFFSET - 1], void *)); #endif handle_unmpls(task, mbufs[j]); } #ifdef BRAS_PREFETCH_OFFSET PREFETCH0(rte_pktmbuf_mtod(mbufs[n_pkts - 1], void *)); for (; j < n_pkts; ++j) { handle_unmpls(task, mbufs[j]); } #endif task->tx_pkt(&task->base); }
int handle_lb_qinq_bulk(struct task_base *tbase, struct rte_mbuf **mbufs, uint16_t n_pkts) { struct task_lb_qinq *task = (struct task_lb_qinq *)tbase; uint8_t out[MAX_PKT_BURST]; uint16_t j; prefetch_first(mbufs, n_pkts); for (j = 0; j + PREFETCH_OFFSET < n_pkts; ++j) { #ifdef PROX_PREFETCH_OFFSET PREFETCH0(mbufs[j + PREFETCH_OFFSET]); PREFETCH0(rte_pktmbuf_mtod(mbufs[j + PREFETCH_OFFSET - 1], void *)); #endif out[j] = handle_lb_qinq(task, mbufs[j]); } #ifdef PROX_PREFETCH_OFFSET PREFETCH0(rte_pktmbuf_mtod(mbufs[n_pkts - 1], void *)); for (; j < n_pkts; ++j) { out[j] = handle_lb_qinq(task, mbufs[j]); } #endif return task->base.tx_pkt(&task->base, mbufs, n_pkts, out); }