Index: /trunk/src/VBox/Devices/Network/SrvIntNetR0.cpp
===================================================================
--- /trunk/src/VBox/Devices/Network/SrvIntNetR0.cpp	(revision 17255)
+++ /trunk/src/VBox/Devices/Network/SrvIntNetR0.cpp	(revision 17256)
@@ -3703,5 +3703,9 @@
             break;
         case kIntNetTrunkType_NetAdp:
+#if defined(RT_OS_DARWIN) && !defined(VBOXNETADP_DO_NOT_USE_NETFLT)
+            pszName = "VBoxNetFlt";
+#else /* VBOXNETADP_DO_NOT_USE_NETFLT */
             pszName = "VBoxNetAdp";
+#endif /* VBOXNETADP_DO_NOT_USE_NETFLT */
             break;
         case kIntNetTrunkType_SrvNat:
Index: /trunk/src/VBox/HostDrivers/VBoxNetAdp/Makefile.kmk
===================================================================
--- /trunk/src/VBox/HostDrivers/VBoxNetAdp/Makefile.kmk	(revision 17255)
+++ /trunk/src/VBox/HostDrivers/VBoxNetAdp/Makefile.kmk	(revision 17256)
@@ -44,6 +44,7 @@
 VBoxNetAdp_SOURCES.solaris  = \
 	solaris/VBoxNetAdp-solaris.c
-VBoxNetAdp_SOURCES          = \
-	VBoxNetAdp.c
+VBoxNetAdp_SOURCES          =
+#VBoxNetAdp_SOURCES          = \
+#	VBoxNetAdp.c
 VBoxNetAdp_LIBS.solaris    += \
 	$(PATH_LIB)/RuntimeR0Drv$(VBOX_SUFF_LIB)
Index: /trunk/src/VBox/HostDrivers/VBoxNetAdp/VBoxNetAdpInternal.h
===================================================================
--- /trunk/src/VBox/HostDrivers/VBoxNetAdp/VBoxNetAdpInternal.h	(revision 17255)
+++ /trunk/src/VBox/HostDrivers/VBoxNetAdp/VBoxNetAdpInternal.h	(revision 17256)
@@ -65,4 +65,5 @@
 */
 
+#ifdef VBOXANETADP_DO_NOT_USE_NETFLT
 enum VBoxNetAdpState
 {
@@ -74,7 +75,9 @@
 };
 typedef enum VBoxNetAdpState VBOXNETADPSTATE;
+#endif /* VBOXANETADP_DO_NOT_USE_NETFLT */
 
 struct VBoxNetAdapter
 {
+#ifdef VBOXANETADP_DO_NOT_USE_NETFLT
     /** The spinlock protecting the state variables and host interface handle. */
     RTSPINLOCK        hSpinlock;
@@ -103,8 +106,9 @@
     /** Pointer to the globals. */
     PVBOXNETADPGLOBALS pGlobals;
+    /** The event that is signaled when we go idle and that pfnWaitForIdle blocks on. */
+    RTSEMEVENT        hEventIdle;
+#endif /* !VBOXANETADP_DO_NOT_USE_NETFLT */
     /** Corresponds to the digit at the end of device name. */
     uint8_t           uUnit;
-    /** The event that is signaled when we go idle and that pfnWaitForIdle blocks on. */
-    RTSEMEVENT        hEventIdle;
 
     union
@@ -148,4 +152,5 @@
 typedef VBOXNETADP *PVBOXNETADP;
 
+#ifdef VBOXANETADP_DO_NOT_USE_NETFLT
 /**
  * The global data of the VBox filter driver.
@@ -303,4 +308,5 @@
 
 /** @} */
+#endif /* !VBOXANETADP_DO_NOT_USE_NETFLT */
 
 
Index: /trunk/src/VBox/HostDrivers/VBoxNetAdp/darwin/VBoxNetAdp-darwin.cpp
===================================================================
--- /trunk/src/VBox/HostDrivers/VBoxNetAdp/darwin/VBoxNetAdp-darwin.cpp	(revision 17255)
+++ /trunk/src/VBox/HostDrivers/VBoxNetAdp/darwin/VBoxNetAdp-darwin.cpp	(revision 17256)
@@ -101,5 +101,32 @@
  * The (common) global data.
  */
+#ifdef VBOXANETADP_DO_NOT_USE_NETFLT
 static VBOXNETADPGLOBALS g_VBoxNetAdpGlobals;
+
+#else /* !VBOXANETADP_DO_NOT_USE_NETFLT */
+
+/**
+ * Generate a suitable MAC address.
+ *
+ * @param   pThis       The instance.
+ * @param   pMac        Where to return the MAC address.
+ */
+DECLHIDDEN(void) vboxNetAdpComposeMACAddress(PVBOXNETADP pThis, PRTMAC pMac)
+{
+#if 0 /* Use a locally administered version of the OUI we use for the guest NICs. */
+    pMac->au8[0] = 0x08 | 2;
+    pMac->au8[1] = 0x00;
+    pMac->au8[2] = 0x27;
+#else /* this is what \0vb comes down to. It seems to be unassigned atm. */
+    pMac->au8[0] = 0;
+    pMac->au8[1] = 0x76;
+    pMac->au8[2] = 0x62;
+#endif
+
+    pMac->au8[3] = 0; /* pThis->uUnit >> 16; */
+    pMac->au8[4] = 0; /* pThis->uUnit >> 8; */
+    pMac->au8[5] = pThis->uUnit;
+}
+#endif /* !VBOXANETADP_DO_NOT_USE_NETFLT */
 
 
@@ -117,4 +144,5 @@
 }
 
