History log of /frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
764342352153f3d3834eefdf05337ba744211a6d 07-Jul-2016 Hugo Benichi <hugobenichi@google.com> IpConn metrics: add times to DHCP bound state

This patch adds DhcpClientEvent logging for:
- time from init state to bound state
- time from bound state to bound state when renewing

Example:
ConnectivityMetricsEvent(12:04:33.353, 0, 0): DhcpClientEvent(wlan0, WaitBeforeStartState, 94ms)
ConnectivityMetricsEvent(12:04:35.772, 0, 0): DhcpClientEvent(wlan0, DhcpInitState, 2417ms)
ConnectivityMetricsEvent(12:04:35.787, 0, 0): DhcpClientEvent(wlan0, DhcpRequestingState, 15ms)
ConnectivityMetricsEvent(12:04:35.793, 0, 0): DhcpClientEvent(wlan0, ConfiguringInterfaceState, 6ms)
ConnectivityMetricsEvent(12:04:35.811, 0, 0): DhcpClientEvent(wlan0, InitialBoundState, 2457ms)
ConnectivityMetricsEvent(12:05:35.791, 0, 0): DhcpClientEvent(wlan0, DhcpBoundState, 59998ms)
ConnectivityMetricsEvent(12:05:35.988, 0, 0): DhcpClientEvent(wlan0, WaitBeforeRenewalState, 196ms)
ConnectivityMetricsEvent(12:05:36.003, 0, 0): DhcpClientEvent(wlan0, DhcpRenewingState, 15ms)
ConnectivityMetricsEvent(12:05:36.010, 0, 0): DhcpClientEvent(wlan0, RenewingBoundState, 219ms)

Change-Id: I2540dd102a6509dff55936e38015265659b20760
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
176ed01a1fdcca5734dcc1e11fc37a2f7363f5f8 01-Jul-2016 Hugo Benichi <hugobenichi@google.com> IpConn metrics: add dhcp transition times

This patch adds lifetime durations of DhcpClient states to
DhcpClientEvents.

To record the duration of a state, the event is now recorded when the
DhcpClient state machine exits that state.

In addition this patch removes event logging of StoppedState,
DhcpState and DhcpHaveLeaseState.

Change-Id: Ibd37b5e3070f35113b6b45942b1e1ff19c27a90b
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
cfddd6879283860bb4d2cf2972ea086f585a37ec 31-May-2016 Hugo Benichi <hugobenichi@google.com> Refactor IP connectivity event logging

This patch removes static methods for logging IP connectivity events
defined in android.net.metrics and replaces them with a single log()
instance method defined on IpConnectivityLog. Event constructors are
now public also. Every classes logging such events now create an
instance of IpConnectivityLog for logging event objects directly
instantiated with new.

Removing static dependencies allow straightforward testing of logging.

This patch also removes the base IpConnectivityEvent class which is not
needed any more.

Bug: 29035129
Change-Id: I3de700f93f46deaa48a759f938f7d00e1d8bff98
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
e67ec4eb01eb37fa886776dcd77eb066e1241004 27-May-2016 Lorenzo Colitti <lorenzo@google.com> Restore DHCP client logging.

Bug: 28955598
Change-Id: I2e2684a787061612471830e4d840ce422091bafb
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
d8e1592e641f71cb3bfbc267442cfb9c4cc48625 26-Apr-2016 Erik Kline <ek@google.com> Support DHCPv4 rebinding state

Bug: 24837343
Change-Id: Id49e1c12ec3b11fedba42bb28348a00cb0b11169
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
acda32c35fc6a30ce11abfddb26ec5052de063f4 13-May-2016 Erik Kline <ek@google.com> DHCPv4: lease expiration is fatal, renew failures are not

Bug: 24837343

Change-Id: Ib330864f8376b0907390d581b48cff5446b3392b
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
adacedb1a8b10e0e29c7c223251069c8e6ef564e 28-Apr-2016 Lorenzo Colitti <lorenzo@google.com> 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
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
9c51583dafdbfeb7e005e12dd646e4395cf7a537 27-Apr-2016 Erik Kline <ek@google.com> Merge "IpManager: add a provisioning timeout option" into nyc-dev
741b15dc759e8ffc1f9e1f9f120c72c25ce021e5 26-Apr-2016 Erik Kline <ek@google.com> IpManager: add a provisioning timeout option

Relatedly: remove the provisioning timeout from DhcpClient.

