net/pcap: use a struct to pass user options

The argument lists on some of the device creation functions are quite
large. Using a struct to hold the user options parsed in
'pmd_pcap_probe' will allow for cleaner function calls and definitions.
Adding user options will also be easier.

Signed-off-by: Cian Ferriter <cian.ferriter@intel.com>
Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
This commit is contained in:
Cian Ferriter 2019-06-14 15:43:36 +01:00 committed by Ferruh Yigit
parent bbf708e54f
commit da6ba28f05

View File

@ -101,6 +101,14 @@ struct pmd_devargs {
int phy_mac;
};
struct pmd_devargs_all {
struct pmd_devargs rx_queues;
struct pmd_devargs tx_queues;
int single_iface;
unsigned int is_tx_pcap;
unsigned int is_tx_iface;
};
static const char *valid_arguments[] = {
ETH_PCAP_RX_PCAP_ARG,
ETH_PCAP_TX_PCAP_ARG,
@ -1060,11 +1068,14 @@ eth_pcap_update_mac(const char *if_name, struct rte_eth_dev *eth_dev,
static int
eth_from_pcaps_common(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 pmd_devargs_all *devargs_all,
struct pmd_internals **internals, struct rte_eth_dev **eth_dev)
{
struct pmd_process_private *pp;
struct pmd_devargs *rx_queues = &devargs_all->rx_queues;
struct pmd_devargs *tx_queues = &devargs_all->tx_queues;
const unsigned int nb_rx_queues = rx_queues->num_of_queue;
const unsigned int nb_tx_queues = tx_queues->num_of_queue;
unsigned int i;
/* do some parameter checking */
@ -1102,16 +1113,15 @@ eth_from_pcaps_common(struct rte_vdev_device *vdev,
static int
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,
int single_iface, unsigned int using_dumpers)
struct pmd_devargs_all *devargs_all)
{
struct pmd_internals *internals = NULL;
struct rte_eth_dev *eth_dev = NULL;
struct pmd_devargs *rx_queues = &devargs_all->rx_queues;
int single_iface = devargs_all->single_iface;
int ret;
ret = eth_from_pcaps_common(vdev, rx_queues, nb_rx_queues,
tx_queues, nb_tx_queues, &internals, &eth_dev);
ret = eth_from_pcaps_common(vdev, devargs_all, &internals, &eth_dev);
if (ret < 0)
return ret;
@ -1133,7 +1143,8 @@ eth_from_pcaps(struct rte_vdev_device *vdev,
eth_dev->rx_pkt_burst = eth_pcap_rx;
if (using_dumpers)
/* Assign tx ops. */
if (devargs_all->is_tx_pcap)
eth_dev->tx_pkt_burst = eth_pcap_tx_dumper;
else
eth_dev->tx_pkt_burst = eth_pcap_tx;
@ -1146,15 +1157,20 @@ static int
pmd_pcap_probe(struct rte_vdev_device *dev)
{
const char *name;
unsigned int is_rx_pcap = 0, is_tx_pcap = 0;
unsigned int is_rx_pcap = 0;
struct rte_kvargs *kvlist;
struct pmd_devargs pcaps = {0};
struct pmd_devargs dumpers = {0};
struct rte_eth_dev *eth_dev = NULL;
struct pmd_internals *internal;
int single_iface = 0;
int ret;
struct pmd_devargs_all devargs_all = {
.single_iface = 0,
.is_tx_pcap = 0,
.is_tx_iface = 0,
};
name = rte_vdev_device_name(dev);
PMD_LOG(INFO, "Initializing pmd_pcap for %s", name);
@ -1201,7 +1217,7 @@ pmd_pcap_probe(struct rte_vdev_device *dev)
dumpers.phy_mac = pcaps.phy_mac;
single_iface = 1;
devargs_all.single_iface = 1;
pcaps.num_of_queue = 1;
dumpers.num_of_queue = 1;
@ -1230,10 +1246,11 @@ pmd_pcap_probe(struct rte_vdev_device *dev)
* We check whether we want to open a TX stream to a real NIC or a
* pcap file
*/
is_tx_pcap = rte_kvargs_count(kvlist, ETH_PCAP_TX_PCAP_ARG) ? 1 : 0;
devargs_all.is_tx_pcap =
rte_kvargs_count(kvlist, ETH_PCAP_TX_PCAP_ARG) ? 1 : 0;
dumpers.num_of_queue = 0;
if (is_tx_pcap)
if (devargs_all.is_tx_pcap)
ret = rte_kvargs_process(kvlist, ETH_PCAP_TX_PCAP_ARG,
&open_tx_pcap, &dumpers);
else
@ -1275,7 +1292,7 @@ pmd_pcap_probe(struct rte_vdev_device *dev)
eth_dev->process_private = pp;
eth_dev->rx_pkt_burst = eth_pcap_rx;
if (is_tx_pcap)
if (devargs_all.is_tx_pcap)
eth_dev->tx_pkt_burst = eth_pcap_tx_dumper;
else
eth_dev->tx_pkt_burst = eth_pcap_tx;
@ -1284,8 +1301,10 @@ pmd_pcap_probe(struct rte_vdev_device *dev)
goto free_kvlist;
}
ret = eth_from_pcaps(dev, &pcaps, pcaps.num_of_queue, &dumpers,
dumpers.num_of_queue, single_iface, is_tx_pcap);
devargs_all.rx_queues = pcaps;
devargs_all.tx_queues = dumpers;
ret = eth_from_pcaps(dev, &devargs_all);
free_kvlist:
rte_kvargs_free(kvlist);