From: Francis Dupont Date: Thu, 23 Feb 2017 21:00:09 +0000 (+0100) Subject: [1205a] Rebased trac1205 into trac1205a (more things to add anyway) X-Git-Tag: trac5145b_base^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f14f52236f90a1205ac78e77461e2fc1e838d126;p=thirdparty%2Fkea.git [1205a] Rebased trac1205 into trac1205a (more things to add anyway) --- diff --git a/src/lib/dhcpsrv/Makefile.am b/src/lib/dhcpsrv/Makefile.am index 6c8f48bb0f..ca97321646 100644 --- a/src/lib/dhcpsrv/Makefile.am +++ b/src/lib/dhcpsrv/Makefile.am @@ -85,6 +85,7 @@ libkea_dhcpsrv_la_SOURCES += alloc_engine.cc alloc_engine.h libkea_dhcpsrv_la_SOURCES += alloc_engine_log.cc alloc_engine_log.h libkea_dhcpsrv_la_SOURCES += base_host_data_source.h libkea_dhcpsrv_la_SOURCES += callout_handle_store.h +libkea_dhcpsrv_la_SOURCES += cfg_to_element.h libkea_dhcpsrv_la_SOURCES += cfg_4o6.h libkea_dhcpsrv_la_SOURCES += cfg_db_access.cc cfg_db_access.h libkea_dhcpsrv_la_SOURCES += cfg_duid.cc cfg_duid.h @@ -222,6 +223,7 @@ EXTRA_DIST += logging.spec # following headers are anticipated to be useful for the user libraries. libkea_dhcpsrv_includedir = $(pkgincludedir)/dhcpsrv libkea_dhcpsrv_include_HEADERS = \ + cfg_to_element.h \ cfg_option.h \ cfg_4o6.h \ d2_client_cfg.h \ diff --git a/src/lib/dhcpsrv/cfg_to_element.h b/src/lib/dhcpsrv/cfg_to_element.h new file mode 100644 index 0000000000..ef3e1ad9d9 --- /dev/null +++ b/src/lib/dhcpsrv/cfg_to_element.h @@ -0,0 +1,75 @@ +// Copyright (C) 2017 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 CFG_TO_ELEMENT_H +#define CFG_TO_ELEMENT_H + +#include +#include +#include + +namespace isc { + +/// @brief Cannot unparse error +/// +/// This exception is expected to be thrown when toElement fails +/// and to skip flawed elements is not wanted. +class ToElementError : public isc::Exception { +public: + ToElementError(const char* file, size_t line, const char* what) : + isc::Exception(file, line, what) { }; +}; + +namespace dhcp { + +/// @name Constants for unparsing styles +/// +//@{ +/// Default +static const uint32_t TO_ELEMENT_DEFAULT = 0x00000000; +/// Add default values +static const uint32_t TO_ELEMENT_ADD_DEFAULTS = 0x00000001; +/// Ignore disables +static const uint32_t TO_ELEMENT_IGNORE_DISABLE = 0x00000002; +/// Don't copy +static const uint32_t TO_ELEMENT_DO_NOT_COPY = 0x00000004; + +/// Get option names +static const uint32_t TO_ELEMENT_OPTION_NAMES = 0x00000100; +/// Get ranges as prefixs +static const uint32_t TO_ELEMENT_TRY_PREFIXES = 0x00000200; + +/// Skip (vs throw) on errors +static const uint32_t TO_ELEMENT_SKIP_ERRORS = 0x80000000; +//@} + + +/// @brief Abstract class for configuration Cfg_* classes +/// +template +struct CfgToElement { + /// Destructor + virtual ~CfgToElement() { } + + /// @brief Unparse a configuration objet + /// + /// Returns an element which must parse into the same objet, i.e. + /// @code + /// for all valid config C parse(toElement(parse(C)) == parse(C) + /// @endcode + /// + /// @param extras extra arguments + /// @param flags a bitfield which can be used to modify the result + /// @return a pointer to a configuration which can be parsed into + /// the initial configuration object + virtual isc::data::ElementPtr toElement(Args... extras, + const uint32_t flags) const = 0; +}; + +}; // namespace isc::dhcp +}; // namespace isc + +#endif // CFG_TO_ELEMENT_H diff --git a/src/lib/dhcpsrv/libdhcpsrv.dox b/src/lib/dhcpsrv/libdhcpsrv.dox index c7d56a1314..6f3eec57d5 100644 --- a/src/lib/dhcpsrv/libdhcpsrv.dox +++ b/src/lib/dhcpsrv/libdhcpsrv.dox @@ -1,4 +1,4 @@ -// Copyright (C) 2012-2016 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2012-2017 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 @@ -79,6 +79,15 @@ configuration. For example: the value of 1 identifies an immediate predecessor of the current configuration, the value of 2 identifies the one that occurred before it etc. +All configuration classes are derived from the abstract base class +\ref isc::dhcp::CfgBase and define the unparse virtual method +which returns a \ref isc::data::ConstElementPtr which must be +parsed into the same object, i.e. fullfil this property: +@code +for all valid C: parse(unparse(parse(C))) == parse(C) +@endcode + + @section hostmgr Host Manager Host Manager implemented by the \ref isc::dhcp::HostMgr is a singleton object