shill: DHCPConfig: Enable and accept "GATEWAY-ARP" messages

Speed up the authentication process by enabling dhcpcd to probe
for the default gateway.  This provides a quick means for
verifying that we are on the same network as before.  When this
succeeds, re-configure using our saved lease parameters, but
continue our timeout so that a failed DHCP renew will cause the
network to enter the failed state.

A side effect of this change is that we don't ask dhcpcd to
release our lease on disconnect.  This is not as big a change
as one might think -- in many cases were are already disconnected
from the network by the time this code hits, which means we were
just removing our own memory of the lease instead of actually
freeing the remote resource.

BUG=chromium-os:25717
TEST=Unit tests; manual: switch between two known networks
Change-Id: Ib219033e688aa8c31eb86b45e9dd27a607bb93c9
Reviewed-on: https://gerrit.chromium.org/gerrit/23906
Commit-Ready: Paul Stewart <pstew@chromium.org>
Reviewed-by: Paul Stewart <pstew@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
diff --git a/dhcp_config.h b/dhcp_config.h
index c850a9f..65e1432 100644
--- a/dhcp_config.h
+++ b/dhcp_config.h
@@ -77,6 +77,7 @@
   FRIEND_TEST(DHCPConfigTest, ProcessEventSignalSuccess);
   FRIEND_TEST(DHCPConfigTest, ProcessEventSignalUnknown);
   FRIEND_TEST(DHCPConfigTest, ReleaseIP);
+  FRIEND_TEST(DHCPConfigTest, ReleaseIPArpGW);
   FRIEND_TEST(DHCPConfigTest, RenewIP);
   FRIEND_TEST(DHCPConfigTest, RequestIP);
   FRIEND_TEST(DHCPConfigTest, RequestIPTimeout);
@@ -110,6 +111,7 @@
   static const char kDHCPCDUser[];
 
   static const char kReasonBound[];
+  static const char kReasonGatewayArp[];
   static const char kReasonFail[];
   static const char kReasonRebind[];
   static const char kReasonReboot[];