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
