#include <Library/DebugLib.h>\r
#include <Library/UefiBootServicesTableLib.h>\r
#include <Library/MemoryAllocationLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
\r
\r
#define NET_PROTO_HDR(Buf, Type) ((Type *) ((Buf)->BlockOp[0].Head))\r
FALSE,\r
FALSE,\r
FALSE,\r
- {0, 0, 0, 0},\r
- {0, 0, 0, 0},\r
+ {{0, 0, 0, 0}},\r
+ {{0, 0, 0, 0}},\r
0,\r
255,\r
FALSE,\r
0\r
};\r
\r
+STATIC ICMP_ERROR_INFO mIcmpErrMap[10] = {\r
+ {FALSE, TRUE},\r
+ {FALSE, TRUE},\r
+ {TRUE, TRUE},\r
+ {TRUE, TRUE},\r
+ {TRUE, TRUE},\r
+ {FALSE, TRUE},\r
+ {FALSE, TRUE},\r
+ {FALSE, TRUE},\r
+ {FALSE, FALSE},\r
+ {FALSE, TRUE}\r
+};\r
+\r
STATIC\r
VOID\r
EFIAPI\r
EFI_IP4_TRANSMIT_DATA *TxData;\r
EFI_STATUS Status;\r
EFI_IP4_OVERRIDE_DATA *OverrideData;\r
- UINT32 Index;\r
+ volatile UINT32 Index;\r
\r
//\r
// Allocate resource for SndEntry\r
//\r
// Set the fields of OverrideData\r
//\r
- *OverrideData = * (EFI_IP4_OVERRIDE_DATA *) Override;\r
+ NetCopyMem (OverrideData, Override, sizeof (*OverrideData));\r
}\r
\r
//\r
// Set the fields of TxData\r
//\r
- EFI_IP4 (TxData->DestinationAddress) = Dest;\r
+ NetCopyMem (&TxData->DestinationAddress, &Dest, sizeof (EFI_IPv4_ADDRESS));\r
TxData->OverrideData = OverrideData;\r
TxData->OptionsLength = 0;\r
TxData->OptionsBuffer = NULL;\r
TxData->TotalDataLength = Pkt->TotalSize;\r
TxData->FragmentCount = Pkt->BlockOpNum;\r
\r
- for (Index = 0; Index < Pkt->BlockOpNum; Index++) {\r
\r
+ for (Index = 0; Index < Pkt->BlockOpNum; Index++) {\r
TxData->FragmentTable[Index].FragmentBuffer = Pkt->BlockOp[Index].Head;\r
TxData->FragmentTable[Index].FragmentLength = Pkt->BlockOp[Index].Size;\r
}\r
{\r
EFI_STATUS Status;\r
EFI_IP4_PROTOCOL *Ip;\r
- EFI_IPv4_ADDRESS ZeroIp;\r
\r
if (IpIo->IsConfigured) {\r
return EFI_ACCESS_DENIED;\r
// (0.0.0.0, 0.0.0.0, 0.0.0.0). Delete this statement if Ip modified\r
// its code\r
//\r
- EFI_IP4 (ZeroIp) = 0;\r
- Status = Ip->Routes (Ip, TRUE, &ZeroIp, &ZeroIp, &ZeroIp);\r
+ Status = Ip->Routes (Ip, TRUE, &mZeroIp4Addr, &mZeroIp4Addr, &mZeroIp4Addr);\r
\r
if (EFI_ERROR (Status) && (EFI_NOT_FOUND != Status)) {\r
return Status;\r
//\r
// Detroy the Ip List used by IpIo\r
//\r
+\r
while (!NetListIsEmpty (&(IpIo->IpList))) {\r
IpInfo = NET_LIST_HEAD (&(IpIo->IpList), IP_IO_IP_INFO, Entry);\r
\r
Ip4ConfigData->SubnetMask = Ip4ModeData.ConfigData.SubnetMask;\r
}\r
\r
- IpInfo->Addr = EFI_IP4 (Ip4ConfigData->StationAddress);\r
- IpInfo->SubnetMask = EFI_IP4 (Ip4ConfigData->SubnetMask);\r
+ NetCopyMem (&IpInfo->Addr, &Ip4ConfigData->StationAddress, sizeof (IP4_ADDR));\r
+ NetCopyMem (&IpInfo->SubnetMask, &Ip4ConfigData->SubnetMask, sizeof (IP4_ADDR));\r
\r
Status = Ip->Receive (Ip, &IpInfo->DummyRcvToken);\r
if (EFI_ERROR (Status)) {\r
OUT BOOLEAN *Notify OPTIONAL\r
)\r
{\r
- ICMP_ERROR_INFO IcmpErrMap[] = {\r
- { EFI_NETWORK_UNREACHABLE, FALSE, TRUE }, // ICMP_ERR_UNREACH_NET\r
- { EFI_HOST_UNREACHABLE, FALSE, TRUE }, // ICMP_ERR_UNREACH_HOST\r
- { EFI_PROTOCOL_UNREACHABLE, TRUE, TRUE }, // ICMP_ERR_UNREACH_PROTOCOL\r
- { EFI_PORT_UNREACHABLE, TRUE, TRUE }, // ICMP_ERR_UNREACH_PORT\r
- { EFI_ICMP_ERROR, TRUE, TRUE }, // ICMP_ERR_MSGSIZE\r
- { EFI_ICMP_ERROR, FALSE, TRUE }, // ICMP_ERR_UNREACH_SRCFAIL\r
- { EFI_HOST_UNREACHABLE, FALSE, TRUE }, // ICMP_ERR_TIMXCEED_INTRANS\r
- { EFI_HOST_UNREACHABLE, FALSE, TRUE }, // ICMP_ERR_TIMEXCEED_REASS\r
- { EFI_ICMP_ERROR, FALSE, FALSE }, // ICMP_ERR_QUENCH\r
- { EFI_ICMP_ERROR, FALSE, TRUE } // ICMP_ERR_PARAMPROB\r
- };\r
-\r
ASSERT ((IcmpError >= ICMP_ERR_UNREACH_NET) && (IcmpError <= ICMP_ERR_PARAMPROB));\r
\r
if (IsHard != NULL) {\r
- *IsHard = IcmpErrMap[IcmpError].IsHard;\r
+ *IsHard = mIcmpErrMap[IcmpError].IsHard;\r
}\r
\r
if (Notify != NULL) {\r
- *Notify = IcmpErrMap[IcmpError].Notify;\r
+ *Notify = mIcmpErrMap[IcmpError].Notify;\r
+ }\r
+\r
+ switch (IcmpError) {\r
+ case ICMP_ERR_UNREACH_NET:\r
+ return EFI_NETWORK_UNREACHABLE;\r
+\r
+ case ICMP_ERR_TIMXCEED_INTRANS:\r
+ case ICMP_ERR_TIMXCEED_REASS:\r
+ case ICMP_ERR_UNREACH_HOST:\r
+ return EFI_HOST_UNREACHABLE;\r
+\r
+ case ICMP_ERR_UNREACH_PROTOCOL:\r
+ return EFI_PROTOCOL_UNREACHABLE;\r
+\r
+ case ICMP_ERR_UNREACH_PORT:\r
+ return EFI_PORT_UNREACHABLE;\r
+\r
+ case ICMP_ERR_MSGSIZE:\r
+ case ICMP_ERR_UNREACH_SRCFAIL:\r
+ case ICMP_ERR_QUENCH:\r
+ case ICMP_ERR_PARAMPROB:\r
+ return EFI_ICMP_ERROR;\r
}\r
\r
- return IcmpErrMap[IcmpError].Error;\r
+ //\r
+ // will never run here!\r
+ //\r
+ ASSERT (FALSE);\r
+ return EFI_UNSUPPORTED;\r
}\r
\r