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:
@@ -578,7 +578,7 @@ Ip6DriverBindingStart (
|
|||||||
DataItem->DataSize,
|
DataItem->DataSize,
|
||||||
DataItem->Data.Ptr
|
DataItem->Data.Ptr
|
||||||
);
|
);
|
||||||
if (EFI_ERROR(Status)) {
|
if (EFI_ERROR(Status) && Status != EFI_NOT_READY) {
|
||||||
goto ON_ERROR;
|
goto ON_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -599,47 +599,45 @@ Ip6DriverBindingStart (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!EFI_ERROR (Status)) {
|
//
|
||||||
//
|
// ready to go: start the receiving and timer
|
||||||
// ready to go: start the receiving and timer
|
//
|
||||||
//
|
Status = Ip6ReceiveFrame (Ip6AcceptFrame, IpSb);
|
||||||
Status = Ip6ReceiveFrame (Ip6AcceptFrame, IpSb);
|
if (EFI_ERROR (Status)) {
|
||||||
if (EFI_ERROR (Status)) {
|
goto ON_ERROR;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// 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:
|
ON_ERROR:
|
||||||
Ip6CleanService (IpSb);
|
Ip6CleanService (IpSb);
|
||||||
FreePool (IpSb);
|
FreePool (IpSb);
|
||||||
|
Reference in New Issue
Block a user