I'm new to using VPP and encountered problems getting VPP to use DPDK on my
Intel XXV710-DA2 cards. Using a base of v17.07, I get messages about "unknown
link speed 25000":
Dec 15 10:57:58 tqt100 vpp[5244]: /usr/bin/vpp[5244]:
dpdk_update_link_state:1321: unknown link speed 25000
Dec 15 10:57:58 tqt100 /usr/bin/vpp[5244]: dpdk_update_link_state:1321: unknown
link speed 25000
I've made changes to a number of files to enable the 25GbE ports, plus a few
other
speeds that may be of interest. Might this be of general interest? The
following changes
are relative to the current "master".
- Lee Roberts
diff --git a/src/plugins/dpdk/device/dpdk.h b/src/plugins/dpdk/device/dpdk.h
index 770da6e..745f3b8 100644
--- a/src/plugins/dpdk/device/dpdk.h
+++ b/src/plugins/dpdk/device/dpdk.h
@@ -94,10 +94,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,
diff --git a/src/plugins/dpdk/device/format.c b/src/plugins/dpdk/device/format.c
index 8ea65c1..ddd6762 100644
--- a/src/plugins/dpdk/device/format.c
+++ b/src/plugins/dpdk/device/format.c
@@ -180,10 +180,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;
@@ -196,6 +208,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;
diff --git a/src/plugins/dpdk/device/init.c b/src/plugins/dpdk/device/init.c
index 6041a3c..5f55c16 100755
--- a/src/plugins/dpdk/device/init.c
+++ b/src/plugins/dpdk/device/init.c
@@ -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;
@@ -1364,12 +1372,33 @@ 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;
case 0:
break;
default:
diff --git a/src/vnet/interface.h b/src/vnet/interface.h
index 5ca489d..d0e4d00 100644
--- a/src/vnet/interface.h
+++ b/src/vnet/interface.h
@@ -405,22 +405,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_40G (1 << 7)
-#define VNET_HW_INTERFACE_FLAG_SPEED_100G (1 << 8)
+#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). */
diff --git a/src/vpp/api/test_client.c b/src/vpp/api/test_client.c
index 52833eb..4aa5821 100644
--- a/src/vpp/api/test_client.c
+++ b/src/vpp/api/test_client.c
@@ -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;
_______________________________________________
vpp-dev mailing list
[email protected]
https://lists.fd.io/mailman/listinfo/vpp-dev