general/other virt-host-validate don't recognize if_tap module

I want to tryout virt-manager with bhyve. But it doesn't recognize the if_tap module.

Bash:
{beastie} @ FreeBaSeD-T430 > /home/beastie
 → kldstat -v | grep if
        398 if_lo
        402 if_vlan
        401 if_tap
        400 if_tun
        399 if_tuntap
        397 if_gif
         99 pci/if_ath_pci
        403 iflib
 8    1 0xffffffff82176000    180f0 if_lagg.ko (/boot/kernel/if_lagg.ko)
         10 if_lagg
 9    2 0xffffffff8218f000     3580 if_infiniband.ko (/boot/kernel/if_infiniband.ko)
          9 if_infiniband
26    1 0xffffffff82ee2000     7638 if_bridge.ko (/boot/kernel/if_bridge.ko)
        526 if_bridge

{beastie} @ FreeBaSeD-T430 > /home/beastie
 → doas virt-host-validate
 BHYVE: Checking for vmm module                                              : PASS
 BHYVE: Checking for if_tap module                                           : WARN (if_tap module is not loaded, networking will not work)
 BHYVE: Checking for if_bridge module                                        : PASS
 BHYVE: Checking for nmdm module                                             : PASS

How can I investigate further?
 
I have same problem too.
1741838683552.png
 
It's probably looking for the wrong name. Some time ago the if_tap.ko and if_tun.ko got rolled into one if_tuntap.ko module.
 
make deinstall clean extract
put this patch as files/patch-virt-host-validate-bhyve
make all install
Diff:
diff --git a/work/libvirt-11.1.0/tools/virt-host-validate-bhyve.c b/home/titus/virt-host-validate-bhyve.c
index d7a409d..91be32f 100644
--- tools/virt-host-validate-bhyve.c.orig
+++ tools/virt-host-validate-bhyve.c
@@ -23,6 +23,7 @@

 #include <sys/param.h>
 #include <sys/linker.h>
+#include <sys/module.h>

 #include "virt-host-validate-bhyve.h"
 #include "virt-host-validate-common.h"
@@ -44,12 +45,24 @@
 #define MODULE_STATUS_WARN(mod, err_msg) \
     MODULE_STATUS(mod, err_msg, VIR_VALIDATE_WARN)

+static void multiCompare(char *name,bool *vmm, bool* if_tap, bool *if_bridge, bool *nmdm)
+{
+        if (STREQ(name, "vmm.ko") || STREQ(name, "vmm"))
+            *vmm = true;
+        else if (STREQ(name, "if_tap.ko") || STREQ(name, "if_tap"))
+            *if_tap = true;
+        else if (STREQ(name, "if_bridge.ko") || STREQ(name, "if_bridge"))
+            *if_bridge = true;
+        else if (STREQ(name, "nmdm.ko") || STREQ(name, "nmdm"))
+            *nmdm = true;
+}

 int virHostValidateBhyve(void)
 {
     int ret = 0;
-    int fileid = 0;
+    int fileid = 0, modid;
     g_autofree struct kld_file_stat *stat = g_new0(struct kld_file_stat, 1);
+    struct module_stat mstat;
     bool vmm_loaded = false;
     bool if_tap_loaded = false;
     bool if_bridge_loaded = false;
@@ -59,15 +72,13 @@ int virHostValidateBhyve(void)
         stat->version = sizeof(struct kld_file_stat);
         if (kldstat(fileid, stat) < 0)
             continue;
-
-        if (STREQ(stat->name, "vmm.ko"))
-            vmm_loaded = true;
-        else if (STREQ(stat->name, "if_tap.ko"))
-            if_tap_loaded = true;
-        else if (STREQ(stat->name, "if_bridge.ko"))
-            if_bridge_loaded = true;
-        else if (STREQ(stat->name, "nmdm.ko"))
-            nmdm_loaded = true;
+        multiCompare(stat->name, &vmm_loaded, &if_tap_loaded, &if_bridge_loaded, &nmdm_loaded);
+        for (modid = kldfirstmod(fileid); modid > 0;modid = modfnext(modid)) {
+            mstat.version = sizeof(struct module_stat);
+         if (modstat(modid, &mstat) < 0)
+            continue;
+         multiCompare(mstat.name, &vmm_loaded, &if_tap_loaded, &if_bridge_loaded, &nmdm_loaded);
+        }
     }

     MODULE_STATUS_FAIL(vmm, "will not be able to start VMs");
 
Back
Top