git: 1b244fbbf4d6 - main - emulators/virtualbox-ose-kmod: Fix build error since 1500027 (struct ifnet is now hidden)

From: Vladimir Druzenko <vvd_at_FreeBSD.org>
Date: Wed, 25 Dec 2024 09:51:04 UTC
The branch main has been updated by vvd:

URL: https://cgit.FreeBSD.org/ports/commit/?id=1b244fbbf4d6340c647b5ee550347b0acb175f11

commit 1b244fbbf4d6340c647b5ee550347b0acb175f11
Author:     Vladimir Druzenko <vvd@FreeBSD.org>
AuthorDate: 2024-12-25 09:37:37 +0000
Commit:     Vladimir Druzenko <vvd@FreeBSD.org>
CommitDate: 2024-12-25 09:37:37 +0000

    emulators/virtualbox-ose-kmod: Fix build error since 1500027 (struct ifnet is now hidden)
    
    Based on patch from wulf.
    
    PR:             282780
    Tested by:      groenveld@acm.org
---
 ...ers_VBoxNetAdp_freebsd_VBoxNetAdp-freebsd.c.bak | 147 +++++++++++++++
 ...Drivers_VBoxNetFlt_freebsd_VBoxNetFlt-freebsd.c | 209 ++++++++++++++++++---
 2 files changed, 335 insertions(+), 21 deletions(-)

