On 22 June 2016 at 12:14, Jiaxin Wu <[email protected]> wrote:
> This patch is used to fix the wrong IpSb->State update issue.
>
> Issue reproduce steps:
> 1 .First PXE boot, then boot to shell;
> 2. ifconfig -s eth0 dhcp (Success);
> 3. Reboot and do PXE, then boot to shell;
> 4. ifconfig -s eth0 dhcp (Platform failed to get IP address no matter
>    how many times retried.)
>
> Root cause:
> On step3 reboot, policy is DHCP (Changed by step2). So, Ip4Dxe driver
> will try to get one IP address from DHCP server automatically. Before
> it get the IP address successfully, the IpSb->State will be always in
> IP4_SERVICE_STARTED status until the Instance->Dhcp4Event is triggered,
> then it can be changed to IP4_SERVICE_CONFIGED. But the DHCP process
> will be interrupted by PXE boot, which will change the policy to static,
> and the Instance->Dhcp4Event will be also closed directly. However,
> current implementation doesn't update the IpSb->State to
> IP4_SERVICE_UNSTARTED status in such case. So, failure happened.
>
> Cc: Ye Ting <[email protected]>
> Cc: Fu Siyuan <[email protected]>
> Cc: Ryan Harkin <[email protected]>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Jiaxin Wu <[email protected]>

I tested this on Juno ARM Development Platform and it now works as expected.

I still have a problem with Versatile Express TC2 that is fixed by
reverting commit 7648748e99eeeadec38fda7568adb260c4acc861, however it
is a different problem than the one fixed in this patch.  I'll
investigate that further and report back if/when I find out more.

Reviewed-by: Ryan Harkin <[email protected]>
Tested-by: Ryan Harkin <[email protected]>

> ---
>  MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Config2Impl.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Config2Impl.c 
> b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Config2Impl.c
> index d0fa132..10d7181 100644
> --- a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Config2Impl.c
> +++ b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Config2Impl.c
> @@ -140,11 +140,11 @@ Ip4Config2OnPolicyChanged (
>    IpSb->DefaultInterface  = IpIf;
>    InsertHeadList (&IpSb->Interfaces, &IpIf->Link);
>    IpSb->DefaultRouteTable = RouteTable;
>    Ip4ReceiveFrame (IpIf, NULL, Ip4AccpetFrame, IpSb);
>
> -  if (IpSb->State == IP4_SERVICE_CONFIGED) {
> +  if (IpSb->State == IP4_SERVICE_CONFIGED || IpSb->State == 
> IP4_SERVICE_STARTED) {
>      IpSb->State = IP4_SERVICE_UNSTARTED;
>    }
>
>    //
>    // Start the dhcp configuration.
> --
> 1.9.5.msysgit.1
>
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to