diff mbox

[ovs-dev,v3,1/3] netdev-dpdk: Fix double attaching of virtual devices.

Message ID 1495032027-23517-2-git-send-email-i.maximets@samsung.com
State Superseded
Delegated to: Darrell Ball
Headers show

Commit Message

Ilya Maximets May 17, 2017, 2:40 p.m. UTC
'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.loftus@intel.com>
Fixes: 69876ed78611 ("netdev-dpdk: Add support for virtual DPDK PMDs (vdevs)")
Signed-off-by: Ilya Maximets <i.maximets@samsung.com>
---
 lib/netdev-dpdk.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
diff mbox

Patch

diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
index 609b8da..25d9c9b 100644
--- a/lib/netdev-dpdk.c
+++ b/lib/netdev-dpdk.c
@@ -1114,10 +1114,12 @@  netdev_dpdk_lookup_by_port_id(int port_id)
 static int
 netdev_dpdk_process_devargs(const char *devargs, char **errp)
 {
+    /* Get the name up to the first comma. */
+    char *name = xmemdup0(devargs, strcspn(devargs, ","));
     uint8_t new_port_id = UINT8_MAX;
 
     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)) {
@@ -1126,10 +1128,11 @@  netdev_dpdk_process_devargs(const char *devargs, char **errp)
         } else {
             /* Attach unsuccessful */
             VLOG_WARN_BUF(errp, "Error attaching device '%s' to DPDK", devargs);
-            return -1;
+            new_port_id = UINT8_MAX;
         }
     }
 
+    free(name);
     return new_port_id;
 }