1. Fix a bug in PXE driver that the PXE boot do not restart if a new boot option on the different IP stack is selected.
2. Retrieve the IP information after iSCSI TCPv6 connection established and fill it into iBFT table. 3. Generate a random IAID for each NIC port to require different IPv6 address in PXE driver. 4. Update function EfiMtftp6Configure() and Mtftp6RrqHandleOack() to allocate at most one UdpIo. 5. Fix a typo from “destory” to “destroy” in network code. Signed-off-by: Fu Siyuan <siyuan.fu@intel.com> Reviewed-by: Ye Ting <ting.ye@intel.com> Reviewed-by: Ouyang Qian <qian.ouyang@intel.com> git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13859 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -532,7 +532,7 @@ PxeBcParseDhcp4Packet (
|
||||
(Offer->Dhcp4.Header.BootFileName[0] != 0)) {
|
||||
//
|
||||
// If the bootfile is not present and bootfilename is present in DHCPv4 packet, just parse it.
|
||||
// Do not count dhcp option header here, or else will destory the serverhostname.
|
||||
// Do not count dhcp option header here, or else will destroy the serverhostname.
|
||||
//
|
||||
Options[PXEBC_DHCP4_TAG_INDEX_BOOTFILE] = (EFI_DHCP4_PACKET_OPTION *)
|
||||
(&Offer->Dhcp4.Header.BootFileName[0] -
|
||||
|
@@ -1748,7 +1748,7 @@ PxeBcDhcp6Sarr (
|
||||
Config.IaInfoEvent = NULL;
|
||||
Config.RapidCommit = FALSE;
|
||||
Config.ReconfigureAccept = FALSE;
|
||||
Config.IaDescriptor.IaId = 1;
|
||||
Config.IaDescriptor.IaId = Private->IaId;
|
||||
Config.IaDescriptor.Type = EFI_DHCP6_IA_TYPE_NA;
|
||||
Config.SolicitRetransmission = Retransmit;
|
||||
Retransmit->Irt = 4;
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/** @file
|
||||
Driver Binding functions implementationfor for UefiPxeBc Driver.
|
||||
|
||||
Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2007 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
@@ -779,6 +779,7 @@ PxeBcCreateIp6Children (
|
||||
EFI_IP6_MODE_DATA Ip6ModeData;
|
||||
PXEBC_PRIVATE_PROTOCOL *Id;
|
||||
EFI_SIMPLE_NETWORK_PROTOCOL *Snp;
|
||||
UINTN Index;
|
||||
|
||||
if (Private->Ip6Nic != NULL) {
|
||||
//
|
||||
@@ -821,6 +822,16 @@ PxeBcCreateIp6Children (
|
||||
goto ON_ERROR;
|
||||
}
|
||||
|
||||
//
|
||||
// Generate a random IAID for the Dhcp6 assigned address.
|
||||
//
|
||||
Private->IaId = NET_RANDOM (NetRandomInitSeed ());
|
||||
if (Private->Snp != NULL) {
|
||||
for (Index = 0; Index < Private->Snp->Mode->HwAddressSize; Index++) {
|
||||
Private->IaId |= (Private->Snp->Mode->CurrentAddress.Addr[Index] << ((Index << 3) & 31));
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Create Mtftp6 child and open Mtftp6 protocol for PxeBc->Mtftp.
|
||||
//
|
||||
|
@@ -2348,6 +2348,15 @@ EfiPxeLoadFile (
|
||||
// Start Pxe Base Code to initialize PXE boot.
|
||||
//
|
||||
Status = PxeBc->Start (PxeBc, UsingIpv6);
|
||||
if (Status == EFI_ALREADY_STARTED && UsingIpv6 != PxeBc->Mode->UsingIpv6) {
|
||||
//
|
||||
// PxeBc protocol has already been started but not on the required IP version, restart it.
|
||||
//
|
||||
Status = PxeBc->Stop (PxeBc);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
Status = PxeBc->Start (PxeBc, UsingIpv6);
|
||||
}
|
||||
}
|
||||
if (Status == EFI_SUCCESS || Status == EFI_ALREADY_STARTED) {
|
||||
Status = PxeBcLoadBootFile (Private, BufferSize, Buffer);
|
||||
}
|
||||
|
@@ -165,6 +165,7 @@ struct _PXEBC_PRIVATE_DATA {
|
||||
EFI_IP_ADDRESS GatewayIp;
|
||||
EFI_IP_ADDRESS ServerIp;
|
||||
UINT16 CurSrcPort;
|
||||
UINT32 IaId;
|
||||
|
||||
UINT32 Ip4MaxPacketSize;
|
||||
UINT32 Ip6MaxPacketSize;
|
||||
|
Reference in New Issue
Block a user