Index: /trunk/src/VBox/Devices/Network/DrvNATlibslirp.cpp
===================================================================
--- /trunk/src/VBox/Devices/Network/DrvNATlibslirp.cpp	(revision 105962)
+++ /trunk/src/VBox/Devices/Network/DrvNATlibslirp.cpp	(revision 105963)
@@ -420,6 +420,4 @@
                 {
                     void  *pvSeg;
-
-                    /** @todo r=jack: is this fine leaving as a constant instead of dynamic? */
                     pvSeg = RTMemAlloc(DRVNAT_MAXFRAMESIZE);
 
@@ -523,6 +521,5 @@
         pSgBuf->pvAllocator = NULL;
 
-        /** @todo r=jack: figure out why need *2 */
-        pSgBuf->aSegs[0].cbSeg = RT_ALIGN_Z(cbMin*2, 128);
+        pSgBuf->aSegs[0].cbSeg = RT_ALIGN_Z(cbMin, 128);
         pSgBuf->aSegs[0].pvSeg = RTMemAlloc(pSgBuf->aSegs[0].cbSeg);
         if (!pSgBuf->pvUser || !pSgBuf->aSegs[0].pvSeg)
@@ -1613,5 +1610,4 @@
              "  Netmask: %lu\n", Network, Netmask));
 
-#ifndef RT_OS_WINDOWS /** @todo r=bird: Why do we need special windows code here?!? */
     struct in_addr vnetwork = RTNetIPv4AddrHEToInAddr(&Network);
     struct in_addr vnetmask = RTNetIPv4AddrHEToInAddr(&Netmask);
@@ -1619,66 +1615,46 @@
     struct in_addr vdhcp_start = RTNetInAddrFromU8(10, 0, 2, 15);
     struct in_addr vnameserver = RTNetInAddrFromU8(10, 0, 2, 3);
