diff options
author | Lorenzo Colitti <lorenzo@google.com> | 2015-06-02 16:50:36 +0900 |
---|---|---|
committer | Lorenzo Colitti <lorenzo@google.com> | 2015-06-03 12:09:14 +0900 |
commit | 48f9c731ff7d44e5c13e2a5574d56207694d8946 (patch) | |
tree | f6d5ce21b14a948351d53d9b25c51c1881800e21 /services/net | |
parent | e380546aedb727a7a5f1f7b460124c3e57d5ac49 (diff) | |
download | frameworks_base-48f9c731ff7d44e5c13e2a5574d56207694d8946.zip frameworks_base-48f9c731ff7d44e5c13e2a5574d56207694d8946.tar.gz frameworks_base-48f9c731ff7d44e5c13e2a5574d56207694d8946.tar.bz2 |
Remove the IPv4 address from the interface when DHCP fails.
Bug: 19704592
Change-Id: I9b96cdcfc7c9442b3f8d6797aca63559ed4bdb9b
Diffstat (limited to 'services/net')
-rw-r--r-- | services/net/java/android/net/dhcp/DhcpClient.java | 37 |
1 files changed, 25 insertions, 12 deletions
diff --git a/services/net/java/android/net/dhcp/DhcpClient.java b/services/net/java/android/net/dhcp/DhcpClient.java index b8c60ec..d8d74e2 100644 --- a/services/net/java/android/net/dhcp/DhcpClient.java +++ b/services/net/java/android/net/dhcp/DhcpClient.java @@ -165,6 +165,7 @@ public class DhcpClient extends BaseDhcpStateMachine { private State mDhcpInitState = new DhcpInitState(); private State mDhcpSelectingState = new DhcpSelectingState(); private State mDhcpRequestingState = new DhcpRequestingState(); + private State mDhcpHaveAddressState = new DhcpHaveAddressState(); private State mDhcpBoundState = new DhcpBoundState(); private State mDhcpRenewingState = new DhcpRenewingState(); private State mDhcpRebindingState = new DhcpRebindingState(); @@ -186,10 +187,11 @@ public class DhcpClient extends BaseDhcpStateMachine { addState(mWaitBeforeStartState, mDhcpState); addState(mDhcpSelectingState, mDhcpState); addState(mDhcpRequestingState, mDhcpState); - addState(mDhcpBoundState, mDhcpState); - addState(mWaitBeforeRenewalState, mDhcpState); - addState(mDhcpRenewingState, mDhcpState); - addState(mDhcpRebindingState, mDhcpState); + addState(mDhcpHaveAddressState, mDhcpState); + addState(mDhcpBoundState, mDhcpHaveAddressState); + addState(mWaitBeforeRenewalState, mDhcpHaveAddressState); + addState(mDhcpRenewingState, mDhcpHaveAddressState); + addState(mDhcpRebindingState, mDhcpHaveAddressState); addState(mDhcpInitRebootState, mDhcpState); addState(mDhcpRebootingState, mDhcpState); @@ -402,7 +404,7 @@ public class DhcpClient extends BaseDhcpStateMachine { } } - private void notifyLease() { + private void notifySuccess() { mController.sendMessage(DhcpStateMachine.CMD_POST_DHCP_ACTION, DhcpStateMachine.DHCP_SUCCESS, 0, new DhcpResults(mDhcpLease)); } @@ -752,22 +754,33 @@ public class DhcpClient extends BaseDhcpStateMachine { } } - class DhcpBoundState extends LoggingState { + class DhcpHaveAddressState extends LoggingState { @Override public void enter() { super.enter(); - if (setIpAddress(mDhcpLease.ipAddress)) { - notifyLease(); - // TODO: DhcpStateMachine only supports renewing at 50% of the lease time, - // and does not support rebinding. Fix this. - scheduleRenew(); - } else { + if (!setIpAddress(mDhcpLease.ipAddress)) { notifyFailure(); transitionTo(mStoppedState); } } @Override + public void exit() { + setIpAddress(new LinkAddress("0.0.0.0/0")); + } + } + + class DhcpBoundState extends LoggingState { + @Override + public void enter() { + super.enter(); + notifySuccess(); + // TODO: DhcpStateMachine only supports renewing at 50% of the lease time, and does not + // support rebinding. Fix this. + scheduleRenew(); + } + + @Override public boolean processMessage(Message message) { super.processMessage(message); switch (message.what) { |