]> 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>
Mon, 4 Jun 2012 20:38:03 +0000 (20:38 +0000)
committerlpleahy <lpleahy@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 4 Jun 2012 20:38:03 +0000 (20:38 +0000)
Signed-off-by: lpleahy
Reviewed-by: Erik Bjorge <erik.c.bjorge@intel.com>
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13427 6f19259b-4bc3-4df7-8a09-765794883524

StdLib/EfiSocketLib/Tcp4.c

index 8044d807c7dbbae6371d11718e06d9e4b5069b7d..5027ca343da9ae674db5b9d088aaa2399480d623 100644 (file)
@@ -453,6 +453,7 @@ EslTcp4ConnectStart (
   ESL_PORT * pPort;\r
   ESL_TCP4_CONTEXT * pTcp4;\r
   EFI_TCP4_PROTOCOL * pTcp4Protocol;\r
+  EFI_SIMPLE_NETWORK_MODE SnpModeData;\r
   EFI_STATUS Status;\r
 \r
   DBG_ENTER ( );\r
@@ -509,10 +510,31 @@ EslTcp4ConnectStart (
       pPort->bConfigured = TRUE;\r
 \r
       //\r
-      //  Attempt the connection to the remote system\r
+      //  Verify the port connection\r
       //\r
-      Status = pTcp4Protocol->Connect ( pTcp4Protocol,\r
-                                        &pTcp4->ConnectToken );\r
+      pTcp4Protocol = pPort->pProtocol.TCPv4;\r
+      Status = pTcp4Protocol->GetModeData ( pTcp4Protocol,\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
+          Status = EFI_NO_MEDIA;\r
+        }\r
+        else {\r
+          //\r
+          //  Attempt the connection to the remote system\r
+          //\r
+          Status = pTcp4Protocol->Connect ( pTcp4Protocol,\r
+                                            &pTcp4->ConnectToken );\r
+        }\r
+      }\r
       if ( !EFI_ERROR ( Status )) {\r
         //\r
         //  Connection in progress\r
@@ -552,6 +574,7 @@ EslTcp4ConnectStart (
           pSocket->errno = ETIMEDOUT;\r
           break;\r
 \r
+        case EFI_NO_MEDIA:\r
         case EFI_NETWORK_UNREACHABLE:\r
           pSocket->errno = ENETDOWN;\r
           break;\r