diff options
Diffstat (limited to 'src/bin/netconf/netconf_controller.h')
-rw-r--r-- | src/bin/netconf/netconf_controller.h | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/src/bin/netconf/netconf_controller.h b/src/bin/netconf/netconf_controller.h new file mode 100644 index 0000000..ca1f725 --- /dev/null +++ b/src/bin/netconf/netconf_controller.h @@ -0,0 +1,85 @@ +// Copyright (C) 2018-2022 Internet Systems Consortium, Inc. ("ISC") +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#ifndef NETCONF_CONTROLLER_H +#define NETCONF_CONTROLLER_H + +#include <netconf/netconf_process.h> +#include <process/d_controller.h> + +namespace isc { +namespace netconf { + +/// @brief Process Controller for Netconf Process. +/// +/// This class is the Netconf specific derivation of the DControllerBase. +/// It creates and manages an instance of the Netconf application process, +/// NetconfProcess. +class NetconfController : public process::DControllerBase { +public: + + /// @brief Static singleton instance method. + /// + /// This method returns the base class singleton instance member. + /// It instantiates the singleton and sets the base class instance + /// member upon first invocation. + /// + /// @return returns the pointer reference to the singleton instance. + static process::DControllerBasePtr& instance(); + + /// @brief Destructor + virtual ~NetconfController() = default; + + /// @brief Returns pointer to an instance of the underlying process object. + NetconfProcessPtr getNetconfProcess(); + + /// @brief Defines the application name, this is passed into base class + /// and appears in log statements. + static const char* netconf_app_name_; + + /// @brief Defines the executable name. This is passed into the base class + /// by convention this should match the executable name. + static const char* netconf_bin_name_; + + /// @brief Parses the configuration file using Netconf::ParserContext (bison) + /// + /// @param name name of the text file to be parsed + /// @return Element tree structure representing parsed configuration + isc::data::ConstElementPtr + parseFile(const std::string& name) override final; + + /// @brief Redefined application-level signal processing method. + /// + /// This method ignores SIGHUP as configuration reloading is not yet + /// supported. + /// @param signum signal number to process. + void processSignal(int signum) override final; + +private: + + /// @brief Creates an instance of the Netconf application process. + /// + /// This method is invoked during the process initialization step of + /// the controller launch. + /// + /// @return returns a DProcessBase* to the application process created. + /// Note the caller is responsible for destructing the process. This + /// is handled by the base class, which wraps this pointer with a smart + /// pointer. + process::DProcessBase* createProcess() override final; + + /// @brief Constructor is declared private to maintain the integrity of + /// the singleton instance. + NetconfController(); +}; // NetconfController + +// @Defines a shared pointer to NetconfController +using NetconfControllerPtr = std::shared_ptr<NetconfController>; + +} // namespace netconf +} // namespace isc + +#endif // NETCONF_CONTROLLER_H |