//\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
//\r
// The connection failed\r
//\r
- DEBUG (( DEBUG_CONNECT,\r
- "0x%08x: Port connection to [%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x]:%d failed, Status: %r\r\n",\r
- pPort,\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[0],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[1],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[2],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[3],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[4],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[5],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[6],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[7],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[8],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[9],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[10],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[11],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[12],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[13],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[14],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[15],\r
- pTcp6->ConfigData.AccessPoint.RemotePort,\r
- Status ));\r
+ if ( pPort->bConfigured ) {\r
+ DEBUG (( DEBUG_CONNECT,\r
+ "0x%08x: Port connection to [%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x]:%d failed, Status: %r\r\n",\r
+ pPort,\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[0],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[1],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[2],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[3],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[4],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[5],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[6],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[7],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[8],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[9],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[10],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[11],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[12],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[13],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[14],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[15],\r
+ pTcp6->ConfigData.AccessPoint.RemotePort,\r
+ Status ));\r
+ }\r
\r
//\r
// Close the current port\r
//\r
Status = EslTcp6ConnectStart ( pSocket );\r
if ( EFI_NOT_READY != Status ) {\r
- pSocket->ConnectStatus = Status;\r
bRemoveFirstPort = TRUE;\r
}\r
}\r
//\r
Status = pSocket->ConnectStatus;\r
switch ( Status ) {\r
- default:\r
- case EFI_DEVICE_ERROR:\r
- pSocket->errno = EIO;\r
- break;\r
-\r
- case EFI_ABORTED:\r
- pSocket->errno = ECONNREFUSED;\r
- break;\r
-\r
- case EFI_INVALID_PARAMETER:\r
- pSocket->errno = EINVAL;\r
- break;\r
-\r
- case EFI_NO_MAPPING:\r
- case EFI_NO_RESPONSE:\r
- pSocket->errno = EHOSTUNREACH;\r
- break;\r
-\r
- case EFI_NO_MEDIA:\r
- pSocket->errno = ENETDOWN;\r
- break;\r
-\r
- case EFI_OUT_OF_RESOURCES:\r
- pSocket->errno = ENOMEM;\r
- break;\r
-\r
- case EFI_SUCCESS:\r
- pSocket->errno = 0;\r
- pSocket->bConfigured = TRUE;\r
- break;\r
-\r
- case EFI_TIMEOUT:\r
- pSocket->errno = ETIMEDOUT;\r
- break;\r
-\r
- case EFI_UNSUPPORTED:\r
- pSocket->errno = ENOTSUP;\r
- break;\r
-\r
- case 0x80000069:\r
- pSocket->errno = ECONNRESET;\r
- break;\r
+ default:\r
+ case EFI_DEVICE_ERROR:\r
+ pSocket->errno = EIO;\r
+ break;\r
+ \r
+ case EFI_ABORTED:\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 = EADDRNOTAVAIL;\r
+ break;\r
+ \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 = 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
+ pSocket->errno = 0;\r
+ pSocket->bConfigured = TRUE;\r
+ break;\r
+ \r
+ case EFI_TIMEOUT:\r
+ pSocket->errno = ETIMEDOUT;\r
+ break;\r
+ \r
+ case EFI_UNSUPPORTED:\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 Tcp6 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
- 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
+ Status = EFI_NO_MEDIA;\r
}\r
else {\r
//\r
&pTcp6->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 [%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x]:%d\r\n",\r
- pPort,\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[0],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[1],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[2],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[3],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[4],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[5],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[6],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[7],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[8],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[9],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[10],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[11],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[12],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[13],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[14],\r
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[15],\r
- pTcp6->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 [%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x]:%d\r\n",\r
+ pPort,\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[0],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[1],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[2],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[3],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[4],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[5],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[6],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[7],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[8],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[9],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[10],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[11],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[12],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[13],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[14],\r
+ pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[15],\r
+ pTcp6->ConfigData.AccessPoint.RemotePort ));\r
+ }\r
+ else {\r
+ //\r
+ // Error return path is through EslTcp6ConnectComplete to\r
+ // enable retry on other ports\r
+ //\r
+ // Status to errno translation gets done in EslTcp4ConnectPoll\r
+ //\r
+ pTcp6->ConnectToken.CompletionToken.Status = Status;\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
+ Status = EFI_NOT_READY;\r
}\r
else {\r
//\r