//\r
// The connection failed\r
//\r
- DEBUG (( DEBUG_CONNECT,\r
- "0x%08x: Port connection to %d.%d.%d.%d:%d failed, Status: %r\r\n",\r
- pPort,\r
- pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[0],\r
- pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[1],\r
- pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[2],\r
- pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[3],\r
- pTcp4->ConfigData.AccessPoint.RemotePort,\r
- Status ));\r
+ if ( pPort->bConfigured ) {\r
+ DEBUG (( DEBUG_CONNECT,\r
+ "0x%08x: Port connection to %d.%d.%d.%d:%d failed, Status: %r\r\n",\r
+ pPort,\r
+ pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[0],\r
+ pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[1],\r
+ pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[2],\r
+ pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[3],\r
+ pTcp4->ConfigData.AccessPoint.RemotePort,\r
+ Status ));\r
+ }\r
\r
//\r
// Close the current port\r
//\r
Status = EslTcp4ConnectStart ( pSocket );\r
if ( EFI_NOT_READY != Status ) {\r
- pSocket->ConnectStatus = Status;\r
bRemoveFirstPort = TRUE;\r
}\r
}\r
break;\r
\r
case EFI_ABORTED:\r
- pSocket->errno = ECONNREFUSED;\r
+ pSocket->errno = ECONNABORTED;\r
+ break;\r
+\r
+ case EFI_ACCESS_DENIED:\r
+ pSocket->errno = EACCES;\r
+ break;\r
+\r
+ case EFI_CONNECTION_RESET:\r
+ pSocket->errno = ECONNRESET;\r
break;\r
\r
case EFI_INVALID_PARAMETER:\r
- pSocket->errno = EINVAL;\r
+ pSocket->errno = EADDRNOTAVAIL;\r
break;\r
\r
- case EFI_NO_MAPPING:\r
+ case EFI_HOST_UNREACHABLE:\r
case EFI_NO_RESPONSE:\r
pSocket->errno = EHOSTUNREACH;\r
break;\r
\r
+ case EFI_NO_MAPPING:\r
+ pSocket->errno = EAFNOSUPPORT;\r
+ break;\r
+\r
case EFI_NO_MEDIA:\r
+ case EFI_NETWORK_UNREACHABLE:\r
pSocket->errno = ENETDOWN;\r
break;\r
\r
case EFI_OUT_OF_RESOURCES:\r
- pSocket->errno = ENOMEM;\r
+ pSocket->errno = ENOBUFS;\r
+ break;\r
+\r
+ case EFI_PORT_UNREACHABLE:\r
+ case EFI_PROTOCOL_UNREACHABLE:\r
+ case EFI_CONNECTION_REFUSED:\r
+ pSocket->errno = ECONNREFUSED;\r
break;\r
\r
case EFI_SUCCESS:\r
break;\r
\r
case EFI_UNSUPPORTED:\r
- pSocket->errno = ENOTSUP;\r
- break;\r
-\r
- case 0x80000069:\r
- pSocket->errno = ECONNRESET;\r
+ pSocket->errno = EOPNOTSUPP;\r
break;\r
}\r
+\r
+ //\r
+ // Display the translation\r
+ //\r
+ DEBUG (( DEBUG_CONNECT,\r
+ "ERROR - errno: %d, Status: %r\r\n",\r
+ pSocket->errno,\r
+ Status ));\r
}\r
\r
//\r
DEBUG (( DEBUG_CONNECT,\r
"ERROR - Failed to configure the Tcp4 port, Status: %r\r\n",\r
Status ));\r
- switch ( Status ) {\r
- case EFI_ACCESS_DENIED:\r
- pSocket->errno = EACCES;\r
- break;\r
- \r
- default:\r
- case EFI_DEVICE_ERROR:\r
- pSocket->errno = EIO;\r
- break;\r
- \r
- case EFI_INVALID_PARAMETER:\r
- pSocket->errno = EADDRNOTAVAIL;\r
- break;\r
- \r
- case EFI_NO_MAPPING:\r
- pSocket->errno = EAFNOSUPPORT;\r
- break;\r
- \r
- case EFI_OUT_OF_RESOURCES:\r
- pSocket->errno = ENOBUFS;\r
- break;\r
- \r
- case EFI_UNSUPPORTED:\r
- pSocket->errno = EOPNOTSUPP;\r
- break;\r
- }\r
}\r
else {\r
DEBUG (( DEBUG_CONNECT,\r
//\r
// Port is not connected to the network\r
//\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
+ Status = EFI_NO_MEDIA;\r
}\r
else {\r
//\r
&pTcp4->ConnectToken );\r
}\r
}\r
- if ( !EFI_ERROR ( Status )) {\r
- //\r
- // Connection in progress\r
- //\r
- pSocket->errno = EINPROGRESS;\r
- Status = EFI_NOT_READY;\r
- DEBUG (( DEBUG_CONNECT,\r
- "0x%08x: Port attempting connection to %d.%d.%d.%d:%d\r\n",\r
- pPort,\r
- pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[0],\r
- pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[1],\r
- pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[2],\r
- pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[3],\r
- pTcp4->ConfigData.AccessPoint.RemotePort ));\r
- }\r
- else {\r
+ if ( EFI_ERROR ( Status )) {\r
//\r
// Connection error\r
//\r
"ERROR - Port 0x%08x not connected, Status: %r\r\n",\r
pPort,\r
Status ));\r
- //\r
- // Determine the errno value\r
- //\r
- switch ( Status ) {\r
- default:\r
- pSocket->errno = EIO;\r
- break;\r
-\r
- case EFI_OUT_OF_RESOURCES:\r
- pSocket->errno = ENOBUFS;\r
- break;\r
-\r
- case EFI_TIMEOUT:\r
- pSocket->errno = ETIMEDOUT;\r
- break;\r
-\r
- case EFI_NO_MEDIA:\r
- case EFI_NETWORK_UNREACHABLE:\r
- pSocket->errno = ENETDOWN;\r
- break;\r
-\r
- case EFI_HOST_UNREACHABLE:\r
- pSocket->errno = EHOSTUNREACH;\r
- break;\r
-\r
- case EFI_PORT_UNREACHABLE:\r
- case EFI_PROTOCOL_UNREACHABLE:\r
- case EFI_CONNECTION_REFUSED:\r
- pSocket->errno = ECONNREFUSED;\r
- break;\r
-\r
- case EFI_CONNECTION_RESET:\r
- pSocket->errno = ECONNRESET;\r
- break;\r
- }\r
}\r
}\r
+ if ( !EFI_ERROR ( Status )) {\r
+ //\r
+ // Connection in progress\r
+ //\r
+ pSocket->errno = EINPROGRESS;\r
+ DEBUG (( DEBUG_CONNECT,\r
+ "0x%08x: Port attempting connection to %d.%d.%d.%d:%d\r\n",\r
+ pPort,\r
+ pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[0],\r
+ pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[1],\r
+ pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[2],\r
+ pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[3],\r
+ pTcp4->ConfigData.AccessPoint.RemotePort ));\r
+ }\r
+ else {\r
+ //\r
+ // Error return path is through EslTcp4ConnectComplete to\r
+ // enable retry on other ports\r
+ //\r
+ // Status to errno translation gets done in EslTcp4ConnectPoll\r
+ //\r
+ pTcp4->ConnectToken.CompletionToken.Status = Status;\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
+ Status = EFI_NOT_READY;\r
}\r
else {\r
//\r
// Mark the socket as configured\r
//\r
pSocket->bConfigured = TRUE;\r
+ Status = EFI_SUCCESS;\r
+ pSocket->errno = 0;\r
\r
//\r
// All done\r