xref: /openbmc/phosphor-networkd/src/dhcp_configuration.cpp (revision a2947b4b2351d5592bc6f305325bc1be6ff44dff)
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"
595530ec9SWilliam A. Kennington III #include "util.hpp"
61bbe3d1eSWilliam A. Kennington III 
7180498c5SWilliam A. Kennington III #include <sys/stat.h>
8180498c5SWilliam A. Kennington III 
9180498c5SWilliam A. Kennington III #include <filesystem>
101bbe3d1eSWilliam A. Kennington III #include <phosphor-logging/elog-errors.hpp>
11*a2947b4bSJagpal Singh Gill #include <phosphor-logging/lg2.hpp>
121bbe3d1eSWilliam A. Kennington III #include <xyz/openbmc_project/Common/error.hpp>
131bbe3d1eSWilliam A. Kennington III 
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,
269ede1b74SWilliam A. Kennington III                              stdplus::PinnedRef<Manager> parent) :
27e94c9ffcSWilliam A. Kennington III     Iface(bus, objPath.c_str(), Iface::action::defer_emit),
289ede1b74SWilliam A. Kennington III     manager(parent)
29e94c9ffcSWilliam A. Kennington III {
30e94c9ffcSWilliam A. Kennington III     config::Parser conf;
31180498c5SWilliam A. Kennington III     std::filesystem::directory_entry newest_file;
32180498c5SWilliam A. Kennington III     time_t newest_time = 0;
33180498c5SWilliam A. Kennington III     for (const auto& dirent :
349ede1b74SWilliam A. Kennington III          std::filesystem::directory_iterator(manager.get().getConfDir()))
35e94c9ffcSWilliam A. Kennington III     {
36180498c5SWilliam A. Kennington III         struct stat st = {};
37180498c5SWilliam A. Kennington III         stat(dirent.path().native().c_str(), &st);
38180498c5SWilliam A. Kennington III         if (st.st_mtime > newest_time)
39e94c9ffcSWilliam A. Kennington III         {
40180498c5SWilliam A. Kennington III             newest_file = dirent;
41180498c5SWilliam A. Kennington III             newest_time = st.st_mtime;
42e94c9ffcSWilliam A. Kennington III         }
43e94c9ffcSWilliam A. Kennington III     }
44180498c5SWilliam A. Kennington III     if (newest_file != std::filesystem::directory_entry{})
45180498c5SWilliam A. Kennington III     {
46*a2947b4bSJagpal Singh Gill         lg2::info("Using DHCP options from {FILE}", "FILE",
47*a2947b4bSJagpal Singh Gill                   newest_file.path().native());
48180498c5SWilliam A. Kennington III         conf.setFile(newest_file.path());
49180498c5SWilliam A. Kennington III     }
50e94c9ffcSWilliam A. Kennington III 
51d99e6dbaSWilliam A. Kennington III     ConfigIntf::dnsEnabled(getDHCPProp(conf, "UseDNS"), true);
52d99e6dbaSWilliam A. Kennington III     ConfigIntf::ntpEnabled(getDHCPProp(conf, "UseNTP"), true);
53d99e6dbaSWilliam A. Kennington III     ConfigIntf::hostNameEnabled(getDHCPProp(conf, "UseHostname"), true);
54d99e6dbaSWilliam A. Kennington III     ConfigIntf::sendHostNameEnabled(getDHCPProp(conf, "SendHostname"), true);
55e94c9ffcSWilliam A. Kennington III     emit_object_added();
56e94c9ffcSWilliam A. Kennington III }
57e94c9ffcSWilliam A. Kennington III 
581bbe3d1eSWilliam A. Kennington III bool Configuration::sendHostNameEnabled(bool value)
591bbe3d1eSWilliam A. Kennington III {
601bbe3d1eSWilliam A. Kennington III     if (value == sendHostNameEnabled())
611bbe3d1eSWilliam A. Kennington III     {
621bbe3d1eSWilliam A. Kennington III         return value;
631bbe3d1eSWilliam A. Kennington III     }
641bbe3d1eSWilliam A. Kennington III 
651bbe3d1eSWilliam A. Kennington III     auto name = ConfigIntf::sendHostNameEnabled(value);
66bd649af9SWilliam A. Kennington III 
679ede1b74SWilliam A. Kennington III     manager.get().writeToConfigurationFile();
689ede1b74SWilliam A. Kennington III     manager.get().reloadConfigs();
691bbe3d1eSWilliam A. Kennington III 
701bbe3d1eSWilliam A. Kennington III     return name;
711bbe3d1eSWilliam A. Kennington III }
721bbe3d1eSWilliam A. Kennington III 
731bbe3d1eSWilliam A. Kennington III bool Configuration::hostNameEnabled(bool value)
741bbe3d1eSWilliam A. Kennington III {
751bbe3d1eSWilliam A. Kennington III     if (value == hostNameEnabled())
761bbe3d1eSWilliam A. Kennington III     {
771bbe3d1eSWilliam A. Kennington III         return value;
781bbe3d1eSWilliam A. Kennington III     }
791bbe3d1eSWilliam A. Kennington III 
801bbe3d1eSWilliam A. Kennington III     auto name = ConfigIntf::hostNameEnabled(value);
819ede1b74SWilliam A. Kennington III     manager.get().writeToConfigurationFile();
829ede1b74SWilliam A. Kennington III     manager.get().reloadConfigs();
831bbe3d1eSWilliam A. Kennington III 
841bbe3d1eSWilliam A. Kennington III     return name;
851bbe3d1eSWilliam A. Kennington III }
861bbe3d1eSWilliam A. Kennington III 
871bbe3d1eSWilliam A. Kennington III bool Configuration::ntpEnabled(bool value)
881bbe3d1eSWilliam A. Kennington III {
891bbe3d1eSWilliam A. Kennington III     if (value == ntpEnabled())
901bbe3d1eSWilliam A. Kennington III     {
911bbe3d1eSWilliam A. Kennington III         return value;
921bbe3d1eSWilliam A. Kennington III     }
931bbe3d1eSWilliam A. Kennington III 
941bbe3d1eSWilliam A. Kennington III     auto ntp = ConfigIntf::ntpEnabled(value);
959ede1b74SWilliam A. Kennington III     manager.get().writeToConfigurationFile();
969ede1b74SWilliam A. Kennington III     manager.get().reloadConfigs();
971bbe3d1eSWilliam A. Kennington III 
981bbe3d1eSWilliam A. Kennington III     return ntp;
991bbe3d1eSWilliam A. Kennington III }
1001bbe3d1eSWilliam A. Kennington III 
1011bbe3d1eSWilliam A. Kennington III bool Configuration::dnsEnabled(bool value)
1021bbe3d1eSWilliam A. Kennington III {
1031bbe3d1eSWilliam A. Kennington III     if (value == dnsEnabled())
1041bbe3d1eSWilliam A. Kennington III     {
1051bbe3d1eSWilliam A. Kennington III         return value;
1061bbe3d1eSWilliam A. Kennington III     }
1071bbe3d1eSWilliam A. Kennington III 
1081bbe3d1eSWilliam A. Kennington III     auto dns = ConfigIntf::dnsEnabled(value);
1099ede1b74SWilliam A. Kennington III     manager.get().writeToConfigurationFile();
1109ede1b74SWilliam A. Kennington III     manager.get().reloadConfigs();
1111bbe3d1eSWilliam A. Kennington III 
1121bbe3d1eSWilliam A. Kennington III     return dns;
1131bbe3d1eSWilliam A. Kennington III }
1141bbe3d1eSWilliam A. Kennington III 
1151bbe3d1eSWilliam A. Kennington III } // namespace dhcp
1161bbe3d1eSWilliam A. Kennington III } // namespace network
1171bbe3d1eSWilliam A. Kennington III } // namespace phosphor
118