diff --git a/emulators/virtualbox-ose/files/patch-src_VBox_HostDrivers_VBoxNetAdp_freebsd_VBoxNetAdp-freebsd.c.bak b/emulators/virtualbox-ose/files/patch-src_VBox_HostDrivers_VBoxNetAdp_freebsd_VBoxNetAdp-freebsd.c.bak
new file mode 100644
index 000000000000..8da432449fe1
--- /dev/null
+++ b/emulators/virtualbox-ose/files/patch-src_VBox_HostDrivers_VBoxNetAdp_freebsd_VBoxNetAdp-freebsd.c.bak
@@ -0,0 +1,147 @@
+--- src/VBox/HostDrivers/VBoxNetAdp/freebsd/VBoxNetAdp-freebsd.c.orig	2024-01-11 12:25:08 UTC
++++ src/VBox/HostDrivers/VBoxNetAdp/freebsd/VBoxNetAdp-freebsd.c
+@@ -216,7 +216,11 @@ static void VBoxNetAdpFreeBSDNetinit(void *priv)
+     PVBOXNETADP pThis = priv;
+     struct ifnet *ifp = pThis->u.s.ifp;
+ 
++#if __FreeBSD_version >= 1500000
++    if_setdrvflagbits(ifp, IFF_DRV_RUNNING, 0);
++#else
+     ifp->if_drv_flags |= IFF_DRV_RUNNING;
++#endif
+ }
+ 
+ /**
+@@ -226,25 +230,46 @@ static void VBoxNetAdpFreeBSDNetstart(struct ifnet *if
+  */
+ static void VBoxNetAdpFreeBSDNetstart(struct ifnet *ifp)
+ {
++#if __FreeBSD_version >= 1500000
++    PVBOXNETADP pThis = if_getsoftc(ifp);
++#else
+     PVBOXNETADP pThis = ifp->if_softc;
++#endif
+     struct mbuf *m;
+ 
++#if __FreeBSD_version >= 1500000
++    if ((if_getdrvflags(ifp) & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) != IFF_DRV_RUNNING)
++#else
+     if ((ifp->if_drv_flags & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) != IFF_DRV_RUNNING)
++#endif
+         return;
+ 
++#if __FreeBSD_version >= 1500000
++    if_setdrvflagbits(ifp, IFF_DRV_OACTIVE, 0);
++    while (!if_sendq_empty(ifp))
++#else
+     ifp->if_drv_flags |= IFF_DRV_OACTIVE;
+     while (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
++#endif
+     {
+ #if __FreeBSD_version >= 1100036
+         if_inc_counter(ifp, IFCOUNTER_OPACKETS, 1);
+ #else
+         ifp->if_opackets++;
+ #endif
++#if __FreeBSD_version >= 1500000
++        m = if_dequeue(ifp);
++#else
+         IFQ_DRV_DEQUEUE(&ifp->if_snd, m);
++#endif
+         BPF_MTAP(ifp, m);
+         m_freem(m);
+     }
++#if __FreeBSD_version >= 1500000
++    if_setdrvflagbits(ifp, 0, IFF_DRV_OACTIVE);
++#else
+     ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
++#endif
+ }
+ 
+ /**
+@@ -257,6 +282,18 @@ static int VBoxNetAdpFreeBSDNetioctl(struct ifnet *ifp
+     switch (cmd)
+     {
+         case SIOCSIFFLAGS:
++#if __FreeBSD_version >= 1500000
++            if (if_getflags(ifp) & IFF_UP)
++            {
++                if (!(if_getdrvflags(ifp) & IFF_DRV_RUNNING))
++                    if_init(ifp, if_getsoftc(ifp));
++            }
++            else
++            {
++                if (if_getdrvflags(ifp) & IFF_DRV_RUNNING)
++                    if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
++            }
++#else
+             if (ifp->if_flags & IFF_UP)
+             {
+                 if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
+@@ -267,6 +304,7 @@ static int VBoxNetAdpFreeBSDNetioctl(struct ifnet *ifp
+                 if (ifp->if_drv_flags & IFF_DRV_RUNNING)
+                     ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+             }
++#endif
+             break;
+         case SIOCGIFMEDIA:
+         {
+@@ -301,7 +339,11 @@ int vboxNetAdpOsCreate(PVBOXNETADP pThis, PCRTMAC pMac
+ 
+ int vboxNetAdpOsCreate(PVBOXNETADP pThis, PCRTMAC pMac)
+ {
++#if __FreeBSD_version >= 1500000
++    if_t ifp;
++#else
+     struct ifnet *ifp;
++#endif
+ 
+     VBOXCURVNET_SET_FROM_UCRED();
+     ifp = if_alloc(IFT_ETHER);
+@@ -309,6 +351,16 @@ int vboxNetAdpOsCreate(PVBOXNETADP pThis, PCRTMAC pMac
+         return VERR_NO_MEMORY;
+ 
+     if_initname(ifp, VBOXNETADP_NAME, pThis->iUnit);
++#if __FreeBSD_version >= 1500000
++    if_setsoftc(ifp, pThis);
++    if_setmtu(ifp, ETHERMTU);
++    if_setflagbits(ifp, IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST, 0);
++    if_setioctlfn(ifp, VBoxNetAdpFreeBSDNetioctl);
++    if_setstartfn(ifp, VBoxNetAdpFreeBSDNetstart);
++    if_setinitfn(ifp, VBoxNetAdpFreeBSDNetinit);
++    if_setsendqlen(ifp, IFQ_MAXLEN);
++    if_setsendqready(ifp);
++#else
+     ifp->if_softc = pThis;
+     ifp->if_mtu = ETHERMTU;
+     ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
+@@ -318,10 +370,17 @@ int vboxNetAdpOsCreate(PVBOXNETADP pThis, PCRTMAC pMac
+     IFQ_SET_MAXLEN(&ifp->if_snd, IFQ_MAXLEN);
+     ifp->if_snd.ifq_drv_maxlen = IFQ_MAXLEN;
+     IFQ_SET_READY(&ifp->if_snd);
++#endif
+     ether_ifattach(ifp, (void *)pMac);
++#if __FreeBSD_version >= 1500000
++    (void)if_setbaudrate(ifp, 0);
++
++    strncpy(pThis->szName, if_name(ifp), VBOXNETADP_MAX_NAME_LEN);
++#else
+     ifp->if_baudrate = 0;
+ 
+     strncpy(pThis->szName, ifp->if_xname, VBOXNETADP_MAX_NAME_LEN);
++#endif
+     pThis->u.s.ifp = ifp;
+     VBOXCURVNET_RESTORE();
+     return 0;
+@@ -332,7 +391,11 @@ void vboxNetAdpOsDestroy(PVBOXNETADP pThis)
+     struct ifnet *ifp;
+ 
+     ifp = pThis->u.s.ifp;
++#if __FreeBSD_version >= 1500000
++    VBOXCURVNET_SET(if_getvnet(ifp));
++#else
+     VBOXCURVNET_SET(ifp->if_vnet);
++#endif
+     ether_ifdetach(ifp);
+     if_free(ifp);
+     VBOXCURVNET_RESTORE();
diff --git a/emulators/virtualbox-ose/files/patch-src_VBox_HostDrivers_VBoxNetFlt_freebsd_VBoxNetFlt-freebsd.c b/emulators/virtualbox-ose/files/patch-src_VBox_HostDrivers_VBoxNetFlt_freebsd_VBoxNetFlt-freebsd.c
index 8a0d8663d046..6e3d40a42e43 100644
--- a/emulators/virtualbox-ose/files/patch-src_VBox_HostDrivers_VBoxNetFlt_freebsd_VBoxNetFlt-freebsd.c
+++ b/emulators/virtualbox-ose/files/patch-src_VBox_HostDrivers_VBoxNetFlt_freebsd_VBoxNetFlt-freebsd.c
@@ -1,4 +1,4 @@
---- src/VBox/HostDrivers/VBoxNetFlt/freebsd/VBoxNetFlt-freebsd.c.orig	2022-01-13 18:57:38 UTC
+--- src/VBox/HostDrivers/VBoxNetFlt/freebsd/VBoxNetFlt-freebsd.c.orig	2024-01-11 12:25:08 UTC
 +++ src/VBox/HostDrivers/VBoxNetFlt/freebsd/VBoxNetFlt-freebsd.c
 @@ -52,6 +52,7 @@
  #include <net/if_dl.h>
@@ -33,7 +33,28 @@
              break;
  
          case MOD_UNLOAD:
-@@ -361,7 +362,14 @@ static int ng_vboxnetflt_rcvdata(hook_p hook, item_p i
+@@ -334,12 +335,20 @@ static int ng_vboxnetflt_rcvdata(hook_p hook, item_p i
+ {
+     const node_p node = NG_HOOK_NODE(hook);
+     PVBOXNETFLTINS pThis = NG_NODE_PRIVATE(node);
++#if __FreeBSD_version >= 1500000
++    if_t ifp = pThis->u.s.ifp;
++#else
+     struct ifnet *ifp = pThis->u.s.ifp;
++#endif
+     struct mbuf *m;
+     struct m_tag *mtag;
+     bool fActive;
+ 
++#if __FreeBSD_version >= 1500000
++    VBOXCURVNET_SET(if_getvnet(ifp));
++#else
+     VBOXCURVNET_SET(ifp->if_vnet);
++#endif
+     fActive = vboxNetFltTryRetainBusyActive(pThis);
+ 
+     NGI_GET_M(item, m);
+@@ -361,7 +370,14 @@ static int ng_vboxnetflt_rcvdata(hook_p hook, item_p i
      {
          if (mtag != NULL || !fActive)
          {
@@ -48,16 +69,30 @@
              if (fActive)
                  vboxNetFltRelease(pThis, true /*fBusy*/);
              VBOXCURVNET_RESTORE();
