Refresh the interface objects if DHCP mode changes

Create the ipaddress objects for the ethernet interface
whose DHCP is enabled.

Resolves openbmc/openbmc#1295

Change-Id: Id5ad35f1d51f2bf80c4e2b573e7bd38489370411
Signed-off-by: Ratan Gupta <ratagupt@in.ibm.com>
diff --git a/ethernet_interface.cpp b/ethernet_interface.cpp
index 1f36815..f29c482 100644
--- a/ethernet_interface.cpp
+++ b/ethernet_interface.cpp
@@ -43,14 +43,17 @@
     interfaceName(intfName);
     dHCPEnabled(dhcpEnabled);
     mACAddress(getMACAddress());
+    createIPAddressObjects();
     // Emit deferred signal.
     this->emit_object_added();
 }
 
-void EthernetInterface::setAddressList(const AddrList& addrs)
+void EthernetInterface::createIPAddressObjects()
 {
     std::string gateway;
+    addrs.clear();
 
+    auto addrs = getInterfaceAddrs()[interfaceName()];
     IP::Protocol addressType = IP::Protocol::IPv4;
     IP::AddressOrigin origin = IP::AddressOrigin::Static;
     route::Table routingTable;
@@ -276,5 +279,16 @@
     return objectPath.string();
 }
 
+bool EthernetInterface::dHCPEnabled(bool value)
+{
+    EthernetInterfaceIntf::dHCPEnabled(value);
+    if (value == true)
+    {
+        manager.writeToConfigurationFile();
+        createIPAddressObjects();
+    }
+    return value;
+}
+
 }//namespace network
 }//namespace phosphor
diff --git a/ethernet_interface.hpp b/ethernet_interface.hpp
index 313a0b9..805c2ac 100644
--- a/ethernet_interface.hpp
+++ b/ethernet_interface.hpp
@@ -23,6 +23,10 @@
         sdbusplus::xyz::openbmc_project::Network::IP::server::Create>;
 
 using IP = sdbusplus::xyz::openbmc_project::Network::server::IP;
+
+using EthernetInterfaceIntf =
+    sdbusplus::xyz::openbmc_project::Network::server::EthernetInterface;
+
 class Manager; // forward declaration of network manager.
 
 class TestEthernetInterface;
@@ -76,17 +80,22 @@
          */
         void deleteObject(const std::string& ipaddress);
 
-        /* @brief creates the dbus object given in the address list.
+        /* @brief creates the dbus object(IPaddres) given in the address list.
          * @param[in] addrs - address list for which dbus objects needs
          *                    to create.
          */
-        void setAddressList(const AddrList& addrs);
+        void createIPAddressObjects();
 
         /* @brief Gets all the ip addresses.
          * @returns the list of ipaddress.
          */
         const AddressMap& getAddresses() const { return addrs; }
 
+        /** Set value of DHCPEnabled */
+        bool dHCPEnabled(bool value) override;
+
+        using EthernetInterfaceIntf::dHCPEnabled;
+
     private:
 
         /** @brief get the info of the ethernet interface.
diff --git a/network_manager.cpp b/network_manager.cpp
index e1bfa41..0607b0e 100644
--- a/network_manager.cpp
+++ b/network_manager.cpp
@@ -63,8 +63,8 @@
                                       dhcp,
                                       *this)));
 
-        interfaces[intfInfo.first]->setAddressList(intfInfo.second);
     }
+
 }
 
 void Manager::createChildObjects()