]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Only use ports with a network connection (media present) when connecting to a remote...
authorlpleahy <lpleahy@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 7 Jun 2012 17:38:09 +0000 (17:38 +0000)
committerlpleahy <lpleahy@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 7 Jun 2012 17:38:09 +0000 (17:38 +0000)
Fix bug causing early exit with NO_MEDIA.
Add fix to TCP6.

Signed-off-by: lpleahy
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13432 6f19259b-4bc3-4df7-8a09-765794883524

StdLib/EfiSocketLib/Tcp4.c
StdLib/EfiSocketLib/Tcp6.c

index 5027ca343da9ae674db5b9d088aaa2399480d623..0643518f0d663f7b34d5991704e0d522f9fe51af 100644 (file)
@@ -512,7 +512,6 @@ EslTcp4ConnectStart (
       //\r
       //  Verify the port connection\r
       //\r
       //\r
       //  Verify the port connection\r
       //\r
-      pTcp4Protocol = pPort->pProtocol.TCPv4;\r
       Status = pTcp4Protocol->GetModeData ( pTcp4Protocol,\r
                                             NULL,\r
                                             NULL,\r
       Status = pTcp4Protocol->GetModeData ( pTcp4Protocol,\r
                                             NULL,\r
                                             NULL,\r
@@ -525,7 +524,18 @@ EslTcp4ConnectStart (
           //\r
           //  Port is not connected to the network\r
           //\r
           //\r
           //  Port is not connected to the network\r
           //\r
-          Status = EFI_NO_MEDIA;\r
+          pTcp4->ConnectToken.CompletionToken.Status = EFI_NO_MEDIA;\r
+\r
+          //\r
+          //  Continue with the next port\r
+          //\r
+          gBS->CheckEvent ( pTcp4->ConnectToken.CompletionToken.Event );\r
+          gBS->SignalEvent ( pTcp4->ConnectToken.CompletionToken.Event );\r
+\r
+          //\r
+          //  Connection in progress\r
+          //\r
+          Status = EFI_SUCCESS;\r
         }\r
         else {\r
           //\r
         }\r
         else {\r
           //\r
index b070aaa724c884b0059819cc6c6020a043130cb2..dd0f0864877817b8592b51945b2154be72f645dd 100644 (file)
@@ -471,6 +471,7 @@ EslTcp6ConnectStart (
   ESL_PORT * pPort;\r
   ESL_TCP6_CONTEXT * pTcp6;\r
   EFI_TCP6_PROTOCOL * pTcp6Protocol;\r
   ESL_PORT * pPort;\r
   ESL_TCP6_CONTEXT * pTcp6;\r
   EFI_TCP6_PROTOCOL * pTcp6Protocol;\r
+  EFI_SIMPLE_NETWORK_MODE SnpModeData;\r
   EFI_STATUS Status;\r
 \r
   DBG_ENTER ( );\r
   EFI_STATUS Status;\r
 \r
   DBG_ENTER ( );\r
@@ -528,10 +529,41 @@ EslTcp6ConnectStart (
       pPort->bConfigured = TRUE;\r
 \r
       //\r
       pPort->bConfigured = TRUE;\r
 \r
       //\r
-      //  Attempt the connection to the remote system\r
+      //  Verify the port connection\r
       //\r
       //\r
-      Status = pTcp6Protocol->Connect ( pTcp6Protocol,\r
-                                        &pTcp6->ConnectToken );\r
+      Status = pTcp6Protocol->GetModeData ( pTcp6Protocol,\r
+                                            NULL,\r
+                                            NULL,\r
+                                            NULL,\r
+                                            NULL,\r
+                                            &SnpModeData );\r
+      if ( !EFI_ERROR ( Status )) {\r
+        if ( SnpModeData.MediaPresentSupported\r
+          && ( !SnpModeData.MediaPresent )) {\r
+          //\r
+          //  Port is not connected to the network\r
+          //\r
+          pTcp6->ConnectToken.CompletionToken.Status = EFI_NO_MEDIA;\r
+\r
+          //\r
+          //  Continue with the next port\r
+          //\r
+          gBS->CheckEvent ( pTcp6->ConnectToken.CompletionToken.Event );\r
+          gBS->SignalEvent ( pTcp6->ConnectToken.CompletionToken.Event );\r
+\r
+          //\r
+          //  Connection in progress\r
+          //\r
+          Status = EFI_SUCCESS;\r
+        }\r
+        else {\r
+          //\r
+          //  Attempt the connection to the remote system\r
+          //\r
+          Status = pTcp6Protocol->Connect ( pTcp6Protocol,\r
+                                            &pTcp6->ConnectToken );\r
+        }\r
+      }\r
       if ( !EFI_ERROR ( Status )) {\r
         //\r
         //  Connection in progress\r
       if ( !EFI_ERROR ( Status )) {\r
         //\r
         //  Connection in progress\r
@@ -583,6 +615,7 @@ EslTcp6ConnectStart (
           pSocket->errno = ETIMEDOUT;\r
           break;\r
 \r
           pSocket->errno = ETIMEDOUT;\r
           break;\r
 \r
+        case EFI_NO_MEDIA:\r
         case EFI_NETWORK_UNREACHABLE:\r
           pSocket->errno = ENETDOWN;\r
           break;\r
         case EFI_NETWORK_UNREACHABLE:\r
           pSocket->errno = ENETDOWN;\r
           break;\r