On Fri, May 2, 2008 at 10:18 AM, Peter Memishian
<[EMAIL PROTECTED]> wrote:
>
>  I think I see the cause of this bug.  Upon resume, as previously
>  mentioned, the client receives a SIGTHAW and goes back through INIT_REBOOT
>  (refresh_smachs() -> refresh_smach() -> dhcp_init_reboot()).  If the
>  server sends a DHCPNAK to the client (e.g., because the lease has expired)
>  then the client will end up clearing IFF_UP (accept_v4_acknak() ->
>  dhcp_restart() -> deprecate_leases() -> remove_lease() -> unplumb_lif() ->
>  canonize_lif()).  Next, dhcp_restart() causes dhcp_start() to be called,
>  which sets the state back to INIT.  As part of doing this, *usually* we'll
>  end up calling open_ip_lif() which will set IFF_UP again.  However, since
>  we were only in INIT_REBOOT, the call to open_ip_lif() is skipped, and
>  the interface remains down.  As a result, all DHCP packets sent by the
>  client are dropped by the stack, and a new lease is never obtained.

Many thanks for working this out!

-- 
-Peter Tribble
http://www.petertribble.co.uk/ - http://ptribble.blogspot.com/
_______________________________________________
networking-discuss mailing list
[email protected]

Reply via email to