]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Main.c
Scrubbed some code for Udp4
[mirror_edk2.git] / MdeModulePkg / Universal / Network / Udp4Dxe / Udp4Main.c
index eb013e91500e068460f0405e21c02fbe08501e64..d46a0de20e0bae1633f2d1a1400e04f51717da41 100644 (file)
@@ -20,8 +20,6 @@ Abstract:
 \r
 #include "Udp4Impl.h"\r
 \r
-#include <Protocol/Ip4.h>\r
-\r
 EFI_UDP4_PROTOCOL  mUdp4Protocol = {\r
   Udp4GetModeData,\r
   Udp4Configure,\r
@@ -35,24 +33,23 @@ EFI_UDP4_PROTOCOL  mUdp4Protocol = {
 \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
@@ -103,39 +100,36 @@ Udp4GetModeData (
 \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
@@ -305,30 +299,32 @@ ON_EXIT:
 \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
@@ -385,7 +381,7 @@ Udp4Groups (
   // 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
@@ -404,31 +400,41 @@ ON_EXIT:
 \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
@@ -468,44 +474,33 @@ Udp4Routes (
 \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
@@ -704,30 +699,32 @@ ON_EXIT:
 \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
@@ -784,7 +781,7 @@ Udp4Receive (
   Udp4ReportIcmpError (Instance);\r
 \r
   //\r
-  // Try to delivered the received datagrams.\r
+  // Try to deliver the received datagrams.\r
   //\r
   Udp4InstanceDeliverDgram (Instance);\r
 \r
@@ -802,25 +799,31 @@ ON_EXIT:
 \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
@@ -856,7 +859,7 @@ Udp4Cancel (
   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
@@ -867,16 +870,23 @@ Udp4Cancel (
 \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