Implement delete all interface.
deletes all the ipaddress object on the interface.
Resolves openbmc/openbmc#2141
Change-Id: I6f045758ff29080cb4a4dec9e8b0d23d932c55b6
Signed-off-by: Ratan Gupta <ratagupt@in.ibm.com>
diff --git a/ethernet_interface.cpp b/ethernet_interface.cpp
index a9463c9..c3bac59 100644
--- a/ethernet_interface.cpp
+++ b/ethernet_interface.cpp
@@ -249,18 +249,8 @@
manager.writeToConfigurationFile();
}
-void EthernetInterface::deleteVLANObject(const std::string& interface)
+void EthernetInterface::deleteVLANFromSystem(const std::string& interface)
{
- using namespace std::string_literals;
-
- auto it = vlanInterfaces.find(interface);
- if (it == vlanInterfaces.end())
- {
- log<level::ERR>("DeleteVLANObject:Unable to find the object",
- entry("INTERFACE=%s",interface.c_str()));
- return;
- }
-
auto confDir = manager.getConfDir();
fs::path networkFile = confDir;
networkFile /= systemd::config::networkFilePrefix + interface +
@@ -280,8 +270,6 @@
{
fs::remove(deviceFile);
}
- // delete the interface
- vlanInterfaces.erase(it);
// TODO systemd doesn't delete the virtual network interface
// even after deleting all the related configuartion.
@@ -295,6 +283,22 @@
commit<InternalFailure>();
}
+}
+
+void EthernetInterface::deleteVLANObject(const std::string& interface)
+{
+ auto it = vlanInterfaces.find(interface);
+ if (it == vlanInterfaces.end())
+ {
+ log<level::ERR>("DeleteVLANObject:Unable to find the object",
+ entry("INTERFACE=%s",interface.c_str()));
+ return;
+ }
+
+ deleteVLANFromSystem(interface);
+ // delete the interface
+ vlanInterfaces.erase(it);
+
manager.writeToConfigurationFile();
}
@@ -579,5 +583,19 @@
}
+void EthernetInterface::deleteAll()
+{
+ if(EthernetInterfaceIntf::dHCPEnabled())
+ {
+ log<level::INFO>("DHCP enabled on the interface"),
+ entry("INTERFACE=%s", interfaceName().c_str());
+
+ }
+
+ // clear all the ip on the interface
+ addrs.clear();
+ manager.writeToConfigurationFile();
+}
+
}//namespace network
}//namespace phosphor
diff --git a/ethernet_interface.hpp b/ethernet_interface.hpp
index 3a746d2..06a2e5f 100644
--- a/ethernet_interface.hpp
+++ b/ethernet_interface.hpp
@@ -6,6 +6,7 @@
#include "xyz/openbmc_project/Network/EthernetInterface/server.hpp"
#include "xyz/openbmc_project/Network/MACAddress/server.hpp"
#include "xyz/openbmc_project/Network/IP/Create/server.hpp"
+#include "xyz/openbmc_project/Collection/DeleteAll/server.hpp"
#include <sdbusplus/bus.hpp>
#include <sdbusplus/server/object.hpp>
@@ -21,7 +22,8 @@
sdbusplus::server::object::object<
sdbusplus::xyz::openbmc_project::Network::server::EthernetInterface,
sdbusplus::xyz::openbmc_project::Network::server::MACAddress,
- sdbusplus::xyz::openbmc_project::Network::IP::server::Create>;
+ sdbusplus::xyz::openbmc_project::Network::IP::server::Create,
+ sdbusplus::xyz::openbmc_project::Collection::server::DeleteAll>;
using IP = sdbusplus::xyz::openbmc_project::Network::server::IP;
@@ -136,18 +138,25 @@
*/
void writeConfigurationFile();
+ /** @brief delete all dbus objects.
+ */
+ void deleteAll();
+
using EthernetInterfaceIntf::dHCPEnabled;
using EthernetInterfaceIntf::interfaceName;
using MacAddressIntf::mACAddress;
protected:
-
/** @brief get the info of the ethernet interface.
* @return tuple having the link speed,autonegotiation,duplexmode .
*/
-
InterfaceInfo getInterfaceInfo() const;
+ /* @brief delete the vlan interface from system.
+ * @param[in] interface - vlan Interface.
+ */
+ void deleteVLANFromSystem(const std::string& interface);
+
/** @brief get the mac address of the interface.
* @param[in] interfaceName - Network interface name.
* @return macaddress on success