UINT16 Value;\r
EFI_STATUS Status;\r
BOOLEAN Received;\r
+ CHAR8 *SystemSerialNumber;\r
+ EFI_DHCP4_HEADER *DhcpHeader;\r
\r
if ((Dhcp4Event != Dhcp4RcvdOffer) &&\r
(Dhcp4Event != Dhcp4SelectOffer) &&\r
(Dhcp4Event != Dhcp4SendDiscover) &&\r
- (Dhcp4Event != Dhcp4RcvdAck)) {\r
+ (Dhcp4Event != Dhcp4RcvdAck) &&\r
+ (Dhcp4Event != Dhcp4SendRequest)) {\r
return EFI_SUCCESS;\r
}\r
\r
switch (Dhcp4Event) {\r
\r
case Dhcp4SendDiscover:\r
- //\r
- // Cache the dhcp discover packet, of which some information will be used later.\r
- //\r
- CopyMem (Mode->DhcpDiscover.Raw, &Packet->Dhcp4, Packet->Length);\r
+ case Dhcp4SendRequest:\r
+ if (Mode->SendGUID) {\r
+ //\r
+ // send the system GUID instead of the MAC address as the hardware address\r
+ // in the DHCP packet header.\r
+ //\r
+ DhcpHeader = &Packet->Dhcp4.Header;\r
+\r
+ if (EFI_ERROR (GetSmbiosSystemGuidAndSerialNumber ((EFI_GUID *) DhcpHeader->ClientHwAddr, &SystemSerialNumber))) {\r
+ //\r
+ // GUID not yet set - send all 0xff's to show programable (via SetVariable)\r
+ // SetMem(DHCPV4_OPTIONS_BUFFER.DhcpPlatformId.Guid, sizeof(EFI_GUID), 0xff);\r
+ // GUID not yet set - send all 0's to show not programable\r
+ //\r
+ ZeroMem (DhcpHeader->ClientHwAddr, sizeof (EFI_GUID));\r
+ }\r
+\r
+ DhcpHeader->HwAddrLen = sizeof (EFI_GUID);\r
+ }\r
+\r
+ if (Dhcp4Event == Dhcp4SendDiscover) {\r
+ //\r
+ // Cache the dhcp discover packet, of which some information will be used later.\r
+ //\r
+ CopyMem (Mode->DhcpDiscover.Raw, &Packet->Dhcp4, Packet->Length);\r
+ }\r
\r
break;\r
\r
\r
PxeBcCopyEfiDhcp4Packet (&Private->Dhcp4Ack.Packet.Ack, Packet);\r
break;\r
+\r
+ default:\r
+ break;\r
}\r
\r
return Status;\r
EFI_DHCP4_PACKET_OPTION *PxeOpt;\r
PXEBC_OPTION_BOOT_ITEM *PxeBootItem;\r
UINT8 VendorOptLen;\r
+ CHAR8 *SystemSerialNumber;\r
+ EFI_DHCP4_HEADER *DhcpHeader;\r
+\r
\r
Mode = Private->PxeBc.Mode;\r
Dhcp4 = Private->Dhcp4;\r
return Status;\r
}\r
\r
+ DhcpHeader = &Token.Packet->Dhcp4.Header;\r
+ if (Mode->SendGUID) {\r
+ if (EFI_ERROR (GetSmbiosSystemGuidAndSerialNumber ((EFI_GUID *) DhcpHeader->ClientHwAddr, &SystemSerialNumber))) {\r
+ //\r
+ // GUID not yet set - send all 0's to show not programable\r
+ //\r
+ ZeroMem (DhcpHeader->ClientHwAddr, sizeof (EFI_GUID));\r
+ }\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
CopyMem (&Token.Packet->Dhcp4.Header.ClientAddr, &Private->StationIp, sizeof (EFI_IPv4_ADDRESS));\r
}\r
\r
if (UseDefaultItem) {\r
- *Type = NTOHS (MenuArray[0]->Type);\r
+ CopyMem (Type, &MenuArray[0]->Type, sizeof (UINT16));\r
+ *Type = NTOHS (*Type);\r
return EFI_SUCCESS;\r
}\r
\r
//\r
// Swap the byte order\r
//\r
- *Type = NTOHS (MenuArray[Select]->Type);\r
+ CopyMem (Type, &MenuArray[Select]->Type, sizeof (UINT16));\r
+ *Type = NTOHS (*Type);\r
\r
return EFI_SUCCESS;\r
}\r