Bug: 17733693
Bug: 24837343
Change-Id: I6d5b835b4ca70ba6fd06df359fc2128a0df46252
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
24b6e2bcc88ed6e142eae8ebd11cb90a70da588f 27-Apr-2016 TreeHugger Robot <treehugger-gerrit@google.com> Merge changes I8de95add,Ia6f4ccfd into nyc-dev

* changes:
Remove unused event tags of IpConnectivityEvent
Better ConnectivityMetricsEvent printing
5df9d729f6c78215f287701d7e136dfc922e2bd3 25-Apr-2016 Hugo Benichi <hugobenichi@google.com> Better ConnectivityMetricsEvent printing

This patch adds more information printing for IpConnectivity event
classes in android.net.metrics.

example:

ConnectivityMetricsEvent(14:36:35.799, 0, 1026): DhcpClientEvent(wlan0, DhcpRequestingState)
ConnectivityMetricsEvent(14:36:35.805, 0, 1026): DhcpClientEvent(wlan0, DhcpHaveAddressState)
ConnectivityMetricsEvent(14:36:35.809, 0, 4096): IpManagerEvent(wlan0, PROVISIONING_OK, 155ms)
ConnectivityMetricsEvent(14:36:35.810, 0, 1026): DhcpClientEvent(wlan0, DhcpBoundState)
ConnectivityMetricsEvent(14:36:35.871, 0, 2048): NetworkEvent(101, NETWORK_CONNECTED, 0ms)
ConnectivityMetricsEvent(14:36:35.874, 0, 2051): ValidationProbeEvent(101, PROBE_HTTP:599, 3ms)
ConnectivityMetricsEvent(14:36:35.874, 0, 2048): NetworkEvent(101, NETWORK_VALIDATION_FAILED, 0ms)
ConnectivityMetricsEvent(14:36:35.928, 0, 3072): DefaultNetworkEvent(0 -> 101, [WIFI], IPv4: false, IPv6: false)
ConnectivityMetricsEvent(14:36:37.008, 0, 2051): ValidationProbeEvent(101, PROBE_HTTP:204, 134ms)
ConnectivityMetricsEvent(14:36:37.008, 0, 2050): NetworkEvent(101, NETWORK_VALIDATED, 1137ms)

Also fixes a couple of event logging issues:
- do no record spurious receive DhcpErrorEvent when a network goes down.
- add an eventType field to IpManagerEvent instead of using the
loggger component tag.

Bug: 28204408
Change-Id: Ia6f4ccfd7a0c63a5ccec18825f226c0b5781217b
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
5b76623a0e3fdaa792967375bb4e1e143de1ff03 06-Apr-2016 Erik Kline <ek@google.com> Move IPv4 address setting to IpManager

Bug: 24837343
Bug: 27605330
Change-Id: I19ac80e45b3e9200f81d1166ac6094fd19aee963
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
c2827857aa99504903d65e9a750fb61f756101de 17-Apr-2016 Erik Kline <ek@google.com> IpManager,DhcpClient: catch some errors and better logging

Bug: 28196843
Change-Id: Ia91e926da569bf9c503ea00e1e0f767d196547da
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
2677b1957b444e2dae5737feee989109b811547c 18-Apr-2016 Hugo Benichi <hugobenichi@google.com> Fix spurious DHCP parse error logging.

This patch moves the event logging of DHCP response packet parse errors
to DHCPClient in a single place. It also logs receive IO errors as
DHCPErrors instead of DHCPClientEvents.

BUG=28197345

Change-Id: I7ad666cff4d8b97915880477347fbb3f588fdb2a
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
67530d6585b9e0d6c63d09cc23e8061b234fef98 13-Apr-2016 Hugo Benichi <hugobenichi@google.com> Add volatile qualifier to boolean variable

DHCP receive thread was spinning on a boolean variable to know when to
stop. That variable had no volatile qualifier, potentially preventing
the thread from stopping at all. Without a volatile qualifier, the reads
and writes in halt() could be reordered in such a way that the running
thread is interrupted before mStopped is set t true. Also, the optimizer
could decide to hoist mStopped in a register inside the running thread,
preventing the loop from exiting.

Change-Id: I5b30c1247808114f0e5b46e230978ee7ea18ab8e
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
a5265e47d8c56042d53abd95c4044babbd36e693 25-Mar-2016 Erik Kline <ek@google.com> Merge "Request vendor info option (43) to get metered hint" into nyc-dev
55618be44c5d2a7db3cf23881cace15108f07557 19-Feb-2016 Pierre Imai <imaipi@google.com> Add initial connectivity metrics handling.

