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
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
pSocket->errno = ETIMEDOUT;\r
break;\r
\r
+ case EFI_NO_MEDIA:\r
case EFI_NETWORK_UNREACHABLE:\r
pSocket->errno = ENETDOWN;\r
break;\r