blob: 346572178af595cc599c549f3deddd269a1deec3 [file] [log] [blame]
Ratan Gupta935bc332017-07-11 17:47:14 +05301#include "dhcp_configuration.hpp"
Patrick Venture189d44e2018-07-09 12:30:59 -07002
William A. Kennington IIIe94c9ff2022-08-18 20:12:27 -07003#include "config_parser.hpp"
Ratan Gupta935bc332017-07-11 17:47:14 +05304#include "network_manager.hpp"
William A. Kennington III95530ec2022-08-19 01:44:39 -07005#include "util.hpp"
Patrick Venture189d44e2018-07-09 12:30:59 -07006
William A. Kennington III180498c2022-11-14 18:11:45 -08007#include <sys/stat.h>
8
9#include <filesystem>
Nagaraju Goruganti210420a2018-03-07 09:22:28 -060010#include <phosphor-logging/elog-errors.hpp>
Jagpal Singh Gilla2947b42023-04-17 21:10:14 -070011#include <phosphor-logging/lg2.hpp>
Patrick Venture189d44e2018-07-09 12:30:59 -070012#include <xyz/openbmc_project/Common/error.hpp>
Ratan Gupta935bc332017-07-11 17:47:14 +053013
14namespace phosphor
15{
16namespace network
17{
18namespace dhcp
19{
20
Nagaraju Goruganti210420a2018-03-07 09:22:28 -060021using namespace phosphor::network;
Nagaraju Goruganti210420a2018-03-07 09:22:28 -060022using namespace sdbusplus::xyz::openbmc_project::Common::Error;
William A. Kennington IIIe94c9ff2022-08-18 20:12:27 -070023
William A. Kennington IIIbe3bd2f2022-10-11 14:11:27 -070024Configuration::Configuration(sdbusplus::bus_t& bus,
William A. Kennington III9ede1b72022-11-21 01:59:28 -080025 stdplus::const_zstring objPath,
26 stdplus::PinnedRef<Manager> parent) :
William A. Kennington IIIe94c9ff2022-08-18 20:12:27 -070027 Iface(bus, objPath.c_str(), Iface::action::defer_emit),
William A. Kennington III9ede1b72022-11-21 01:59:28 -080028 manager(parent)
William A. Kennington IIIe94c9ff2022-08-18 20:12:27 -070029{
30 config::Parser conf;
William A. Kennington III180498c2022-11-14 18:11:45 -080031 std::filesystem::directory_entry newest_file;
32 time_t newest_time = 0;
33 for (const auto& dirent :
William A. Kennington III9ede1b72022-11-21 01:59:28 -080034 std::filesystem::directory_iterator(manager.get().getConfDir()))
William A. Kennington IIIe94c9ff2022-08-18 20:12:27 -070035 {
William A. Kennington III180498c2022-11-14 18:11:45 -080036 struct stat st = {};
37 stat(dirent.path().native().c_str(), &st);
38 if (st.st_mtime > newest_time)
William A. Kennington IIIe94c9ff2022-08-18 20:12:27 -070039 {
William A. Kennington III180498c2022-11-14 18:11:45 -080040 newest_file = dirent;
41 newest_time = st.st_mtime;
William A. Kennington IIIe94c9ff2022-08-18 20:12:27 -070042 }
43 }
William A. Kennington III180498c2022-11-14 18:11:45 -080044 if (newest_file != std::filesystem::directory_entry{})
45 {
Jagpal Singh Gilla2947b42023-04-17 21:10:14 -070046 lg2::info("Using DHCP options from {FILE}", "FILE",
47 newest_file.path().native());
William A. Kennington III180498c2022-11-14 18:11:45 -080048 conf.setFile(newest_file.path());
49 }
William A. Kennington IIIe94c9ff2022-08-18 20:12:27 -070050
William A. Kennington IIId99e6db2022-11-15 20:39:45 -080051 ConfigIntf::dnsEnabled(getDHCPProp(conf, "UseDNS"), true);
52 ConfigIntf::ntpEnabled(getDHCPProp(conf, "UseNTP"), true);
53 ConfigIntf::hostNameEnabled(getDHCPProp(conf, "UseHostname"), true);
54 ConfigIntf::sendHostNameEnabled(getDHCPProp(conf, "SendHostname"), true);
William A. Kennington IIIe94c9ff2022-08-18 20:12:27 -070055 emit_object_added();
56}
57
Nagaraju Gorugantie8fca1d2018-02-05 20:32:45 -060058bool Configuration::sendHostNameEnabled(bool value)
59{
60 if (value == sendHostNameEnabled())
61 {
62 return value;
63 }
64
65 auto name = ConfigIntf::sendHostNameEnabled(value);
William A. Kennington IIIbd649af2021-10-08 17:55:13 -070066
William A. Kennington III9ede1b72022-11-21 01:59:28 -080067 manager.get().writeToConfigurationFile();
68 manager.get().reloadConfigs();
Nagaraju Gorugantie8fca1d2018-02-05 20:32:45 -060069
70 return name;
71}
72
Ratan Gupta935bc332017-07-11 17:47:14 +053073bool Configuration::hostNameEnabled(bool value)
74{
75 if (value == hostNameEnabled())
76 {
77 return value;
78 }
79
80 auto name = ConfigIntf::hostNameEnabled(value);
William A. Kennington III9ede1b72022-11-21 01:59:28 -080081 manager.get().writeToConfigurationFile();
82 manager.get().reloadConfigs();
Ratan Gupta935bc332017-07-11 17:47:14 +053083
84 return name;
85}
86
Patrick Williams6aef7692021-05-01 06:39:41 -050087bool Configuration::ntpEnabled(bool value)
Ratan Gupta935bc332017-07-11 17:47:14 +053088{
Patrick Williams6aef7692021-05-01 06:39:41 -050089 if (value == ntpEnabled())
Ratan Gupta935bc332017-07-11 17:47:14 +053090 {
91 return value;
92 }
93
Patrick Williams6aef7692021-05-01 06:39:41 -050094 auto ntp = ConfigIntf::ntpEnabled(value);
William A. Kennington III9ede1b72022-11-21 01:59:28 -080095 manager.get().writeToConfigurationFile();
96 manager.get().reloadConfigs();
Ratan Gupta935bc332017-07-11 17:47:14 +053097
98 return ntp;
99}
100
Patrick Williams6aef7692021-05-01 06:39:41 -0500101bool Configuration::dnsEnabled(bool value)
Ratan Gupta935bc332017-07-11 17:47:14 +0530102{
Patrick Williams6aef7692021-05-01 06:39:41 -0500103 if (value == dnsEnabled())
Ratan Gupta935bc332017-07-11 17:47:14 +0530104 {
105 return value;
106 }
107
Patrick Williams6aef7692021-05-01 06:39:41 -0500108 auto dns = ConfigIntf::dnsEnabled(value);
William A. Kennington III9ede1b72022-11-21 01:59:28 -0800109 manager.get().writeToConfigurationFile();
110 manager.get().reloadConfigs();
Ratan Gupta935bc332017-07-11 17:47:14 +0530111
112 return dns;
113}
114
Gunnar Mills57d9c502018-09-14 14:42:34 -0500115} // namespace dhcp
116} // namespace network
117} // namespace phosphor