-@@ -436,6 +444,8 @@ static void vboxNetFltFreeBSDinput(void *arg, int pend
+@@ -433,12 +449,22 @@ static void vboxNetFltFreeBSDinput(void *arg, int pend
+ {
+     PVBOXNETFLTINS pThis = (PVBOXNETFLTINS)arg;
+     struct mbuf *m, *m0;
++#if __FreeBSD_version >= 1500000
++    if_t ifp = pThis->u.s.ifp;
++#else
      struct ifnet *ifp = pThis->u.s.ifp;
++#endif
      unsigned int cSegs = 0;
      bool fDropIt = false, fActive;
 +    bool is_vl_tagged = false;
 +    uint16_t vl_tag;
      PINTNETSG pSG;
  
++#if __FreeBSD_version >= 1500000
++    VBOXCURVNET_SET(if_getvnet(ifp));
++#else
      VBOXCURVNET_SET(ifp->if_vnet);
-@@ -448,6 +458,19 @@ static void vboxNetFltFreeBSDinput(void *arg, int pend
++#endif
+     vboxNetFltRetain(pThis, true /* fBusy */);
+     for (;;)
+     {
+@@ -448,6 +474,19 @@ static void vboxNetFltFreeBSDinput(void *arg, int pend
          if (m == NULL)
              break;
  
@@ -77,7 +112,7 @@
          for (m0 = m; m0 != NULL; m0 = m0->m_next)
              if (m0->m_len > 0)
                  cSegs++;
-@@ -462,10 +485,39 @@ static void vboxNetFltFreeBSDinput(void *arg, int pend
+@@ -462,10 +501,39 @@ static void vboxNetFltFreeBSDinput(void *arg, int pend
          vboxNetFltFreeBSDMBufToSG(pThis, m, pSG, cSegs, 0);
          fDropIt = pThis->pSwitchPort->pfnRecv(pThis->pSwitchPort, NULL /* pvIf */, pSG, INTNETTRUNKDIR_WIRE);
          RTMemTmpFree(pSG);
@@ -118,7 +153,28 @@
      }
      vboxNetFltRelease(pThis, true /* fBusy */);
      VBOXCURVNET_RESTORE();
-@@ -521,6 +573,7 @@ int vboxNetFltPortOsXmit(PVBOXNETFLTINS pThis, void *p
+@@ -478,12 +546,20 @@ static void vboxNetFltFreeBSDoutput(void *arg, int pen
+ {
+     PVBOXNETFLTINS pThis = (PVBOXNETFLTINS)arg;
+     struct mbuf *m, *m0;
++#if __FreeBSD_version >= 1500000
++    if_t ifp = pThis->u.s.ifp;
++#else
+     struct ifnet *ifp = pThis->u.s.ifp;
++#endif
+     unsigned int cSegs = 0;
+     bool fDropIt = false, fActive;
+     PINTNETSG pSG;
+ 
++#if __FreeBSD_version >= 1500000
++    VBOXCURVNET_SET(if_getvnet(ifp));
++#else
+     VBOXCURVNET_SET(ifp->if_vnet);
++#endif
+     vboxNetFltRetain(pThis, true /* fBusy */);
+     for (;;)
+     {
+@@ -521,26 +597,41 @@ int vboxNetFltPortOsXmit(PVBOXNETFLTINS pThis, void *p
   */
  int vboxNetFltPortOsXmit(PVBOXNETFLTINS pThis, void *pvIfData, PINTNETSG pSG, uint32_t fDst)
  {
@@ -126,7 +182,24 @@
      NOREF(pvIfData);
  
      void (*input_f)(struct ifnet *, struct mbuf *);
-@@ -537,10 +590,16 @@ int vboxNetFltPortOsXmit(PVBOXNETFLTINS pThis, void *p
++#if __FreeBSD_version >= 1500000
++    if_t ifp;
++#else
+     struct ifnet *ifp;
++#endif
+     struct mbuf *m;
+     struct m_tag *mtag;
+     bool fActive;
+     int error;
+ 
+     ifp = ASMAtomicUoReadPtrT(&pThis->u.s.ifp, struct ifnet *);
++#if __FreeBSD_version >= 1500000
++    VBOXCURVNET_SET(if_getvnet(ifp));
++#else
+     VBOXCURVNET_SET(ifp->if_vnet);
++#endif
+ 
+     if (fDst & INTNETTRUNKDIR_WIRE)
      {
          m = vboxNetFltFreeBSDSGMBufFromSG(pThis, pSG);
          if (m == NULL)
@@ -143,7 +216,7 @@
  
          m->m_flags |= M_PKTHDR;
          ether_output_frame(ifp, m);
-@@ -550,10 +609,16 @@ int vboxNetFltPortOsXmit(PVBOXNETFLTINS pThis, void *p
+@@ -550,10 +641,16 @@ int vboxNetFltPortOsXmit(PVBOXNETFLTINS pThis, void *p
      {
          m = vboxNetFltFreeBSDSGMBufFromSG(pThis, pSG);
          if (m == NULL)
@@ -160,7 +233,7 @@
          /*
           * Delivering packets to the host will be captured by the
           * input hook. Tag the packet with a mbuf tag so that we
-@@ -564,6 +629,7 @@ int vboxNetFltPortOsXmit(PVBOXNETFLTINS pThis, void *p
+@@ -564,6 +661,7 @@ int vboxNetFltPortOsXmit(PVBOXNETFLTINS pThis, void *p
          if (mtag == NULL)
          {
              m_freem(m);
@@ -168,7 +241,7 @@
              return VERR_NO_MEMORY;
          }
  
-@@ -571,9 +637,17 @@ int vboxNetFltPortOsXmit(PVBOXNETFLTINS pThis, void *p
+@@ -571,9 +669,21 @@ int vboxNetFltPortOsXmit(PVBOXNETFLTINS pThis, void *p
          m_tag_prepend(m, mtag);
          m->m_flags |= M_PKTHDR;
          m->m_pkthdr.rcvif = ifp;
@@ -176,7 +249,11 @@
 +        struct epoch_tracker et;
 +        NET_EPOCH_ENTER(et);
 +#endif
++#if __FreeBSD_version >= 1500000
++        if_input(ifp, m);
++#else
          ifp->if_input(ifp, m);
++#endif
 +#if __FreeBSD_version >= 1300049
 +        NET_EPOCH_EXIT(et);
 +#endif
@@ -186,15 +263,20 @@
      return VINF_SUCCESS;
  }
  
-@@ -586,6 +660,7 @@ int vboxNetFltOsInitInstance(PVBOXNETFLTINS pThis, voi
+@@ -586,15 +696,23 @@ int vboxNetFltOsInitInstance(PVBOXNETFLTINS pThis, voi
  
  int vboxNetFltOsInitInstance(PVBOXNETFLTINS pThis, void *pvContext)
  {
 +    IPRT_FREEBSD_SAVE_EFL_AC();
      char nam[NG_NODESIZ];
++#if __FreeBSD_version >= 1500000
++    if_t ifp;
++#else
      struct ifnet *ifp;
++#endif
      node_p node;
-@@ -594,7 +669,10 @@ int vboxNetFltOsInitInstance(PVBOXNETFLTINS pThis, voi
+ 
+     VBOXCURVNET_SET_FROM_UCRED();
      NOREF(pvContext);
      ifp = ifunit(pThis->szName);
      if (ifp == NULL)
@@ -205,7 +287,19 @@
  
      /* Create a new netgraph node for this instance */
      if (ng_make_node_common(&ng_vboxnetflt_typestruct, &node) != 0)
-@@ -638,12 +716,14 @@ int vboxNetFltOsInitInstance(PVBOXNETFLTINS pThis, voi
+@@ -604,7 +722,11 @@ int vboxNetFltOsInitInstance(PVBOXNETFLTINS pThis, voi
+ 
+     ASMAtomicUoWritePtr(&pThis->u.s.ifp, ifp);
+     pThis->u.s.node = node;
++#if __FreeBSD_version >= 1500000
++    bcopy(if_getlladdr(ifp), &pThis->u.s.MacAddr, ETHER_ADDR_LEN);
++#else
+     bcopy(IF_LLADDR(ifp), &pThis->u.s.MacAddr, ETHER_ADDR_LEN);
++#endif
+     ASMAtomicUoWriteBool(&pThis->fDisconnectedFromHost, false);
+ 
+     /* Initialize deferred input queue */
+@@ -638,16 +760,26 @@ int vboxNetFltOsInitInstance(PVBOXNETFLTINS pThis, voi
          vboxNetFltRelease(pThis, true /*fBusy*/);
      }
      VBOXCURVNET_RESTORE();
@@ -217,10 +311,22 @@
  bool vboxNetFltOsMaybeRediscovered(PVBOXNETFLTINS pThis)
  {
 +    IPRT_FREEBSD_SAVE_EFL_AC();
++#if __FreeBSD_version >= 1500000
++    if_t ifp, ifp0;
++#else
      struct ifnet *ifp, *ifp0;
++#endif
  
      ifp = ASMAtomicUoReadPtrT(&pThis->u.s.ifp, struct ifnet *);
-@@ -660,6 +740,7 @@ bool vboxNetFltOsMaybeRediscovered(PVBOXNETFLTINS pThi
++#if __FreeBSD_version >= 1500000
++    VBOXCURVNET_SET(if_getvnet(ifp));
++#else
+     VBOXCURVNET_SET(ifp->if_vnet);
++#endif
+     /*
+      * Attempt to check if the interface is still there and re-initialize if
+      * something has changed.
+@@ -660,6 +792,7 @@ bool vboxNetFltOsMaybeRediscovered(PVBOXNETFLTINS pThi
          pThis->u.s.node = NULL;
      }
      VBOXCURVNET_RESTORE();
@@ -228,7 +334,7 @@
  
      if (ifp0 != NULL)
      {
-@@ -672,6 +753,7 @@ void vboxNetFltOsDeleteInstance(PVBOXNETFLTINS pThis)
+@@ -672,6 +805,7 @@ void vboxNetFltOsDeleteInstance(PVBOXNETFLTINS pThis)
  
  void vboxNetFltOsDeleteInstance(PVBOXNETFLTINS pThis)
  {
@@ -236,7 +342,7 @@
  
      taskqueue_drain(taskqueue_fast, &pThis->u.s.tskin);
      taskqueue_drain(taskqueue_fast, &pThis->u.s.tskout);
-@@ -684,6 +766,7 @@ void vboxNetFltOsDeleteInstance(PVBOXNETFLTINS pThis)
+@@ -684,6 +818,7 @@ void vboxNetFltOsDeleteInstance(PVBOXNETFLTINS pThis)
          ng_rmnode_self(pThis->u.s.node);
      VBOXCURVNET_RESTORE();
      pThis->u.s.node = NULL;
@@ -244,15 +350,51 @@
  }
  
  int vboxNetFltOsPreInitInstance(PVBOXNETFLTINS pThis)
-@@ -697,6 +780,7 @@ void vboxNetFltPortOsSetActive(PVBOXNETFLTINS pThis, b
+@@ -697,7 +832,12 @@ void vboxNetFltPortOsSetActive(PVBOXNETFLTINS pThis, b
  
  void vboxNetFltPortOsSetActive(PVBOXNETFLTINS pThis, bool fActive)
  {
 +    IPRT_FREEBSD_SAVE_EFL_AC();
++#if __FreeBSD_version >= 1500000
++    if_t ifp;
++#else
      struct ifnet *ifp;
++#endif
      struct ifreq ifreq;
      int error;
-@@ -730,7 +814,10 @@ void vboxNetFltPortOsSetActive(PVBOXNETFLTINS pThis, b
+     node_p node;
+@@ -709,18 +849,30 @@ void vboxNetFltPortOsSetActive(PVBOXNETFLTINS pThis, b
+     Log(("%s: fActive:%d\n", __func__, fActive));
+ 
+     ifp = ASMAtomicUoReadPtrT(&pThis->u.s.ifp, struct ifnet *);
++#if __FreeBSD_version >= 1500000
++    VBOXCURVNET_SET(if_getvnet(ifp));
++#else
+     VBOXCURVNET_SET(ifp->if_vnet);
++#endif
+     node = ASMAtomicUoReadPtrT(&pThis->u.s.node, node_p);
+ 
+     memset(&ifreq, 0, sizeof(struct ifreq));
+     /* Activate interface */
+     if (fActive)
+     {
++#if __FreeBSD_version >= 1500000
++        pThis->u.s.flags = if_getflags(ifp);
++#else
+         pThis->u.s.flags = ifp->if_flags;
++#endif
+         ifpromisc(ifp, 1);
+ 
+         /* ng_ether nodes are named after the interface name */
++#if __FreeBSD_version >= 1500000
++        snprintf(path, sizeof(path), "%s:", if_name(ifp));
++#else
+         snprintf(path, sizeof(path), "%s:", ifp->if_xname);
++#endif
+ 
+         /*
+          * Send a netgraph connect message to the ng_ether node
+@@ -730,9 +882,16 @@ void vboxNetFltPortOsSetActive(PVBOXNETFLTINS pThis, b
          NG_MKMESSAGE(msg, NGM_GENERIC_COOKIE, NGM_CONNECT,
              sizeof(struct ngm_connect), M_NOWAIT);
          if (msg == NULL)
@@ -261,9 +403,15 @@
              return;
 +        }
          con = (struct ngm_connect *)msg->data;
++#if __FreeBSD_version >= 1500000
++        snprintf(con->path, NG_PATHSIZ, "vboxnetflt_%s:", if_name(ifp));
++#else
          snprintf(con->path, NG_PATHSIZ, "vboxnetflt_%s:", ifp->if_xname);
++#endif
          strlcpy(con->ourhook, "lower", NG_HOOKSIZ);
-@@ -744,7 +831,10 @@ void vboxNetFltPortOsSetActive(PVBOXNETFLTINS pThis, b
+         strlcpy(con->peerhook, "input", NG_HOOKSIZ);
+         NG_SEND_MSG_PATH(error, node, msg, path, 0);
+@@ -744,10 +903,17 @@ void vboxNetFltPortOsSetActive(PVBOXNETFLTINS pThis, b
          NG_MKMESSAGE(msg, NGM_GENERIC_COOKIE, NGM_CONNECT,
              sizeof(struct ngm_connect), M_NOWAIT);
          if (msg == NULL)
@@ -273,8 +421,27 @@
 +        }
          con = (struct ngm_connect *)msg->data;
          snprintf(con->path, NG_PATHSIZ, "vboxnetflt_%s:",
++#if __FreeBSD_version >= 1500000
++            if_name(ifp));
++#else
              ifp->if_xname);
-@@ -767,7 +857,10 @@ void vboxNetFltPortOsSetActive(PVBOXNETFLTINS pThis, b
++#endif
+         strlcpy(con->ourhook, "upper", sizeof(con->ourhook));
+         strlcpy(con->peerhook, "output", sizeof(con->peerhook));
+         NG_SEND_MSG_PATH(error, node, msg, path, 0);
+@@ -759,7 +925,11 @@ void vboxNetFltPortOsSetActive(PVBOXNETFLTINS pThis, b
+         ifpromisc(ifp, 0);
+ 
+         /* Disconnect msgs are addressed to ourself */
++#if __FreeBSD_version >= 1500000
++        snprintf(path, sizeof(path), "vboxnetflt_%s:", if_name(ifp));
++#else
+         snprintf(path, sizeof(path), "vboxnetflt_%s:", ifp->if_xname);
++#endif
+ 
+         /*
+          * Send a netgraph message to disconnect our 'input' hook
+@@ -767,7 +937,10 @@ void vboxNetFltPortOsSetActive(PVBOXNETFLTINS pThis, b
          NG_MKMESSAGE(msg, NGM_GENERIC_COOKIE, NGM_RMHOOK,
              sizeof(struct ngm_rmhook), M_NOWAIT);
          if (msg == NULL)
@@ -285,7 +452,7 @@
          rm = (struct ngm_rmhook *)msg->data;
          strlcpy(rm->ourhook, "input", NG_HOOKSIZ);
          NG_SEND_MSG_PATH(error, node, msg, path, 0);
-@@ -778,12 +871,16 @@ void vboxNetFltPortOsSetActive(PVBOXNETFLTINS pThis, b
+@@ -778,12 +951,16 @@ void vboxNetFltPortOsSetActive(PVBOXNETFLTINS pThis, b
          NG_MKMESSAGE(msg, NGM_GENERIC_COOKIE, NGM_RMHOOK,
              sizeof(struct ngm_rmhook), M_NOWAIT);
          if (msg == NULL)