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
