/** @file\r
Support functions implementation for UefiPxeBc Driver.\r
\r
- Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.<BR>\r
\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
\r
**/\r
EFI_STATUS\r
-PxeBcFlushStaionIp (\r
+PxeBcFlushStationIp (\r
PXEBC_PRIVATE_DATA *Private,\r
EFI_IP_ADDRESS *StationIp,\r
EFI_IP_ADDRESS *SubnetMask OPTIONAL\r
}\r
\r
Status = Private->Ip6->Receive (Private->Ip6, &Private->Icmp6Token);\r
- if (EFI_ERROR (Status)) {\r
- goto ON_EXIT;\r
- }\r
-\r
} else {\r
ASSERT (SubnetMask != NULL);\r
CopyMem (&Private->Udp4CfgData.StationAddress, StationIp, sizeof (EFI_IPv4_ADDRESS));\r
}\r
\r
Status = Private->Ip4->Receive (Private->Ip4, &Private->IcmpToken);\r
- if (EFI_ERROR (Status)) {\r
- goto ON_EXIT;\r
- }\r
-\r
}\r
\r
ON_EXIT:\r
}\r
\r
if (EFI_IP4 (RxData->Header->SourceAddress) != 0 &&\r
- !NetIp4IsUnicast (EFI_NTOHL (RxData->Header->SourceAddress), 0)) {\r
+ (NTOHL (Mode->SubnetMask.Addr[0]) != 0) &&\r
+ IP4_NET_EQUAL (NTOHL(Mode->StationIp.Addr[0]), EFI_NTOHL (RxData->Header->SourceAddress), NTOHL (Mode->SubnetMask.Addr[0])) &&\r
+ !NetIp4IsUnicast (EFI_NTOHL (RxData->Header->SourceAddress), NTOHL (Mode->SubnetMask.Addr[0]))) {\r
//\r
// The source address of the received packet should be a valid unicast address.\r
//\r
\r
if (Type != ICMP_V6_DEST_UNREACHABLE &&\r
Type != ICMP_V6_PACKET_TOO_BIG &&\r
- Type != ICMP_V6_PACKET_TOO_BIG &&\r
+ Type != ICMP_V6_TIME_EXCEEDED &&\r
Type != ICMP_V6_PARAMETER_PROBLEM) {\r
//\r
// The type of the receveid packet should be an ICMP6 error message.\r
@param[in, out] SrcPort The pointer to the source port.\r
@param[in] DoNotFragment If TRUE, fragment is not enabled.\r
Otherwise, fragment is enabled.\r
+ @param[in] Ttl The time to live field of the IP header. \r
+ @param[in] ToS The type of service field of the IP header.\r
\r
@retval EFI_SUCCESS Successfully configured this instance.\r
@retval Others Failed to configure this instance.\r
IN EFI_IPv4_ADDRESS *SubnetMask,\r
IN EFI_IPv4_ADDRESS *Gateway,\r
IN OUT UINT16 *SrcPort,\r
- IN BOOLEAN DoNotFragment\r
+ IN BOOLEAN DoNotFragment,\r
+ IN UINT8 Ttl,\r
+ IN UINT8 ToS\r
)\r
{\r
EFI_UDP4_CONFIG_DATA Udp4CfgData;\r
\r
Udp4CfgData.TransmitTimeout = PXEBC_DEFAULT_LIFETIME;\r
Udp4CfgData.ReceiveTimeout = PXEBC_DEFAULT_LIFETIME;\r
- Udp4CfgData.TypeOfService = DEFAULT_ToS;\r
- Udp4CfgData.TimeToLive = DEFAULT_TTL;\r
+ Udp4CfgData.TypeOfService = ToS;\r
+ Udp4CfgData.TimeToLive = Ttl;\r
Udp4CfgData.AllowDuplicatePort = TRUE;\r
Udp4CfgData.DoNotFragment = DoNotFragment;\r
\r
{\r
UINTN Remainder;\r
\r
- while (Length > 0) {\r
- Length--;\r
+ for (; Length > 0; Length--) {\r
Remainder = Number % 10;\r
Number /= 10;\r
- Buffer[Length] = (UINT8) ('0' + Remainder);\r
+ Buffer[Length - 1] = (UINT8) ('0' + Remainder);\r
}\r
}\r
\r
\r
@param[in] Number Numeric value to be converted.\r
@param[in] Buffer The pointer to the buffer for ASCII string.\r
+ @param[in] BufferSize The maxsize of the buffer.\r
\r
@return Length The actual length of the ASCII string.\r
\r
UINTN\r
PxeBcUintnToAscDec (\r
IN UINTN Number,\r
- IN UINT8 *Buffer\r
+ IN UINT8 *Buffer,\r
+ IN UINTN BufferSize\r
)\r
{\r
UINTN Index;\r
Number = (UINTN) (Number / 10);\r
} while (Number != 0);\r
\r
- AsciiStrCpy ((CHAR8 *) Buffer, &TempStr[Index]);\r
+ AsciiStrCpyS ((CHAR8 *) Buffer, BufferSize, &TempStr[Index]);\r
\r
Length = AsciiStrLen ((CHAR8 *) Buffer);\r
\r