From: lpleahy Date: Mon, 10 Sep 2012 19:04:41 +0000 (+0000) Subject: Modify UDP and IP to transmit on all network adapters instead of just the first netwo... X-Git-Tag: edk2-stable201903~13067 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=884ed923564f35084c45a8f3f132c076b26f2423 Modify UDP and IP to transmit on all network adapters instead of just the first network adapter. Fix comment in Socket.c. Signed-off-by: lpleahy Reviewed and tested by: Sreenivasula Reddy of Dell git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13713 6f19259b-4bc3-4df7-8a09-765794883524 --- diff --git a/StdLib/EfiSocketLib/Ip4.c b/StdLib/EfiSocketLib/Ip4.c index a245e6847e..2e832c7ac9 100644 --- a/StdLib/EfiSocketLib/Ip4.c +++ b/StdLib/EfiSocketLib/Ip4.c @@ -985,21 +985,21 @@ EslIp4TxBuffer ( // if ( SOCKET_STATE_CONNECTED == pSocket->State ) { // - // Locate the port + // Verify that there is enough room to buffer another + // transmit operation // - pPort = pSocket->pPortList; - if ( NULL != pPort ) { + pTxBytes = &pSocket->TxBytes; + if ( pSocket->MaxTxBuf > *pTxBytes ) { // - // Determine the queue head + // Locate the port // - pIp4 = &pPort->Context.Ip4; - pTxBytes = &pSocket->TxBytes; + pPort = pSocket->pPortList; + while ( NULL != pPort ) { + // + // Determine the queue head + // + pIp4 = &pPort->Context.Ip4; - // - // Verify that there is enough room to buffer another - // transmit operation - // - if ( pSocket->MaxTxBuf > *pTxBytes ) { // // Attempt to allocate the packet // @@ -1131,6 +1131,7 @@ EslIp4TxBuffer ( // Free the packet // EslSocketPacketFree ( pPacket, DEBUG_TX ); + break; } // @@ -1143,16 +1144,22 @@ EslIp4TxBuffer ( // Packet allocation failed // pSocket->errno = ENOMEM; + break; } - } - else { + // - // Not enough buffer space available + // Set the next port // - pSocket->errno = EAGAIN; - Status = EFI_NOT_READY; + pPort = pPort->pLinkSocket; } } + else { + // + // Not enough buffer space available + // + pSocket->errno = EAGAIN; + Status = EFI_NOT_READY; + } } // diff --git a/StdLib/EfiSocketLib/Socket.c b/StdLib/EfiSocketLib/Socket.c index acb23677aa..e718e9bdf8 100644 --- a/StdLib/EfiSocketLib/Socket.c +++ b/StdLib/EfiSocketLib/Socket.c @@ -3191,7 +3191,7 @@ EslSocketPacketFree ( DBG_ENTER ( ); // - // Allocate a packet structure + // Free a packet structure // LengthInBytes = pPacket->PacketSize; Status = gBS->FreePool ( pPacket ); diff --git a/StdLib/EfiSocketLib/Udp4.c b/StdLib/EfiSocketLib/Udp4.c index 45c0adad3a..414e3fe321 100644 --- a/StdLib/EfiSocketLib/Udp4.c +++ b/StdLib/EfiSocketLib/Udp4.c @@ -794,21 +794,21 @@ EslUdp4TxBuffer ( // if ( SOCKET_STATE_CONNECTED == pSocket->State ) { // - // Locate the port + // Verify that there is enough room to buffer another + // transmit operation // - pPort = pSocket->pPortList; - if ( NULL != pPort ) { + pTxBytes = &pSocket->TxBytes; + if ( pSocket->MaxTxBuf > *pTxBytes ) { // - // Determine the queue head + // Locate the port // - pUdp4 = &pPort->Context.Udp4; - pTxBytes = &pSocket->TxBytes; + pPort = pSocket->pPortList; + while ( NULL != pPort ) { + // + // Determine the queue head + // + pUdp4 = &pPort->Context.Udp4; - // - // Verify that there is enough room to buffer another - // transmit operation - // - if ( pSocket->MaxTxBuf > *pTxBytes ) { // // Attempt to allocate the packet // @@ -923,6 +923,7 @@ EslUdp4TxBuffer ( // Free the packet // EslSocketPacketFree ( pPacket, DEBUG_TX ); + break; } // @@ -935,16 +936,22 @@ EslUdp4TxBuffer ( // Packet allocation failed // pSocket->errno = ENOMEM; + break; } - } - else { + // - // Not enough buffer space available + // Set the next port // - pSocket->errno = EAGAIN; - Status = EFI_NOT_READY; + pPort = pPort->pLinkSocket; } } + else { + // + // Not enough buffer space available + // + pSocket->errno = EAGAIN; + Status = EFI_NOT_READY; + } } // diff --git a/StdLib/EfiSocketLib/Udp6.c b/StdLib/EfiSocketLib/Udp6.c index 899e50681e..7de5005096 100644 --- a/StdLib/EfiSocketLib/Udp6.c +++ b/StdLib/EfiSocketLib/Udp6.c @@ -835,21 +835,21 @@ EslUdp6TxBuffer ( // if ( SOCKET_STATE_CONNECTED == pSocket->State ) { // - // Locate the port + // Verify that there is enough room to buffer another + // transmit operation // - pPort = pSocket->pPortList; - if ( NULL != pPort ) { + pTxBytes = &pSocket->TxBytes; + if ( pSocket->MaxTxBuf > *pTxBytes ) { // - // Determine the queue head + // Locate the port // - pUdp6 = &pPort->Context.Udp6; - pTxBytes = &pSocket->TxBytes; + pPort = pSocket->pPortList; + while ( NULL != pPort ) { + // + // Determine the queue head + // + pUdp6 = &pPort->Context.Udp6; - // - // Verify that there is enough room to buffer another - // transmit operation - // - if ( pSocket->MaxTxBuf > *pTxBytes ) { // // Attempt to allocate the packet // @@ -960,6 +960,7 @@ EslUdp6TxBuffer ( // Free the packet // EslSocketPacketFree ( pPacket, DEBUG_TX ); + break; } // @@ -972,16 +973,22 @@ EslUdp6TxBuffer ( // Packet allocation failed // pSocket->errno = ENOMEM; + break; } - } - else { + // - // Not enough buffer space available + // Set the next port // - pSocket->errno = EAGAIN; - Status = EFI_NOT_READY; + pPort = pPort->pLinkSocket; } } + else { + // + // Not enough buffer space available + // + pSocket->errno = EAGAIN; + Status = EFI_NOT_READY; + } } //