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...@intel.com> Cc: Fu Siyuan <siyuan...@intel.com> Cc: Hegde Nagaraj P <nagaraj-p.he...@hpe.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jiaxin Wu <jiaxin...@intel.com> --- NetworkPkg/Ip6Dxe/Ip6Driver.c | 72 +++++++++++++++++++++---------------------- 1 file changed, 35 insertions(+), 37 deletions(-) diff --git a/NetworkPkg/Ip6Dxe/Ip6Driver.c b/NetworkPkg/Ip6Dxe/Ip6Driver.c index ba70290..16617c1 100644 --- a/NetworkPkg/Ip6Dxe/Ip6Driver.c +++ b/NetworkPkg/Ip6Dxe/Ip6Driver.c @@ -576,11 +576,11 @@ Ip6DriverBindingStart ( Ip6Cfg, Ip6ConfigDataTypeManualAddress, DataItem->DataSize, DataItem->Data.Ptr ); - if (EFI_ERROR(Status)) { + if (EFI_ERROR(Status) && Status != EFI_NOT_READY) { goto ON_ERROR; } } // @@ -597,50 +597,48 @@ Ip6DriverBindingStart ( if (EFI_ERROR(Status)) { goto ON_ERROR; } } - if (!EFI_ERROR (Status)) { - // - // ready to go: start the receiving and timer - // - Status = Ip6ReceiveFrame (Ip6AcceptFrame, IpSb); - if (EFI_ERROR (Status)) { - goto ON_ERROR; - } + // + // 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 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; - } + // + // 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 ()); + // + // Initialize the IP6 ID + // + mIp6Id = NET_RANDOM (NetRandomInitSeed ()); - return EFI_SUCCESS; - } + return EFI_SUCCESS; ON_ERROR: Ip6CleanService (IpSb); FreePool (IpSb); return Status; -- 1.9.5.msysgit.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel