]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Library/DxeNetLib/DxeNetLib.c
MdeModulePkg: Update IP4 stack to support point-to-point link with 31-bit mask.
[mirror_edk2.git] / MdeModulePkg / Library / DxeNetLib / DxeNetLib.c
index 37b89f5ca408c98111cb5a180f8b834d43646660..b8544b89ab8d3f5bee7b5e94c1eb12f615b170c2 100644 (file)
@@ -637,7 +637,9 @@ NetGetIpClass (
 \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
@@ -657,9 +659,13 @@ NetIp4IsUnicast (
   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
@@ -872,7 +878,7 @@ NetRandomInitSeed (
   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
@@ -2225,6 +2231,7 @@ NetLibGetMacString (
   UINT16                       VlanId;\r
   CHAR16                       *String;\r
   UINTN                        Index;\r
+  UINTN                        BufferSize;\r
 \r
   ASSERT (MacString != NULL);\r
 \r
@@ -2241,7 +2248,8 @@ NetLibGetMacString (
   // 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
@@ -2252,7 +2260,14 @@ NetLibGetMacString (
   //\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
@@ -2261,7 +2276,14 @@ NetLibGetMacString (
   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
@@ -2979,7 +3001,7 @@ NetLibGetSystemGuid (
       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