\r
ASSERT if NetMask is zero.\r
\r
- If all bits of the host address of IP are 0 or 1, IP is also not a valid unicast address.\r
+ If all bits of the host address of IP are 0 or 1, IP is also not a valid unicast address,\r
+ except when the originator is one of the endpoints of a point-to-point link with a 31-bit\r
+ mask (RFC3021).\r
\r
@param[in] Ip The IP to check against.\r
@param[in] NetMask The mask of the IP.\r
if (Ip == 0 || IP4_IS_LOCAL_BROADCAST (Ip)) {\r
return FALSE;\r
}\r
- \r
- if (((Ip &~NetMask) == ~NetMask) || ((Ip &~NetMask) == 0)) {\r
- return FALSE;\r
+\r
+ if (NetGetMaskLength (NetMask) != 31) {\r
+ if (((Ip &~NetMask) == ~NetMask) || ((Ip &~NetMask) == 0)) {\r
+ return FALSE;\r
+ }\r
+ } else {\r
+ return TRUE;\r
}\r
\r
return TRUE;\r
UINT64 MonotonicCount;\r
\r
gRT->GetTime (&Time, NULL);\r
- Seed = (~Time.Hour << 24 | Time.Day << 16 | Time.Minute << 8 | Time.Second);\r
+ Seed = (Time.Hour << 24 | Time.Day << 16 | Time.Minute << 8 | Time.Second);\r
Seed ^= Time.Nanosecond;\r
Seed ^= Time.Year << 7;\r
\r
UINT16 VlanId;\r
CHAR16 *String;\r
UINTN Index;\r
+ UINTN BufferSize;\r
\r
ASSERT (MacString != NULL);\r
\r
// If VLAN is configured, it will need extra 5 characters like "\0005".\r
// Plus one unicode character for the null-terminator.\r
//\r
- String = AllocateZeroPool ((2 * HwAddressSize + 5 + 1) * sizeof (CHAR16));\r
+ BufferSize = (2 * HwAddressSize + 5 + 1) * sizeof (CHAR16);\r
+ String = AllocateZeroPool (BufferSize);\r
if (String == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
//\r
HwAddress = &MacAddress.Addr[0];\r
for (Index = 0; Index < HwAddressSize; Index++) {\r
- String += UnicodeValueToString (String, PREFIX_ZERO | RADIX_HEX, *(HwAddress++), 2);\r
+ UnicodeValueToStringS (\r
+ String,\r
+ BufferSize - ((UINTN)String - (UINTN)*MacString),\r
+ PREFIX_ZERO | RADIX_HEX,\r
+ *(HwAddress++),\r
+ 2\r
+ );\r
+ String += StrnLenS (String, (BufferSize - ((UINTN)String - (UINTN)*MacString)) / sizeof (CHAR16));\r
}\r
\r
//\r
VlanId = NetLibGetVlanId (ServiceHandle);\r
if (VlanId != 0) {\r
*String++ = L'\\';\r
- String += UnicodeValueToString (String, PREFIX_ZERO | RADIX_HEX, VlanId, 4);\r
+ UnicodeValueToStringS (\r
+ String,\r
+ BufferSize - ((UINTN)String - (UINTN)*MacString),\r
+ PREFIX_ZERO | RADIX_HEX,\r
+ VlanId,\r
+ 4\r
+ );\r
+ String += StrnLenS (String, (BufferSize - ((UINTN)String - (UINTN)*MacString)) / sizeof (CHAR16));\r
}\r
\r
//\r
return EFI_NOT_FOUND;\r
}\r
Smbios.Hdr = (SMBIOS_STRUCTURE *) (UINTN) SmbiosTable->TableAddress;\r
- SmbiosEnd.Raw = (UINT8 *) (UINTN) (SmbiosTable->TableAddress + SmbiosTable->TableLength);\r
+ SmbiosEnd.Raw = (UINT8 *) ((UINTN) SmbiosTable->TableAddress + SmbiosTable->TableLength);\r
}\r
\r
do {\r