Index: trunk/src/VBox/VMM/PDMDriver.cpp
===================================================================
--- trunk/src/VBox/VMM/PDMDriver.cpp	(revision 5275)
+++ trunk/src/VBox/VMM/PDMDriver.cpp	(revision 5283)
@@ -991,12 +991,5 @@
     if (    uOperation >= VMMR0_DO_SRV_START
         &&  uOperation <  VMMR0_DO_SRV_END)
-#if 0 /** @todo fix internal networking */
-        rc = SUPCallVMMR0Ex(pDrvIns->Internal.s.pVM->pVMR0, uOperation, pvArg, cbArg);
-#else
-{
-LogRel(("Sorry, internal networking is currently broken in the devlopment tree. Will be fixed in a bit, no time right now.\n"));
-rc = VERR_NOT_IMPLEMENTED;
-}
-#endif
+        rc = SUPCallVMMR0Ex(pDrvIns->Internal.s.pVM->pVMR0, uOperation, 0, (PSUPVMMR0REQHDR)pvArg);
     else
     {
Index: trunk/src/VBox/VMM/VMMR0/VMMR0.cpp
===================================================================
--- trunk/src/VBox/VMM/VMMR0/VMMR0.cpp	(revision 5275)
+++ trunk/src/VBox/VMM/VMMR0/VMMR0.cpp	(revision 5283)
@@ -832,74 +832,49 @@
 
 
-#if 0//def VBOX_WITH_INTERNAL_NETWORKING - currently busted
-        /*
-         * Services.
+#ifdef VBOX_WITH_INTERNAL_NETWORKING
+        /*
+         * Requests to the internal networking service.
          */
         case VMMR0_DO_INTNET_OPEN:
+            if (!pVM || u64Arg)
+                return VERR_INVALID_PARAMETER;
+            if (!g_pIntNet)
+                return VERR_NOT_SUPPORTED;
+            return INTNETR0OpenReq(g_pIntNet, pVM->pSession, (PINTNETOPENREQ)pReqHdr);
+
         case VMMR0_DO_INTNET_IF_CLOSE:
+            if (!pVM || u64Arg)
+                return VERR_INVALID_PARAMETER;
+            if (!g_pIntNet)
+                return VERR_NOT_SUPPORTED;
+            return INTNETR0IfCloseReq(g_pIntNet, (PINTNETIFCLOSEREQ)pReqHdr);
+
         case VMMR0_DO_INTNET_IF_GET_RING3_BUFFER:
+            if (!pVM || u64Arg)
+                return VERR_INVALID_PARAMETER;
+            if (!g_pIntNet)
+                return VERR_NOT_SUPPORTED;
+            return INTNETR0IfGetRing3BufferReq(g_pIntNet, (PINTNETIFGETRING3BUFFERREQ)pReqHdr);
+
         case VMMR0_DO_INTNET_IF_SET_PROMISCUOUS_MODE:
+            if (!pVM || u64Arg)
+                return VERR_INVALID_PARAMETER;
+            if (!g_pIntNet)
+                return VERR_NOT_SUPPORTED;
+            return INTNETR0IfSetPromiscuousModeReq(g_pIntNet, (PINTNETIFSETPROMISCUOUSMODEREQ)pReqHdr);
+
         case VMMR0_DO_INTNET_IF_SEND:
+            if (!pVM || u64Arg)
+                return VERR_INVALID_PARAMETER;
+            if (!g_pIntNet)
+                return VERR_NOT_SUPPORTED;
+            return INTNETR0IfSendReq(g_pIntNet, (PINTNETIFSENDREQ)pReqHdr);
+
         case VMMR0_DO_INTNET_IF_WAIT:
-        {
-            /*
-             * Validate arguments a bit first.
-             */
-            if (!VALID_PTR(pvArg))
-                return VERR_INVALID_POINTER;
-            if (!VALID_PTR(pVM))
-                return VERR_INVALID_POINTER;
-            if (pVM->pVMR0 != pVM)
-                return VERR_INVALID_POINTER;
-            if (!VALID_PTR(pVM->pSession))
-                return VERR_INVALID_POINTER;
+            if (!pVM || u64Arg)
+                return VERR_INVALID_PARAMETER;
             if (!g_pIntNet)
-                return VERR_FILE_NOT_FOUND; ///@todo fix this status code!
-
-            /*
-             * Unpack the arguments and call the service.
-             */
-            switch (enmOperation)
-            {
-                case VMMR0_DO_INTNET_OPEN:
-                {
-                    PINTNETOPENARGS pArgs = (PINTNETOPENARGS)pvArg;
-                    return INTNETR0Open(g_pIntNet, pVM->pSession, &pArgs->szNetwork[0], pArgs->cbSend, pArgs->cbRecv, pArgs->fRestrictAccess, &pArgs->hIf);
-                }
-
-                case VMMR0_DO_INTNET_IF_CLOSE:
-                {
-                    PINTNETIFCLOSEARGS pArgs = (PINTNETIFCLOSEARGS)pvArg;
-                    return INTNETR0IfClose(g_pIntNet, pArgs->hIf);
-                }
-
-                case VMMR0_DO_INTNET_IF_GET_RING3_BUFFER:
-                {
-                    PINTNETIFGETRING3BUFFERARGS pArgs = (PINTNETIFGETRING3BUFFERARGS)pvArg;
-                    return INTNETR0IfGetRing3Buffer(g_pIntNet, pArgs->hIf, &pArgs->pRing3Buf);
-                }
-
-                case VMMR0_DO_INTNET_IF_SET_PROMISCUOUS_MODE:
-                {
-                    PINTNETIFSETPROMISCUOUSMODEARGS pArgs = (PINTNETIFSETPROMISCUOUSMODEARGS)pvArg;
-                    return INTNETR0IfSetPromiscuousMode(g_pIntNet, pArgs->hIf, pArgs->fPromiscuous);
-                }
-
-                case VMMR0_DO_INTNET_IF_SEND:
-                {
-                    PINTNETIFSENDARGS pArgs = (PINTNETIFSENDARGS)pvArg;
-                    return INTNETR0IfSend(g_pIntNet, pArgs->hIf, pArgs->pvFrame, pArgs->cbFrame);
-                }
-
-                case VMMR0_DO_INTNET_IF_WAIT:
-                {
-                    PINTNETIFWAITARGS pArgs = (PINTNETIFWAITARGS)pvArg;
-                    return INTNETR0IfWait(g_pIntNet, pArgs->hIf, pArgs->cMillies);
-                }
-
-                default:
-                    return VERR_NOT_SUPPORTED;
-            }
-        }
+                return VERR_NOT_SUPPORTED;
+            return INTNETR0IfWaitReq(g_pIntNet, (PINTNETIFWAITREQ)pReqHdr);
 #endif /* VBOX_WITH_INTERNAL_NETWORKING */
 
