[dpdk-dev] [RFC] net/vdev_netvsc: check for required related drivers

Matan Azrad matan at mellanox.com
Thu Mar 14 12:26:05 CET 2019


Hi

From: Stephen Hemminger
> The vdev_netvsc virtual driver that is used to do initialization on Hyper-
> V/Azure won't work without failsafe and tap device.
> If the related devices aren't present, it causes confusing errors later in
> initialization when it crafts devargs and attempts to send them to a device
> driver that isn't there.
> 
> Unfortunately, this is common with VPP where the TAP and FAILSAFE PMD's
> are both optional.  The suggestion here is to detect this in the startup phase
> earlier.
> 
> Alternative would be to use RTE_BUILD_BUG_ON(!defined(...)) but that
> would break people doing normal VPP build.
> 

The failsafe and tap devices are created by the vdev_netvsc PMD, so it is not expected to find them in the scan time.
If the VM doesn't want vdev_netvsc driver to run, it have 2 options:
1. assign IP to the netvsc netdevs. 
2. run --vdev="vdev_netvsc0,ignore=1" - see documentation for more info.

> Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>
> ---
>  drivers/net/vdev_netvsc/vdev_netvsc.c | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
> 
> diff --git a/drivers/net/vdev_netvsc/vdev_netvsc.c
> b/drivers/net/vdev_netvsc/vdev_netvsc.c
> index 801f54c96e01..9c262358b5ee 100644
> --- a/drivers/net/vdev_netvsc/vdev_netvsc.c
> +++ b/drivers/net/vdev_netvsc/vdev_netvsc.c
> @@ -812,6 +812,20 @@ vdev_netvsc_scan_callback(__rte_unused void
> *arg)
>  	struct rte_devargs *devargs;
>  	struct rte_bus *vbus = rte_bus_find_by_name("vdev");
> 
> +	dev = vbus->find_device(NULL, vdev_netvsc_cmp_rte_device,
> +				"net_failsafe");
> +	if (!dev) {
> +		DRV_LOG(ERR, "failsafe network device not present");
> +		return;
> +	}
> +
> +	dev = vbus->find_device(NULL, vdev_netvsc_cmp_rte_device,
> +				"net_tap");
> +	if (!dev) {
> +		DRV_LOG(ERR, "tap network device driver not present");
> +		return;
> +	}
> +
>  	RTE_EAL_DEVARGS_FOREACH("vdev", devargs)
>  		if (!strncmp(devargs->name, VDEV_NETVSC_DRIVER_NAME,
>  			     VDEV_NETVSC_DRIVER_NAME_LEN))
> --
> 2.17.1



More information about the dev mailing list