-#else
-    struct in_addr vnetwork;
-    vnetwork.S_un.S_addr = RT_BSWAP_U32(Network.u);
-
-    struct in_addr vnetmask;
-    vnetmask.S_un.S_addr = RT_BSWAP_U32(Netmask.u);
-
-    struct in_addr vhost;
-    vhost.S_un.S_addr = RT_BSWAP_U32(0x0a000202);
-
-    struct in_addr vdhcp_start;
-    vdhcp_start.S_un.S_addr = RT_BSWAP_U32(0x0a00020f);
-
-    struct in_addr vnameserver;
-    vnameserver.S_un.S_addr = RT_BSWAP_U32(0x0a000203);
-#endif
-
-    /** @todo r=bird: This is leaked.  It can be a stack structure since libslirp
-     *        only copies values from it and doesn't retain the pointer. */
-    SlirpConfig *pSlirpCfg = new SlirpConfig { 0 };
-
-    pSlirpCfg->version = 4;
-    pSlirpCfg->restricted = false;
-    pSlirpCfg->in_enabled = true;
-    pSlirpCfg->vnetwork = vnetwork;
-    pSlirpCfg->vnetmask = vnetmask;
-    pSlirpCfg->vhost = vhost;
-    pSlirpCfg->in6_enabled = true;
-
-    inet_pton(AF_INET6, "fd00::", &pSlirpCfg->vprefix_addr6);
-    pSlirpCfg->vprefix_len = 64;
-    inet_pton(AF_INET6, "fd00::2", &pSlirpCfg->vhost6);
-
-    pSlirpCfg->vhostname = "vbox";
-    pSlirpCfg->tftp_server_name = pThis->pszNextServer;
-    pSlirpCfg->tftp_path = pThis->pszTFTPPrefix;
-    pSlirpCfg->bootfile = pThis->pszBootFile;
-    pSlirpCfg->vdhcp_start = vdhcp_start;
-    pSlirpCfg->vnameserver = vnameserver;
-    pSlirpCfg->if_mtu = MTU;
-
-    inet_pton(AF_INET6, "fd00::3", &pSlirpCfg->vnameserver6);
-
-    pSlirpCfg->vdnssearch = NULL;
-    pSlirpCfg->vdomainname = NULL;
-
-    /** @todo r=bird: This is leaked.  It can be a static structure.   */
-    SlirpCb *slirpCallbacks = (struct SlirpCb *)RTMemAlloc(sizeof(SlirpCb));
-
-    slirpCallbacks->send_packet = &drvNAT_SendPacketCb;
-    slirpCallbacks->guest_error = &drvNAT_GuestErrorCb;
-    slirpCallbacks->clock_get_ns = &drvNAT_ClockGetNsCb;
-    slirpCallbacks->timer_new = &drvNAT_TimerNewCb;
-    slirpCallbacks->timer_free = &drvNAT_TimerFreeCb;
-    slirpCallbacks->timer_mod = &drvNAT_TimerModCb;
-    slirpCallbacks->register_poll_fd = &drvNAT_RegisterPoll;
-    slirpCallbacks->unregister_poll_fd = &drvNAT_UnregisterPoll;
-    slirpCallbacks->notify = &drvNAT_NotifyCb;
-    slirpCallbacks->init_completed = NULL;
-    slirpCallbacks->timer_new_opaque = NULL;
-
-    Slirp *pSlirp = slirp_new(/* cfg */ pSlirpCfg, /* callbacks */ slirpCallbacks, /* opaque */ pThis);
+
+    SlirpConfig slirpCfg = { 0 };
+    static SlirpCb slirpCallbacks = { 0 };
+
+    slirpCfg.version = 4;
+    slirpCfg.restricted = false;
+    slirpCfg.in_enabled = true;
+    slirpCfg.vnetwork = vnetwork;
+    slirpCfg.vnetmask = vnetmask;
+    slirpCfg.vhost = vhost;
+    slirpCfg.in6_enabled = true;
+
+    inet_pton(AF_INET6, "fd00::", &slirpCfg.vprefix_addr6);
+    slirpCfg.vprefix_len = 64;
+    inet_pton(AF_INET6, "fd00::2", &slirpCfg.vhost6);
+
+    slirpCfg.vhostname = "vbox";
+    slirpCfg.tftp_server_name = pThis->pszNextServer;
+    slirpCfg.tftp_path = pThis->pszTFTPPrefix;
+    slirpCfg.bootfile = pThis->pszBootFile;
+    slirpCfg.vdhcp_start = vdhcp_start;
+    slirpCfg.vnameserver = vnameserver;
+    slirpCfg.if_mtu = MTU;
+
+    inet_pton(AF_INET6, "fd00::3", &slirpCfg.vnameserver6);
+
+    slirpCfg.vdnssearch = NULL;
+    slirpCfg.vdomainname = NULL;
+
+    slirpCallbacks.send_packet = &drvNAT_SendPacketCb;
+    slirpCallbacks.guest_error = &drvNAT_GuestErrorCb;
+    slirpCallbacks.clock_get_ns = &drvNAT_ClockGetNsCb;
+    slirpCallbacks.timer_new = &drvNAT_TimerNewCb;
+    slirpCallbacks.timer_free = &drvNAT_TimerFreeCb;
+    slirpCallbacks.timer_mod = &drvNAT_TimerModCb;
+    slirpCallbacks.register_poll_fd = &drvNAT_RegisterPoll;
+    slirpCallbacks.unregister_poll_fd = &drvNAT_UnregisterPoll;
+    slirpCallbacks.notify = &drvNAT_NotifyCb;
+    slirpCallbacks.init_completed = NULL;
+    slirpCallbacks.timer_new_opaque = NULL;
+
+    Slirp *pSlirp = slirp_new(/* cfg */ &slirpCfg, /* callbacks */ &slirpCallbacks, /* opaque */ pThis);
 
     if (pSlirp == NULL)
