On 6/21/2018 1:24 PM, ido goshen wrote: > Suggested-by: Ferruh Yigit <ferruh.yi...@intel.com> > > Signed-off-by: ido goshen <i...@cgstowernetworks.com>
<...> > +static uint16_t > +eth_pcap_tx_mux(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) > +{ > + struct pcap_tx_queue *tx_queue = queue; > + if (tx_queue->dumper) > + return eth_pcap_tx_dumper(queue, bufs, nb_pkts); > + else > + return eth_pcap_tx(queue, bufs, nb_pkts); > +} > + > /* > * pcap_open_live wrapper function > */ > @@ -773,6 +783,31 @@ struct pmd_devargs { > return open_iface(key, value, extra_args); > } > > +static int > +open_pcap_rx_mux(const char *key, const char *value, void *extra_args) > +{ > + struct pmd_devargs *pcaps = extra_args; Do we need this assignment? Why not pass extra_args directly? > + > + if (strcmp(key, ETH_PCAP_RX_PCAP_ARG) == 0) > + return open_rx_pcap(key, value, pcaps); > + if (strcmp(key, ETH_PCAP_RX_IFACE_ARG) == 0) > + return open_rx_iface(key, value, pcaps); > + return 0; > +} > + > +static int > +open_pcap_tx_mux(const char *key, const char *value, void *extra_args) > +{ > + struct pmd_devargs *dumpers = extra_args; Do we need this assignment? Why not pass extra_args directly? > + > + if (strcmp(key, ETH_PCAP_TX_PCAP_ARG) == 0) > + return open_tx_pcap(key, value, dumpers); > + if (strcmp(key, ETH_PCAP_TX_IFACE_ARG) == 0) > + return open_tx_iface(key, value, dumpers); > + return 0; > +} > + > + > static struct rte_vdev_driver pmd_pcap_drv; > > static int > @@ -873,8 +908,7 @@ struct pmd_devargs { > eth_from_pcaps(struct rte_vdev_device *vdev, > struct pmd_devargs *rx_queues, const unsigned int nb_rx_queues, > struct pmd_devargs *tx_queues, const unsigned int nb_tx_queues, > - struct rte_kvargs *kvlist, int single_iface, > - unsigned int using_dumpers) > + struct rte_kvargs *kvlist, int single_iface) > { > struct pmd_internals *internals = NULL; > struct rte_eth_dev *eth_dev = NULL; > @@ -891,10 +925,7 @@ struct pmd_devargs { > > eth_dev->rx_pkt_burst = eth_pcap_rx; > > - if (using_dumpers) > - eth_dev->tx_pkt_burst = eth_pcap_tx_dumper; > - else > - eth_dev->tx_pkt_burst = eth_pcap_tx; > + eth_dev->tx_pkt_burst = eth_pcap_tx_mux; We shouldn't introduce an extra check in data path. Instead of checking "if (tx_queue->dumper)" for _each_ packet, we should check it here once and assign proper burst function.