Notify success before configuring the IP address.

This ensures that IpManager has a complete copy of DHCP state
before configuring the IPv4 address. That way, when the netlink
notification of the IPv4 address arrives, we are guaranteed to
have all DHCP information (including DNS servers and routes)
available and we will never send the IPv4 address before the DNS
servers.

Bug: 27605330
Change-Id: I732424dfe2408be9e40028563e99d610b541e12d
This commit is contained in:
Lorenzo Colitti
2016-04-28 13:52:56 +09:00
parent c5be12e7ac
commit adacedb1a8

View File

@@ -724,6 +724,7 @@ public class DhcpClient extends StateMachine {
mOffer = null;
Log.d(TAG, "Confirmed lease: " + mDhcpLease);
setDhcpLeaseExpiry(packet);
notifySuccess();
transitionTo(mConfiguringInterfaceState);
}
} else if (packet instanceof DhcpNakPacket) {
@@ -794,7 +795,6 @@ public class DhcpClient extends StateMachine {
@Override
public void enter() {
super.enter();
notifySuccess();
// TODO: DhcpStateMachine only supported renewing at 50% of the lease time,
// and did not support rebinding. Now that the legacy DHCP client is gone, fix this.
scheduleRenew();
@@ -850,6 +850,7 @@ public class DhcpClient extends StateMachine {
if (!isValidPacket(packet)) return;
if ((packet instanceof DhcpAckPacket)) {
setDhcpLeaseExpiry(packet);
notifySuccess();
transitionTo(mDhcpBoundState);
} else if (packet instanceof DhcpNakPacket) {
transitionTo(mDhcpInitState);