/** @file\r
Driver Binding functions implementationfor for UefiPxeBc Driver.\r
\r
- Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2007 - 2012, Intel Corporation. All rights reserved.<BR>\r
\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
NULL\r
};\r
\r
-//\r
-// PXE_PRIVATE_GUID is only used to keep the relationship between \r
-// NIC handle and virtual child handles.\r
-//\r
-EFI_GUID mPxeBcPrivateGuid = PXEBC_PRIVATE_GUID;\r
-\r
-\r
-\r
/**\r
Get the Nic handle using any child handle in the IPv4 stack.\r
\r
//\r
gBS->CloseProtocol (\r
Private->Controller,\r
- &mPxeBcPrivateGuid,\r
+ &gEfiCallerIdGuid,\r
This->DriverBindingHandle,\r
Private->Ip4Nic->Controller\r
);\r
//\r
gBS->CloseProtocol (\r
Private->Controller,\r
- &mPxeBcPrivateGuid,\r
+ &gEfiCallerIdGuid,\r
This->DriverBindingHandle,\r
Private->Ip6Nic->Controller\r
);\r
//\r
Status = gBS->OpenProtocol (\r
ControllerHandle,\r
- &mPxeBcPrivateGuid,\r
+ &gEfiCallerIdGuid,\r
(VOID **) &Id,\r
This->DriverBindingHandle,\r
Private->Ip4Nic->Controller,\r
EFI_IP6_MODE_DATA Ip6ModeData;\r
PXEBC_PRIVATE_PROTOCOL *Id;\r
EFI_SIMPLE_NETWORK_PROTOCOL *Snp;\r
+ UINTN Index;\r
\r
if (Private->Ip6Nic != NULL) {\r
//\r
goto ON_ERROR;\r
}\r
\r
+ //\r
+ // Generate a random IAID for the Dhcp6 assigned address.\r
+ //\r
+ Private->IaId = NET_RANDOM (NetRandomInitSeed ());\r
+ if (Private->Snp != NULL) {\r
+ for (Index = 0; Index < Private->Snp->Mode->HwAddressSize; Index++) {\r
+ Private->IaId |= (Private->Snp->Mode->CurrentAddress.Addr[Index] << ((Index << 3) & 31));\r
+ } \r
+ }\r
+\r
//\r
// Create Mtftp6 child and open Mtftp6 protocol for PxeBc->Mtftp.\r
//\r
ZeroMem (&Ip6Node, sizeof (IPv6_DEVICE_PATH));\r
Ip6Node.Header.Type = MESSAGING_DEVICE_PATH;\r
Ip6Node.Header.SubType = MSG_IPv6_DP;\r
- Ip6Node.StaticIpAddress = FALSE;\r
+ Ip6Node.PrefixLength = IP6_PREFIX_LENGTH;\r
\r
SetDevicePathNodeLength (&Ip6Node.Header, sizeof (Ip6Node));\r
\r
//\r
Status = gBS->OpenProtocol (\r
ControllerHandle,\r
- &mPxeBcPrivateGuid,\r
+ &gEfiCallerIdGuid,\r
(VOID **) &Id,\r
This->DriverBindingHandle,\r
Private->Ip6Nic->Controller,\r
\r
Status = gBS->OpenProtocol (\r
ControllerHandle,\r
- &mPxeBcPrivateGuid,\r
+ &gEfiCallerIdGuid,\r
(VOID **) &Id,\r
This->DriverBindingHandle,\r
ControllerHandle,\r
\r
//\r
// Install PxeBaseCodePrivate protocol onto the real NIC handler.\r
+ // PxeBaseCodePrivate protocol is only used to keep the relationship between \r
+ // NIC handle and virtual child handles.\r
+ // gEfiCallerIdGuid will be used as its protocol guid.\r
//\r
Status = gBS->InstallProtocolInterface (\r
&ControllerHandle,\r
- &mPxeBcPrivateGuid,\r
+ &gEfiCallerIdGuid,\r
EFI_NATIVE_INTERFACE,\r
&Private->Id\r
);\r
ON_ERROR:\r
gBS->UninstallProtocolInterface (\r
ControllerHandle,\r
- &mPxeBcPrivateGuid,\r
+ &gEfiCallerIdGuid,\r
&Private->Id\r
);\r
PxeBcDestroyIp4Children (This, Private);\r
//\r
Status = gBS->OpenProtocol (\r
NicHandle,\r
- &mPxeBcPrivateGuid,\r
+ &gEfiCallerIdGuid,\r
(VOID **) &Id,\r
This->DriverBindingHandle,\r
ControllerHandle,\r
if (Private->Ip4Nic == NULL && Private->Ip6Nic == NULL) {\r
gBS->UninstallProtocolInterface (\r
NicHandle,\r
- &mPxeBcPrivateGuid,\r
+ &gEfiCallerIdGuid,\r
&Private->Id\r
);\r
FreePool (Private);\r