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