Write DHCP configuration parameters

Write the configuration parameters to the
systemd-networkd conf file.

Resolves openbmc/openbmc#1770

Change-Id: I6c9427034827d612ad7f75961461c2f33688fbf9
Signed-off-by: Ratan Gupta <ratagupt@in.ibm.com>
diff --git a/network_manager.cpp b/network_manager.cpp
index 011e978..e9a62ed 100644
--- a/network_manager.cpp
+++ b/network_manager.cpp
@@ -170,13 +170,13 @@
         // DHCP
         if (intf.second->dHCPEnabled() == true)
         {
-            stream << "DHCP=true\n";
-            // write the dhcp section
-            stream << "[DHCP]\n";
-            stream << "ClientIdentifier=mac\n";
+            // write the dhcp section if interface is
+            // configured as dhcp.
+            writeDHCPSection(stream);
             stream.close();
             continue;
         }
+
         // Static
         for (const auto& addr : addrs)
         {
@@ -225,6 +225,27 @@
     restartSystemdUnit("systemd-networkd.service");
 }
 
+void Manager::writeDHCPSection(std::fstream& stream)
+{
+    using namespace std::string_literals;
+    stream << "DHCP=true\n";
+    // write the dhcp section
+    stream << "[DHCP]\n";
+
+    // Hardcoding the client identifier to mac, to address below issue
+    // https://github.com/openbmc/openbmc/issues/1280
+    stream << "ClientIdentifier=mac\n";
+
+    auto value = dhcpConf->dNSEnabled() ? "true"s : "false"s;
+    stream << "UseDNS="s + value + "\n";
+
+    value = dhcpConf->nTPEnabled() ? "true"s : "false"s;
+    stream << "UseNTP="s + value + "\n";
+
+    value = dhcpConf->hostNameEnabled() ? "true"s : "false"s;
+    stream << "UseHostname="s + value + "\n";
+}
+
 bool Manager::getDHCPValue(const std::string& intf)
 {
     bool dhcp = false;
diff --git a/network_manager.hpp b/network_manager.hpp
index 762b3e1..e5ca96b 100644
--- a/network_manager.hpp
+++ b/network_manager.hpp
@@ -75,6 +75,9 @@
 
     private:
 
+        /** @brief write the dhcp section **/
+        void writeDHCPSection(std::fstream& stream);
+
         /** @brief Persistent sdbusplus DBus bus connection. */
         sdbusplus::bus::bus& bus;