xref: /openbmc/phosphor-networkd/src/dhcp_configuration.cpp (revision 1bbe3d1e3bce52044874294e353e80af9ee706a2)
1*1bbe3d1eSWilliam A. Kennington III #include "config.h"
2*1bbe3d1eSWilliam A. Kennington III 
3*1bbe3d1eSWilliam A. Kennington III #include "dhcp_configuration.hpp"
4*1bbe3d1eSWilliam A. Kennington III 
5*1bbe3d1eSWilliam A. Kennington III #include "network_manager.hpp"
6*1bbe3d1eSWilliam A. Kennington III 
7*1bbe3d1eSWilliam A. Kennington III #include <phosphor-logging/elog-errors.hpp>
8*1bbe3d1eSWilliam A. Kennington III #include <phosphor-logging/log.hpp>
9*1bbe3d1eSWilliam A. Kennington III #include <xyz/openbmc_project/Common/error.hpp>
10*1bbe3d1eSWilliam A. Kennington III 
11*1bbe3d1eSWilliam A. Kennington III namespace phosphor
12*1bbe3d1eSWilliam A. Kennington III {
13*1bbe3d1eSWilliam A. Kennington III namespace network
14*1bbe3d1eSWilliam A. Kennington III {
15*1bbe3d1eSWilliam A. Kennington III namespace dhcp
16*1bbe3d1eSWilliam A. Kennington III {
17*1bbe3d1eSWilliam A. Kennington III 
18*1bbe3d1eSWilliam A. Kennington III using namespace phosphor::network;
19*1bbe3d1eSWilliam A. Kennington III using namespace phosphor::logging;
20*1bbe3d1eSWilliam A. Kennington III using namespace sdbusplus::xyz::openbmc_project::Common::Error;
21*1bbe3d1eSWilliam A. Kennington III bool Configuration::sendHostNameEnabled(bool value)
22*1bbe3d1eSWilliam A. Kennington III {
23*1bbe3d1eSWilliam A. Kennington III     if (value == sendHostNameEnabled())
24*1bbe3d1eSWilliam A. Kennington III     {
25*1bbe3d1eSWilliam A. Kennington III         return value;
26*1bbe3d1eSWilliam A. Kennington III     }
27*1bbe3d1eSWilliam A. Kennington III 
28*1bbe3d1eSWilliam A. Kennington III     auto name = ConfigIntf::sendHostNameEnabled(value);
29*1bbe3d1eSWilliam A. Kennington III     manager.writeToConfigurationFile();
30*1bbe3d1eSWilliam A. Kennington III 
31*1bbe3d1eSWilliam A. Kennington III     return name;
32*1bbe3d1eSWilliam A. Kennington III }
33*1bbe3d1eSWilliam A. Kennington III 
34*1bbe3d1eSWilliam A. Kennington III bool Configuration::hostNameEnabled(bool value)
35*1bbe3d1eSWilliam A. Kennington III {
36*1bbe3d1eSWilliam A. Kennington III     if (value == hostNameEnabled())
37*1bbe3d1eSWilliam A. Kennington III     {
38*1bbe3d1eSWilliam A. Kennington III         return value;
39*1bbe3d1eSWilliam A. Kennington III     }
40*1bbe3d1eSWilliam A. Kennington III 
41*1bbe3d1eSWilliam A. Kennington III     auto name = ConfigIntf::hostNameEnabled(value);
42*1bbe3d1eSWilliam A. Kennington III     manager.writeToConfigurationFile();
43*1bbe3d1eSWilliam A. Kennington III     manager.restartSystemdUnit(phosphor::network::networkdService);
44*1bbe3d1eSWilliam A. Kennington III 
45*1bbe3d1eSWilliam A. Kennington III     return name;
46*1bbe3d1eSWilliam A. Kennington III }
47*1bbe3d1eSWilliam A. Kennington III 
48*1bbe3d1eSWilliam A. Kennington III bool Configuration::ntpEnabled(bool value)
49*1bbe3d1eSWilliam A. Kennington III {
50*1bbe3d1eSWilliam A. Kennington III     if (value == ntpEnabled())
51*1bbe3d1eSWilliam A. Kennington III     {
52*1bbe3d1eSWilliam A. Kennington III         return value;
53*1bbe3d1eSWilliam A. Kennington III     }
54*1bbe3d1eSWilliam A. Kennington III 
55*1bbe3d1eSWilliam A. Kennington III     auto ntp = ConfigIntf::ntpEnabled(value);
56*1bbe3d1eSWilliam A. Kennington III     manager.writeToConfigurationFile();
57*1bbe3d1eSWilliam A. Kennington III     manager.restartSystemdUnit(phosphor::network::networkdService);
58*1bbe3d1eSWilliam A. Kennington III     manager.restartSystemdUnit(phosphor::network::timeSynchdService);
59*1bbe3d1eSWilliam A. Kennington III 
60*1bbe3d1eSWilliam A. Kennington III     return ntp;
61*1bbe3d1eSWilliam A. Kennington III }
62*1bbe3d1eSWilliam A. Kennington III 
63*1bbe3d1eSWilliam A. Kennington III bool Configuration::dnsEnabled(bool value)
64*1bbe3d1eSWilliam A. Kennington III {
65*1bbe3d1eSWilliam A. Kennington III     if (value == dnsEnabled())
66*1bbe3d1eSWilliam A. Kennington III     {
67*1bbe3d1eSWilliam A. Kennington III         return value;
68*1bbe3d1eSWilliam A. Kennington III     }
69*1bbe3d1eSWilliam A. Kennington III 
70*1bbe3d1eSWilliam A. Kennington III     auto dns = ConfigIntf::dnsEnabled(value);
71*1bbe3d1eSWilliam A. Kennington III     manager.writeToConfigurationFile();
72*1bbe3d1eSWilliam A. Kennington III     manager.restartSystemdUnit(phosphor::network::networkdService);
73*1bbe3d1eSWilliam A. Kennington III 
74*1bbe3d1eSWilliam A. Kennington III     return dns;
75*1bbe3d1eSWilliam A. Kennington III }
76*1bbe3d1eSWilliam A. Kennington III 
77*1bbe3d1eSWilliam A. Kennington III bool Configuration::getDHCPPropFromConf(const std::string& prop)
78*1bbe3d1eSWilliam A. Kennington III {
79*1bbe3d1eSWilliam A. Kennington III     fs::path confPath = manager.getConfDir();
80*1bbe3d1eSWilliam A. Kennington III     auto interfaceStrList = getInterfaces();
81*1bbe3d1eSWilliam A. Kennington III     // get the first interface name, we need it to know config file name.
82*1bbe3d1eSWilliam A. Kennington III     auto interface = *interfaceStrList.begin();
83*1bbe3d1eSWilliam A. Kennington III     auto fileName = systemd::config::networkFilePrefix + interface +
84*1bbe3d1eSWilliam A. Kennington III                     systemd::config::networkFileSuffix;
85*1bbe3d1eSWilliam A. Kennington III 
86*1bbe3d1eSWilliam A. Kennington III     confPath /= fileName;
87*1bbe3d1eSWilliam A. Kennington III     // systemd default behaviour is all DHCP fields should be enabled by
88*1bbe3d1eSWilliam A. Kennington III     // default.
89*1bbe3d1eSWilliam A. Kennington III     auto propValue = true;
90*1bbe3d1eSWilliam A. Kennington III     config::Parser parser(confPath);
91*1bbe3d1eSWilliam A. Kennington III 
92*1bbe3d1eSWilliam A. Kennington III     auto rc = config::ReturnCode::SUCCESS;
93*1bbe3d1eSWilliam A. Kennington III     config::ValueList values{};
94*1bbe3d1eSWilliam A. Kennington III     std::tie(rc, values) = parser.getValues("DHCP", prop);
95*1bbe3d1eSWilliam A. Kennington III 
96*1bbe3d1eSWilliam A. Kennington III     if (rc != config::ReturnCode::SUCCESS)
97*1bbe3d1eSWilliam A. Kennington III     {
98*1bbe3d1eSWilliam A. Kennington III         log<level::DEBUG>("Unable to get the value from section DHCP",
99*1bbe3d1eSWilliam A. Kennington III                           entry("PROP=%s", prop.c_str()), entry("RC=%d", rc));
100*1bbe3d1eSWilliam A. Kennington III         return propValue;
101*1bbe3d1eSWilliam A. Kennington III     }
102*1bbe3d1eSWilliam A. Kennington III 
103*1bbe3d1eSWilliam A. Kennington III     if (values[0] == "false")
104*1bbe3d1eSWilliam A. Kennington III     {
105*1bbe3d1eSWilliam A. Kennington III         propValue = false;
106*1bbe3d1eSWilliam A. Kennington III     }
107*1bbe3d1eSWilliam A. Kennington III     return propValue;
108*1bbe3d1eSWilliam A. Kennington III }
109*1bbe3d1eSWilliam A. Kennington III } // namespace dhcp
110*1bbe3d1eSWilliam A. Kennington III } // namespace network
111*1bbe3d1eSWilliam A. Kennington III } // namespace phosphor
112