Index: /trunk/src/VBox/Devices/Network/DrvNAT.cpp
===================================================================
--- /trunk/src/VBox/Devices/Network/DrvNAT.cpp	(revision 30348)
+++ /trunk/src/VBox/Devices/Network/DrvNAT.cpp	(revision 30349)
@@ -153,5 +153,6 @@
     /** The guest IP for port-forwarding. */
     uint32_t                GuestIP;
-    uint32_t                alignment1;
+    /** Link state set when the VM is suspended. */
+    PDMNETWORKLINKSTATE     enmLinkStateWant;
 
 #ifdef VBOX_WITH_SLIRP_MT
@@ -594,6 +595,5 @@
 static void drvNATNotifyLinkChangedWorker(PDRVNAT pThis, PDMNETWORKLINKSTATE enmLinkState)
 {
-    pThis->enmLinkState = enmLinkState;
-
+    pThis->enmLinkState = pThis->enmLinkStateWant = enmLinkState;
     switch (enmLinkState)
     {
@@ -627,7 +627,11 @@
     LogFlow(("drvNATNetworkUp_NotifyLinkChanged: enmLinkState=%d\n", enmLinkState));
 
-    /* don't queue new requests when the NAT thread is about to stop */
+    /* Don't queue new requests when the NAT thread is about to stop.
+     * But the VM could also be paused. So memorize the desired state. */
     if (pThis->pSlirpThread->enmState != PDMTHREADSTATE_RUNNING)
+    {
+        pThis->enmLinkStateWant = enmLinkState;
         return;
+    }
 
     PRTREQ pReq;
@@ -670,4 +674,7 @@
     if (pThread->enmState == PDMTHREADSTATE_INITIALIZING)
         return VINF_SUCCESS;
+
+    if (pThis->enmLinkStateWant != pThis->enmLinkState)
+        drvNATNotifyLinkChangedWorker(pThis, pThis->enmLinkStateWant);
 
     /*
@@ -1282,5 +1289,5 @@
 #endif
 
-            pThis->enmLinkState = PDMNETWORKLINKSTATE_UP;
+            pThis->enmLinkState = pThis->enmLinkStateWant = PDMNETWORKLINKSTATE_UP;
 
             /* might return VINF_NAT_DNS */
