MdeModulePkg: Fix issue about current Ip4Dxe implementation for DHCP DORA process

DHCP policy is applied as default at boot time on all NICs in the system, which results
in all NIC ports attempting DHCP and trying to acquire IP addresses during boot.
Ip4 driver should only set dhcp as default policy, and not trigger DORA at driver binding
start(). We should start DORA until one IP child is configured to use default address.

Cc: Fu Siyuan <siyuan.fu@intel.com>
Cc: Ye Ting <ting.ye@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jiaxin Wu <jiaxin.wu@intel.com>
Reviewed-by: Ye Ting <ting.ye@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18201 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Jiaxin Wu 2015-08-11 11:07:17 +00:00 committed by jiaxinwu
parent 00f6c6cf9f
commit 3d0a49ad47
3 changed files with 22 additions and 22 deletions

View File

@ -84,22 +84,6 @@ Ip4Config2DestroyDhcp4 (
return Status;
}
/**
Start the DHCP configuration for this IP service instance.
It will locates the EFI_IP4_CONFIG2_PROTOCOL, then start the
DHCP configuration.
@param[in] Instance The IP4 config2 instance to configure.
@retval EFI_SUCCESS The auto configuration is successfull started.
@retval Others Failed to start auto configuration.
**/
EFI_STATUS
Ip4StartAutoConfig (
IN IP4_CONFIG2_INSTANCE *Instance
);
/**
Update the current policy to NewPolicy. During the transition
period, the default router list
@ -992,10 +976,7 @@ Ip4Config2SetPolicy (
}
if (NewPolicy == Instance->Policy) {
if (NewPolicy != Ip4Config2PolicyDhcp || Instance->DhcpSuccess) {
return EFI_ABORTED;
}
return EFI_ABORTED;
} else {
if (NewPolicy == Ip4Config2PolicyDhcp) {
//

View File

@ -210,6 +210,22 @@ typedef struct {
} IP4_CONFIG2_DHCP4_OPTION;
#pragma pack()
/**
Start the DHCP configuration for this IP service instance.
It will locates the EFI_IP4_CONFIG2_PROTOCOL, then start the
DHCP configuration.
@param[in] Instance The IP4 config2 instance to configure.
@retval EFI_SUCCESS The auto configuration is successfull started.
@retval Others Failed to start auto configuration.
**/
EFI_STATUS
Ip4StartAutoConfig (
IN IP4_CONFIG2_INSTANCE *Instance
);
/**
Initialize an IP4_CONFIG2_INSTANCE.

View File

@ -678,8 +678,11 @@ Ip4ConfigProtocol (
// been started, start it.
//
if (IpSb->State == IP4_SERVICE_UNSTARTED) {
Status = EFI_NO_MAPPING;
goto ON_ERROR;
Status = Ip4StartAutoConfig (&IpSb->Ip4Config2Instance);
if (EFI_ERROR (Status)) {
goto ON_ERROR;
}
}
IpIf = IpSb->DefaultInterface;