11bbe3d1eSWilliam A. Kennington III #include "dhcp_configuration.hpp" 21bbe3d1eSWilliam A. Kennington III 3e94c9ffcSWilliam A. Kennington III #include "config_parser.hpp" 41bbe3d1eSWilliam A. Kennington III #include "network_manager.hpp" 51bbe3d1eSWilliam A. Kennington III 6180498c5SWilliam A. Kennington III #include <sys/stat.h> 7180498c5SWilliam A. Kennington III 81bbe3d1eSWilliam A. Kennington III #include <phosphor-logging/elog-errors.hpp> 9a2947b4bSJagpal Singh Gill #include <phosphor-logging/lg2.hpp> 101bbe3d1eSWilliam A. Kennington III #include <xyz/openbmc_project/Common/error.hpp> 111bbe3d1eSWilliam A. Kennington III 1289d734b9SPatrick Williams #include <filesystem> 1389d734b9SPatrick Williams 141bbe3d1eSWilliam A. Kennington III namespace phosphor 151bbe3d1eSWilliam A. Kennington III { 161bbe3d1eSWilliam A. Kennington III namespace network 171bbe3d1eSWilliam A. Kennington III { 181bbe3d1eSWilliam A. Kennington III namespace dhcp 191bbe3d1eSWilliam A. Kennington III { 201bbe3d1eSWilliam A. Kennington III 211bbe3d1eSWilliam A. Kennington III using namespace phosphor::network; 221bbe3d1eSWilliam A. Kennington III using namespace sdbusplus::xyz::openbmc_project::Common::Error; 23e94c9ffcSWilliam A. Kennington III 24be3bd2fcSWilliam A. Kennington III Configuration::Configuration(sdbusplus::bus_t& bus, 259ede1b74SWilliam A. Kennington III stdplus::const_zstring objPath, 2657dfea94SJishnu CM stdplus::PinnedRef<EthernetInterface> parent, 2757dfea94SJishnu CM DHCPType type) : 28e94c9ffcSWilliam A. Kennington III Iface(bus, objPath.c_str(), Iface::action::defer_emit), 2957dfea94SJishnu CM parent(parent), type(type) 30e94c9ffcSWilliam A. Kennington III { 31e94c9ffcSWilliam A. Kennington III config::Parser conf; 32180498c5SWilliam A. Kennington III std::filesystem::directory_entry newest_file; 33180498c5SWilliam A. Kennington III time_t newest_time = 0; 3457dfea94SJishnu CM for (const auto& dirent : std::filesystem::directory_iterator( 3557dfea94SJishnu CM parent.get().manager.get().getConfDir())) 36e94c9ffcSWilliam A. Kennington III { 37180498c5SWilliam A. Kennington III struct stat st = {}; 38180498c5SWilliam A. Kennington III stat(dirent.path().native().c_str(), &st); 39180498c5SWilliam A. Kennington III if (st.st_mtime > newest_time) 40e94c9ffcSWilliam A. Kennington III { 41180498c5SWilliam A. Kennington III newest_file = dirent; 42180498c5SWilliam A. Kennington III newest_time = st.st_mtime; 43e94c9ffcSWilliam A. Kennington III } 44e94c9ffcSWilliam A. Kennington III } 45180498c5SWilliam A. Kennington III if (newest_file != std::filesystem::directory_entry{}) 46180498c5SWilliam A. Kennington III { 471d25ca4eSWilliam A. Kennington III lg2::info("Using DHCP options from {CFG_FILE}", "CFG_FILE", 48a2947b4bSJagpal Singh Gill newest_file.path().native()); 49180498c5SWilliam A. Kennington III conf.setFile(newest_file.path()); 50180498c5SWilliam A. Kennington III } 51e94c9ffcSWilliam A. Kennington III 52*b6595b29SRavi Teja ConfigIntf::domainEnabled(getDHCPProp(conf, type, "UseDomains"), true); 5357dfea94SJishnu CM ConfigIntf::dnsEnabled(getDHCPProp(conf, type, "UseDNS"), true); 5457dfea94SJishnu CM ConfigIntf::ntpEnabled(getDHCPProp(conf, type, "UseNTP"), true); 5557dfea94SJishnu CM ConfigIntf::hostNameEnabled(getDHCPProp(conf, type, "UseHostname"), true); 5657dfea94SJishnu CM if (type == DHCPType::v4) 5757dfea94SJishnu CM { 5857dfea94SJishnu CM ConfigIntf::sendHostNameEnabled(getDHCPProp(conf, type, "SendHostname"), 5957dfea94SJishnu CM true); 6057dfea94SJishnu CM } 6157dfea94SJishnu CM 62e94c9ffcSWilliam A. Kennington III emit_object_added(); 63e94c9ffcSWilliam A. Kennington III } 64e94c9ffcSWilliam A. Kennington III 651bbe3d1eSWilliam A. Kennington III bool Configuration::sendHostNameEnabled(bool value) 661bbe3d1eSWilliam A. Kennington III { 671bbe3d1eSWilliam A. Kennington III if (value == sendHostNameEnabled()) 681bbe3d1eSWilliam A. Kennington III { 691bbe3d1eSWilliam A. Kennington III return value; 701bbe3d1eSWilliam A. Kennington III } 711bbe3d1eSWilliam A. Kennington III 721bbe3d1eSWilliam A. Kennington III auto name = ConfigIntf::sendHostNameEnabled(value); 7357dfea94SJishnu CM parent.get().writeConfigurationFile(); 7457dfea94SJishnu CM parent.get().reloadConfigs(); 751bbe3d1eSWilliam A. Kennington III return name; 761bbe3d1eSWilliam A. Kennington III } 771bbe3d1eSWilliam A. Kennington III 781bbe3d1eSWilliam A. Kennington III bool Configuration::hostNameEnabled(bool value) 791bbe3d1eSWilliam A. Kennington III { 801bbe3d1eSWilliam A. Kennington III if (value == hostNameEnabled()) 811bbe3d1eSWilliam A. Kennington III { 821bbe3d1eSWilliam A. Kennington III return value; 831bbe3d1eSWilliam A. Kennington III } 841bbe3d1eSWilliam A. Kennington III 851bbe3d1eSWilliam A. Kennington III auto name = ConfigIntf::hostNameEnabled(value); 8657dfea94SJishnu CM parent.get().writeConfigurationFile(); 8757dfea94SJishnu CM parent.get().reloadConfigs(); 881bbe3d1eSWilliam A. Kennington III 891bbe3d1eSWilliam A. Kennington III return name; 901bbe3d1eSWilliam A. Kennington III } 911bbe3d1eSWilliam A. Kennington III 921bbe3d1eSWilliam A. Kennington III bool Configuration::ntpEnabled(bool value) 931bbe3d1eSWilliam A. Kennington III { 941bbe3d1eSWilliam A. Kennington III if (value == ntpEnabled()) 951bbe3d1eSWilliam A. Kennington III { 961bbe3d1eSWilliam A. Kennington III return value; 971bbe3d1eSWilliam A. Kennington III } 981bbe3d1eSWilliam A. Kennington III 991bbe3d1eSWilliam A. Kennington III auto ntp = ConfigIntf::ntpEnabled(value); 10057dfea94SJishnu CM parent.get().writeConfigurationFile(); 10157dfea94SJishnu CM parent.get().reloadConfigs(); 1021bbe3d1eSWilliam A. Kennington III 1031bbe3d1eSWilliam A. Kennington III return ntp; 1041bbe3d1eSWilliam A. Kennington III } 1051bbe3d1eSWilliam A. Kennington III 1061bbe3d1eSWilliam A. Kennington III bool Configuration::dnsEnabled(bool value) 1071bbe3d1eSWilliam A. Kennington III { 1081bbe3d1eSWilliam A. Kennington III if (value == dnsEnabled()) 1091bbe3d1eSWilliam A. Kennington III { 1101bbe3d1eSWilliam A. Kennington III return value; 1111bbe3d1eSWilliam A. Kennington III } 1121bbe3d1eSWilliam A. Kennington III 1131bbe3d1eSWilliam A. Kennington III auto dns = ConfigIntf::dnsEnabled(value); 11457dfea94SJishnu CM parent.get().writeConfigurationFile(); 11557dfea94SJishnu CM parent.get().reloadConfigs(); 1161bbe3d1eSWilliam A. Kennington III 1171bbe3d1eSWilliam A. Kennington III return dns; 1181bbe3d1eSWilliam A. Kennington III } 1191bbe3d1eSWilliam A. Kennington III 120*b6595b29SRavi Teja bool Configuration::domainEnabled(bool value) 121*b6595b29SRavi Teja { 122*b6595b29SRavi Teja if (value == domainEnabled()) 123*b6595b29SRavi Teja { 124*b6595b29SRavi Teja return value; 125*b6595b29SRavi Teja } 126*b6595b29SRavi Teja 127*b6595b29SRavi Teja auto domain = ConfigIntf::domainEnabled(value); 128*b6595b29SRavi Teja parent.get().writeConfigurationFile(); 129*b6595b29SRavi Teja parent.get().reloadConfigs(); 130*b6595b29SRavi Teja 131*b6595b29SRavi Teja return domain; 132*b6595b29SRavi Teja } 133*b6595b29SRavi Teja 1341bbe3d1eSWilliam A. Kennington III } // namespace dhcp 1351bbe3d1eSWilliam A. Kennington III } // namespace network 1361bbe3d1eSWilliam A. Kennington III } // namespace phosphor 137