]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Main.c
MdeModulePkg: Update IP4 stack drivers for classless address unicast check.
[mirror_edk2.git] / MdeModulePkg / Universal / Network / Udp4Dxe / Udp4Main.c
index ed997e1930326a1ebf9e1d0ae4ee8802a18df063..bdb79b3abde33a52b1c38aa7c6479b5dc70126ff 100644 (file)
@@ -1,6 +1,7 @@
 /** @file\r
 \r
-Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>\r
+(C) Copyright 2014 Hewlett-Packard Development Company, L.P.<BR>\r
+Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -79,7 +80,7 @@ Udp4GetModeData (
     CopyMem (Udp4ConfigData, &Instance->ConfigData, sizeof (*Udp4ConfigData));\r
   }\r
 \r
-  Ip = Instance->IpInfo->Ip;\r
+  Ip = Instance->IpInfo->Ip.Ip4;\r
 \r
   //\r
   // Get the underlying Ip4ModeData, MnpConfigData and SnpModeData.\r
@@ -170,9 +171,9 @@ Udp4Configure (
 \r
 \r
     if (!UdpConfigData->UseDefaultAddress &&\r
-      (!IP4_IS_VALID_NETMASK (SubnetMask) ||\r
-      !((StationAddress == 0) || NetIp4IsUnicast (StationAddress, SubnetMask)) ||\r
-      !((RemoteAddress  == 0) || NetIp4IsUnicast (RemoteAddress, 0)))) {\r
+        (!IP4_IS_VALID_NETMASK (SubnetMask) ||\r
+         !((StationAddress == 0) || NetIp4IsUnicast (StationAddress, SubnetMask)) ||\r
+         IP4_IS_LOCAL_BROADCAST (RemoteAddress))) {\r
       //\r
       // Don't use default address, and subnet mask is invalid or StationAddress is not\r
       // a valid unicast IPv4 address or RemoteAddress is not a valid unicast IPv4 address\r
@@ -227,8 +228,8 @@ Udp4Configure (
       // Save the configuration data.\r
       //\r
       CopyMem (&Instance->ConfigData, UdpConfigData, sizeof (Instance->ConfigData));\r
-      Instance->ConfigData.StationAddress = Ip4ConfigData.StationAddress;\r
-      Instance->ConfigData.SubnetMask     = Ip4ConfigData.SubnetMask;\r
+      IP4_COPY_ADDRESS (&Instance->ConfigData.StationAddress, &Ip4ConfigData.StationAddress);\r
+      IP4_COPY_ADDRESS (&Instance->ConfigData.SubnetMask, &Ip4ConfigData.SubnetMask);\r
 \r
       //\r
       // Try to allocate the required port resource.\r
@@ -280,9 +281,7 @@ Udp4Configure (
 \r
     ASSERT (IsListEmpty (&Instance->DeliveredDgramQue));\r
   }\r
-\r
-  Udp4SetVariableData (Instance->Udp4Service);\r
-\r
\r
 ON_EXIT:\r
 \r
   gBS->RestoreTPL (OldTpl);\r
@@ -357,7 +356,7 @@ Udp4Groups (
     return EFI_NOT_STARTED;\r
   }\r
 \r
-  Ip = Instance->IpInfo->Ip;\r
+  Ip = Instance->IpInfo->Ip.Ip4;\r
 \r
   OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
 \r
@@ -457,7 +456,7 @@ Udp4Routes (
     return EFI_NOT_STARTED;\r
   }\r
 \r
-  Ip = Instance->IpInfo->Ip;\r
+  Ip = Instance->IpInfo->Ip.Ip4;\r
 \r
   //\r
   // Invoke the Ip instance the Udp4 instance consumes to do the actual operation.\r
@@ -590,7 +589,7 @@ Udp4Transmit (
   Udp4Header->Checksum     = 0;\r
 \r
   UdpSessionData = TxData->UdpSessionData;\r
-  Override.Ip4OverrideData.SourceAddress = ConfigData->StationAddress;\r
+  IP4_COPY_ADDRESS (&Override.Ip4OverrideData.SourceAddress, &ConfigData->StationAddress);\r
 \r
   if (UdpSessionData != NULL) {\r
     //\r
@@ -598,7 +597,7 @@ Udp4Transmit (
     // UdpSessionData.\r
     //\r
     if (!EFI_IP4_EQUAL (&UdpSessionData->SourceAddress, &mZeroIp4Addr)) {\r
-      CopyMem (&Override.Ip4OverrideData.SourceAddress, &UdpSessionData->SourceAddress, sizeof (EFI_IPv4_ADDRESS));\r
+      IP4_COPY_ADDRESS (&Override.Ip4OverrideData.SourceAddress, &UdpSessionData->SourceAddress);\r
     }\r
 \r
     if (UdpSessionData->SourcePort != 0) {\r
@@ -645,7 +644,7 @@ Udp4Transmit (
   // Fill the IpIo Override data.\r
   //\r
   if (TxData->GatewayAddress != NULL) {\r
-    CopyMem (&Override.Ip4OverrideData.GatewayAddress, TxData->GatewayAddress, sizeof (EFI_IPv4_ADDRESS));\r
+    IP4_COPY_ADDRESS (&Override.Ip4OverrideData.GatewayAddress, TxData->GatewayAddress);\r
   } else {\r
     ZeroMem (&Override.Ip4OverrideData.GatewayAddress, sizeof (EFI_IPv4_ADDRESS));\r
   }\r
@@ -900,7 +899,7 @@ Udp4Poll (
   }\r
 \r
   Instance = UDP4_INSTANCE_DATA_FROM_THIS (This);\r
-  Ip       = Instance->IpInfo->Ip;\r
+  Ip       = Instance->IpInfo->Ip.Ip4;\r
 \r
   //\r
   // Invode the Ip instance consumed by the udp instance to do the poll operation.\r