diff --git a/Makefile.am b/Makefile.am
index 4c7ab37..8135e16 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -20,7 +20,8 @@
 		routing_table.hpp \
 		config_parser.hpp \
 		system_configuration.hpp \
-		dhcp_configuration.hpp
+		dhcp_configuration.hpp \
+        vlan_interface.hpp
 
 phosphor_network_manager_SOURCES = \
 		ethernet_interface.cpp \
@@ -34,7 +35,8 @@
 		util.cpp \
 		routing_table.cpp \
 		config_parser.cpp \
-		dhcp_configuration.cpp
+		dhcp_configuration.cpp \
+        vlan_interface.cpp
 
 CLEANFILES = \
 		xyz/openbmc_project/Network/VLAN/Create/server.cpp \
diff --git a/ethernet_interface.cpp b/ethernet_interface.cpp
index 14ccc6c..d7648a2 100644
--- a/ethernet_interface.cpp
+++ b/ethernet_interface.cpp
@@ -33,7 +33,8 @@
 EthernetInterface::EthernetInterface(sdbusplus::bus::bus& bus,
                                      const std::string& objPath,
                                      bool dhcpEnabled,
-                                     Manager& parent) :
+                                     Manager& parent,
+                                     bool emitSignal) :
                                      Ifaces(bus, objPath.c_str(), true),
                                      bus(bus),
                                      manager(parent),
@@ -45,7 +46,10 @@
     mACAddress(getMACAddress());
     createIPAddressObjects();
     // Emit deferred signal.
-    this->emit_object_added();
+    if (emitSignal)
+    {
+        this->emit_object_added();
+    }
 }
 
 void EthernetInterface::createIPAddressObjects()
diff --git a/ethernet_interface.hpp b/ethernet_interface.hpp
index 88200f8..88cbf1e 100644
--- a/ethernet_interface.hpp
+++ b/ethernet_interface.hpp
@@ -59,11 +59,14 @@
          *  @param[in] objPath - Path to attach at.
          *  @param[in] dhcpEnabled - is dhcp enabled(true/false).
          *  @param[in] parent - parent object.