+#ifdef VBOXANETADP_DO_NOT_USE_NETFLT
 /**
  * Reads and retains the host interface handle.
@@ -440,7 +468,8 @@
 }
 
-
+#endif /* VBOXANETADP_DO_NOT_USE_NETFLT */
 static errno_t vboxNetAdpDarwinOutput(ifnet_t pIface, mbuf_t pMBuf)
 {
+#ifdef VBOXANETADP_DO_NOT_USE_NETFLT
     PVBOXNETADP pThis = VBOXNETADP_FROM_IFACE(pIface);
     Assert(pThis);
@@ -457,4 +486,5 @@
             vboxNetAdpCancelReceive(pThis);
     }
+#endif /* VBOXANETADP_DO_NOT_USE_NETFLT */
     mbuf_freem_list(pMBuf);
     return 0;
@@ -508,4 +538,5 @@
 
 
+#ifdef VBOXANETADP_DO_NOT_USE_NETFLT
 
 int  vboxNetAdpPortOsXmit(PVBOXNETADP pThis, PINTNETSG pSG, uint32_t fDst)
@@ -587,4 +618,8 @@
     return VINF_SUCCESS;
 }
+#else /* !VBOXANETADP_DO_NOT_USE_NETFLT */
+VBOXNETADP g_vboxnet0;
+
+#endif /* !VBOXANETADP_DO_NOT_USE_NETFLT */
 
 
@@ -725,6 +760,13 @@
          * for establishing the connect to the support driver.
          */
+#ifdef VBOXANETADP_DO_NOT_USE_NETFLT
         memset(&g_VBoxNetAdpGlobals, 0, sizeof(g_VBoxNetAdpGlobals));
         rc = vboxNetAdpInitGlobals(&g_VBoxNetAdpGlobals);
+#else /* !VBOXANETADP_DO_NOT_USE_NETFLT */
+        RTMAC Mac;
+        vboxNetAdpOsInit(&g_vboxnet0);
+        vboxNetAdpComposeMACAddress(&g_vboxnet0, &Mac);
+        rc = vboxNetAdpOsCreate(&g_vboxnet0, &Mac);
+#endif /* !VBOXANETADP_DO_NOT_USE_NETFLT */
         if (RT_SUCCESS(rc))
         {
@@ -739,5 +781,7 @@
         printf("VBoxAdpDrv: failed to initialize IPRT (rc=%d)\n", rc);
 
+#ifdef VBOXANETADP_DO_NOT_USE_NETFLT
     memset(&g_VBoxNetAdpGlobals, 0, sizeof(g_VBoxNetAdpGlobals));
+#endif /* VBOXANETADP_DO_NOT_USE_NETFLT */
     return KMOD_RETURN_FAILURE;
 }
@@ -756,4 +800,5 @@
      * tracking for us!
      */
+#ifdef VBOXANETADP_DO_NOT_USE_NETFLT
     int rc = vboxNetAdpTryDeleteGlobals(&g_VBoxNetAdpGlobals);
     if (RT_FAILURE(rc))
@@ -767,4 +812,7 @@
      */
     memset(&g_VBoxNetAdpGlobals, 0, sizeof(g_VBoxNetAdpGlobals));
+#else /* !VBOXANETADP_DO_NOT_USE_NETFLT */
+    vboxNetAdpOsDestroy(&g_vboxnet0);
+#endif /* !VBOXANETADP_DO_NOT_USE_NETFLT */
 
     RTR0Term();