Adds initial support for IP connectivity metrics collection (DHCP
client, IP reachability monitor, network monitor, connectivity
service).

Change-Id: If9a0455f2a34aa9abea90f9c1b38e4d895dc1a72
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
1d511ab13d7cf01b84f68bd8b858919320d78ad3 24-Mar-2016 Erik Kline <ek@google.com> Request vendor info option (43) to get metered hint

Bug: 26241591
Change-Id: I688029826a79f9cbf0116fb197f82026980788af
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
f188d41fa2876a4c77586656bce06cac10d08942 02-Feb-2016 Joe Onorato <joeo@google.com> Turn down the logging a little bit and don't do a log wrapper function.

Change-Id: I109f04c2c2299f26e21b076df3a935ce2d356bdf
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
a2a9ab947f248f35bafb9dd74b46016c3aa31820 19-Feb-2016 Lorenzo Colitti <lorenzo@google.com> Add a MessageUtils class to convert int constants to strings.
am: d2457a3ee3

* commit 'd2457a3ee39ea55ed8e302bd93feede793cb5055':
Add a MessageUtils class to convert int constants to strings.
d2457a3ee39ea55ed8e302bd93feede793cb5055 17-Feb-2016 Lorenzo Colitti <lorenzo@google.com> Add a MessageUtils class to convert int constants to strings.

This class uses reflection to find accessible static integer
members in a specified list of classes and returns a SparseArray
mapping the integers to their names. This will allow us to
replace various 400-line switch statements with a simple
array access.

Change-Id: I3607e6389a423cde0bd83270c00b3c863ae1bb29
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
7651b21fe94dc081276a7bbff72f8c37a70f1b94 18-Feb-2016 Erik Kline <ek@google.com> {,Base}DhcpStateMachine is no more
am: efa4209fe0

* commit 'efa4209fe022d007f48edc3c4feaef00a9865cb5':
{,Base}DhcpStateMachine is no more
efa4209fe022d007f48edc3c4feaef00a9865cb5 17-Feb-2016 Erik Kline <ek@google.com> {,Base}DhcpStateMachine is no more

Bug: 26991160
Change-Id: I21f8c30627bf2a7fbcd5b4d5f1f1ad1a2dda759b
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
907b255ebfb8dd9cfb6c1960a7f3b20598f26d34 17-Feb-2016 Erik Kline <ek@google.com> Remove references to BaseDhcpStateMachine and DhcpStateMachine
am: 29a215268d

* commit '29a215268dfa18f5023dc3c06b33db68e91ae316':
Remove references to BaseDhcpStateMachine and DhcpStateMachine
29a215268dfa18f5023dc3c06b33db68e91ae316 17-Feb-2016 Erik Kline <ek@google.com> Remove references to BaseDhcpStateMachine and DhcpStateMachine

Bug: 26991160
Change-Id: I3742780a4e5121c163d9d1380951e25edaba19f3
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
09bf13574e8bb2a5737553d316dba7ca879a35cf 11-Feb-2016 Erik Kline <ek@google.com> Duplicate DhcpStateMachine public constants into DhcpClient

This is so we can ultimately delete DhcpStateMachine altogether.

Bug: 24837343
Bug: 26991160
Change-Id: If116639e5f72c97cfc67f748dc5f6433dccd9cf0
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
3b74289fdfb0ca2d3078a52b9385127dec93fdf9 11-Feb-2016 Erik Kline <ek@google.com> Duplicate DhcpStateMachine public constants into DhcpClient

This is so we can ultimately delete DhcpStateMachine altogether.

Bug: 24837343
Bug: 26991160
Change-Id: If116639e5f72c97cfc67f748dc5f6433dccd9cf0
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
bda01cc5e37c7199d16825f3ac0b534e87a27aa0 09-Dec-2015 Lorenzo Colitti <lorenzo@google.com> Fix canceling renew alarms.

1. Entering DhcpBoundState cancels the renew alarm, but at that
point the renew alarm is guaranteed not to have been scheduled.
This is harmless, but results in an "unknown listener" message
in the AlarmManager logs.
2. We don't cancel the renew alarm when exiting DhcpBoundState.
This is also harmless, because that alarm does nothing except
in DhcpBoundState, and we cancel it whenever we enter
DhcpBoundState. But canceling it on exit is more correct.

Change-Id: I60dfcf00f243253b81b8906540e0a6218a7a489c
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
9d3aadb24778cc36a350a04b088d2ed7ee3790e1 02-Dec-2015 Lorenzo Colitti <lorenzo@google.com> Add a new WakeupMessage class and use it in two places.

