| #pragma once |
| |
| #include "config_parser.hpp" |
| |
| #include <sdbusplus/bus.hpp> |
| #include <sdbusplus/server/object.hpp> |
| #include <string> |
| #include <xyz/openbmc_project/Network/DHCPConfiguration/server.hpp> |
| |
| namespace phosphor |
| { |
| namespace network |
| { |
| |
| class Manager; // forward declaration of network manager. |
| |
| namespace dhcp |
| { |
| |
| using ConfigIntf = |
| sdbusplus::xyz::openbmc_project::Network::server::DHCPConfiguration; |
| |
| using Iface = sdbusplus::server::object::object<ConfigIntf>; |
| |
| /** @class Configuration |
| * @brief DHCP configuration. |
| * @details A concrete implementation for the |
| * xyz.openbmc_project.Network.DHCP DBus interface. |
| */ |
| class Configuration : public Iface |
| { |
| public: |
| Configuration() = default; |
| Configuration(const Configuration&) = delete; |
| Configuration& operator=(const Configuration&) = delete; |
| Configuration(Configuration&&) = delete; |
| Configuration& operator=(Configuration&&) = delete; |
| virtual ~Configuration() = default; |
| |
| /** @brief Constructor to put object onto bus at a dbus path. |
| * @param[in] bus - Bus to attach to. |
| * @param[in] objPath - Path to attach at. |
| * @param[in] parent - Parent object. |
| */ |
| Configuration(sdbusplus::bus::bus& bus, const std::string& objPath, |
| Manager& parent) : |
| Iface(bus, objPath.c_str(), true), |
| bus(bus), manager(parent) |
| { |
| ConfigIntf::dnsEnabled(getDHCPPropFromConf("UseDNS")); |
| ConfigIntf::ntpEnabled(getDHCPPropFromConf("UseNTP")); |
| ConfigIntf::hostNameEnabled(getDHCPPropFromConf("UseHostname")); |
| ConfigIntf::sendHostNameEnabled(getDHCPPropFromConf("SendHostname")); |
| emit_object_added(); |
| } |
| |
| /** @brief If true then DNS servers received from the DHCP server |
| * will be used and take precedence over any statically |
| * configured ones. |
| * @param[in] value - true if DNS server needed from DHCP server |
| * else false. |
| */ |
| bool dnsEnabled(bool value) override; |
| |
| /** @brief If true then NTP servers received from the DHCP server |
| will be used by systemd-timesyncd. |
| * @param[in] value - true if NTP server needed from DHCP server |
| * else false. |
| */ |
| bool ntpEnabled(bool value) override; |
| |
| /** @brief If true then Hostname received from the DHCP server will |
| * be set as the hostname of the system |
| * @param[in] value - true if hostname needed from the DHCP server |
| * else false. |
| * |
| */ |
| bool hostNameEnabled(bool value) override; |
| |
| /** @brief if true then it will cause an Option 12 field, i.e machine's |
| * hostname, will be included in the DHCP packet. |
| * @param[in] value - true if machine's host name needs to be included |
| * in the DHCP packet. |
| */ |
| bool sendHostNameEnabled(bool value) override; |
| |
| /** @brief read the DHCP Prop value from the configuration file |
| * @param[in] prop - DHCP Prop name. |
| */ |
| bool getDHCPPropFromConf(const std::string& prop); |
| |
| /* @brief Network Manager needed the below function to know the |
| * value of the properties (ntpEnabled,dnsEnabled,hostnameEnabled |
| sendHostNameEnabled). |
| * |
| */ |
| using ConfigIntf::dnsEnabled; |
| using ConfigIntf::hostNameEnabled; |
| using ConfigIntf::ntpEnabled; |
| using ConfigIntf::sendHostNameEnabled; |
| |
| private: |
| /** @brief sdbusplus DBus bus connection. */ |
| sdbusplus::bus::bus& bus; |
| |
| /** @brief Network Manager object. */ |
| phosphor::network::Manager& manager; |
| }; |
| |
| } // namespace dhcp |
| } // namespace network |
| } // namespace phosphor |