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 <step...@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
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#12512): https://lists.fd.io/g/vpp-dev/message/12512 Mute This Topic: https://lists.fd.io/mt/30417005/21656 Group Owner: vpp-dev+ow...@lists.fd.io Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-