This is useful when using the new AlarmManager direct callback
interface to wake up the system and request that an object whose
API consists of messages (such as a StateMachine) perform some
action.

In this situation, using AlarmManager.onAlarmListener by itself
will wake up the system to send the message, but does not
guarantee that the system will be awake until the target object
has processed it. This is because as soon as the onAlarmListener
sends the message and returns, the system is free to go to sleep
again.

Bug: 20157436
Bug: 25823676
Change-Id: Idff20029d287f26347441a2523b7fb20eda6a8b0
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
831204c651b43631d6dc1d7168863eb7cfa71683 22-Nov-2015 Lorenzo Colitti <lorenzo@google.com> Switch the DHCP client to the new AlarmManager callback interface

Bug: 24224067
Bug: 25823676
Change-Id: I456984a2f6243f92edb63b8599d861627e2de1cf
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
e5f11cd6cc11efed1f33e47252e737b459ea33ce 22-Nov-2015 Lorenzo Colitti <lorenzo@google.com> Refactor alarm setting code in preparation for switch to callback

Bug: 25823676
Change-Id: Id4d1031b5bd3a7f041c32ad4ac9384e045b385e8
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
7611f1cdb4ef3bedc1cf1ce59ad3671f4c454549 29-Oct-2015 Lorenzo Colitti <lorenzo@google.com> Don't crash if a DHCP server doesn't send the server ID option.

This violates a MUST in RFC2131, but apparently some
implementations don't know or care.

Bug: 25343517
Change-Id: I80459b58ffe231e7ed64e77bafa157a96b745149
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
4e4d59eeef86fa8560d35c00168869b0a066f962 10-Sep-2015 Lorenzo Colitti <lorenzo@google.com> Connect the DHCP UDP socket to the server.

This makes it so that the socket cannot receive datagrams from
anybody except the DHCP server. This does not improve security,
because we never read from the UDP socket anyway, but it does
make ListeningPortsTest pass.

Bug: 23906864
Bug: 23933386
Change-Id: Ib090273a417f7eb2ac1ee3309260249b72fb8345
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
496906ee7008b72619f230c65f103533d4d2d68a 16-Sep-2015 Erik Kline <ek@google.com> Improve logging of DHCP parse errors using exceptions.

Bug: 23975855
Change-Id: I62464b92f0bb568e57bf5e1a63bc75f22c75aac1
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
9795a1d8b9094bd571f653b8de0c531d4466fe46 24-Sep-2015 Lorenzo Colitti <lorenzo@google.com> Give the DhcpClient alarm broadcasts foreground priority.

Bug: 24265658
Bug: 24224067
Change-Id: I375097e7957643efb4bc0bb81318b13d9b9c82c1
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
31e19f34f56a01a7b4133cd1dccf13b18b469ac7 11-Aug-2015 Lorenzo Colitti <lorenzo@google.com> Don't attempt to stop the receive thread if we never started it.

If socket initialization fails, DhcpState#exit will call
mReceiveThread#stop and crash the system with an NPE. Make sure
we don't do that if mReceiveThread is null, and properly null it
out when exiting.

Bug: 23088314
Change-Id: I4378d8280f9d8588f5eaa8bd7ade61beab1c3ce2
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
5bc64b847ac7490a93caf6b032b849aa75298db4 04-Jun-2015 Lorenzo Colitti <lorenzo@google.com> Correctly time out CMD_START_DHCP.

WifiStateMachine expects CMD_START_DHCP to time out after 30-40
seconds. Currently, DhcpClient imposes timeouts on DhcpInitState
and on DhcpRequestState, but not on the time it takes to get to
from CMD_START_DHCP to DhcpBoundState. So in theory the client
could oscillate between DhcpInitState and DhcpRequestState and
never time out.

Fix this by introducing a new oneshot timer that is set when DHCP
starts and is cancelled when it succeeds. CMD_RENEW_DHCP does not
need this because it's implemented using only one state, so the
oneshot timeout can be implemented using the state timeout.

Bug: 19704592
Change-Id: I6a5847a3dee23a2692237b8f3b3b0f8049da5140
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
be843e8394cd4dee631d4558524241870f577fce 04-Jun-2015 Lorenzo Colitti <lorenzo@google.com> Actually close sockets when stopping the receive thread.

Contrary to the expectations of the code, IoUtils.closeQuietly()
does not unblock system calls. So mReceiveThread.halt() was not
actually stopping the receive thread.

