]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/Ip4ConfigDxe/Ip4Config.c
Merger network tackers 9307, 9338, 9339, 9397
[mirror_edk2.git] / MdeModulePkg / Universal / Network / Ip4ConfigDxe / Ip4Config.c
index 326fb4dc335c3b0e602a073655430a29a8602660..bec1a4f0b0cba9c95b9eb87c51be263b0479845c 100644 (file)
@@ -66,7 +66,7 @@ EfiNicIp4ConfigGetName (
   }\r
 \r
   if (NicAddr != NULL) {\r
-    CopyMem (NicAddr, &Instance->NicAddr, sizeof (NIC_ADDR));\r
+    CopyMem (NicAddr, &Instance->NicAddr, sizeof (*NicAddr));\r
   }\r
 \r
   return EFI_SUCCESS;\r
@@ -590,6 +590,8 @@ Ip4ConfigOnDhcp4Complete (
   EFI_STATUS                Status;\r
   BOOLEAN                   Perment;\r
   IP4_ADDR                  Subnet;\r
+  IP4_ADDR                  Ip1;\r
+  IP4_ADDR                  Ip2;\r
 \r
   Instance = (IP4_CONFIG_INSTANCE *) Context;\r
   ASSERT (Instance->Dhcp4 != NULL);\r
@@ -620,15 +622,16 @@ Ip4ConfigOnDhcp4Complete (
       NetFreePool (Instance->NicConfig);\r
     }\r
 \r
-    Instance->NicConfig = NetAllocatePool (sizeof (NIC_IP4_CONFIG_INFO) +\r
-                                           sizeof (EFI_IP4_ROUTE_TABLE));\r
+    Instance->NicConfig = NetAllocatePool (sizeof (NIC_IP4_CONFIG_INFO) + 2* sizeof (EFI_IP4_ROUTE_TABLE));\r
 \r
     if (Instance->NicConfig == NULL) {\r
       Instance->Result = EFI_OUT_OF_RESOURCES;\r
       goto ON_EXIT;\r
     }\r
 \r
-    CopyMem (&Instance->NicConfig->NicAddr, &Instance->NicAddr, sizeof (NIC_ADDR));\r
+    Instance->NicConfig->Ip4Info.RouteTable = (EFI_IP4_ROUTE_TABLE *) (Instance->NicConfig + 1);\r
+\r
+    CopyMem (&Instance->NicConfig->NicAddr, &Instance->NicAddr, sizeof (Instance->NicConfig->NicAddr));\r
     Instance->NicConfig->Source  = IP4_CONFIG_SOURCE_DHCP;\r
     Instance->NicConfig->Perment = Perment;\r
 \r
@@ -641,20 +644,24 @@ Ip4ConfigOnDhcp4Complete (
     //\r
     Ip4Config->RouteTableSize    = 1;\r
 \r
-    Subnet = EFI_NTOHL (Dhcp4Mode.ClientAddress) & EFI_NTOHL (Dhcp4Mode.SubnetMask);\r
+    NetCopyMem (&Ip1, &Dhcp4Mode.ClientAddress, sizeof (IP4_ADDR));\r
+    NetCopyMem (&Ip2, &Dhcp4Mode.SubnetMask, sizeof (IP4_ADDR));\r
+\r
+    Subnet = Ip1 & Ip2;\r
 \r
-    EFI_IP4 (Ip4Config->RouteTable[0].SubnetAddress)  = HTONL (Subnet);\r
-    Ip4Config->RouteTable[0].SubnetMask               = Dhcp4Mode.SubnetMask;\r
-    EFI_IP4 (Ip4Config->RouteTable[0].GatewayAddress) = 0;\r
+    NetCopyMem (&Ip4Config->RouteTable[0].SubnetAddress, &Subnet, sizeof (EFI_IPv4_ADDRESS));\r
+    NetCopyMem (&Ip4Config->RouteTable[0].SubnetMask, &Dhcp4Mode.SubnetMask, sizeof (EFI_IPv4_ADDRESS));\r
+    NetZeroMem (&Ip4Config->RouteTable[0].GatewayAddress, sizeof (EFI_IPv4_ADDRESS));\r
 \r
     //\r
     // Create a route if there is a default router.\r
     //\r
-    if (EFI_IP4 (Dhcp4Mode.RouterAddress) != 0) {\r
-      Ip4Config->RouteTableSize                         = 2;\r
-      EFI_IP4 (Ip4Config->RouteTable[1].SubnetAddress)  = 0;\r
-      EFI_IP4 (Ip4Config->RouteTable[1].SubnetMask)     = 0;\r
-      Ip4Config->RouteTable[1].GatewayAddress           = Dhcp4Mode.RouterAddress;\r
+    if (!EFI_IP4_EQUAL (&Dhcp4Mode.RouterAddress, &mZeroIp4Addr)) {\r
+      Ip4Config->RouteTableSize = 2;\r
+\r
+      NetZeroMem (&Ip4Config->RouteTable[1].SubnetAddress, sizeof (EFI_IPv4_ADDRESS));\r
+      NetZeroMem (&Ip4Config->RouteTable[1].SubnetMask, sizeof (EFI_IPv4_ADDRESS));\r
+      NetCopyMem (&Ip4Config->RouteTable[1].GatewayAddress, &Dhcp4Mode.RouterAddress, sizeof (EFI_IPv4_ADDRESS));\r
     }\r
 \r
     Instance->Result = EFI_SUCCESS;\r