mirror of https://github.com/acidanthera/audk.git
MdeModulePkg/DxeUdpIoLib: Did some code enhancement for UdpIoLib
* Added some ASSERT descriptions for library APIs. * Added "Optional" option for Context parameter in UdpIoCancelDgrams(). * Added function return status check for UdpIoFreeIo(). Cc: Ye Ting <ting.ye@intel.com> Cc: Fu Siyuan <siyuan.fu@intel.com> Cc: Jiaxin Wu <jiaxin.wu@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Wang Fan <fan.wang@intel.com> Reviewed-by: Fu Siyuan <siyuan.fu@intel.com>
This commit is contained in:
parent
038720e899
commit
6d88babba3
|
@ -2,7 +2,7 @@
|
||||||
This library is used to share code between UEFI network stack modules.
|
This library is used to share code between UEFI network stack modules.
|
||||||
It provides the helper routines to access UDP service. It is used by both DHCP and MTFTP.
|
It provides the helper routines to access UDP service. It is used by both DHCP and MTFTP.
|
||||||
|
|
||||||
Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at<BR>
|
which accompanies this distribution. The full text of the license may be found at<BR>
|
||||||
|
@ -197,7 +197,9 @@ BOOLEAN
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Cancel all the sent datagram that pass the selection criteria of ToCancel.
|
Cancel all the sent datagram that pass the selection criteria of ToCancel.
|
||||||
|
|
||||||
If ToCancel is NULL, all the datagrams are cancelled.
|
If ToCancel is NULL, all the datagrams are cancelled.
|
||||||
|
If Udp version is not UDP_IO_UDP4_VERSION or UDP_IO_UDP6_VERSION, then ASSERT().
|
||||||
|
|
||||||
@param[in] UdpIo The UDP_IO to cancel packet.
|
@param[in] UdpIo The UDP_IO to cancel packet.
|
||||||
@param[in] IoStatus The IoStatus to return to the packet owners.
|
@param[in] IoStatus The IoStatus to return to the packet owners.
|
||||||
|
@ -212,13 +214,16 @@ UdpIoCancelDgrams (
|
||||||
IN UDP_IO *UdpIo,
|
IN UDP_IO *UdpIo,
|
||||||
IN EFI_STATUS IoStatus,
|
IN EFI_STATUS IoStatus,
|
||||||
IN UDP_IO_TO_CANCEL ToCancel, OPTIONAL
|
IN UDP_IO_TO_CANCEL ToCancel, OPTIONAL
|
||||||
IN VOID *Context
|
IN VOID *Context OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Creates a UDP_IO to access the UDP service. It creates and configures
|
Creates a UDP_IO to access the UDP service. It creates and configures
|
||||||
a UDP child.
|
a UDP child.
|
||||||
|
|
||||||
|
If Configure is NULL, then ASSERT().
|
||||||
|
If Udp version is not UDP_IO_UDP4_VERSION or UDP_IO_UDP6_VERSION, then ASSERT().
|
||||||
|
|
||||||
It locates the UDP service binding prototype on the Controller parameter
|
It locates the UDP service binding prototype on the Controller parameter
|
||||||
uses the UDP service binding prototype to create a UDP child (also known as
|
uses the UDP service binding prototype to create a UDP child (also known as
|
||||||
a UDP instance) configures the UDP child by calling Configure function prototype.
|
a UDP instance) configures the UDP child by calling Configure function prototype.
|
||||||
|
@ -247,11 +252,14 @@ UdpIoCreateIo (
|
||||||
/**
|
/**
|
||||||
Free the UDP_IO and all its related resources.
|
Free the UDP_IO and all its related resources.
|
||||||
|
|
||||||
|
If Udp version is not UDP_IO_UDP4_VERSION or UDP_IO_UDP6_VERSION, then ASSERT().
|
||||||
|
|
||||||
The function cancels all sent datagrams and receive requests.
|
The function cancels all sent datagrams and receive requests.
|
||||||
|
|
||||||
@param[in] UdpIo The UDP_IO to free.
|
@param[in] UdpIo The UDP_IO to free.
|
||||||
|
|
||||||
@retval EFI_SUCCESS The UDP_IO is freed.
|
@retval EFI_SUCCESS The UDP_IO is freed.
|
||||||
|
@retval Others Failed to free UDP_IO.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
|
@ -264,6 +272,8 @@ UdpIoFreeIo (
|
||||||
Cleans up the UDP_IO without freeing it. Call this function
|
Cleans up the UDP_IO without freeing it. Call this function
|
||||||
if you intend to later re-use the UDP_IO.
|
if you intend to later re-use the UDP_IO.
|
||||||
|
|
||||||
|
If Udp version is not UDP_IO_UDP4_VERSION or UDP_IO_UDP6_VERSION, then ASSERT().
|
||||||
|
|
||||||
This function releases all transmitted datagrams and receive requests and configures NULL for the UDP instance.
|
This function releases all transmitted datagrams and receive requests and configures NULL for the UDP instance.
|
||||||
|
|
||||||
@param[in] UdpIo The UDP_IO to clean up.
|
@param[in] UdpIo The UDP_IO to clean up.
|
||||||
|
@ -278,6 +288,8 @@ UdpIoCleanIo (
|
||||||
/**
|
/**
|
||||||
Send a packet through the UDP_IO.
|
Send a packet through the UDP_IO.
|
||||||
|
|
||||||
|
If Udp version is not UDP_IO_UDP4_VERSION or UDP_IO_UDP6_VERSION, then ASSERT().
|
||||||
|
|
||||||
The packet will be wrapped in UDP_TX_TOKEN. Function Callback will be called
|
The packet will be wrapped in UDP_TX_TOKEN. Function Callback will be called
|
||||||
when the packet is sent. The optional parameter EndPoint overrides the default
|
when the packet is sent. The optional parameter EndPoint overrides the default
|
||||||
address pair if specified.
|
address pair if specified.
|
||||||
|
@ -324,6 +336,8 @@ UdpIoCancelSentDatagram (
|
||||||
/**
|
/**
|
||||||
Issue a receive request to the UDP_IO.
|
Issue a receive request to the UDP_IO.
|
||||||
|
|
||||||
|
If Udp version is not UDP_IO_UDP4_VERSION or UDP_IO_UDP6_VERSION, then ASSERT().
|
||||||
|
|
||||||
This function is called when upper-layer needs packet from UDP for processing.
|
This function is called when upper-layer needs packet from UDP for processing.
|
||||||
Only one receive request is acceptable at a time. Therefore, one common usage model is
|
Only one receive request is acceptable at a time. Therefore, one common usage model is
|
||||||
to invoke this function inside its Callback function when the former packet
|
to invoke this function inside its Callback function when the former packet
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/** @file
|
/** @file
|
||||||
Help functions to access UDP service, it is used by both the DHCP and MTFTP.
|
Help functions to access UDP service, it is used by both the DHCP and MTFTP.
|
||||||
|
|
||||||
Copyright (c) 2005 - 2016, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2005 - 2018, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at<BR>
|
which accompanies this distribution. The full text of the license may be found at<BR>
|
||||||
|
@ -410,6 +410,9 @@ UdpIoCreateRxToken (
|
||||||
/**
|
/**
|
||||||
Wrap a transmit request into a new created UDP_TX_TOKEN.
|
Wrap a transmit request into a new created UDP_TX_TOKEN.
|
||||||
|
|
||||||
|
If Packet is NULL, then ASSERT().
|
||||||
|
If Udp version is not UDP_IO_UDP4_VERSION or UDP_IO_UDP6_VERSION, then ASSERT().
|
||||||
|
|
||||||
@param[in] UdpIo The UdpIo to send packet to.
|
@param[in] UdpIo The UdpIo to send packet to.
|
||||||
@param[in] Packet The user's packet.
|
@param[in] Packet The user's packet.
|
||||||
@param[in] EndPoint The local and remote access point.
|
@param[in] EndPoint The local and remote access point.
|
||||||
|
@ -580,6 +583,9 @@ UdpIoCreateTxToken (
|
||||||
Creates a UDP_IO to access the UDP service. It creates and configures
|
Creates a UDP_IO to access the UDP service. It creates and configures
|
||||||
a UDP child.
|
a UDP child.
|
||||||
|
|
||||||
|
If Configure is NULL, then ASSERT().
|
||||||
|
If Udp version is not UDP_IO_UDP4_VERSION or UDP_IO_UDP6_VERSION, then ASSERT().
|
||||||
|
|
||||||
It locates the UDP service binding prototype on the Controller parameter
|
It locates the UDP service binding prototype on the Controller parameter
|
||||||
uses the UDP service binding prototype to create a UDP child (also known as
|
uses the UDP service binding prototype to create a UDP child (also known as
|
||||||
a UDP instance) configures the UDP child by calling Configure function prototype.
|
a UDP instance) configures the UDP child by calling Configure function prototype.
|
||||||
|
@ -749,7 +755,9 @@ FREE_MEM:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Cancel all the sent datagram that pass the selection criteria of ToCancel.
|
Cancel all the sent datagram that pass the selection criteria of ToCancel.
|
||||||
|
|
||||||
If ToCancel is NULL, all the datagrams are cancelled.
|
If ToCancel is NULL, all the datagrams are cancelled.
|
||||||
|
If Udp version is not UDP_IO_UDP4_VERSION or UDP_IO_UDP6_VERSION, then ASSERT().
|
||||||
|
|
||||||
@param[in] UdpIo The UDP_IO to cancel packet.
|
@param[in] UdpIo The UDP_IO to cancel packet.
|
||||||
@param[in] IoStatus The IoStatus to return to the packet owners.
|
@param[in] IoStatus The IoStatus to return to the packet owners.
|
||||||
|
@ -764,7 +772,7 @@ UdpIoCancelDgrams (
|
||||||
IN UDP_IO *UdpIo,
|
IN UDP_IO *UdpIo,
|
||||||
IN EFI_STATUS IoStatus,
|
IN EFI_STATUS IoStatus,
|
||||||
IN UDP_IO_TO_CANCEL ToCancel, OPTIONAL
|
IN UDP_IO_TO_CANCEL ToCancel, OPTIONAL
|
||||||
IN VOID *Context
|
IN VOID *Context OPTIONAL
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
LIST_ENTRY *Entry;
|
LIST_ENTRY *Entry;
|
||||||
|
@ -791,11 +799,14 @@ UdpIoCancelDgrams (
|
||||||
/**
|
/**
|
||||||
Free the UDP_IO and all its related resources.
|
Free the UDP_IO and all its related resources.
|
||||||
|
|
||||||
|
If Udp version is not UDP_IO_UDP4_VERSION or UDP_IO_UDP6_VERSION, then ASSERT().
|
||||||
|
|
||||||
The function will cancel all sent datagram and receive request.
|
The function will cancel all sent datagram and receive request.
|
||||||
|
|
||||||
@param[in] UdpIo The UDP_IO to free.
|
@param[in] UdpIo The UDP_IO to free.
|
||||||
|
|
||||||
@retval EFI_SUCCESS The UDP_IO is freed.
|
@retval EFI_SUCCESS The UDP_IO is freed.
|
||||||
|
@retval Others Failed to free UDP_IO.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
|
@ -804,6 +815,7 @@ UdpIoFreeIo (
|
||||||
IN UDP_IO *UdpIo
|
IN UDP_IO *UdpIo
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
UDP_RX_TOKEN *RxToken;
|
UDP_RX_TOKEN *RxToken;
|
||||||
|
|
||||||
ASSERT ((UdpIo->UdpVersion == UDP_IO_UDP4_VERSION) ||
|
ASSERT ((UdpIo->UdpVersion == UDP_IO_UDP4_VERSION) ||
|
||||||
|
@ -822,50 +834,68 @@ UdpIoFreeIo (
|
||||||
if (UdpIo->UdpVersion == UDP_IO_UDP4_VERSION) {
|
if (UdpIo->UdpVersion == UDP_IO_UDP4_VERSION) {
|
||||||
|
|
||||||
if ((RxToken = UdpIo->RecvRequest) != NULL) {
|
if ((RxToken = UdpIo->RecvRequest) != NULL) {
|
||||||
UdpIo->Protocol.Udp4->Cancel (UdpIo->Protocol.Udp4, &RxToken->Token.Udp4);
|
Status = UdpIo->Protocol.Udp4->Cancel (UdpIo->Protocol.Udp4, &RxToken->Token.Udp4);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Close then destroy the Udp4 child
|
// Close then destroy the Udp4 child
|
||||||
//
|
//
|
||||||
gBS->CloseProtocol (
|
Status = gBS->CloseProtocol (
|
||||||
UdpIo->UdpHandle,
|
UdpIo->UdpHandle,
|
||||||
&gEfiUdp4ProtocolGuid,
|
&gEfiUdp4ProtocolGuid,
|
||||||
UdpIo->Image,
|
UdpIo->Image,
|
||||||
UdpIo->Controller
|
UdpIo->Controller
|
||||||
);
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
NetLibDestroyServiceChild (
|
Status = NetLibDestroyServiceChild (
|
||||||
UdpIo->Controller,
|
UdpIo->Controller,
|
||||||
UdpIo->Image,
|
UdpIo->Image,
|
||||||
&gEfiUdp4ServiceBindingProtocolGuid,
|
&gEfiUdp4ServiceBindingProtocolGuid,
|
||||||
UdpIo->UdpHandle
|
UdpIo->UdpHandle
|
||||||
);
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
if ((RxToken = UdpIo->RecvRequest) != NULL) {
|
if ((RxToken = UdpIo->RecvRequest) != NULL) {
|
||||||
UdpIo->Protocol.Udp6->Cancel (UdpIo->Protocol.Udp6, &RxToken->Token.Udp6);
|
Status = UdpIo->Protocol.Udp6->Cancel (UdpIo->Protocol.Udp6, &RxToken->Token.Udp6);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Close then destroy the Udp6 child
|
// Close then destroy the Udp6 child
|
||||||
//
|
//
|
||||||
gBS->CloseProtocol (
|
Status = gBS->CloseProtocol (
|
||||||
UdpIo->UdpHandle,
|
UdpIo->UdpHandle,
|
||||||
&gEfiUdp6ProtocolGuid,
|
&gEfiUdp6ProtocolGuid,
|
||||||
UdpIo->Image,
|
UdpIo->Image,
|
||||||
UdpIo->Controller
|
UdpIo->Controller
|
||||||
);
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
NetLibDestroyServiceChild (
|
return Status;
|
||||||
UdpIo->Controller,
|
|
||||||
UdpIo->Image,
|
|
||||||
&gEfiUdp6ServiceBindingProtocolGuid,
|
|
||||||
UdpIo->UdpHandle
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Status = NetLibDestroyServiceChild (
|
||||||
|
UdpIo->Controller,
|
||||||
|
UdpIo->Image,
|
||||||
|
&gEfiUdp6ServiceBindingProtocolGuid,
|
||||||
|
UdpIo->UdpHandle
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!IsListEmpty(&UdpIo->Link)) {
|
if (!IsListEmpty(&UdpIo->Link)) {
|
||||||
RemoveEntryList (&UdpIo->Link);
|
RemoveEntryList (&UdpIo->Link);
|
||||||
}
|
}
|
||||||
|
@ -879,6 +909,8 @@ UdpIoFreeIo (
|
||||||
Clean up the UDP_IO without freeing it. The function is called when
|
Clean up the UDP_IO without freeing it. The function is called when
|
||||||
user wants to re-use the UDP_IO later.
|
user wants to re-use the UDP_IO later.
|
||||||
|
|
||||||
|
If Udp version is not UDP_IO_UDP4_VERSION or UDP_IO_UDP6_VERSION, then ASSERT().
|
||||||
|
|
||||||
It will release all the transmitted datagrams and receive request. It will
|
It will release all the transmitted datagrams and receive request. It will
|
||||||
also configure NULL for the UDP instance.
|
also configure NULL for the UDP instance.
|
||||||
|
|
||||||
|
@ -920,6 +952,8 @@ UdpIoCleanIo (
|
||||||
/**
|
/**
|
||||||
Send a packet through the UDP_IO.
|
Send a packet through the UDP_IO.
|
||||||
|
|
||||||
|
If Udp version is not UDP_IO_UDP4_VERSION or UDP_IO_UDP6_VERSION, then ASSERT().
|
||||||
|
|
||||||
The packet will be wrapped in UDP_TX_TOKEN. Function Callback will be called
|
The packet will be wrapped in UDP_TX_TOKEN. Function Callback will be called
|
||||||
when the packet is sent. The optional parameter EndPoint overrides the default
|
when the packet is sent. The optional parameter EndPoint overrides the default
|
||||||
address pair if specified.
|
address pair if specified.
|
||||||
|
@ -1030,6 +1064,8 @@ UdpIoCancelSentDatagram (
|
||||||
/**
|
/**
|
||||||
Issue a receive request to the UDP_IO.
|
Issue a receive request to the UDP_IO.
|
||||||
|
|
||||||
|
If Udp version is not UDP_IO_UDP4_VERSION or UDP_IO_UDP6_VERSION, then ASSERT().
|
||||||
|
|
||||||
This function is called when upper-layer needs packet from UDP for processing.
|
This function is called when upper-layer needs packet from UDP for processing.
|
||||||
Only one receive request is acceptable at a time so a common usage model is
|
Only one receive request is acceptable at a time so a common usage model is
|
||||||
to invoke this function inside its Callback function when the former packet
|
to invoke this function inside its Callback function when the former packet
|
||||||
|
|
Loading…
Reference in New Issue