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

Stephen Hemminger stephen at networkplumber.org
Wed Mar 13 16:18:58 CET 2019

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.

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,

More information about the dev mailing list