\r
\r
/**\r
- Test to see if this driver supports ControllerHandle.\r
-\r
- @param This Protocol instance pointer.\r
- @param ControllerHandle Handle of device to test.\r
- @param RemainingDevicePath Optional parameter use to pick a specific child\r
- device to start.\r
-\r
- @retval EFI_SUCCES This driver supports this device.\r
- @retval EFI_ALREADY_STARTED This driver is already running on this device.\r
+ Test to see if this driver supports ControllerHandle. This service\r
+ is called by the EFI boot service ConnectController(). In\r
+ order to make drivers as small as possible, there are a few calling\r
+ restrictions for this service. ConnectController() must\r
+ follow these calling restrictions. If any other agent wishes to call\r
+ Supported() it must also follow these calling restrictions.\r
+\r
+ @param This Protocol instance pointer.\r
+ @param ControllerHandle Handle of device to test\r
+ @param RemainingDevicePath Optional parameter use to pick a specific child\r
+ device to start.\r
+\r
+ @retval EFI_SUCCESS This driver supports this device\r
+ @retval EFI_ALREADY_STARTED This driver is already running on this device\r
+ @retval other This driver does not support this device\r
\r
**/\r
EFI_STATUS\r
\r
\r
/**\r
- Start this driver on ControllerHandle.\r
-\r
- @param This Protocol instance pointer.\r
- @param ControllerHandle Handle of device to bind driver to\r
- @param RemainingDevicePath Optional parameter use to pick a specific child\r
- device to start.\r
-\r
- @retval EFI_SUCCES This driver is added to ControllerHandle\r
- @retval EFI_ALREADY_STARTED This driver is already running on ControllerHandle\r
- @retval other This driver does not support this device\r
+ Start this driver on ControllerHandle. This service is called by the\r
+ EFI boot service ConnectController(). In order to make\r
+ drivers as small as possible, there are a few calling restrictions for\r
+ this service. ConnectController() must follow these\r
+ calling restrictions. If any other agent wishes to call Start() it\r
+ must also follow these calling restrictions.\r
+\r
+ @param This Protocol instance pointer.\r
+ @param ControllerHandle Handle of device to bind driver to\r
+ @param RemainingDevicePath Optional parameter use to pick a specific child\r
+ device to start.\r
+\r
+ @retval EFI_SUCCESS This driver is added to ControllerHandle\r
+ @retval EFI_ALREADY_STARTED This driver is already running on ControllerHandle\r
+ @retval other This driver does not support this device\r
\r
**/\r
EFI_STATUS\r
\r
\r
/**\r
- Stop this driver on ControllerHandle.\r
-\r
- @param This Protocol instance pointer.\r
- @param ControllerHandle Handle of device to stop driver on\r
- @param NumberOfChildren Number of Handles in ChildHandleBuffer. If number\r
- of children is zero stop the entire bus driver.\r
- @param ChildHandleBuffer List of Child Handles to Stop.\r
-\r
- @retval EFI_SUCCES This driver is removed ControllerHandle.\r
- @retval other This driver was not removed from this device.\r
+ Stop this driver on ControllerHandle. This service is called by the\r
+ EFI boot service DisconnectController(). In order to\r
+ make drivers as small as possible, there are a few calling\r
+ restrictions for this service. DisconnectController()\r
+ must follow these calling restrictions. If any other agent wishes\r
+ to call Stop() it must also follow these calling restrictions.\r
+ \r
+ @param This Protocol instance pointer.\r
+ @param ControllerHandle Handle of device to stop driver on\r
+ @param NumberOfChildren Number of Handles in ChildHandleBuffer. If number of\r
+ children is zero stop the entire bus driver.\r
+ @param ChildHandleBuffer List of Child Handles to Stop.\r
+\r
+ @retval EFI_SUCCESS This driver is removed ControllerHandle\r
+ @retval other This driver was not removed from this device\r
\r
**/\r
EFI_STATUS\r
/**\r
Creates a child handle with a set of I/O services.\r
\r
- @param This Protocol instance pointer.\r
- @param ChildHandle Pointer to the handle of the child to create. If\r
- it is NULL, then a new handle is created. If it\r
- is not NULL, then the I/O services are added to\r
- the existing child handle.\r
+ @param This Protocol instance pointer.\r
+ @param ChildHandle Pointer to the handle of the child to create. If it is NULL,\r
+ then a new handle is created. If it is not NULL, then the\r
+ I/O services are added to the existing child handle.\r
\r
- @retval EFI_SUCCES The child handle was created with the I/O services\r
- @retval EFI_OUT_OF_RESOURCES There are not enough resources availabe to create\r
- the child\r
- @retval other The child handle was not created\r
+ @retval EFI_SUCCES The child handle was created with the I/O services\r
+ @retval EFI_INVALID_PARAMETER ChildHandle is NULL.\r
+ @retval EFI_OUT_OF_RESOURCES There are not enough resources availabe to create\r
+ the child\r
+ @retval other The child handle was not created\r
\r
**/\r
EFI_STATUS\r
/**\r
Destroys a child handle with a set of I/O services.\r
\r
- @param This Protocol instance pointer.\r
- @param ChildHandle Handle of the child to destroy\r
+ @param This Protocol instance pointer.\r
+ @param ChildHandle Handle of the child to destroy\r
\r
- @retval EFI_SUCCES The I/O services were removed from the child\r
- handle\r
- @retval EFI_UNSUPPORTED The child handle does not support the I/O services\r
- that are being removed\r
- @retval EFI_INVALID_PARAMETER Child handle is not a valid EFI Handle.\r
- @retval EFI_ACCESS_DENIED The child handle could not be destroyed because\r
- its I/O services are being used.\r
- @retval other The child handle was not destroyed\r
+ @retval EFI_SUCCES The I/O services were removed from the child handle\r
+ @retval EFI_UNSUPPORTED The child handle does not support the I/O services\r
+ that are being removed.\r
+ @retval EFI_INVALID_PARAMETER Child handle is not a valid EFI Handle.\r
+ @retval EFI_ACCESS_DENIED The child handle could not be destroyed because its\r
+ I/O services are being used.\r
+ @retval other The child handle was not destroyed\r
\r
**/\r
EFI_STATUS\r
return EFI_SUCCESS;\r
}\r
\r
+/**\r
+ This is the declaration of an EFI image entry point. This entry point is\r
+ the same for UEFI Applications, UEFI OS Loaders, and UEFI Drivers including\r
+ both device drivers and bus drivers.\r
+ \r
+ The entry point for Udp4 driver which installs the driver binding\r
+ and component name protocol on its ImageHandle.\r
+\r
+ @param ImageHandle The firmware allocated handle for the UEFI image.\r
+ @param SystemTable A pointer to the EFI System Table.\r
+\r
+ @retval EFI_SUCCESS The operation completed successfully.\r
+ @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.\r
\r
+**/\r
EFI_STATUS\r
EFIAPI\r
Udp4DriverEntryPoint (\r
IN EFI_HANDLE ImageHandle,\r
IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- The entry point for Udp4 driver which installs the driver binding\r
- and component name protocol on its ImageHandle.\r
-\r
-Arguments:\r
-\r
- ImageHandle - The image handle of the driver.\r
- SystemTable - The system table.\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - if the driver binding and component name protocols are\r
- successfully installed, otherwise if failed.\r
-\r
---*/\r
{\r
EFI_STATUS Status;\r
\r
@retval EFI_SUCCESS The udp4 service context data is created and\r
initialized.\r
@retval EFI_OUT_OF_RESOURCES Cannot allocate memory.\r
+ @retval other Other error occurs.\r
\r
**/\r
EFI_STATUS\r
Udp4CreateService (\r
- IN UDP4_SERVICE_DATA *Udp4Service,\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_HANDLE ControllerHandle\r
+ IN OUT UDP4_SERVICE_DATA *Udp4Service,\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_HANDLE ControllerHandle\r
)\r
{\r
EFI_STATUS Status;\r
service context.\r
\r
@param Event The event this function registered to.\r
- @param Conext The context data registered during the creation of\r
+ @param Context The context data registered during the creation of\r
the Event.\r
\r
@return None.\r
**/\r
VOID\r
Udp4InitInstance (\r
- IN UDP4_SERVICE_DATA *Udp4Service,\r
- IN UDP4_INSTANCE_DATA *Instance\r
+ IN UDP4_SERVICE_DATA *Udp4Service,\r
+ IN OUT UDP4_INSTANCE_DATA *Instance\r
)\r
{\r
//\r
@param Address Pointer to the specified IPv4 address.\r
@param Port The udp port number.\r
\r
- @return Is the specified <Address, Port> pair found or not.\r
+ @retval TRUE The specified <Address, Port> pair is found.\r
+ @retval FALSE Otherwise.\r
\r
**/\r
BOOLEAN\r
\r
/**\r
This function tries to bind the udp instance according to the configured port\r
- allocation stragety.\r
+ allocation strategy.\r
\r
@param InstanceList Pointer to the head of the list linking the udp\r
instances.\r
@param ConfigData Pointer to the ConfigData of the instance to be\r
- bound.\r
+ bound. ConfigData->StationPort will be assigned\r
+ with an available port value on success.\r
\r
@retval EFI_SUCCESS The bound operation is completed successfully.\r
@retval EFI_ACCESS_DENIED The <Address, Port> specified by the ConfigData is\r
**/\r
EFI_STATUS\r
Udp4Bind (\r
- IN LIST_ENTRY *InstanceList,\r
- IN EFI_UDP4_CONFIG_DATA *ConfigData\r
+ IN LIST_ENTRY *InstanceList,\r
+ IN OUT EFI_UDP4_CONFIG_DATA *ConfigData\r
)\r
{\r
EFI_IPv4_ADDRESS *StationAddress;\r
uses.\r
@param NewConfigData Pointer to the new ConfigData.\r
\r
- @return The instance is reconfigurable or not according to the NewConfigData.\r
+ @retval TRUE The instance is reconfigurable.\r
+ @retval FALSE Otherwise.\r
\r
**/\r
BOOLEAN\r
IN EFI_UDP4_CONFIG_DATA *NewConfigData\r
)\r
{\r
- if ((NewConfigData->AcceptAnyPort != OldConfigData->AcceptAnyPort) ||\r
- (NewConfigData->AcceptBroadcast != OldConfigData->AcceptBroadcast) ||\r
- (NewConfigData->AcceptPromiscuous != OldConfigData->AcceptPromiscuous) ||\r
- (NewConfigData->AllowDuplicatePort != OldConfigData->AllowDuplicatePort)) {\r
+ if ((NewConfigData->AcceptAnyPort != OldConfigData->AcceptAnyPort) ||\r
+ (NewConfigData->AcceptBroadcast != OldConfigData->AcceptBroadcast) ||\r
+ (NewConfigData->AcceptPromiscuous != OldConfigData->AcceptPromiscuous) ||\r
+ (NewConfigData->AllowDuplicatePort != OldConfigData->AllowDuplicatePort)\r
+ ) {\r
//\r
// The receiving filter parameters cannot be changed.\r
//\r
}\r
\r
if ((!NewConfigData->AcceptAnyPort) &&\r
- (NewConfigData->StationPort != OldConfigData->StationPort)) {\r
+ (NewConfigData->StationPort != OldConfigData->StationPort)\r
+ ) {\r
//\r
// The port is not changeable.\r
//\r
}\r
\r
if (!NewConfigData->UseDefaultAddress &&\r
- (!EFI_IP4_EQUAL (&NewConfigData->StationAddress, &OldConfigData->StationAddress) ||\r
- !EFI_IP4_EQUAL (&NewConfigData->SubnetMask, &OldConfigData->SubnetMask))) {\r
+ (!EFI_IP4_EQUAL (&NewConfigData->StationAddress, &OldConfigData->StationAddress) ||\r
+ !EFI_IP4_EQUAL (&NewConfigData->SubnetMask, &OldConfigData->SubnetMask))\r
+ ) {\r
//\r
// If the instance doesn't use the default address, and the new address or\r
// new subnet mask is different from the old values.\r
return FALSE;\r
}\r
\r
- if (!EFI_IP4_EQUAL (&NewConfigData->RemoteAddress, &mZeroIp4Addr) && (NewConfigData->RemotePort != OldConfigData->RemotePort)) {\r
+ if (!EFI_IP4_EQUAL (&NewConfigData->RemoteAddress, &mZeroIp4Addr) &&\r
+ NewConfigData->RemotePort != OldConfigData->RemotePort\r
+ ) {\r
//\r
// The RemotePort differs if it's designated in the configdata.\r
//\r
**/\r
VOID\r
Udp4BuildIp4ConfigData (\r
- IN EFI_UDP4_CONFIG_DATA *Udp4ConfigData,\r
- IN EFI_IP4_CONFIG_DATA *Ip4ConfigData\r
+ IN EFI_UDP4_CONFIG_DATA *Udp4ConfigData,\r
+ IN OUT EFI_IP4_CONFIG_DATA *Ip4ConfigData\r
)\r
{\r
CopyMem (Ip4ConfigData, &mIpIoDefaultIpConfigData, sizeof (*Ip4ConfigData));\r
**/\r
EFI_STATUS\r
Udp4RemoveToken (\r
- IN NET_MAP *TokenMap,\r
- IN EFI_UDP4_COMPLETION_TOKEN *Token\r
+ IN OUT NET_MAP *TokenMap,\r
+ IN EFI_UDP4_COMPLETION_TOKEN *Token\r
)\r
{\r
NET_MAP_ITEM *Item;\r
**/\r
EFI_STATUS\r
Udp4LeaveGroup (\r
- IN NET_MAP *Map,\r
- IN NET_MAP_ITEM *Item,\r
- IN VOID *Arg OPTIONAL\r
+ IN OUT NET_MAP *Map,\r
+ IN NET_MAP_ITEM *Item,\r
+ IN VOID *Arg OPTIONAL\r
)\r
{\r
EFI_IPv4_ADDRESS *McastIp;\r
\r
\r
/**\r
- This function cancle the token specified by Arg in the Map.\r
+ This function cancels the token specified by Arg in the Map. This is a callback\r
+ used by Udp4InstanceCancelToken().\r
\r
@param Map Pointer to the NET_MAP.\r
@param Item Pointer to the NET_MAP_ITEM.\r
- @param Arg Pointer to the token to be cancelled, if NULL, all\r
- the tokens in this Map will be cancelled.\r
+ @param Arg Pointer to the token to be cancelled, if NULL,\r
+ the token specified by Item is cancelled.\r
\r
@retval EFI_SUCCESS The token is cancelled if Arg is NULL or the token\r
is not the same as that in the Item if Arg is not\r
/**\r
This function removes all the Wrap datas in the RcvdDgramQue.\r
\r
- @param RcvdDgramQue Pointer to the list containing all the Wrap datas.\r
+ @param Instance Pointer to the udp instance context data.\r
\r
@return None.\r
\r
\r
\r
/**\r
+ Cancel Udp4 tokens from the Udp4 instance.\r
\r
@param Instance Pointer to the udp instance context data.\r
@param Token Pointer to the token to be canceled, if NULL, all\r
EFI_STATUS Status;\r
\r
//\r
- // Cancle this token from the TxTokens map.\r
+ // Cancel this token from the TxTokens map.\r
//\r
Status = NetMapIterate (&Instance->TxTokens, Udp4CancelTokens, Token);\r
\r
@param Udp4Session Pointer to the EFI_UDP4_SESSION_DATA abstracted\r
from the received udp datagram.\r
\r
- @return The udp datagram matches the receiving requirments of the Instance or not.\r
+ @retval TRUE The udp datagram matches the receiving requirments of the\r
+ udp Instance.\r
+ @retval FALSE Otherwise.\r
\r
**/\r
BOOLEAN\r
}\r
\r
if ((!ConfigData->AcceptAnyPort && (Udp4Session->DestinationPort != ConfigData->StationPort)) ||\r
- ((ConfigData->RemotePort != 0) && (Udp4Session->SourcePort != ConfigData->RemotePort))) {\r
+ ((ConfigData->RemotePort != 0) && (Udp4Session->SourcePort != ConfigData->RemotePort))\r
+ ) {\r
//\r
// The local port or the remote port doesn't match.\r
//\r
}\r
\r
if (!EFI_IP4_EQUAL (&ConfigData->RemoteAddress, &mZeroIp4Addr) &&\r
- !EFI_IP4_EQUAL (&ConfigData->RemoteAddress, &Udp4Session->SourceAddress)) {\r
+ !EFI_IP4_EQUAL (&ConfigData->RemoteAddress, &Udp4Session->SourceAddress)\r
+ ) {\r
//\r
// This datagram doesn't come from the instance's specified sender.\r
//\r
}\r
\r
if (EFI_IP4_EQUAL (&ConfigData->StationAddress, &mZeroIp4Addr) ||\r
- EFI_IP4_EQUAL (&Udp4Session->DestinationAddress, &ConfigData->StationAddress)) {\r
+ EFI_IP4_EQUAL (&Udp4Session->DestinationAddress, &ConfigData->StationAddress)\r
+ ) {\r
//\r
- // The instance is configured to receive datagrams destinated to any station IP or\r
+ // The instance is configured to receive datagrams destined to any station IP or\r
// the destination address of this datagram matches the configured station IP.\r
//\r
return TRUE;\r
}\r
\r
if (IP4_IS_MULTICAST (NTOHL (Destination)) &&\r
- (NULL != NetMapFindKey (&Instance->McastIps, (VOID *) (UINTN) Destination))) {\r
+ NetMapFindKey (&Instance->McastIps, (VOID *) (UINTN) Destination) != NULL\r
+ ) {\r
//\r
// It's a multicast packet and the multicast address is accepted by this instance.\r
//\r
EFI_TPL OldTpl;\r
\r
if (!IsListEmpty (&Instance->RcvdDgramQue) &&\r
- !NetMapIsEmpty (&Instance->RxTokens)) {\r
+ !NetMapIsEmpty (&Instance->RxTokens)) {\r
\r
Wrap = NET_LIST_HEAD (&Instance->RcvdDgramQue, UDP4_RXDATA_WRAP, Link);\r
\r
NetbufFree (Wrap->Packet);\r
\r
Wrap->Packet = Dup;\r
- } \r
+ }\r
\r
NetListRemoveHead (&Instance->RcvdDgramQue);\r
\r
Instance = NET_LIST_USER_STRUCT (Entry, UDP4_INSTANCE_DATA, Link);\r
\r
if (!Instance->Configured ||\r
- Instance->ConfigData.AcceptPromiscuous ||\r
- Instance->ConfigData.AcceptAnyPort ||\r
- EFI_IP4_EQUAL (&Instance->ConfigData.StationAddress, &mZeroIp4Addr)) {\r
+ Instance->ConfigData.AcceptPromiscuous ||\r
+ Instance->ConfigData.AcceptAnyPort ||\r
+ EFI_IP4_EQUAL (&Instance->ConfigData.StationAddress, &mZeroIp4Addr)\r
+ ) {\r
//\r
// Don't try to deliver the ICMP error to this instance if it is not configured,\r
// or it's configured to be promiscuous or accept any port or accept all the\r
\r
@retval EFI_OUT_OF_RESOURCES There are not enough resources to set the\r
variable.\r
+ @retval EFI_SUCCESS Set variable successfully.\r
@retval other Set variable failed.\r
\r
**/\r
\r
#include "Udp4Impl.h"\r
\r
-#include <Protocol/Ip4.h>\r
-\r
EFI_UDP4_PROTOCOL mUdp4Protocol = {\r
Udp4GetModeData,\r
Udp4Configure,\r
\r
\r
/**\r
- This function copies the current operational settings of this EFI UDPv4 Protocol\r
- instance into user-supplied buffers. This function is used optionally to retrieve\r
- the operational mode data of underlying networks or drivers.\r
-\r
- @param This Pointer to the EFI_UDP4_PROTOCOL instance.\r
- @param Udp4ConfigData Pointer to the buffer to receive the current\r
- configuration data.\r
- @param Ip4ModeData Pointer to the EFI IPv4 Protocol mode data\r
- structure.\r
- @param MnpConfigData Pointer to the managed network configuration data\r
- structure.\r
- @param SnpModeData Pointer to the simple network mode data structure.\r
-\r
- @retval EFI_SUCCESS The mode data was read.\r
- @retval EFI_NOT_STARTED When Udp4ConfigData is queried, no configuration\r
- data is available because this instance has not\r
- been started.\r
- @retval EFI_INVALID_PARAMETER This is NULL.\r
+ Reads the current operational settings.\r
+\r
+ The GetModeData() function copies the current operational settings of this EFI\r
+ UDPv4 Protocol instance into user-supplied buffers. This function is used\r
+ optionally to retrieve the operational mode data of underlying networks or\r
+ drivers.\r
+\r
+ @param This Pointer to the EFI_UDP4_PROTOCOL instance.\r
+ @param Udp4ConfigData Pointer to the buffer to receive the current configuration data.\r
+ @param Ip4ModeData Pointer to the EFI IPv4 Protocol mode data structure.\r
+ @param MnpConfigData Pointer to the managed network configuration data structure.\r
+ @param SnpModeData Pointer to the simple network mode data structure.\r
+\r
+ @retval EFI_SUCCESS The mode data was read.\r
+ @retval EFI_NOT_STARTED When Udp4ConfigData is queried, no configuration data is\r
+ available because this instance has not been started.\r
+ @retval EFI_INVALID_PARAMETER This is NULL.\r
\r
**/\r
EFI_STATUS\r
\r
\r
/**\r
- This function is used to do the following:\r
- Initialize and start this instance of the EFI UDPv4 Protocol.\r
- Change the filtering rules and operational parameters.\r
- Reset this instance of the EFI UDPv4 Protocol.\r
-\r
- @param This Pointer to the EFI_UDP4_PROTOCOL instance.\r
- @param UdpConfigData Pointer to the buffer to receive the current mode\r
- data.\r
-\r
- @retval EFI_SUCCESS The configuration settings were set, changed, or\r
- reset successfully.\r
- @retval EFI_NO_MAPPING When using a default address, configuration (DHCP,\r
- BOOTP, RARP, etc.) is not finished yet.\r
- @retval EFI_INVALID_PARAMETER One or more following conditions are TRUE: This is\r
- NULL. UdpConfigData.StationAddress is not a valid\r
- unicast IPv4 address. UdpConfigData.SubnetMask is\r
- not a valid IPv4 address mask.\r
- UdpConfigData.RemoteAddress is not a valid unicast\r
- IPv4 address if it is not zero.\r
- @retval EFI_ALREADY_STARTED The EFI UDPv4 Protocol instance is already\r
- started/configured and must be stopped/reset\r
- before it can be reconfigured. Only TypeOfService,\r
- TimeToLive, DoNotFragment, ReceiveTimeout, and\r
- TransmitTimeout can be reconfigured without\r
- stopping the current instance of the EFI UDPv4\r
- Protocol.\r
- @retval EFI_ACCESS_DENIED UdpConfigData.AllowDuplicatePort is FALSE and\r
- UdpConfigData.StationPort is already used by other\r
- instance.\r
- @retval EFI_OUT_OF_RESOURCES The EFI UDPv4 Protocol driver cannot allocate\r
- memory for this EFI UDPv4 Protocol instance.\r
- @retval EFI_DEVICE_ERROR An unexpected network or system error occurred and\r
- this instance was not opened.\r
+ Initializes, changes, or resets the operational parameters for this instance of the EFI UDPv4\r
+ Protocol.\r
+ \r
+ The Configure() function is used to do the following:\r
+ * Initialize and start this instance of the EFI UDPv4 Protocol.\r
+ * Change the filtering rules and operational parameters.\r
+ * Reset this instance of the EFI UDPv4 Protocol.\r
+ Until these parameters are initialized, no network traffic can be sent or\r
+ received by this instance. This instance can be also reset by calling Configure()\r
+ with UdpConfigData set to NULL. Once reset, the receiving queue and transmitting\r
+ queue are flushed and no traffic is allowed through this instance.\r
+ With different parameters in UdpConfigData, Configure() can be used to bind\r
+ this instance to specified port.\r
+\r
+ @param This Pointer to the EFI_UDP4_PROTOCOL instance.\r
+ @param UdpConfigData Pointer to the buffer to receive the current configuration data.\r
+\r
+ @retval EFI_SUCCESS The configuration settings were set, changed, or reset successfully.\r
+ @retval EFI_NO_MAPPING When using a default address, configuration (DHCP, BOOTP,\r
+ RARP, etc.) is not finished yet.\r
+ @retval EFI_INVALID_PARAMETER One or more following conditions are TRUE:\r
+ @retval EFI_ALREADY_STARTED The EFI UDPv4 Protocol instance is already started/configured\r
+ and must be stopped/reset before it can be reconfigured.\r
+ @retval EFI_ACCESS_DENIED UdpConfigData. AllowDuplicatePort is FALSE\r
+ and UdpConfigData.StationPort is already used by\r
+ other instance.\r
+ @retval EFI_OUT_OF_RESOURCES The EFI UDPv4 Protocol driver cannot allocate memory for this\r
+ EFI UDPv4 Protocol instance.\r
+ @retval EFI_DEVICE_ERROR An unexpected network or system error occurred and this instance\r
+ was not opened. \r
\r
**/\r
EFI_STATUS\r
\r
\r
/**\r
- This function is used to enable and disable the multicast group filtering.\r
-\r
- @param This Pointer to the EFI_UDP4_PROTOCOL instance.\r
- @param JoinFlag Set to TRUE to join a multicast group. Set to\r
- FALSE to leave one or all multicast groups.\r
- @param MulticastAddress Pointer to multicast group address to join or\r
- leave.\r
-\r
- @retval EFI_SUCCESS The operation completed successfully.\r
- @retval EFI_NOT_STARTED The EFI UDPv4 Protocol instance has not been\r
- started.\r
- @retval EFI_NO_MAPPING When using a default address, configuration (DHCP,\r
- BOOTP, RARP, etc.) is not finished yet.\r
- @retval EFI_OUT_OF_RESOURCES Could not allocate resources to join the group.\r
- @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE:\r
- This is NULL. JoinFlag is TRUE and\r
- MulticastAddress is NULL. JoinFlag is TRUE and\r
- *MulticastAddress is not a valid multicast\r
- address.\r
- @retval EFI_ALREADY_STARTED The group address is already in the group table\r
- (when JoinFlag is TRUE).\r
- @retval EFI_NOT_FOUND The group address is not in the group table (when\r
- JoinFlag is FALSE).\r
- @retval EFI_DEVICE_ERROR An unexpected system or network error occurred.\r
+ Joins and leaves multicast groups.\r
+ \r
+ The Groups() function is used to enable and disable the multicast group\r
+ filtering. If the JoinFlag is FALSE and the MulticastAddress is NULL, then all\r
+ currently joined groups are left.\r
+\r
+ @param This Pointer to the EFI_UDP4_PROTOCOL instance.\r
+ @param JoinFlag Set to TRUE to join a multicast group. Set to FALSE to leave one\r
+ or all multicast groups.\r
+ @param MulticastAddress Pointer to multicast group address to join or leave.\r
+\r
+ @retval EFI_SUCCESS The operation completed successfully.\r
+ @retval EFI_NOT_STARTED The EFI UDPv4 Protocol instance has not been started.\r
+ @retval EFI_NO_MAPPING When using a default address, configuration (DHCP, BOOTP,\r
+ RARP, etc.) is not finished yet.\r
+ @retval EFI_OUT_OF_RESOURCES Could not allocate resources to join the group.\r
+ @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE:\r
+ - This is NULL.\r
+ - JoinFlag is TRUE and MulticastAddress is NULL.\r
+ - JoinFlag is TRUE and *MulticastAddress is not\r
+ a valid multicast address.\r
+ @retval EFI_ALREADY_STARTED The group address is already in the group table (when\r
+ JoinFlag is TRUE).\r
+ @retval EFI_NOT_FOUND The group address is not in the group table (when JoinFlag is\r
+ FALSE).\r
+ @retval EFI_DEVICE_ERROR An unexpected system or network error occurred.\r
\r
**/\r
EFI_STATUS\r
// Keep a local copy of the configured multicast IPs because IpIo receives\r
// datagrams from the 0 station address IP instance and then UDP delivers to\r
// the matched instance. This copy of multicast IPs is used to avoid receive\r
- // the mutlicast datagrams destinated to multicast IPs the other instances configured.\r
+ // the mutlicast datagrams destined to multicast IPs the other instances configured.\r
//\r
if (JoinFlag) {\r
\r
\r
\r
/**\r
- This function adds a route to or deletes a route from the routing table.\r
-\r
- @param This Pointer to the EFI_UDP4_PROTOCOL instance.\r
- @param DeleteRoute Set to TRUE to delete this route from the routing\r
- table. Set to FALSE to add this route to the\r
- routing table.\r
- @param SubnetAddress The destination network address that needs to be\r
- routed.\r
- @param SubnetMask The subnet mask of SubnetAddress.\r
- @param GatewayAddress The gateway IP address for this route.\r
-\r
- @retval EFI_SUCCESS The operation completed successfully.\r
- @retval EFI_NOT_STARTED The EFI UDPv4 Protocol instance has not been\r
- started.\r
- @retval EFI_NO_MAPPING When using a default address, configuration (DHCP,\r
- BOOTP, RARP, etc.) is not finished yet.\r
- @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE:\r
- This is NULL. SubnetAddress is NULL. SubnetMask is\r
- NULL. GatewayAddress is NULL. SubnetAddress is not\r
- a valid subnet address. SubnetMask is not a valid\r
- subnet mask. GatewayAddress is not a valid unicast\r
- IP address.\r
- @retval EFI_OUT_OF_RESOURCES Could not add the entry to the routing table.\r
- @retval EFI_NOT_FOUND This route is not in the routing table.\r
- @retval EFI_ACCESS_DENIED The route is already defined in the routing table.\r
+ Adds and deletes routing table entries.\r
+ \r
+ The Routes() function adds a route to or deletes a route from the routing table.\r
+ Routes are determined by comparing the SubnetAddress with the destination IP\r
+ address and arithmetically AND-ing it with the SubnetMask. The gateway address\r
+ must be on the same subnet as the configured station address.\r
+ The default route is added with SubnetAddress and SubnetMask both set to 0.0.0.0.\r
+ The default route matches all destination IP addresses that do not match any\r
+ other routes.\r
+ A zero GatewayAddress is a nonroute. Packets are sent to the destination IP\r
+ address if it can be found in the Address Resolution Protocol (ARP) cache or\r
+ on the local subnet. One automatic nonroute entry will be inserted into the\r
+ routing table for outgoing packets that are addressed to a local subnet\r
+ (gateway address of 0.0.0.0).\r
+ Each instance of the EFI UDPv4 Protocol has its own independent routing table.\r
+ Instances of the EFI UDPv4 Protocol that use the default IP address will also\r
+ have copies of the routing table provided by the EFI_IP4_CONFIG_PROTOCOL. These\r
+ copies will be updated automatically whenever the IP driver reconfigures its\r
+ instances; as a result, the previous modification to these copies will be lost.\r
+\r
+ @param This Pointer to the EFI_UDP4_PROTOCOL instance.\r
+ @param DeleteRoute Set to TRUE to delete this route from the routing table.\r
+ Set to FALSE to add this route to the routing table.\r
+ @param SubnetAddress The destination network address that needs to be routed.\r
+ @param SubnetMask The subnet mask of SubnetAddress.\r
+ @param GatewayAddress The gateway IP address for this route.\r
+\r
+ @retval EFI_SUCCESS The operation completed successfully.\r
+ @retval EFI_NOT_STARTED The EFI UDPv4 Protocol instance has not been started.\r
+ @retval EFI_NO_MAPPING When using a default address, configuration (DHCP, BOOTP,\r
+ - RARP, etc.) is not finished yet.\r
+ @retval EFI_INVALID_PARAMETER One or more parameters are invalid.\r
+ @retval EFI_OUT_OF_RESOURCES Could not add the entry to the routing table.\r
+ @retval EFI_NOT_FOUND This route is not in the routing table.\r
+ @retval EFI_ACCESS_DENIED The route is already defined in the routing table.\r
\r
**/\r
EFI_STATUS\r
\r
\r
/**\r
- This function places a sending request to this instance of the EFI UDPv4 Protocol,\r
- alongside the transmit data that was filled by the user.\r
-\r
- @param This Pointer to the EFI_UDP4_PROTOCOL instance.\r
- @param Token Pointer to the completion token that will be\r
- placed into the transmit queue.\r
-\r
- @retval EFI_SUCCESS The data has been queued for transmission.\r
- @retval EFI_NOT_STARTED This EFI UDPv4 Protocol instance has not been\r
- started.\r
- @retval EFI_NO_MAPPING When using a default address, configuration (DHCP,\r
- BOOTP, RARP, etc.) is not finished yet.\r
- @retval EFI_INVALID_PARAMETER One or more of the following are TRUE: This is\r
- NULL. Token is NULL. Token.Event is NULL.\r
- Token.Packet.TxData is NULL.\r
- Token.Packet.TxData.FragmentCount is zero.\r
- Token.Packet.TxData.DataLength is not equal to the\r
- sum of fragment lengths. One or more of the\r
- Token.Packet.TxData.FragmentTable[].\r
- FragmentLength fields is zero. One or more of the\r
- Token.Packet.TxData.FragmentTable[].\r
- FragmentBuffer fields is NULL.\r
- Token.Packet.TxData. GatewayAddress is not a\r
- unicast IPv4 address if it is not NULL. One or\r
- more IPv4 addresses in Token.Packet.TxData.\r
- UdpSessionData are not valid unicast IPv4\r
- addresses if the UdpSessionData is not NULL.\r
- @retval EFI_ACCESS_DENIED The transmit completion token with the same\r
- Token.Event is already in the transmit queue.\r
- @retval EFI_NOT_READY The completion token could not be queued because\r
- the transmit queue is full.\r
- @retval EFI_OUT_OF_RESOURCES Could not queue the transmit data.\r
- @retval EFI_NOT_FOUND There is no route to the destination network or\r
- address.\r
- @retval EFI_BAD_BUFFER_SIZE The data length is greater than the maximum UDP\r
- packet size. Or the length of the IP header + UDP\r
- header + data length is greater than MTU if\r
- DoNotFragment is TRUE.\r
+ Queues outgoing data packets into the transmit queue.\r
+ \r
+ The Transmit() function places a sending request to this instance of the EFI\r
+ UDPv4 Protocol, alongside the transmit data that was filled by the user. Whenever\r
+ the packet in the token is sent out or some errors occur, the Token.Event will\r
+ be signaled and Token.Status is updated. Providing a proper notification function\r
+ and context for the event will enable the user to receive the notification and\r
+ transmitting status.\r
+\r
+ @param This Pointer to the EFI_UDP4_PROTOCOL instance.\r
+ @param Token Pointer to the completion token that will be placed into the\r
+ transmit queue.\r
+\r
+ @retval EFI_SUCCESS The data has been queued for transmission.\r
+ @retval EFI_NOT_STARTED This EFI UDPv4 Protocol instance has not been started.\r
+ @retval EFI_NO_MAPPING When using a default address, configuration (DHCP, BOOTP,\r
+ RARP, etc.) is not finished yet.\r
+ @retval EFI_INVALID_PARAMETER One or more parameters are invalid.\r
+ @retval EFI_ACCESS_DENIED The transmit completion token with the same\r
+ Token.Event was already in the transmit queue.\r
+ @retval EFI_NOT_READY The completion token could not be queued because the\r
+ transmit queue is full.\r
+ @retval EFI_OUT_OF_RESOURCES Could not queue the transmit data.\r
+ @retval EFI_NOT_FOUND There is no route to the destination network or address.\r
+ @retval EFI_BAD_BUFFER_SIZE The data length is greater than the maximum UDP packet\r
+ size. Or the length of the IP header + UDP header + data\r
+ length is greater than MTU if DoNotFragment is TRUE.\r
\r
**/\r
EFI_STATUS\r
\r
\r
/**\r
- This function places a completion token into the receive packet queue. This function\r
- is always asynchronous.\r
-\r
- @param This Pointer to the EFI_UDP4_PROTOCOL instance.\r
- @param Token Pointer to a token that is associated with the\r
- receive data descriptor.\r
-\r
- @retval EFI_SUCCESS The receive completion token is cached.\r
- @retval EFI_NOT_STARTED This EFI UDPv4 Protocol instance has not been\r
- started.\r
- @retval EFI_NO_MAPPING When using a default address, configuration (DHCP,\r
- BOOTP, RARP, etc.) is not finished yet.\r
- @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE:\r
- This is NULL. Token is NULL. Token.Event is NULL.\r
- @retval EFI_OUT_OF_RESOURCES The receive completion token could not be queued\r
- due to a lack of system resources (usually\r
- memory).\r
- @retval EFI_DEVICE_ERROR An unexpected system or network error occurred.\r
- The EFI UDPv4 Protocol instance has been reset to\r
- startup defaults.\r
- @retval EFI_ACCESS_DENIED A receive completion token with the same\r
- Token.Event is already in the receive queue.\r
- @retval EFI_NOT_READY The receive request could not be queued because\r
- the receive queue is full.\r
+ Places an asynchronous receive request into the receiving queue.\r
+ \r
+ The Receive() function places a completion token into the receive packet queue.\r
+ This function is always asynchronous.\r
+ The caller must fill in the Token.Event field in the completion token, and this\r
+ field cannot be NULL. When the receive operation completes, the EFI UDPv4 Protocol\r
+ driver updates the Token.Status and Token.Packet.RxData fields and the Token.Event\r
+ is signaled. Providing a proper notification function and context for the event\r
+ will enable the user to receive the notification and receiving status. That\r
+ notification function is guaranteed to not be re-entered.\r
+\r
+ @param This Pointer to the EFI_UDP4_PROTOCOL instance.\r
+ @param Token Pointer to a token that is associated with the receive data\r
+ descriptor.\r
+\r
+ @retval EFI_SUCCESS The receive completion token was cached.\r
+ @retval EFI_NOT_STARTED This EFI UDPv4 Protocol instance has not been started.\r
+ @retval EFI_NO_MAPPING When using a default address, configuration (DHCP, BOOTP, RARP, etc.)\r
+ is not finished yet.\r
+ @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE:\r
+ @retval EFI_OUT_OF_RESOURCES The receive completion token could not be queued due to a lack of system\r
+ resources (usually memory).\r
+ @retval EFI_DEVICE_ERROR An unexpected system or network error occurred.\r
+ @retval EFI_ACCESS_DENIED A receive completion token with the same Token.Event was already in\r
+ the receive queue.\r
+ @retval EFI_NOT_READY The receive request could not be queued because the receive queue is full.\r
\r
**/\r
EFI_STATUS\r
Udp4ReportIcmpError (Instance);\r
\r
//\r
- // Try to delivered the received datagrams.\r
+ // Try to deliver the received datagrams.\r
//\r
Udp4InstanceDeliverDgram (Instance);\r
\r
\r
\r
/**\r
- This function is used to abort a pending transmit or receive request.\r
-\r
- @param This Pointer to the EFI_UDP4_PROTOCOL instance.\r
- @param Token Pointer to a token that has been issued by\r
- EFI_UDP4_PROTOCOL.Transmit() or\r
- EFI_UDP4_PROTOCOL.Receive().\r
-\r
- @retval EFI_SUCCESS The asynchronous I/O request is aborted and\r
- Token.Event is signaled. When Token is NULL, all\r
- pending requests are aborted and their events are\r
- signaled.\r
- @retval EFI_INVALID_PARAMETER This is NULL.\r
- @retval EFI_NOT_STARTED This instance has not been started.\r
- @retval EFI_NO_MAPPING When using the default address, configuration\r
- (DHCP, BOOTP, RARP, etc.) is not finished yet.\r
- @retval EFI_NOT_FOUND When Token is not NULL, the asynchronous I/O\r
- request is not found in the transmit or receive\r
- queue. It is either completed or not issued by\r
- Transmit() or Receive().\r
+ Aborts an asynchronous transmit or receive request.\r
+ \r
+ The Cancel() function is used to abort a pending transmit or receive request.\r
+ If the token is in the transmit or receive request queues, after calling this\r
+ function, Token.Status will be set to EFI_ABORTED and then Token.Event will be\r
+ signaled. If the token is not in one of the queues, which usually means that\r
+ the asynchronous operation has completed, this function will not signal the\r
+ token and EFI_NOT_FOUND is returned.\r
+\r
+ @param This Pointer to the EFI_UDP4_PROTOCOL instance.\r
+ @param Token Pointer to a token that has been issued by\r
+ EFI_UDP4_PROTOCOL.Transmit() or\r
+ EFI_UDP4_PROTOCOL.Receive().If NULL, all pending\r
+ tokens are aborted.\r
+\r
+ @retval EFI_SUCCESS The asynchronous I/O request was aborted and Token.Event\r
+ was signaled. When Token is NULL, all pending requests are\r
+ aborted and their events are signaled.\r
+ @retval EFI_INVALID_PARAMETER This is NULL.\r
+ @retval EFI_NOT_STARTED This instance has not been started.\r
+ @retval EFI_NO_MAPPING When using the default address, configuration (DHCP, BOOTP,\r
+ RARP, etc.) is not finished yet.\r
+ @retval EFI_NOT_FOUND When Token is not NULL, the asynchronous I/O request was\r
+ not found in the transmit or receive queue. It has either completed\r
+ or was not issued by Transmit() and Receive().\r
\r
**/\r
EFI_STATUS\r
Status = Udp4InstanceCancelToken (Instance, Token);\r
\r
//\r
- // Dispatch the DPC queued by the NotifyFunction of the canceled token's events.\r
+ // Dispatch the DPC queued by the NotifyFunction of the cancelled token's events.\r
//\r
NetLibDispatchDpc ();\r
\r
\r
\r
/**\r
- This function can be used by network drivers and applications to increase the rate that\r
- data packets are moved between the communications device and the transmit/receive queues.\r
- Argumens:\r
- This - Pointer to the EFI_UDP4_PROTOCOL instance.\r
-\r
- @retval EFI_SUCCESS Incoming or outgoing data was processed.\r
- @retval EFI_INVALID_PARAMETER This is NULL.\r
- @retval EFI_DEVICE_ERROR An unexpected system or network error occurred.\r
- @retval EFI_TIMEOUT Data was dropped out of the transmit and/or\r
- receive queue.\r
+ Polls for incoming data packets and processes outgoing data packets.\r
+ \r
+ The Poll() function can be used by network drivers and applications to increase\r
+ the rate that data packets are moved between the communications device and the\r
+ transmit and receive queues.\r
+ In some systems, the periodic timer event in the managed network driver may not\r
+ poll the underlying communications device fast enough to transmit and/or receive\r
+ all data packets without missing incoming packets or dropping outgoing packets.\r
+ Drivers and applications that are experiencing packet loss should try calling\r
+ the Poll() function more often.\r
+\r
+ @param This Pointer to the EFI_UDP4_PROTOCOL instance.\r
+\r
+ @retval EFI_SUCCESS Incoming or outgoing data was processed.\r
+ @retval EFI_INVALID_PARAMETER This is NULL.\r
+ @retval EFI_DEVICE_ERROR An unexpected system or network error occurred.\r
+ @retval EFI_TIMEOUT Data was dropped out of the transmit and/or receive queue.\r
\r
**/\r
EFI_STATUS\r