Implement the Vlan Interface
Change-Id: I6085868ba4e30bb9e1c6f6d9895a40ebff82804f
Signed-off-by: Ratan Gupta <ratagupt@in.ibm.com>
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