shill: Cellular connections shouldn't use ARP gateway.

This CL adds an additional per-device-technology check to specify
whether or not an ARP gateway should be used when dhcp gets configured.
By default, all devices return |false| while WiFi returns |true|.

BUG=chrome-os-partner:16143
TEST=unit tests

Change-Id: Ia208d38a265702bbcbd1f7d0becfbc248d509ac8
Reviewed-on: https://gerrit.chromium.org/gerrit/38948
Tested-by: Arman Uguray <armansito@chromium.org>
Commit-Ready: Arman Uguray <armansito@chromium.org>
Reviewed-by: Ben Chan <benchan@chromium.org>
diff --git a/device.cc b/device.cc
index 9ad0b32..73c0ffd 100644
--- a/device.cc
+++ b/device.cc
@@ -359,6 +359,10 @@
   DestroyConnection();
 }
 
+bool Device::ShouldUseArpGateway() const {
+  return false;
+}
+
 bool Device::AcquireIPConfig() {
   return AcquireIPConfigWithLeaseName(string());
 }
@@ -366,10 +370,11 @@
 bool Device::AcquireIPConfigWithLeaseName(const string &lease_name) {
   DestroyIPConfig();
   EnableIPv6();
+  bool arp_gateway = manager_->GetArpGateway() && ShouldUseArpGateway();
   ipconfig_ = dhcp_provider_->CreateConfig(link_name_,
                                            manager_->GetHostName(),
                                            lease_name,
-                                           manager_->GetArpGateway());
+                                           arp_gateway);
   ipconfig_->RegisterUpdateCallback(Bind(&Device::OnIPConfigUpdated,
                                          weak_ptr_factory_.GetWeakPtr()));
   dispatcher_->PostTask(Bind(&Device::ConfigureStaticIPTask,