summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNagaraju Goruganti <ngorugan@in.ibm.com>2018-03-07 09:22:28 -0600
committerRatan Gupta <ratagupt@in.ibm.com>2018-03-15 00:20:31 +0530
commit210420aac714483ea4c1e8a303280df9c1b4e5c9 (patch)
treebe8d04f464bdf8666ba78e5725cf679f9af5a62f
parentc27170ab2747f7854a06c4dc533c2ad3c88dd758 (diff)
downloadphosphor-networkd-210420aac714483ea4c1e8a303280df9c1b4e5c9.tar.gz
phosphor-networkd-210420aac714483ea4c1e8a303280df9c1b4e5c9.zip
Get DHCP configuration values form n/w config file while creating
DHCP config object. Each time when we update config file we recreate DHCP config object, with existing code DHCP configuration values are getting initialized to default values. With these changes we get DHCP configuration values from n/w config. Resolves openbmc/openbmc#2891 Change-Id: I95d50d52a8aa569493739a46b88e4a378e399698 Signed-off-by: Nagaraju Goruganti <ngorugan@in.ibm.com>
-rw-r--r--dhcp_configuration.cpp39
-rw-r--r--dhcp_configuration.hpp17
-rw-r--r--ethernet_interface.cpp107
3 files changed, 103 insertions, 60 deletions
diff --git a/dhcp_configuration.cpp b/dhcp_configuration.cpp
index 9eeea1e..e933161 100644
--- a/dhcp_configuration.cpp
+++ b/dhcp_configuration.cpp
@@ -1,6 +1,9 @@
#include "config.h"
#include "dhcp_configuration.hpp"
#include "network_manager.hpp"
+#include "xyz/openbmc_project/Common/error.hpp"
+#include <phosphor-logging/log.hpp>
+#include <phosphor-logging/elog-errors.hpp>
namespace phosphor
{
@@ -9,6 +12,9 @@ namespace network
namespace dhcp
{
+using namespace phosphor::network;
+using namespace phosphor::logging;
+using namespace sdbusplus::xyz::openbmc_project::Common::Error;
bool Configuration::sendHostNameEnabled(bool value)
{
if (value == sendHostNameEnabled())
@@ -66,6 +72,39 @@ bool Configuration::dNSEnabled(bool value)
return dns;
}
+bool Configuration::getDHCPPropFromConf(const std::string& prop)
+{
+ fs::path confPath = manager.getConfDir();
+ auto interfaceStrList = getInterfaces();
+ // get the first interface name, we need it to know config file name.
+ auto interface = *interfaceStrList.begin();
+ auto fileName = systemd::config::networkFilePrefix + interface +
+ systemd::config::networkFileSuffix;
+
+ confPath /= fileName;
+ // systemd default behaviour is all DHCP fields should be enabled by
+ // default.
+ auto propValue = true;
+ config::Parser parser(confPath);
+
+ auto rc = config::ReturnCode::SUCCESS;
+ config::ValueList values{};
+ std::tie(rc, values) = parser.getValues("DHCP", prop);
+
+ if (rc != config::ReturnCode::SUCCESS)
+ {
+ log<level::DEBUG>("Unable to get the value from section DHCP",
+ entry("PROP=%s", prop.c_str()),
+ entry("RC=%d", rc));
+ return propValue;
+ }
+
+ if (values[0] == "false")
+ {
+ propValue = false;
+ }
+ return propValue;
+}
}// namespace dhcp
}// namespace network
}// namespace phosphor
diff --git a/dhcp_configuration.hpp b/dhcp_configuration.hpp
index a550077..5db88e9 100644
--- a/dhcp_configuration.hpp
+++ b/dhcp_configuration.hpp
@@ -3,6 +3,7 @@
#include "xyz/openbmc_project/Network/DHCPConfiguration/server.hpp"
#include <sdbusplus/bus.hpp>
#include <sdbusplus/server/object.hpp>
+#include "config_parser.hpp"
#include <string>
@@ -50,13 +51,10 @@ class Configuration : public Iface
bus(bus),
manager(parent)
{
- // systemd default behaviour is following fields should be
- // enabled by default.
-
- ConfigIntf::dNSEnabled(true);
- ConfigIntf::nTPEnabled(true);
- ConfigIntf::hostNameEnabled(true);
- ConfigIntf::sendHostNameEnabled(true);
+ ConfigIntf::dNSEnabled(getDHCPPropFromConf("UseDNS"));
+ ConfigIntf::nTPEnabled(getDHCPPropFromConf("UseNTP"));
+ ConfigIntf::hostNameEnabled(getDHCPPropFromConf("UseHostname"));
+ ConfigIntf::sendHostNameEnabled(getDHCPPropFromConf("SendHostname"));
emit_object_added();
}
@@ -90,6 +88,11 @@ class Configuration : public Iface
*/
bool sendHostNameEnabled(bool value) override;
+ /** @brief read the DHCP Prop value from the configuration file
+ * @param[in] prop - DHCP Prop name.
+ */
+ bool getDHCPPropFromConf(const std::string& prop);
+
/* @brief Network Manager needed the below function to know the
* value of the properties (ntpEnabled,dnsEnabled,hostnameEnabled
sendHostNameEnabled).
diff --git a/ethernet_interface.cpp b/ethernet_interface.cpp
index 7d13c1c..74c30c5 100644
--- a/ethernet_interface.cpp
+++ b/ethernet_interface.cpp
@@ -564,77 +564,78 @@ void EthernetInterface::writeConfigurationFile()
stream << "VLAN=" << intf.second->EthernetInterface::interfaceName()
<< "\n";
}
-
- // DHCP
- if (dHCPEnabled() == true)
+ // When the interface configured as dhcp, we don't need below given entries
+ // in config file.
+ if (dHCPEnabled() == false)
{
- // write the dhcp section if interface is
- // configured as dhcp.
- writeDHCPSection(stream);
- stream.close();
- return;
- }
-
- //Add the NTP server
- for(const auto& ntp: EthernetInterfaceIntf::nTPServers())
- {
- stream << "NTP=" << ntp << "\n";
- }
+ //Add the NTP server
+ for (const auto& ntp : EthernetInterfaceIntf::nTPServers())
+ {
+ stream << "NTP=" << ntp << "\n";
+ }
- //Add the DNS entry
- for(const auto& dns: EthernetInterfaceIntf::nameservers())
- {
- stream << "DNS=" << dns << "\n";
- }
+ //Add the DNS entry
+ for (const auto& dns : EthernetInterfaceIntf::nameservers())
+ {
+ stream << "DNS=" << dns << "\n";
+ }
- // Static
- for (const auto& addr : addrs)
- {
- if (addr.second->origin() == AddressOrigin::Static)
+ // Static
+ for (const auto& addr : addrs)
{
- std::string address = addr.second->address() + "/" + std::to_string(
- addr.second->prefixLength());
+ if (addr.second->origin() == AddressOrigin::Static)
+ {
+ std::string address = addr.second->address() + "/" +
+ std::to_string(addr.second->prefixLength());
- stream << "Address=" << address << "\n";
- }
- }
+ stream << "Address=" << address << "\n";
+ }
+ }
- if (manager.getSystemConf())
- {
- stream << "Gateway=" << manager.getSystemConf()->defaultGateway()
- << "\n";
- }
- // write the route section
- stream << "[" << "Route" << "]\n";
- for(const auto& addr : addrs)
- {
- if (addr.second->origin() == AddressOrigin::Static)
+ if (manager.getSystemConf())
{
- int addressFamily = addr.second->type() == IP::Protocol::IPv4 ? AF_INET : AF_INET6;
- std::string destination = getNetworkID(
- addressFamily,
- addr.second->address(),
- addr.second->prefixLength());
-
- if (addr.second->gateway() != "0.0.0.0" &&
- addr.second->gateway() != "" &&
- destination != "0.0.0.0" &&
- destination != "")
+ stream << "Gateway=" << manager.getSystemConf()->defaultGateway()
+ << "\n";
+ }
+
+ // write the route section
+ stream << "[" << "Route" << "]\n";
+ for (const auto& addr : addrs)
+ {
+ if (addr.second->origin() == AddressOrigin::Static)
{
- stream << "Gateway=" << addr.second->gateway() << "\n";
- stream << "Destination=" << destination << "\n";
+ int addressFamily = addr.second->type() == IP::Protocol::IPv4 ?
+ AF_INET : AF_INET6;
+
+ std::string destination = getNetworkID(
+ addressFamily,
+ addr.second->address(),
+ addr.second->prefixLength());
+
+ if (addr.second->gateway() != "0.0.0.0" &&
+ addr.second->gateway() != "" &&
+ destination != "0.0.0.0" &&
+ destination != "")
+ {
+ stream << "Gateway=" << addr.second->gateway() << "\n";
+ stream << "Destination=" << destination << "\n";
+ }
}
-
}
}
+ auto value = dHCPEnabled() ? "true"s : "false"s;
+ stream << "DHCP="s + value + "\n";
+
+ // Write the dhcp section irrespective of whether DHCP is enabled or not
+ writeDHCPSection(stream);
+
stream.close();
}
void EthernetInterface::writeDHCPSection(std::fstream& stream)
{
using namespace std::string_literals;
- stream << "DHCP=true\n";
// write the dhcp section
stream << "[DHCP]\n";
OpenPOWER on IntegriCloud