Index: /trunk/src/VBox/Devices/Network/DevINIP.cpp
===================================================================
--- /trunk/src/VBox/Devices/Network/DevINIP.cpp	(revision 43635)
+++ /trunk/src/VBox/Devices/Network/DevINIP.cpp	(revision 43636)
@@ -37,4 +37,7 @@
 #include "lwip/udp.h"
 #include "lwip/tcp.h"
+#ifdef VBOX_WITH_NEW_LWIP
+# include "lwip/tcp_impl.h"
+#endif
 #include "lwip/tcpip.h"
 #include "lwip/sockets.h"
@@ -205,5 +208,9 @@
     LogFlow(("%s: netif=%p p=%p ipaddr=%#04x\n", __FUNCTION__, netif, p,
              ipaddr->addr));
+#ifndef VBOX_WITH_NEW_LWIP
     lrc = lwip_etharp_output(netif, ipaddr, p);
+#else
+    lrc = lwip_etharp_output(netif, p, ipaddr);
+#endif
     LogFlow(("%s: return %d\n", __FUNCTION__, lrc));
     return lrc;
@@ -299,4 +306,9 @@
     netif->mtu = DEVINIP_MAX_FRAME;
     netif->flags = NETIF_FLAG_BROADCAST;
+#ifdef VBOX_WITH_NEW_LWIP
+    /* @todo: why explicit ARP routing required for 1.2.0 case? */
+    netif->flags |= NETIF_FLAG_ETHARP;
+    netif->flags |= NETIF_FLAG_ETHERNET;
+#endif
     netif->output = devINIPOutput;
     netif->linkoutput = devINIPOutputRaw;
@@ -376,5 +388,7 @@
         {
             case ETHTYPE_IP:    /* IP packet */
+#ifndef VBOX_WITH_NEW_LWIP
                 lwip_pbuf_header(p, -(ssize_t)sizeof(struct eth_hdr));
+#endif
                 lrc = iface->input(p, iface);
                 if (lrc)
@@ -382,5 +396,9 @@
                 break;
             case ETHTYPE_ARP:   /* ARP packet */
+#ifndef VBOX_WITH_NEW_LWIP
                 lwip_etharp_arp_input(iface, (struct eth_addr *)iface->hwaddr, p);
+#else
+                ethernet_input(p, iface);
+#endif
                 break;
             default:
@@ -411,5 +429,9 @@
 {
     sys_sem_t *sem = (sys_sem_t *)arg;
+#ifndef VBOX_WITH_NEW_LWIP
     lwip_sys_sem_signal(*sem);
+#else
+    lwip_sys_sem_signal(sem);
+#endif
 }
 
@@ -513,7 +535,13 @@
         netif_set_down(&pThis->IntNetIF);
         netif_remove(&pThis->IntNetIF);
+#ifndef VBOX_WITH_NEW_LWIP
         tcpip_terminate();
         lwip_sys_sem_wait(pThis->LWIPTcpInitSem);
         lwip_sys_sem_free(pThis->LWIPTcpInitSem);
+#else
+        /* no termination on new lwip ??? Hmmm... */
+        lwip_sys_sem_wait(&pThis->LWIPTcpInitSem, 0);
+        lwip_sys_sem_free(&pThis->LWIPTcpInitSem);
+#endif
     }
 
@@ -538,4 +566,7 @@
     PDEVINTNETIP pThis = PDMINS_2_DATA(pDevIns, PDEVINTNETIP);
     int rc = VINF_SUCCESS;
+#ifdef VBOX_WITH_NEW_LWIP
+    err_t errRc = ERR_OK;
+#endif
     LogFlow(("%s: pDevIns=%p iInstance=%d pCfg=%p\n", __FUNCTION__,
              pDevIns, iInstance, pCfg));
@@ -718,4 +749,5 @@
         goto out;
     TMTimerSetMillies(pThis->TCPFastTimer, TCP_SLOW_INTERVAL);
+#ifndef VBOX_WITH_NEW_LWIP
     pThis->LWIPTcpInitSem = lwip_sys_sem_new(0);
     {
@@ -723,4 +755,13 @@
         lwip_sys_sem_wait(pThis->LWIPTcpInitSem);
     }
+#else
+    errRc = lwip_sys_sem_new(&pThis->LWIPTcpInitSem, 0);
+    /* VERR_INTERNAL_ERROR perhaps should be replaced with right error code */
+    AssertReturn(errRc == ERR_OK, VERR_INTERNAL_ERROR);
+    {
+        lwip_tcpip_init(devINIPTcpipInitDone, &pThis->LWIPTcpInitSem);
+        lwip_sys_sem_wait(&pThis->LWIPTcpInitSem, 0);
+    }
+#endif
 
     /*
