shill (wifi): drive dhcp from supplicant events, rather than RTNL
To avoid race conditions start DHCP based on supplicant events,
rather than RTNL. The previous method had four significant issues:
- unexpected service state changes. e.g.
Associating -> Configuring -> Associating -> Configuring
- loss of DHCP requests if RTNL link event fired, and DHCP request
went out, before supplicant completed 802.11 negotiation
- service stuck in configuring state if supplicant state change
notification is received after DHCP negotiation completes
(while the DHCP negotiation can't happen before the 802.11
negotiation completes, it may have been possible for the
notifications to arrive out-of-order)
- service stuck in configuring state after WPA re-auth
BUG=chromium-os:22831, chromium-os:24247
TEST=WiFiRoaming, new unit tests
Change-Id: I27698629cfb60d4e3e2b067e8f76ac6a9641206a
Reviewed-on: https://gerrit.chromium.org/gerrit/14853
Tested-by: mukesh agrawal <quiche@chromium.org>
Reviewed-by: Gary Morain <gmorain@chromium.org>
Reviewed-by: mukesh agrawal <quiche@chromium.org>
Commit-Ready: mukesh agrawal <quiche@chromium.org>
3 files changed