11bbe3d1eSWilliam A. Kennington III #include "config.h"
21bbe3d1eSWilliam A. Kennington III 
31bbe3d1eSWilliam A. Kennington III #include "dhcp_configuration.hpp"
41bbe3d1eSWilliam A. Kennington III 
51bbe3d1eSWilliam A. Kennington III #include "network_manager.hpp"
61bbe3d1eSWilliam A. Kennington III 
71bbe3d1eSWilliam A. Kennington III #include <phosphor-logging/elog-errors.hpp>
81bbe3d1eSWilliam A. Kennington III #include <phosphor-logging/log.hpp>
91bbe3d1eSWilliam A. Kennington III #include <xyz/openbmc_project/Common/error.hpp>
101bbe3d1eSWilliam A. Kennington III 
111bbe3d1eSWilliam A. Kennington III namespace phosphor
121bbe3d1eSWilliam A. Kennington III {
131bbe3d1eSWilliam A. Kennington III namespace network
141bbe3d1eSWilliam A. Kennington III {
151bbe3d1eSWilliam A. Kennington III namespace dhcp
161bbe3d1eSWilliam A. Kennington III {
171bbe3d1eSWilliam A. Kennington III 
181bbe3d1eSWilliam A. Kennington III using namespace phosphor::network;
191bbe3d1eSWilliam A. Kennington III using namespace phosphor::logging;
201bbe3d1eSWilliam A. Kennington III using namespace sdbusplus::xyz::openbmc_project::Common::Error;
211bbe3d1eSWilliam A. Kennington III bool Configuration::sendHostNameEnabled(bool value)
221bbe3d1eSWilliam A. Kennington III {
231bbe3d1eSWilliam A. Kennington III     if (value == sendHostNameEnabled())
241bbe3d1eSWilliam A. Kennington III     {
251bbe3d1eSWilliam A. Kennington III         return value;
261bbe3d1eSWilliam A. Kennington III     }
271bbe3d1eSWilliam A. Kennington III 
281bbe3d1eSWilliam A. Kennington III     auto name = ConfigIntf::sendHostNameEnabled(value);
29*bd649af9SWilliam A. Kennington III 
301bbe3d1eSWilliam A. Kennington III     manager.writeToConfigurationFile();
31*bd649af9SWilliam A. Kennington III     manager.reloadConfigs();
321bbe3d1eSWilliam A. Kennington III 
331bbe3d1eSWilliam A. Kennington III     return name;
341bbe3d1eSWilliam A. Kennington III }
351bbe3d1eSWilliam A. Kennington III 
361bbe3d1eSWilliam A. Kennington III bool Configuration::hostNameEnabled(bool value)
371bbe3d1eSWilliam A. Kennington III {
381bbe3d1eSWilliam A. Kennington III     if (value == hostNameEnabled())
391bbe3d1eSWilliam A. Kennington III     {
401bbe3d1eSWilliam A. Kennington III         return value;
411bbe3d1eSWilliam A. Kennington III     }
421bbe3d1eSWilliam A. Kennington III 
431bbe3d1eSWilliam A. Kennington III     auto name = ConfigIntf::hostNameEnabled(value);
441bbe3d1eSWilliam A. Kennington III     manager.writeToConfigurationFile();
45*bd649af9SWilliam A. Kennington III     manager.reloadConfigs();
461bbe3d1eSWilliam A. Kennington III 
471bbe3d1eSWilliam A. Kennington III     return name;
481bbe3d1eSWilliam A. Kennington III }
491bbe3d1eSWilliam A. Kennington III 
501bbe3d1eSWilliam A. Kennington III bool Configuration::ntpEnabled(bool value)
511bbe3d1eSWilliam A. Kennington III {
521bbe3d1eSWilliam A. Kennington III     if (value == ntpEnabled())
531bbe3d1eSWilliam A. Kennington III     {
541bbe3d1eSWilliam A. Kennington III         return value;
551bbe3d1eSWilliam A. Kennington III     }
561bbe3d1eSWilliam A. Kennington III 
571bbe3d1eSWilliam A. Kennington III     auto ntp = ConfigIntf::ntpEnabled(value);
581bbe3d1eSWilliam A. Kennington III     manager.writeToConfigurationFile();
59*bd649af9SWilliam A. Kennington III     manager.reloadConfigs();
601bbe3d1eSWilliam A. Kennington III 
611bbe3d1eSWilliam A. Kennington III     return ntp;
621bbe3d1eSWilliam A. Kennington III }
631bbe3d1eSWilliam A. Kennington III 
641bbe3d1eSWilliam A. Kennington III bool Configuration::dnsEnabled(bool value)
651bbe3d1eSWilliam A. Kennington III {
661bbe3d1eSWilliam A. Kennington III     if (value == dnsEnabled())
671bbe3d1eSWilliam A. Kennington III     {
681bbe3d1eSWilliam A. Kennington III         return value;
691bbe3d1eSWilliam A. Kennington III     }
701bbe3d1eSWilliam A. Kennington III 
711bbe3d1eSWilliam A. Kennington III     auto dns = ConfigIntf::dnsEnabled(value);
721bbe3d1eSWilliam A. Kennington III     manager.writeToConfigurationFile();
73*bd649af9SWilliam A. Kennington III     manager.reloadConfigs();
741bbe3d1eSWilliam A. Kennington III 
751bbe3d1eSWilliam A. Kennington III     return dns;
761bbe3d1eSWilliam A. Kennington III }
771bbe3d1eSWilliam A. Kennington III 
781bbe3d1eSWilliam A. Kennington III bool Configuration::getDHCPPropFromConf(const std::string& prop)
791bbe3d1eSWilliam A. Kennington III {
801bbe3d1eSWilliam A. Kennington III     fs::path confPath = manager.getConfDir();
811bbe3d1eSWilliam A. Kennington III     auto interfaceStrList = getInterfaces();
821bbe3d1eSWilliam A. Kennington III     // get the first interface name, we need it to know config file name.
831bbe3d1eSWilliam A. Kennington III     auto interface = *interfaceStrList.begin();
841bbe3d1eSWilliam A. Kennington III     auto fileName = systemd::config::networkFilePrefix + interface +
851bbe3d1eSWilliam A. Kennington III                     systemd::config::networkFileSuffix;
861bbe3d1eSWilliam A. Kennington III 
871bbe3d1eSWilliam A. Kennington III     confPath /= fileName;
881bbe3d1eSWilliam A. Kennington III     // systemd default behaviour is all DHCP fields should be enabled by
891bbe3d1eSWilliam A. Kennington III     // default.
901bbe3d1eSWilliam A. Kennington III     auto propValue = true;
911bbe3d1eSWilliam A. Kennington III     config::Parser parser(confPath);
921bbe3d1eSWilliam A. Kennington III 
931bbe3d1eSWilliam A. Kennington III     auto rc = config::ReturnCode::SUCCESS;
941bbe3d1eSWilliam A. Kennington III     config::ValueList values{};
951bbe3d1eSWilliam A. Kennington III     std::tie(rc, values) = parser.getValues("DHCP", prop);
961bbe3d1eSWilliam A. Kennington III 
971bbe3d1eSWilliam A. Kennington III     if (rc != config::ReturnCode::SUCCESS)
981bbe3d1eSWilliam A. Kennington III     {
991bbe3d1eSWilliam A. Kennington III         log<level::DEBUG>("Unable to get the value from section DHCP",
1001bbe3d1eSWilliam A. Kennington III                           entry("PROP=%s", prop.c_str()), entry("RC=%d", rc));
1011bbe3d1eSWilliam A. Kennington III         return propValue;
1021bbe3d1eSWilliam A. Kennington III     }
1031bbe3d1eSWilliam A. Kennington III 
1041bbe3d1eSWilliam A. Kennington III     if (values[0] == "false")
1051bbe3d1eSWilliam A. Kennington III     {
1061bbe3d1eSWilliam A. Kennington III         propValue = false;
1071bbe3d1eSWilliam A. Kennington III     }
1081bbe3d1eSWilliam A. Kennington III     return propValue;
1091bbe3d1eSWilliam A. Kennington III }
1101bbe3d1eSWilliam A. Kennington III } // namespace dhcp
1111bbe3d1eSWilliam A. Kennington III } // namespace network
1121bbe3d1eSWilliam A. Kennington III } // namespace phosphor
113