'devargs' for virtual devices contains not only name but also a list of arguments like this:
'net_pcap0,rx_pcap=file_rx.pcap,tx_pcap=file_tx.pcap' or 'eth_af_packet0,iface=eth0' We must cut off the arguments from this string before calling 'rte_eth_dev_get_port_by_name()' to avoid double attaching of the same device. CC: Ciara Loftus <ciara.lof...@intel.com> Fixes: 69876ed78611 ("netdev-dpdk: Add support for virtual DPDK PMDs (vdevs)") Signed-off-by: Ilya Maximets <i.maxim...@samsung.com> --- lib/netdev-dpdk.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index ddc651b..c8d7108 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c @@ -1114,9 +1114,16 @@ static int netdev_dpdk_process_devargs(const char *devargs, char **errp) { uint8_t new_port_id = UINT8_MAX; + char *ind, *name = xstrdup(devargs); + + /* Get the name from the comma separated list of arguments. */ + ind = index(name, ','); + if (ind != NULL) { + *ind = '\0'; + } if (!rte_eth_dev_count() - || rte_eth_dev_get_port_by_name(devargs, &new_port_id) + || rte_eth_dev_get_port_by_name(name, &new_port_id) || !rte_eth_dev_is_valid_port(new_port_id)) { /* Device not found in DPDK, attempt to attach it */ if (!rte_eth_dev_attach(devargs, &new_port_id)) { @@ -1129,6 +1136,7 @@ netdev_dpdk_process_devargs(const char *devargs, char **errp) } } + free(name); return new_port_id; } -- 2.7.4 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev