}\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
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
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
//\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