UINT8 VendorOptLen;\r
CHAR8 *SystemSerialNumber;\r
EFI_DHCP4_HEADER *DhcpHeader;\r
+ UINT32 Xid;\r
\r
\r
Mode = Private->PxeBc.Mode;\r
\r
DhcpHeader->HwAddrLen = sizeof (EFI_GUID);\r
}\r
-\r
- Token.Packet->Dhcp4.Header.Xid = NET_RANDOM (NetRandomInitSeed ());\r
- Token.Packet->Dhcp4.Header.Reserved = (UINT16) ((IsBCast) ? 0xf000 : 0x0);\r
+ \r
+ Xid = NET_RANDOM (NetRandomInitSeed ());\r
+ Token.Packet->Dhcp4.Header.Xid = HTONL(Xid);\r
+ Token.Packet->Dhcp4.Header.Reserved = HTONS((IsBCast) ? 0x8000 : 0);\r
CopyMem (&Token.Packet->Dhcp4.Header.ClientAddr, &Private->StationIp, sizeof (EFI_IPv4_ADDRESS));\r
\r
Token.RemotePort = Sport;\r
\r
- if (DestIp == NULL) {\r
+ if (IsBCast) {\r
SetMem (&Token.RemoteAddress, sizeof (EFI_IPv4_ADDRESS), 0xff);\r
} else {\r
CopyMem (&Token.RemoteAddress, DestIp, sizeof (EFI_IPv4_ADDRESS));\r
//\r
for (TryIndex = 1; TryIndex <= PXEBC_BOOT_REQUEST_RETRIES; TryIndex++) {\r
\r
- Token.TimeoutValue = PXEBC_BOOT_REQUEST_TIMEOUT * TryIndex;\r
+ Token.TimeoutValue = (UINT16) (PXEBC_BOOT_REQUEST_TIMEOUT * TryIndex);\r
+ Token.Packet->Dhcp4.Header.Seconds = (UINT16) (PXEBC_BOOT_REQUEST_TIMEOUT * (TryIndex - 1));\r
\r
Status = Dhcp4->TransmitReceive (Dhcp4, &Token);\r
\r