This wasn't actually a problem, because after "stopping" the
receive thread, either the interface would go down (interrupting
the previous receive thread with ENETDOWN), or a packet would
arrive to both the old and new receive threads, stopping the
old one. But the lack of a "stopping receive thread" message at
the expected time was confusing.

While I'm at it, also add the string for CMD_TIMEOUT.

Bug: 19704592
Change-Id: I74732429118af780453028898148519b294fa9d3
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
3a40b0deabe95b74d7eb3d4afbef09c34012a660 03-Jun-2015 Lorenzo Colitti <lorenzo@google.com> Make RenewingState time out as well.

Bug: 19704592
Change-Id: I0759a98911a8c0059936916db8db459b7d66bc00
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
48f9c731ff7d44e5c13e2a5574d56207694d8946 02-Jun-2015 Lorenzo Colitti <lorenzo@google.com> Remove the IPv4 address from the interface when DHCP fails.

Bug: 19704592
Change-Id: I9b96cdcfc7c9442b3f8d6797aca63559ed4bdb9b
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
8f602cdd38f7345eb0a8ec34ae4e51a333edce6c 02-Jun-2015 Lorenzo Colitti <lorenzo@google.com> Merge "Fix DHCP lease time parsing." into mnc-dev
d59aa84fdaea9647f7de82c3b85afc92a3fdfee1 02-Jun-2015 Erik Kline <ek@google.com> pass a defensive copy of DhcpResults

Also: correct state transition handling in DhcpBoundState#enter().

Bug: 20451261
Change-Id: I3be50f6b1b3fae179d6fff7ca8ae1d687caa3221
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
d973537ee1bd013b4233d3369d66821e124a2e65 02-Jun-2015 Lorenzo Colitti <lorenzo@google.com> Fix DHCP lease time parsing.

Currently we treat a lease time larger than 2**31-1 as a negative
value, which causes DhcpClient to attempt to renew its IP address
constantly. Fix this by properly handling large and infinite
lifetimes, and while we're at it, impose a minimum lease time of
60 seconds.

Bug: 21352084
Change-Id: If62c9efeffad6222e2fe0c110f77d0e4c70de96d
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
82babcd83a568f9e938bf8b6b3b86b65e8b30e1f 26-May-2015 Lorenzo Colitti <lorenzo@google.com> Specify more information in DhcpClient PendingIntents.

- Specify the package name. This provides a bit of security, but
not much since the package is "android".
- Specify the interface name so we can run more than one client
at a time.

Bug: 21395858
Bug: 19704592
Change-Id: I91c9ea15285b36628b6aef0b975c16a0b08d061e
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
644f41368f9eddd475fa9c5dddc7ceac5722a3a8 24-Apr-2015 Etan Cohen <etancohen@google.com> Merge commit '4cb5d80' into merge2
a94929ba9dc31d5e8dd797c9b48cb830b9276485 22-Apr-2015 Lorenzo Colitti <lorenzo@google.com> Log DHCP replies that we can't parse.

Bug: 19704592
Bug: 20335221
Change-Id: I73def02a08345bd96f45cb970f9f251e6d5df2db
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
3e979321a5d96b9e2688f67ef0f936602c0f7e5a 21-Apr-2015 Lorenzo Colitti <lorenzo@google.com> Set the secs field in the BOOTP header.

We mostly follow RFC 2131, which says that secs is the number of
seconds "since client began address acquisition or renewal
process", and thus set secs to zero on renew. This is different
from our current behaviour, which keeps on counting without
resetting secs to zero on renew.

Bug: 19704592
Change-Id: Ifbb7644094c579be626ffb698eee87047425dbf0
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
f5c17221d4ffc0d93063913aba37eaa1ee6f37a6 31-Mar-2015 Lorenzo Colitti <lorenzo@google.com> Don't log errors if the receive thread is stopped.

Change-Id: I75ddc9b68f0a61a9a7a78026ed97a8a7c5109cc3
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java
a071edce46fa3d8d539c0d807b77147e184e5a51 09-Mar-2015 Lorenzo Colitti <lorenzo@google.com> DHCP: Add a Java DHCP client.

The behaviour of the client is intended to mirror the behaviour
of the current DhcpStateMachine + dhcpcd combination, except it
does not store leases across network changes.

Bug: 19704592
Change-Id: I110b58003da2d8293059d48a0181e16f7f7f145c
/frameworks/base/services/net/java/android/net/dhcp/DhcpClient.java