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