NetworkPkg: Fix issue in Ip6Dxe SetData

EFI_NOT_READY should not be treated as an error status
returned from SetData for Ip6ConfigDataTypeManualAddress
since there is an asynchronous operation for DAD process.

Cc: Ye Ting <ting.ye@intel.com>
Cc: Fu Siyuan <siyuan.fu@intel.com>
Cc: Hegde Nagaraj P <nagaraj-p.hegde@hpe.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jiaxin Wu <jiaxin.wu@intel.com>
Reviewed-by: Hegde Nagaraj P <nagaraj-p.hegde@hpe.com>
Reviewed-by: Sriram Subramanian <sriram-s@hpe.com>
Tested-by: Hegde Nagaraj P <nagaraj-p.hegde@hpe.com>
This commit is contained in:
Jiaxin Wu 2016-04-13 11:07:07 +08:00
parent 2b1c08acfc
commit 7959b06748
1 changed files with 38 additions and 40 deletions

View File

@ -578,7 +578,7 @@ Ip6DriverBindingStart (
DataItem->DataSize,
DataItem->Data.Ptr
);
if (EFI_ERROR(Status)) {
if (EFI_ERROR(Status) && Status != EFI_NOT_READY) {
goto ON_ERROR;
}
}
@ -599,47 +599,45 @@ Ip6DriverBindingStart (
}
}
if (!EFI_ERROR (Status)) {
//
// ready to go: start the receiving and timer
//
Status = Ip6ReceiveFrame (Ip6AcceptFrame, IpSb);
if (EFI_ERROR (Status)) {
goto ON_ERROR;
}
//
// The timer expires every 100 (IP6_TIMER_INTERVAL_IN_MS) milliseconds.
//
Status = gBS->SetTimer (
IpSb->FasterTimer,
TimerPeriodic,
TICKS_PER_MS * IP6_TIMER_INTERVAL_IN_MS
);
if (EFI_ERROR (Status)) {
goto ON_ERROR;
}
//
// The timer expires every 1000 (IP6_ONE_SECOND_IN_MS) milliseconds.
//
Status = gBS->SetTimer (
IpSb->Timer,
TimerPeriodic,
TICKS_PER_MS * IP6_ONE_SECOND_IN_MS
);
if (EFI_ERROR (Status)) {
goto ON_ERROR;
}
//
// Initialize the IP6 ID
//
mIp6Id = NET_RANDOM (NetRandomInitSeed ());
return EFI_SUCCESS;
//
// ready to go: start the receiving and timer
//
Status = Ip6ReceiveFrame (Ip6AcceptFrame, IpSb);
if (EFI_ERROR (Status)) {
goto ON_ERROR;
}
//
// The timer expires every 100 (IP6_TIMER_INTERVAL_IN_MS) milliseconds.
//
Status = gBS->SetTimer (
IpSb->FasterTimer,
TimerPeriodic,
TICKS_PER_MS * IP6_TIMER_INTERVAL_IN_MS
);
if (EFI_ERROR (Status)) {
goto ON_ERROR;
}
//
// The timer expires every 1000 (IP6_ONE_SECOND_IN_MS) milliseconds.
//
Status = gBS->SetTimer (
IpSb->Timer,
TimerPeriodic,
TICKS_PER_MS * IP6_ONE_SECOND_IN_MS
);
if (EFI_ERROR (Status)) {
goto ON_ERROR;
}
//
// Initialize the IP6 ID
//
mIp6Id = NET_RANDOM (NetRandomInitSeed ());
return EFI_SUCCESS;
ON_ERROR:
Ip6CleanService (IpSb);
FreePool (IpSb);