| #include "dhcp_configuration.hpp" | 
 |  | 
 | #include "config_parser.hpp" | 
 | #include "network_manager.hpp" | 
 | #include "util.hpp" | 
 |  | 
 | #include <sys/stat.h> | 
 |  | 
 | #include <phosphor-logging/elog-errors.hpp> | 
 | #include <phosphor-logging/lg2.hpp> | 
 | #include <xyz/openbmc_project/Common/error.hpp> | 
 |  | 
 | #include <filesystem> | 
 |  | 
 | namespace phosphor | 
 | { | 
 | namespace network | 
 | { | 
 | namespace dhcp | 
 | { | 
 |  | 
 | using namespace phosphor::network; | 
 | using namespace sdbusplus::xyz::openbmc_project::Common::Error; | 
 |  | 
 | Configuration::Configuration(sdbusplus::bus_t& bus, | 
 |                              stdplus::const_zstring objPath, | 
 |                              stdplus::PinnedRef<Manager> parent) : | 
 |     Iface(bus, objPath.c_str(), Iface::action::defer_emit), | 
 |     manager(parent) | 
 | { | 
 |     config::Parser conf; | 
 |     std::filesystem::directory_entry newest_file; | 
 |     time_t newest_time = 0; | 
 |     for (const auto& dirent : | 
 |          std::filesystem::directory_iterator(manager.get().getConfDir())) | 
 |     { | 
 |         struct stat st = {}; | 
 |         stat(dirent.path().native().c_str(), &st); | 
 |         if (st.st_mtime > newest_time) | 
 |         { | 
 |             newest_file = dirent; | 
 |             newest_time = st.st_mtime; | 
 |         } | 
 |     } | 
 |     if (newest_file != std::filesystem::directory_entry{}) | 
 |     { | 
 |         lg2::info("Using DHCP options from {CFG_FILE}", "CFG_FILE", | 
 |                   newest_file.path().native()); | 
 |         conf.setFile(newest_file.path()); | 
 |     } | 
 |  | 
 |     ConfigIntf::dnsEnabled(getDHCPProp(conf, "UseDNS"), true); | 
 |     ConfigIntf::ntpEnabled(getDHCPProp(conf, "UseNTP"), true); | 
 |     ConfigIntf::hostNameEnabled(getDHCPProp(conf, "UseHostname"), true); | 
 |     ConfigIntf::sendHostNameEnabled(getDHCPProp(conf, "SendHostname"), true); | 
 |     emit_object_added(); | 
 | } | 
 |  | 
 | bool Configuration::sendHostNameEnabled(bool value) | 
 | { | 
 |     if (value == sendHostNameEnabled()) | 
 |     { | 
 |         return value; | 
 |     } | 
 |  | 
 |     auto name = ConfigIntf::sendHostNameEnabled(value); | 
 |  | 
 |     manager.get().writeToConfigurationFile(); | 
 |     manager.get().reloadConfigs(); | 
 |  | 
 |     return name; | 
 | } | 
 |  | 
 | bool Configuration::hostNameEnabled(bool value) | 
 | { | 
 |     if (value == hostNameEnabled()) | 
 |     { | 
 |         return value; | 
 |     } | 
 |  | 
 |     auto name = ConfigIntf::hostNameEnabled(value); | 
 |     manager.get().writeToConfigurationFile(); | 
 |     manager.get().reloadConfigs(); | 
 |  | 
 |     return name; | 
 | } | 
 |  | 
 | bool Configuration::ntpEnabled(bool value) | 
 | { | 
 |     if (value == ntpEnabled()) | 
 |     { | 
 |         return value; | 
 |     } | 
 |  | 
 |     auto ntp = ConfigIntf::ntpEnabled(value); | 
 |     manager.get().writeToConfigurationFile(); | 
 |     manager.get().reloadConfigs(); | 
 |  | 
 |     return ntp; | 
 | } | 
 |  | 
 | bool Configuration::dnsEnabled(bool value) | 
 | { | 
 |     if (value == dnsEnabled()) | 
 |     { | 
 |         return value; | 
 |     } | 
 |  | 
 |     auto dns = ConfigIntf::dnsEnabled(value); | 
 |     manager.get().writeToConfigurationFile(); | 
 |     manager.get().reloadConfigs(); | 
 |  | 
 |     return dns; | 
 | } | 
 |  | 
 | } // namespace dhcp | 
 | } // namespace network | 
 | } // namespace phosphor |