shill: Allow service override of DHCP-derived IP parameters

Create new class StaticIPParameters which encapsulates all of the
property handling for RPC and storage, as well as applying parameters
to an IPConfig::Properties element.  When a DHCP request succeeds
these parameters are used to selectively override values gained from
DHCP with those specified on the service.

BUG=chromium-os:23930
TEST=New unit tests -- manual testing is pending

Change-Id: I3b784f897ec6ffe0c78f2efe615d07d8f8924add
Reviewed-on: https://gerrit.chromium.org/gerrit/21448
Commit-Ready: Paul Stewart <pstew@chromium.org>
Reviewed-by: Paul Stewart <pstew@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
diff --git a/rtnl_handler.cc b/rtnl_handler.cc
index d166b07..af8c8ac 100644
--- a/rtnl_handler.cc
+++ b/rtnl_handler.cc
@@ -281,9 +281,9 @@
                                  RTNLMessage::Mode mode,
                                  int flags,
                                  const IPAddress &local,
-                                 const IPAddress &gateway,
+                                 const IPAddress &broadcast,
                                  const IPAddress &peer) {
-  CHECK(local.family() == gateway.family());
+  CHECK(local.family() == broadcast.family());
   CHECK(local.family() == peer.family());
 
   RTNLMessage msg(
@@ -301,8 +301,8 @@
       0));
 
   msg.SetAttribute(IFA_LOCAL, local.address());
-  if (!gateway.IsDefault()) {
-    msg.SetAttribute(IFA_BROADCAST, gateway.address());
+  if (!broadcast.IsDefault()) {
+    msg.SetAttribute(IFA_BROADCAST, broadcast.address());
   }
   if (!peer.IsDefault()) {
     msg.SetAttribute(IFA_ADDRESS, peer.address());