Return the proper status after one of the ports is configured for UDP or IP communications.

Reviewed by: Ankit Singh of Dell
Submitted by: lpleahy


git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13604 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
lpleahy 2012-08-10 01:13:05 +00:00
parent 36384ceb64
commit bb3aa953b3
3 changed files with 87 additions and 99 deletions

View File

@ -749,6 +749,7 @@ EslIp4RxComplete (
// //
// Fill in the port list if necessary // Fill in the port list if necessary
// //
pSocket->errno = ENETDOWN;
if ( NULL == pSocket->pPortList ) { if ( NULL == pSocket->pPortList ) {
LocalAddress.sin_len = sizeof ( LocalAddress ); LocalAddress.sin_len = sizeof ( LocalAddress );
LocalAddress.sin_family = AF_INET; LocalAddress.sin_family = AF_INET;
@ -804,34 +805,36 @@ EslIp4RxComplete (
NULL ); NULL );
} }
if ( EFI_ERROR ( Status )) { if ( EFI_ERROR ( Status )) {
DEBUG (( DEBUG_LISTEN, if ( !pSocket->bConfigured ) {
"ERROR - Failed to configure the Ip4 port, Status: %r\r\n", DEBUG (( DEBUG_LISTEN,
Status )); "ERROR - Failed to configure the Ip4 port, Status: %r\r\n",
switch ( Status ) { Status ));
case EFI_ACCESS_DENIED: switch ( Status ) {
pSocket->errno = EACCES; case EFI_ACCESS_DENIED:
break; pSocket->errno = EACCES;
break;
default: default:
case EFI_DEVICE_ERROR: case EFI_DEVICE_ERROR:
pSocket->errno = EIO; pSocket->errno = EIO;
break; break;
case EFI_INVALID_PARAMETER: case EFI_INVALID_PARAMETER:
pSocket->errno = EADDRNOTAVAIL; pSocket->errno = EADDRNOTAVAIL;
break; break;
case EFI_NO_MAPPING: case EFI_NO_MAPPING:
pSocket->errno = EAFNOSUPPORT; pSocket->errno = EAFNOSUPPORT;
break; break;
case EFI_OUT_OF_RESOURCES: case EFI_OUT_OF_RESOURCES:
pSocket->errno = ENOBUFS; pSocket->errno = ENOBUFS;
break; break;
case EFI_UNSUPPORTED: case EFI_UNSUPPORTED:
pSocket->errno = EOPNOTSUPP; pSocket->errno = EOPNOTSUPP;
break; break;
}
} }
} }
else { else {
@ -876,6 +879,7 @@ EslIp4RxComplete (
pIp4->ModeData.RouteTable[Index].GatewayAddress.Addr[3])); pIp4->ModeData.RouteTable[Index].GatewayAddress.Addr[3]));
} }
pPort->bConfigured = TRUE; pPort->bConfigured = TRUE;
pSocket->bConfigured = TRUE;
// //
// Start the first read on the port // Start the first read on the port
@ -886,6 +890,7 @@ EslIp4RxComplete (
// The socket is connected // The socket is connected
// //
pSocket->State = SOCKET_STATE_CONNECTED; pSocket->State = SOCKET_STATE_CONNECTED;
pSocket->errno = 0;
} }
// //
@ -893,21 +898,12 @@ EslIp4RxComplete (
// //
pPort = pNextPort; pPort = pNextPort;
} }
//
// Determine the configuration status
//
if ( NULL != pSocket->pPortList ) {
pSocket->bConfigured = TRUE;
}
} }
// //
// Determine the socket configuration status // Determine the socket configuration status
// //
if ( !EFI_ERROR ( Status )) { Status = pSocket->bConfigured ? EFI_SUCCESS : EFI_NOT_STARTED;
Status = pSocket->bConfigured ? EFI_SUCCESS : EFI_NOT_STARTED;
}
// //
// Return the port connected state. // Return the port connected state.

View File

