IP4_ADDR SubnetMask;\r
IP4_ADDR RemoteAddress;\r
EFI_IP4_CONFIG_DATA Ip4ConfigData;\r
+ IP4_ADDR LocalAddr;\r
+ IP4_ADDR RemoteAddr;\r
\r
if (This == NULL) {\r
return EFI_INVALID_PARAMETER;\r
\r
if (UdpConfigData != NULL) {\r
\r
- StationAddress = EFI_NTOHL (UdpConfigData->StationAddress);\r
- SubnetMask = EFI_NTOHL (UdpConfigData->SubnetMask);\r
- RemoteAddress = EFI_NTOHL (UdpConfigData->RemoteAddress);\r
+ NetCopyMem (&StationAddress, &UdpConfigData->StationAddress, sizeof (IP4_ADDR));\r
+ NetCopyMem (&SubnetMask, &UdpConfigData->SubnetMask, sizeof (IP4_ADDR));\r
+ NetCopyMem (&RemoteAddress, &UdpConfigData->RemoteAddress, sizeof (IP4_ADDR));\r
+\r
+ StationAddress = NTOHL (StationAddress);\r
+ SubnetMask = NTOHL (SubnetMask);\r
+ RemoteAddress = NTOHL (RemoteAddress);\r
+ \r
\r
if (!UdpConfigData->UseDefaultAddress &&\r
(!IP4_IS_VALID_NETMASK (SubnetMask) ||\r
//\r
// Pre calculate the checksum for the pseudo head, ignore the UDP length first.\r
//\r
+ NetCopyMem (&LocalAddr, &Instance->ConfigData.StationAddress, sizeof (IP4_ADDR));\r
+ NetCopyMem (&RemoteAddr, &Instance->ConfigData.RemoteAddress, sizeof (IP4_ADDR));\r
Instance->HeadSum = NetPseudoHeadChecksum (\r
- EFI_IP4 (Instance->ConfigData.StationAddress),\r
- EFI_IP4 (Instance->ConfigData.RemoteAddress),\r
+ LocalAddr,\r
+ RemoteAddr,\r
EFI_IP_PROTO_UDP,\r
0\r
);\r
UDP4_INSTANCE_DATA *Instance;\r
EFI_IP4_PROTOCOL *Ip;\r
EFI_TPL OldTpl;\r
+ IP4_ADDR McastIp;\r
\r
- if ((This == NULL) ||\r
- (JoinFlag && (MulticastAddress == NULL)) ||\r
- (JoinFlag && !IP4_IS_MULTICAST (EFI_NTOHL (*MulticastAddress)))) {\r
+ if ((This == NULL) || (JoinFlag && (MulticastAddress == NULL))) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
+ McastIp = 0;\r
+ if (JoinFlag) {\r
+ NetCopyMem (&McastIp, MulticastAddress, sizeof (IP4_ADDR));\r
+\r
+ if (IP4_IS_MULTICAST (NTOHL (McastIp))) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ }\r
+\r
Instance = UDP4_INSTANCE_DATA_FROM_THIS (This);\r
\r
if (Instance->IsNoMapping) {\r
//\r
if (JoinFlag) {\r
\r
- NetMapInsertTail (\r
- &Instance->McastIps,\r
- (VOID *) (UINTN) EFI_IP4 (*MulticastAddress),\r
- NULL\r
- );\r
+ NetMapInsertTail (&Instance->McastIps, (VOID *) (UINTN) McastIp, NULL);\r
} else {\r
\r
NetMapIterate (&Instance->McastIps, Udp4LeaveGroup, MulticastAddress);\r
NET_BUF *Packet;\r
EFI_UDP4_HEADER *Udp4Header;\r
EFI_UDP4_CONFIG_DATA *ConfigData;\r
+ IP4_ADDR Source;\r
IP4_ADDR Destination;\r
EFI_UDP4_TRANSMIT_DATA *TxData;\r
EFI_UDP4_SESSION_DATA *UdpSessionData;\r
// Set the SourceAddress, SrcPort and Destination according to the specified\r
// UdpSessionData.\r
//\r
- if (EFI_IP4 (UdpSessionData->SourceAddress) != 0) {\r
- Override.SourceAddress = UdpSessionData->SourceAddress;\r
+ if (!EFI_IP4_EQUAL (UdpSessionData->SourceAddress, mZeroIp4Addr)) {\r
+ NetCopyMem (&Override.SourceAddress, &UdpSessionData->SourceAddress, sizeof (EFI_IPv4_ADDRESS));\r
}\r
\r
if (UdpSessionData->SourcePort != 0) {\r
Udp4Header->SrcPort = HTONS (UdpSessionData->SourcePort);\r
}\r
\r
- Destination = EFI_IP4 (UdpSessionData->DestinationAddress);\r
-\r
if (UdpSessionData->DestinationPort != 0) {\r
Udp4Header->DstPort = HTONS (UdpSessionData->DestinationPort);\r
}\r
\r
+ NetCopyMem (&Source, &Override.SourceAddress, sizeof (IP4_ADDR));\r
+ NetCopyMem (&Destination, &UdpSessionData->DestinationAddress, sizeof (IP4_ADDR));\r
+\r
//\r
// calculate the pseudo head checksum using the overridden parameters.\r
//\r
HeadSum = NetPseudoHeadChecksum (\r
- EFI_IP4 (Override.SourceAddress),\r
+ Source,\r
Destination,\r
EFI_IP_PROTO_UDP,\r
0\r
//\r
// UdpSessionData is NULL, use the address and port information previously configured.\r
//\r
- Destination = EFI_IP4 (ConfigData->RemoteAddress);\r
- HeadSum = Instance->HeadSum;\r
+ NetCopyMem (&Destination, &ConfigData->RemoteAddress, sizeof (IP4_ADDR));\r
+\r
+ HeadSum = Instance->HeadSum;\r
}\r
\r
//\r
//\r
// Fill the IpIo Override data.\r
//\r
- EFI_IP4 (Override.GatewayAddress) = (TxData->GatewayAddress != NULL) ?\r
- EFI_IP4 (*(TxData->GatewayAddress)) : 0;\r
+ if (TxData->GatewayAddress != NULL) {\r
+ NetCopyMem (&Override.GatewayAddress, TxData->GatewayAddress, sizeof (EFI_IPv4_ADDRESS));\r
+ } else {\r
+ NetZeroMem (&Override.GatewayAddress, sizeof (EFI_IPv4_ADDRESS));\r
+ }\r
+\r
Override.Protocol = EFI_IP_PROTO_UDP;\r
Override.TypeOfService = ConfigData->TypeOfService;\r
Override.TimeToLive = ConfigData->TimeToLive;\r