aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/dpdk/device/dpdk.h4
-rw-r--r--src/plugins/dpdk/device/format.c4
-rw-r--r--src/plugins/dpdk/device/init.c33
3 files changed, 40 insertions, 1 deletions
diff --git a/src/plugins/dpdk/device/dpdk.h b/src/plugins/dpdk/device/dpdk.h
index cc9b644d23c..c4f908ea408 100644
--- a/src/plugins/dpdk/device/dpdk.h
+++ b/src/plugins/dpdk/device/dpdk.h
@@ -86,7 +86,8 @@ extern vlib_node_registration_t admin_up_down_process_node;
_ ("net_ena", ENA) \
_ ("net_failsafe", FAILSAFE) \
_ ("net_liovf", LIOVF_ETHER) \
- _ ("net_qede", QEDE)
+ _ ("net_qede", QEDE) \
+ _ ("net_netvsc", NETVSC)
typedef enum
{
@@ -116,6 +117,7 @@ typedef enum
VNET_DPDK_PORT_TYPE_VIRTIO_USER,
VNET_DPDK_PORT_TYPE_VHOST_ETHER,
VNET_DPDK_PORT_TYPE_FAILSAFE,
+ VNET_DPDK_PORT_TYPE_NETVSC,
VNET_DPDK_PORT_TYPE_UNKNOWN,
} dpdk_port_type_t;
diff --git a/src/plugins/dpdk/device/format.c b/src/plugins/dpdk/device/format.c
index 4494895f380..e173ebd5f84 100644
--- a/src/plugins/dpdk/device/format.c
+++ b/src/plugins/dpdk/device/format.c
@@ -370,6 +370,10 @@ format_dpdk_device_type (u8 * s, va_list * args)
dev_type = "Cavium QLogic FastLinQ QL4xxxx";
break;
+ case VNET_DPDK_PMD_NETVSC:
+ dev_type = "Microsoft Hyper-V Netvsc";
+ break;
+
default:
case VNET_DPDK_PMD_UNKNOWN:
dev_type = "### UNKNOWN ###";
diff --git a/src/plugins/dpdk/device/init.c b/src/plugins/dpdk/device/init.c
index 086d322db18..dd2b405d7db 100644
--- a/src/plugins/dpdk/device/init.c
+++ b/src/plugins/dpdk/device/init.c
@@ -74,6 +74,35 @@ port_type_from_speed_capa (struct rte_eth_dev_info *dev_info)
return VNET_DPDK_PORT_TYPE_UNKNOWN;
}
+static dpdk_port_type_t
+port_type_from_link_speed (u32 link_speed)
+{
+ switch (link_speed)
+ {
+ case ETH_SPEED_NUM_1G:
+ return VNET_DPDK_PORT_TYPE_ETH_1G;
+ case ETH_SPEED_NUM_2_5G:
+ return VNET_DPDK_PORT_TYPE_ETH_2_5G;
+ case ETH_SPEED_NUM_5G:
+ return VNET_DPDK_PORT_TYPE_ETH_5G;
+ case ETH_SPEED_NUM_10G:
+ return VNET_DPDK_PORT_TYPE_ETH_10G;
+ case ETH_SPEED_NUM_20G:
+ return VNET_DPDK_PORT_TYPE_ETH_20G;
+ case ETH_SPEED_NUM_25G:
+ return VNET_DPDK_PORT_TYPE_ETH_25G;
+ case ETH_SPEED_NUM_40G:
+ return VNET_DPDK_PORT_TYPE_ETH_40G;
+ case ETH_SPEED_NUM_50G:
+ return VNET_DPDK_PORT_TYPE_ETH_50G;
+ case ETH_SPEED_NUM_56G:
+ return VNET_DPDK_PORT_TYPE_ETH_56G;
+ case ETH_SPEED_NUM_100G:
+ return VNET_DPDK_PORT_TYPE_ETH_100G;
+ default:
+ return VNET_DPDK_PORT_TYPE_UNKNOWN;
+ }
+}
static u32
dpdk_flag_change (vnet_main_t * vnm, vnet_hw_interface_t * hi, u32 flags)
@@ -548,6 +577,10 @@ dpdk_lib_init (dpdk_main_t * dm)
xd->port_conf.intr_conf.lsc = 1;
break;
+ case VNET_DPDK_PMD_NETVSC:
+ xd->port_type = port_type_from_link_speed (l.link_speed);
+ break;
+
default:
xd->port_type = VNET_DPDK_PORT_TYPE_UNKNOWN;
}