dpdk: add netvsc PMD

Teach DPDK plugin about the netvsc Poll Mode Driver.
The speed of the Netvsc device matches the speed of the external
port on the underlying vswitch. Therefore 1G, 10G, 25G, 56G and
even 100G are possible.

Change-Id: I14ab6907b7d8d350b63a083409d45fb9c348a364
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
This commit is contained in:
Stephen Hemminger
2018-10-15 17:50:46 -07:00
committed by Damjan Marion
parent 939ce11cc9
commit a9ded38b1f
3 changed files with 40 additions and 1 deletions

View File

@@ -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;

View File

@@ -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 ###";

View File

@@ -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;
}