+         *  @param[in] emitSignal - true if the object added signal needs to be
+         *                          send.
          */
         EthernetInterface(sdbusplus::bus::bus& bus,
                           const std::string& objPath,
                           bool dhcpEnabled,
-                          Manager& parent);
+                          Manager& parent,
+                          bool emitSignal = true);
 
         /** @brief Function to create ipaddress dbus object.
          *  @param[in] addressType - Type of ip address.
@@ -98,7 +101,7 @@
 
         using EthernetInterfaceIntf::dHCPEnabled;
 
-    private:
+    protected:
 
         /** @brief get the info of the ethernet interface.
          *  @return tuple having the link speed,autonegotiation,duplexmode .
diff --git a/test/Makefile.am b/test/Makefile.am
index 5903ee0..35f49db 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -35,5 +35,6 @@
 			$(top_builddir)/system_configuration.o \
 			$(top_builddir)/dhcp_configuration.o \
 			$(top_builddir)/config_parser.o \
+			$(top_builddir)/vlan_interface.o \
 			$(top_builddir)/xyz/openbmc_project/Network/VLAN/Create/phosphor_network_manager-server.o \
 			$(top_builddir)/xyz/openbmc_project/Network/IP/Create/phosphor_network_manager-server.o
diff --git a/vlan_interface.cpp b/vlan_interface.cpp
new file mode 100644
index 0000000..f4224d4
--- /dev/null
+++ b/vlan_interface.cpp
@@ -0,0 +1,68 @@
+#include "config.h"
+#include "ethernet_interface.hpp"
+#include "vlan_interface.hpp"
+#include "network_manager.hpp"
+
+#include <phosphor-logging/log.hpp>
+#include "xyz/openbmc_project/Common/error.hpp"
+#include <phosphor-logging/elog-errors.hpp>
+
+#include <string>
+#include <algorithm>
+#include <fstream>
+#include <experimental/filesystem>
+
+namespace phosphor
+{
+namespace network
+{
+
+using namespace phosphor::logging;
+using namespace sdbusplus::xyz::openbmc_project::Common::Error;
+
+VlanInterface::VlanInterface(sdbusplus::bus::bus& bus,
+                             const std::string& objPath,
+                             bool dhcpEnabled,
+                             uint32_t vlanID,
+                             EthernetInterface& intf,
+                             Manager& parent ) :
+        VlanIntfObject(bus, objPath.c_str(), true),
+        EthernetInterface(bus, objPath, dhcpEnabled, parent, false),
+        parentInterface(intf)
+{
+    id(vlanID);
+    VlanIface::interfaceName(EthernetInterface::interfaceName());
+
+    VlanIntfObject::emit_object_added();
+}
+
+void VlanInterface::writeDeviceFile()
+{
+    using namespace std::string_literals;
+    fs::path confPath = manager.getConfDir();
+    std::string fileName = EthernetInterface::interfaceName() + ".netdev"s;
+    confPath /= fileName;
+    std::fstream stream;
+    try
+    {
+        stream.open(confPath.c_str(), std::fstream::out);
+    }
+    catch (std::ios_base::failure& e)
+    {
+        log<level::ERR>("Unable to open the VLAN device file",
+                         entry("FILE=%s", confPath.c_str()),
+                         entry("ERROR=%s", e.what()));
+        elog<InternalFailure>();
+
+    }
+
+    stream << "[" << "NetDev" << "]\n";
+    stream << "Name=" << EthernetInterface::interfaceName() << "\n";
+    stream << "Kind=vlan" << "\n";
+    stream << "[VLAN]" << "\n";
+    stream << "Id=" << id() << "\n";
+    stream.close();
+}
+
+}//namespace network
+}//namespace phosphor
diff --git a/vlan_interface.hpp b/vlan_interface.hpp
new file mode 100644
index 0000000..7f8d043
--- /dev/null
+++ b/vlan_interface.hpp
@@ -0,0 +1,71 @@
+#pragma once
+
+#include "types.hpp"
+
+#include "xyz/openbmc_project/Object/Delete/server.hpp"
+#include "xyz/openbmc_project/Network/VLAN/server.hpp"
+
+#include <sdbusplus/bus.hpp>
+#include <sdbusplus/server/object.hpp>
+
+#include <string>
+#include "ethernet_interface.hpp"
+
+namespace phosphor
+{
+namespace network
+{
+
+class EthernetInterface;
+class Manager;
+
+
+using VlanIface = sdbusplus::xyz::openbmc_project::Network::server::VLAN;
+using VlanIntfObject =  sdbusplus::server::object::object<VlanIface>;
+
+/** @class VlanInterface
+ *  @brief OpenBMC vlan Interface implementation.
+ *  @details A concrete implementation for the vlan interface
+ */
+class VlanInterface : public VlanIntfObject, public EthernetInterface
+{
+    public:
+        VlanInterface() = delete;
+        VlanInterface(const VlanInterface&) = delete;
+        VlanInterface& operator=(const VlanInterface&) = delete;
+        VlanInterface(VlanInterface&&) = delete;
+        VlanInterface& operator=(VlanInterface&&) = delete;
+        virtual ~VlanInterface() = default;
+
+        /** @brief Constructor to put object onto bus at a dbus path.
+         *  @param[in] bus - Bus to attach to.
+         *  @param[in] objPath - Path to attach at.
+         *  @param[in] dhcpEnabled - DHCP enable value.
+         *  @param[in] vlanID - vlan identifier.
+         *  @param[in] intf - ethernet interface object.
+         *  @param[in] manager - network manager object.
+         */
+        VlanInterface(sdbusplus::bus::bus& bus,
+                      const std::string& objPath,
+                      bool dhcpEnabled,
+                      uint32_t vlanID,
+                      EthernetInterface& intf,
+                      Manager& manager);
+
+        /** @brief writes the device configuration.
+                   systemd reads this configuration file
+                   and creates the vlan interface.*/
+        void writeDeviceFile();
+
+    private:
+
+        /** @brief VLAN Identifier. */
+        using VlanIface::id;
+
+        EthernetInterface& parentInterface;
+
+        friend class TestVlanInterface;
+};
+
+} // namespace network
+} // namespace phosphor
