From: Marcin Siodelski Date: Wed, 7 Jul 2021 11:08:55 +0000 (+0200) Subject: [#1928] Config backend pool for DHCPv6 extended X-Git-Tag: Kea-1.9.10~73 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ea147851edd37c8500da71c6fb210a4839abcac5;p=thirdparty%2Fkea.git [#1928] Config backend pool for DHCPv6 extended The client class specific calls were added to the config backend pool for DHCPv6. --- diff --git a/src/lib/dhcpsrv/config_backend_pool_dhcp6.cc b/src/lib/dhcpsrv/config_backend_pool_dhcp6.cc index 0539bc8697..05513e12cb 100644 --- a/src/lib/dhcpsrv/config_backend_pool_dhcp6.cc +++ b/src/lib/dhcpsrv/config_backend_pool_dhcp6.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2019-2020 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2019-2021 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 @@ -200,6 +200,39 @@ getModifiedGlobalParameters6(const db::BackendSelector& backend_selector, return (parameters); } +ClientClassDefPtr +ConfigBackendPoolDHCPv6::getClientClass6(const BackendSelector& backend_selector, + const ServerSelector& server_selector, + const std::string& name) const { + ClientClassDefPtr client_class; + getPropertyPtrConst + (&ConfigBackendDHCPv6::getClientClass6, backend_selector, server_selector, + client_class, name); + return (client_class); +} + +ClientClassDictionary +ConfigBackendPoolDHCPv6::getAllClientClasses6(const BackendSelector& backend_selector, + const ServerSelector& server_selector) const { + ClientClassDictionary client_classes; + getAllPropertiesConst + (&ConfigBackendDHCPv6::getAllClientClasses6, backend_selector, server_selector, + client_classes); + return (client_classes); + +} + +ClientClassDictionary +ConfigBackendPoolDHCPv6::getModifiedClientClasses6(const BackendSelector& backend_selector, + const ServerSelector& server_selector, + const boost::posix_time::ptime& modification_time) const { + ClientClassDictionary client_classes; + getMultiplePropertiesConst + (&ConfigBackendDHCPv6::getModifiedClientClasses6, backend_selector, server_selector, + client_classes, modification_time); + return (client_classes); +} + AuditEntryCollection ConfigBackendPoolDHCPv6:: getRecentAuditEntries(const db::BackendSelector& backend_selector, @@ -321,6 +354,16 @@ ConfigBackendPoolDHCPv6::createUpdateGlobalParameter6(const BackendSelector& bac server_selector, value); } +void +ConfigBackendPoolDHCPv6::createUpdateClientClass6(const BackendSelector& backend_selector, + const ServerSelector& server_selector, + const ClientClassDefPtr& client_class, + const std::string& follow_class_name) { + createUpdateDeleteProperty + (&ConfigBackendDHCPv6::createUpdateClientClass6, backend_selector, + server_selector, client_class, follow_class_name); +} + void ConfigBackendPoolDHCPv6::createUpdateServer6(const BackendSelector& backend_selector, const ServerPtr& server) { @@ -472,6 +515,22 @@ ConfigBackendPoolDHCPv6::deleteAllGlobalParameters6(const BackendSelector& backe server_selector)); } +uint64_t +ConfigBackendPoolDHCPv6::deleteClientClass6(const BackendSelector& backend_selector, + const ServerSelector& server_selector, + const std::string& name) { + return (createUpdateDeleteProperty + (&ConfigBackendDHCPv6::deleteClientClass6, backend_selector, + server_selector, name)); +} + +uint64_t +ConfigBackendPoolDHCPv6::deleteAllClientClasses6(const BackendSelector& backend_selector, + const ServerSelector& server_selector) { + return (createUpdateDeleteProperty + (&ConfigBackendDHCPv6::deleteAllClientClasses6, backend_selector, server_selector)); +} + uint64_t ConfigBackendPoolDHCPv6::deleteServer6(const BackendSelector& backend_selector, const ServerTag& server_tag) { diff --git a/src/lib/dhcpsrv/config_backend_pool_dhcp6.h b/src/lib/dhcpsrv/config_backend_pool_dhcp6.h index 1805b3d328..fbdaa593f5 100644 --- a/src/lib/dhcpsrv/config_backend_pool_dhcp6.h +++ b/src/lib/dhcpsrv/config_backend_pool_dhcp6.h @@ -1,4 +1,4 @@ -// Copyright (C) 2019-2020 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2019-2021 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 @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -220,6 +221,37 @@ public: const db::ServerSelector& server_selector, const boost::posix_time::ptime& modification_time) const; + /// @brief Retrieves a client class by name. + /// + /// @param backend_selector Backend selector. + /// @param server_selector Server selector. + /// @param name Client class name. + /// @return Pointer to the retrieved client class. + virtual ClientClassDefPtr + getClientClass6(const db::BackendSelector& backend_selector, + const db::ServerSelector& server_selector, + const std::string& name) const; + + /// @brief Retrieves all client classes. + /// + /// @param backend_selector Backend selector. + /// @param selector Server selector. + /// @return Collection of client classes. + virtual ClientClassDictionary + getAllClientClasses6(const db::BackendSelector& backend_selector, + const db::ServerSelector& server_selector) const; + + /// @brief Retrieves client classes modified after specified time. + /// + /// @param backend_selector Backend selector. + /// @param selector Server selector. + /// @param modification_time Modification time. + /// @return Collection of client classes. + virtual ClientClassDictionary + getModifiedClientClasses6(const db::BackendSelector& backend_selector, + const db::ServerSelector& server_selector, + const boost::posix_time::ptime& modification_time) const; + /// @brief Retrieves the most recent audit entries. /// /// @param backend_selector Backend selector. @@ -363,6 +395,21 @@ public: const db::ServerSelector& server_selector, const data::StampedValuePtr& value); + /// @brief Creates or updates DHCPv6 client class. + /// + /// @param backend_selector Backend selector. + /// @param server_selector Server selector. + /// @param client_class Client class to be added or updated. + /// @param follow_client_class name of the class after which the + /// new or updated class should be positioned. An empty value + /// causes the class to be appended at the end of the class + /// hierarchy. + virtual void + createUpdateClientClass6(const db::BackendSelector& backend_selector, + const db::ServerSelector& server_selector, + const ClientClassDefPtr& client_class, + const std::string& follow_class_name); + /// @brief Creates or updates a server. /// /// @param backend_selector Backend selector. @@ -557,6 +604,26 @@ public: deleteAllGlobalParameters6(const db::BackendSelector& backend_selector, const db::ServerSelector& server_selector); + /// @brief Deletes DHCPv6 client class. + /// + /// @param backend_selector Backend selector. + /// @param server_selector Server selector. + /// @param name Name of the class to be deleted. + /// @return Number of deleted client classes. + virtual uint64_t + deleteClientClass6(const db::BackendSelector& backend_selector, + const db::ServerSelector& server_selector, + const std::string& name); + + /// @brief Deletes all client classes. + /// + /// @param backend_selector Backend selector. + /// @param server_selector Server selector. + /// @return Number of deleted client classes. + virtual uint64_t + deleteAllClientClasses6(const db::BackendSelector& backend_selector, + const db::ServerSelector& server_selector); + /// @brief Deletes a server from the backend. /// /// @param backend_selector Backend selector. diff --git a/src/lib/dhcpsrv/testutils/test_config_backend_dhcp6.cc b/src/lib/dhcpsrv/testutils/test_config_backend_dhcp6.cc index d69b286899..db87fac7d7 100644 --- a/src/lib/dhcpsrv/testutils/test_config_backend_dhcp6.cc +++ b/src/lib/dhcpsrv/testutils/test_config_backend_dhcp6.cc @@ -512,7 +512,7 @@ ClientClassDefPtr TestConfigBackendDHCPv6::getClientClass6(const db::ServerSelector& server_selector, const std::string& name) const { auto client_class = classes_.findClass(name); - if (!client_class) { + if (!client_class || server_selector.amAny()) { return (client_class); } if (server_selector.amUnassigned()) {