Implement the DHCP configuration interface

This commit implements the below dhcp options
1) DNS
2) NTP
3) HostName

Change-Id: Ifb66fbc86ce38abc79454ecbbf6fb3c65f892c19
Signed-off-by: Ratan Gupta <ratagupt@in.ibm.com>
diff --git a/dhcp_configuration.hpp b/dhcp_configuration.hpp
new file mode 100644
index 0000000..e6e549f
--- /dev/null
+++ b/dhcp_configuration.hpp
@@ -0,0 +1,99 @@
+#pragma once
+
+#include "xyz/openbmc_project/Network/DHCPConfiguration/server.hpp"
+#include <sdbusplus/bus.hpp>
+#include <sdbusplus/server/object.hpp>
+
+#include <string>
+
+namespace phosphor
+{
+namespace network
+{
+
+constexpr auto networkdService = "systemd-networkd.service";
+constexpr auto timeSynchdService = "systemd-timesyncd.service";
+
+class Manager; // forward declaration of network manager.
+
+namespace dhcp
+{
+
+using ConfigIntf =
+    sdbusplus::xyz::openbmc_project::Network::server::DHCPConfiguration;
+
+using Iface =
+    sdbusplus::server::object::object<ConfigIntf>;
+
+
+/** @class Configuration
+ *  @brief DHCP configuration.
+ *  @details A concrete implementation for the
+ *  xyz.openbmc_project.Network.DHCP DBus interface.
+ */
+class Configuration : public Iface
+{
+    public:
+        Configuration() = default;
+        Configuration(const Configuration&) = delete;
+        Configuration& operator=(const Configuration&) = delete;
+        Configuration(Configuration&&) = delete;
+        Configuration& operator=(Configuration&&) = delete;
+        virtual ~Configuration() = 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] parent - Parent object.
+         */
+        Configuration(sdbusplus::bus::bus& bus,
+                      const std::string& objPath,
+                      Manager& parent) :
+            Iface(bus, objPath.c_str()),
+            bus(bus),
+            manager(parent){}
+
+        /** @brief If true then DNS servers received from the DHCP server
+         *         will be used and take precedence over any statically
+         *         configured ones.
+         *  @param[in] value - true if DNS server needed from DHCP server
+         *                     else false.
+         */
+        bool dNSEnabled(bool value) override;
+
+        /** @brief If true then NTP servers received from the DHCP server
+                   will be used by systemd-timesyncd.
+         *  @param[in] value - true if NTP server needed from DHCP server
+         *                     else false.
+         */
+        bool nTPEnabled(bool value) override;
+
+        /** @brief If true then Hostname received from the DHCP server will
+         *         be set as the hostname of the system
+         *  @param[in] value - true if hostname needed from the DHCP server
+         *                     else false.
+         *
+         */
+        bool hostNameEnabled(bool value) override;
+
+        /* @brief Network Manager needed the below function to know the
+         *        value of the properties (ntpEnabled,dnsEnabled,hostnameEnabled).
+         *
+         */
+        using ConfigIntf::dNSEnabled;
+        using ConfigIntf::nTPEnabled;
+        using ConfigIntf::hostNameEnabled;
+
+    private:
+
+        /** @brief sdbusplus DBus bus connection. */
+        sdbusplus::bus::bus& bus;
+
+        /** @brief Network Manager object. */
+        phosphor::network::Manager& manager;
+
+};
+
+} // namespace dhcp
+} // namespace network
+} // namespace phosphor