@ -591,6 +591,7 @@ EslUdp4RxComplete (
// //
// Fill in the port list if necessary // Fill in the port list if necessary
// //
pSocket->errno = ENETDOWN;
if ( NULL == pSocket->pPortList ) { if ( NULL == pSocket->pPortList ) {
LocalAddress.sin_len = sizeof ( LocalAddress ); LocalAddress.sin_len = sizeof ( LocalAddress );
LocalAddress.sin_family = AF_INET; LocalAddress.sin_family = AF_INET;
@ -640,34 +641,36 @@ EslUdp4RxComplete (
NULL ); NULL );
} }
if ( EFI_ERROR ( Status )) { if ( EFI_ERROR ( Status )) {
DEBUG (( DEBUG_LISTEN, if ( !pSocket->bConfigured ) {
"ERROR - Failed to configure the Udp4 port, Status: %r\r\n", DEBUG (( DEBUG_LISTEN,
Status )); "ERROR - Failed to configure the Udp4 port, Status: %r\r\n",
switch ( Status ) { Status ));
case EFI_ACCESS_DENIED: switch ( Status ) {
pSocket->errno = EACCES; case EFI_ACCESS_DENIED:
break; pSocket->errno = EACCES;
break;
default: default:
case EFI_DEVICE_ERROR: case EFI_DEVICE_ERROR:
pSocket->errno = EIO; pSocket->errno = EIO;
break; break;
case EFI_INVALID_PARAMETER: case EFI_INVALID_PARAMETER:
pSocket->errno = EADDRNOTAVAIL; pSocket->errno = EADDRNOTAVAIL;
break; break;
case EFI_NO_MAPPING: case EFI_NO_MAPPING:
pSocket->errno = EAFNOSUPPORT; pSocket->errno = EAFNOSUPPORT;
break; break;
case EFI_OUT_OF_RESOURCES: case EFI_OUT_OF_RESOURCES:
pSocket->errno = ENOBUFS; pSocket->errno = ENOBUFS;
break; break;
case EFI_UNSUPPORTED: case EFI_UNSUPPORTED:
pSocket->errno = EOPNOTSUPP; pSocket->errno = EOPNOTSUPP;
break; break;
}
} }
} }
else { else {
@ -685,6 +688,7 @@ EslUdp4RxComplete (
pConfigData->RemoteAddress.Addr[3], pConfigData->RemoteAddress.Addr[3],
pConfigData->RemotePort )); pConfigData->RemotePort ));
pPort->bConfigured = TRUE; pPort->bConfigured = TRUE;
pSocket->bConfigured = TRUE;
// //
// Start the first read on the port // Start the first read on the port
@ -695,6 +699,7 @@ EslUdp4RxComplete (
// The socket is connected // The socket is connected
// //
pSocket->State = SOCKET_STATE_CONNECTED; pSocket->State = SOCKET_STATE_CONNECTED;
pSocket->errno = 0;
} }
// //
@ -702,21 +707,12 @@ EslUdp4RxComplete (
// //
pPort = pNextPort; pPort = pNextPort;
} }
//
// Determine the configuration status
//
if ( NULL != pSocket->pPortList ) {
pSocket->bConfigured = TRUE;
}
} }
// //
// Determine the socket configuration status // Determine the socket configuration status
// //
if ( !EFI_ERROR ( Status )) { Status = pSocket->bConfigured ? EFI_SUCCESS : EFI_NOT_STARTED;
Status = pSocket->bConfigured ? EFI_SUCCESS : EFI_NOT_STARTED;
}
// //
// Return the port connected state. // Return the port connected state.

View File

@ -585,6 +585,7 @@ EslUdp6RxComplete (
// //
// Fill in the port list if necessary // Fill in the port list if necessary
// //
pSocket->errno = ENETDOWN;
if ( NULL == pSocket->pPortList ) { if ( NULL == pSocket->pPortList ) {
ZeroMem ( &LocalAddress, sizeof ( LocalAddress )); ZeroMem ( &LocalAddress, sizeof ( LocalAddress ));
LocalAddress.sin6_len = sizeof ( LocalAddress ); LocalAddress.sin6_len = sizeof ( LocalAddress );
@ -657,34 +658,36 @@ EslUdp6RxComplete (
NULL ); NULL );
} }
if ( EFI_ERROR ( Status )) { if ( EFI_ERROR ( Status )) {
DEBUG (( DEBUG_LISTEN, if ( !pSocket->bConfigured ) {
"ERROR - Failed to configure the Udp6 port, Status: %r\r\n", DEBUG (( DEBUG_LISTEN,
Status )); "ERROR - Failed to configure the Udp6 port, Status: %r\r\n",
switch ( Status ) { Status ));
case EFI_ACCESS_DENIED: switch ( Status ) {
pSocket->errno = EACCES; case EFI_ACCESS_DENIED:
break; pSocket->errno = EACCES;
break;
default: default:
case EFI_DEVICE_ERROR: case EFI_DEVICE_ERROR:
pSocket->errno = EIO; pSocket->errno = EIO;
break; break;
case EFI_INVALID_PARAMETER: case EFI_INVALID_PARAMETER:
pSocket->errno = EADDRNOTAVAIL; pSocket->errno = EADDRNOTAVAIL;
break; break;
case EFI_NO_MAPPING: case EFI_NO_MAPPING:
pSocket->errno = EAFNOSUPPORT; pSocket->errno = EAFNOSUPPORT;
break; break;
case EFI_OUT_OF_RESOURCES: case EFI_OUT_OF_RESOURCES:
pSocket->errno = ENOBUFS; pSocket->errno = ENOBUFS;
break; break;
case EFI_UNSUPPORTED: case EFI_UNSUPPORTED:
pSocket->errno = EOPNOTSUPP; pSocket->errno = EOPNOTSUPP;
break; break;
}
} }
} }
else { else {
@ -726,6 +729,7 @@ EslUdp6RxComplete (
pConfigData->RemoteAddress.Addr[15], pConfigData->RemoteAddress.Addr[15],
pConfigData->RemotePort )); pConfigData->RemotePort ));
pPort->bConfigured = TRUE; pPort->bConfigured = TRUE;
pSocket->bConfigured = TRUE;
// //
// Start the first read on the port // Start the first read on the port
@ -736,6 +740,7 @@ EslUdp6RxComplete (
// The socket is connected // The socket is connected
// //
pSocket->State = SOCKET_STATE_CONNECTED; pSocket->State = SOCKET_STATE_CONNECTED;
pSocket->errno = 0;
} }
// //
@ -743,21 +748,12 @@ EslUdp6RxComplete (
// //
pPort = pNextPort; pPort = pNextPort;
} }
//
// Determine the configuration status
//
if ( NULL != pSocket->pPortList ) {
pSocket->bConfigured = TRUE;
}
} }
// //
// Determine the socket configuration status // Determine the socket configuration status
// //
if ( !EFI_ERROR ( Status )) { Status = pSocket->bConfigured ? EFI_SUCCESS : EFI_NOT_STARTED;
Status = pSocket->bConfigured ? EFI_SUCCESS : EFI_NOT_STARTED;
}
// //
// Return the port connected state. // Return the port connected state.