Fix bonded interface name to use instance number starting from 0 88/5788/3
authorJohn Lo <loj@cisco.com>
Fri, 17 Mar 2017 22:05:35 +0000 (18:05 -0400)
committerJohn Lo <loj@cisco.com>
Sat, 18 Mar 2017 20:27:35 +0000 (20:27 +0000)
With DPDK 17.02, bonded interface device_index does not start
from 0 and may vary depends on the existence of other interfaces.
Implement instance number for bonded interface so the interface
name can make use of instance number starting from 0.

Change-Id: Ia8eb7bd530446faa02ee7c7d1f6abdc22ac60b62
Signed-off-by: John Lo <loj@cisco.com>
src/plugins/dpdk/device/dpdk.h
src/plugins/dpdk/device/format.c
src/plugins/dpdk/device/init.c

index 6328d11..06d89ad 100644 (file)
@@ -220,8 +220,8 @@ typedef struct
   dpdk_device_hqos_per_worker_thread_t *hqos_wt;
   dpdk_device_hqos_per_hqos_thread_t *hqos_ht;
 
-  /* af_packet */
-  u8 af_packet_port_id;
+  /* af_packet or BondEthernet instance number */
+  u8 port_id;
 
   struct rte_eth_link link;
   f64 time_last_link_update;
index 25a8c5c..a09a3f8 100644 (file)
@@ -177,7 +177,7 @@ format_dpdk_device_name (u8 * s, va_list * args)
       break;
 
     case VNET_DPDK_PORT_TYPE_ETH_BOND:
-      return format (s, "BondEthernet%d", dm->devices[i].device_index);
+      return format (s, "BondEthernet%d", dm->devices[i].port_id);
 
     case VNET_DPDK_PORT_TYPE_ETH_SWITCH:
       device_name = "EthernetSwitch";
@@ -185,7 +185,7 @@ format_dpdk_device_name (u8 * s, va_list * args)
 
     case VNET_DPDK_PORT_TYPE_AF_PACKET:
       rte_eth_dev_info_get (i, &dev_info);
-      return format (s, "af_packet%d", dm->devices[i].af_packet_port_id);
+      return format (s, "af_packet%d", dm->devices[i].port_id);
 
     default:
     case VNET_DPDK_PORT_TYPE_UNKNOWN:
index ca90532..145162e 100755 (executable)
@@ -516,6 +516,7 @@ dpdk_lib_init (dpdk_main_t * dm)
 
   u32 next_cpu = 0, next_hqos_cpu = 0;
   u8 af_packet_port_id = 0;
+  u8 bond_ether_port_id = 0;
   last_pci_addr.as_u32 = ~0;
 
   dm->input_cpu_first_index = 0;
@@ -862,12 +863,13 @@ dpdk_lib_init (dpdk_main_t * dm)
 
            case VNET_DPDK_PMD_AF_PACKET:
              xd->port_type = VNET_DPDK_PORT_TYPE_AF_PACKET;
-             xd->af_packet_port_id = af_packet_port_id++;
+             xd->port_id = af_packet_port_id++;
              break;
 
            case VNET_DPDK_PMD_BOND:
              xd->flags |= DPDK_DEVICE_FLAG_PMD_SUPPORTS_PTYPE;
              xd->port_type = VNET_DPDK_PORT_TYPE_ETH_BOND;
+             xd->port_id = bond_ether_port_id++;
              break;
 
            default: