Coordinate known Ethernet speeds with Linux kernel and DPDK 34/11034/4
authorLee Roberts <lee.roberts@hpe.com>
Thu, 8 Mar 2018 03:18:48 +0000 (20:18 -0700)
committerDamjan Marion <dmarion.lists@gmail.com>
Fri, 9 Mar 2018 19:46:27 +0000 (19:46 +0000)
Linux kernel and DPDK recognize the following Ethernet speeds:
10M, 100M, 1G, 2.5G, 5G, 10G, 20G, 25G, 40G, 50G, 56G and 100G.
Add consistent Ethernet speeds to VPP.

Change-Id: I4cfcf378fb34425c1206db5aa2f6bdcc66e0a6ab
Signed-off-by: Lee Roberts <lee.roberts@hpe.com>
src/plugins/dpdk/device/dpdk.h
src/plugins/dpdk/device/format.c
src/plugins/dpdk/device/init.c
src/vnet/interface.h
src/vpp/api/test_client.c

index 4f4a2e5..1f43a48 100644 (file)
@@ -92,10 +92,14 @@ typedef enum
 typedef enum
 {
   VNET_DPDK_PORT_TYPE_ETH_1G,
+  VNET_DPDK_PORT_TYPE_ETH_2_5G,
+  VNET_DPDK_PORT_TYPE_ETH_5G,
   VNET_DPDK_PORT_TYPE_ETH_10G,
+  VNET_DPDK_PORT_TYPE_ETH_20G,
   VNET_DPDK_PORT_TYPE_ETH_25G,
   VNET_DPDK_PORT_TYPE_ETH_40G,
   VNET_DPDK_PORT_TYPE_ETH_50G,
+  VNET_DPDK_PORT_TYPE_ETH_56G,
   VNET_DPDK_PORT_TYPE_ETH_100G,
   VNET_DPDK_PORT_TYPE_ETH_BOND,
   VNET_DPDK_PORT_TYPE_ETH_SWITCH,
index d661fa7..36f921d 100644 (file)
@@ -176,10 +176,22 @@ format_dpdk_device_name (u8 * s, va_list * args)
       device_name = "GigabitEthernet";
       break;
 
+    case VNET_DPDK_PORT_TYPE_ETH_2_5G:
+      device_name = "Two_FiveGigabitEthernet";
+      break;
+
+    case VNET_DPDK_PORT_TYPE_ETH_5G:
+      device_name = "FiveGigabitEthernet";
+      break;
+
     case VNET_DPDK_PORT_TYPE_ETH_10G:
       device_name = "TenGigabitEthernet";
       break;
 
+    case VNET_DPDK_PORT_TYPE_ETH_20G:
+      device_name = "TwentyGigabitEthernet";
+      break;
+
     case VNET_DPDK_PORT_TYPE_ETH_25G:
       device_name = "TwentyFiveGigabitEthernet";
       break;
@@ -192,6 +204,10 @@ format_dpdk_device_name (u8 * s, va_list * args)
       device_name = "FiftyGigabitEthernet";
       break;
 
+    case VNET_DPDK_PORT_TYPE_ETH_56G:
+      device_name = "FiftySixGigabitEthernet";
+      break;
+
     case VNET_DPDK_PORT_TYPE_ETH_100G:
       device_name = "HundredGigabitEthernet";
       break;
index 95c5e5c..a425c58 100755 (executable)
@@ -62,14 +62,22 @@ port_type_from_speed_capa (struct rte_eth_dev_info *dev_info)
 
   if (dev_info->speed_capa & ETH_LINK_SPEED_100G)
     return VNET_DPDK_PORT_TYPE_ETH_100G;
+  else if (dev_info->speed_capa & ETH_LINK_SPEED_56G)
+    return VNET_DPDK_PORT_TYPE_ETH_56G;
   else if (dev_info->speed_capa & ETH_LINK_SPEED_50G)
     return VNET_DPDK_PORT_TYPE_ETH_50G;
   else if (dev_info->speed_capa & ETH_LINK_SPEED_40G)
     return VNET_DPDK_PORT_TYPE_ETH_40G;
   else if (dev_info->speed_capa & ETH_LINK_SPEED_25G)
     return VNET_DPDK_PORT_TYPE_ETH_25G;
+  else if (dev_info->speed_capa & ETH_LINK_SPEED_20G)
+    return VNET_DPDK_PORT_TYPE_ETH_20G;
   else if (dev_info->speed_capa & ETH_LINK_SPEED_10G)
     return VNET_DPDK_PORT_TYPE_ETH_10G;
+  else if (dev_info->speed_capa & ETH_LINK_SPEED_5G)
+    return VNET_DPDK_PORT_TYPE_ETH_5G;
+  else if (dev_info->speed_capa & ETH_LINK_SPEED_2_5G)
+    return VNET_DPDK_PORT_TYPE_ETH_2_5G;
   else if (dev_info->speed_capa & ETH_LINK_SPEED_1G)
     return VNET_DPDK_PORT_TYPE_ETH_1G;
 
@@ -1387,15 +1395,30 @@ dpdk_update_link_state (dpdk_device_t * xd, f64 now)
        case ETH_SPEED_NUM_1G:
          hw_flags |= VNET_HW_INTERFACE_FLAG_SPEED_1G;
          break;
+       case ETH_SPEED_NUM_2_5G:
+         hw_flags |= VNET_HW_INTERFACE_FLAG_SPEED_2_5G;
+         break;
+       case ETH_SPEED_NUM_5G:
+         hw_flags |= VNET_HW_INTERFACE_FLAG_SPEED_5G;
+         break;
        case ETH_SPEED_NUM_10G:
          hw_flags |= VNET_HW_INTERFACE_FLAG_SPEED_10G;
          break;
+       case ETH_SPEED_NUM_20G:
+         hw_flags |= VNET_HW_INTERFACE_FLAG_SPEED_20G;
+         break;
        case ETH_SPEED_NUM_25G:
          hw_flags |= VNET_HW_INTERFACE_FLAG_SPEED_25G;
          break;
        case ETH_SPEED_NUM_40G:
          hw_flags |= VNET_HW_INTERFACE_FLAG_SPEED_40G;
          break;
+       case ETH_SPEED_NUM_50G:
+         hw_flags |= VNET_HW_INTERFACE_FLAG_SPEED_50G;
+         break;
+       case ETH_SPEED_NUM_56G:
+         hw_flags |= VNET_HW_INTERFACE_FLAG_SPEED_56G;
+         break;
        case ETH_SPEED_NUM_100G:
          hw_flags |= VNET_HW_INTERFACE_FLAG_SPEED_100G;
          break;
index d42f079..8988eb0 100644 (file)
@@ -393,24 +393,34 @@ typedef struct vnet_hw_interface_t
 #define VNET_HW_INTERFACE_FLAG_SPEED_10M       (1 << 3)
 #define VNET_HW_INTERFACE_FLAG_SPEED_100M      (1 << 4)
 #define VNET_HW_INTERFACE_FLAG_SPEED_1G                (1 << 5)
-#define VNET_HW_INTERFACE_FLAG_SPEED_10G       (1 << 6)
-#define VNET_HW_INTERFACE_FLAG_SPEED_25G       (1 << 7)
-#define VNET_HW_INTERFACE_FLAG_SPEED_40G       (1 << 8)
-#define VNET_HW_INTERFACE_FLAG_SPEED_100G      (1 << 9)
+#define VNET_HW_INTERFACE_FLAG_SPEED_2_5G      (1 << 6)
+#define VNET_HW_INTERFACE_FLAG_SPEED_5G                (1 << 7)
+#define VNET_HW_INTERFACE_FLAG_SPEED_10G       (1 << 8)
+#define VNET_HW_INTERFACE_FLAG_SPEED_20G       (1 << 9)
+#define VNET_HW_INTERFACE_FLAG_SPEED_25G       (1 << 10)
+#define VNET_HW_INTERFACE_FLAG_SPEED_40G       (1 << 11)
+#define VNET_HW_INTERFACE_FLAG_SPEED_50G       (1 << 12)
+#define VNET_HW_INTERFACE_FLAG_SPEED_56G       (1 << 13)
+#define VNET_HW_INTERFACE_FLAG_SPEED_100G      (1 << 14)
 #define VNET_HW_INTERFACE_FLAG_SPEED_MASK      \
   (VNET_HW_INTERFACE_FLAG_SPEED_10M |          \
    VNET_HW_INTERFACE_FLAG_SPEED_100M |         \
    VNET_HW_INTERFACE_FLAG_SPEED_1G |           \
+   VNET_HW_INTERFACE_FLAG_SPEED_2_5G |         \
+   VNET_HW_INTERFACE_FLAG_SPEED_5G |           \
    VNET_HW_INTERFACE_FLAG_SPEED_10G |          \
+   VNET_HW_INTERFACE_FLAG_SPEED_20G |          \
    VNET_HW_INTERFACE_FLAG_SPEED_25G |          \
    VNET_HW_INTERFACE_FLAG_SPEED_40G |          \
+   VNET_HW_INTERFACE_FLAG_SPEED_50G |          \
+   VNET_HW_INTERFACE_FLAG_SPEED_56G |          \
    VNET_HW_INTERFACE_FLAG_SPEED_100G)
 
   /* rx mode flags */
-#define VNET_HW_INTERFACE_FLAG_SUPPORTS_INT_MODE (1 << 10)
+#define VNET_HW_INTERFACE_FLAG_SUPPORTS_INT_MODE (1 << 16)
 
   /* tx checksum offload */
-#define VNET_HW_INTERFACE_FLAG_SUPPORTS_TX_L4_CKSUM_OFFLOAD (1 << 11)
+#define VNET_HW_INTERFACE_FLAG_SUPPORTS_TX_L4_CKSUM_OFFLOAD (1 << 17)
 
   /* Hardware address as vector.  Zero (e.g. zero-length vector) if no
      address for this class (e.g. PPP). */
index cad9112..f0feee0 100644 (file)
@@ -133,12 +133,30 @@ vl_api_sw_interface_details_t_handler (vl_api_sw_interface_details_t * mp)
     case VNET_HW_INTERFACE_FLAG_SPEED_1G:
       speed = "1Gbps";
       break;
+    case VNET_HW_INTERFACE_FLAG_SPEED_2_5G:
+      speed = "2.5Gbps";
+      break;
+    case VNET_HW_INTERFACE_FLAG_SPEED_5G:
+      speed = "5Gbps";
+      break;
     case VNET_HW_INTERFACE_FLAG_SPEED_10G:
       speed = "10Gbps";
       break;
+    case VNET_HW_INTERFACE_FLAG_SPEED_20G:
+      speed = "20Gbps";
+      break;
+    case VNET_HW_INTERFACE_FLAG_SPEED_25G:
+      speed = "25Gbps";
+      break;
     case VNET_HW_INTERFACE_FLAG_SPEED_40G:
       speed = "40Gbps";
       break;
+    case VNET_HW_INTERFACE_FLAG_SPEED_50G:
+      speed = "50Gbps";
+      break;
+    case VNET_HW_INTERFACE_FLAG_SPEED_56G:
+      speed = "56Gbps";
+      break;
     case VNET_HW_INTERFACE_FLAG_SPEED_100G:
       speed = "100Gbps";
       break;