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()