#include "dhcp_configuration.hpp" #include "config_parser.hpp" #include "network_manager.hpp" #include #include #include #include #include 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 parent, DHCPType type) : Iface(bus, objPath.c_str(), Iface::action::defer_emit), parent(parent) { config::Parser conf; std::filesystem::directory_entry newest_file; time_t newest_time = 0; for (const auto& dirent : std::filesystem::directory_iterator( parent.get().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::domainEnabled(getDHCPProp(conf, type, "UseDomains"), true); ConfigIntf::dnsEnabled(getDHCPProp(conf, type, "UseDNS"), true); ConfigIntf::ntpEnabled(getDHCPProp(conf, type, "UseNTP"), true); ConfigIntf::hostNameEnabled(getDHCPProp(conf, type, "UseHostname"), true); if (type == DHCPType::v4) { ConfigIntf::sendHostNameEnabled(getDHCPProp(conf, type, "SendHostname"), true); } emit_object_added(); } bool Configuration::sendHostNameEnabled(bool value) { if (value == sendHostNameEnabled()) { return value; } auto name = ConfigIntf::sendHostNameEnabled(value); parent.get().writeConfigurationFile(); parent.get().reloadConfigs(); return name; } bool Configuration::hostNameEnabled(bool value) { if (value == hostNameEnabled()) { return value; } auto name = ConfigIntf::hostNameEnabled(value); parent.get().writeConfigurationFile(); parent.get().reloadConfigs(); return name; } bool Configuration::ntpEnabled(bool value) { if (value == ntpEnabled()) { return value; } auto ntp = ConfigIntf::ntpEnabled(value); parent.get().writeConfigurationFile(); parent.get().reloadConfigs(); return ntp; } bool Configuration::dnsEnabled(bool value) { if (value == dnsEnabled()) { return value; } auto dns = ConfigIntf::dnsEnabled(value); parent.get().writeConfigurationFile(); parent.get().reloadConfigs(); return dns; } bool Configuration::domainEnabled(bool value) { if (value == domainEnabled()) { return value; } auto domain = ConfigIntf::domainEnabled(value); parent.get().writeConfigurationFile(); parent.get().reloadConfigs(); return domain; } } // namespace dhcp } // namespace network } // namespace phosphor