]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#1928] Config backend pool for DHCPv6 extended
authorMarcin Siodelski <marcin@isc.org>
Wed, 7 Jul 2021 11:08:55 +0000 (13:08 +0200)
committerMarcin Siodelski <marcin@isc.org>
Wed, 21 Jul 2021 11:03:29 +0000 (13:03 +0200)
The client class specific calls were added to the config backend pool for
DHCPv6.

src/lib/dhcpsrv/config_backend_pool_dhcp6.cc
src/lib/dhcpsrv/config_backend_pool_dhcp6.h
src/lib/dhcpsrv/testutils/test_config_backend_dhcp6.cc

index 0539bc8697cbadbdf23382135a5d41ae14ee7065..05513e12cb2e6f0cf5a830dbb26b5d82efaab670 100644 (file)
@@ -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<ClientClassDefPtr, const std::string&>
+        (&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<ClientClassDictionary>
+        (&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<ClientClassDictionary, const boost::posix_time::ptime&>
+        (&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<void, const ClientClassDefPtr&, const std::string&>
+        (&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<uint64_t, const std::string&>
+            (&ConfigBackendDHCPv6::deleteClientClass6, backend_selector,
+             server_selector, name));
+}
+
+uint64_t
+ConfigBackendPoolDHCPv6::deleteAllClientClasses6(const BackendSelector& backend_selector,
+                                                 const ServerSelector& server_selector) {
+    return (createUpdateDeleteProperty<uint64_t>
+            (&ConfigBackendDHCPv6::deleteAllClientClasses6, backend_selector, server_selector));
+}
+
 uint64_t
 ConfigBackendPoolDHCPv6::deleteServer6(const BackendSelector& backend_selector,
                                        const ServerTag& server_tag) {
index 1805b3d328ee44b6f31a4f37acba7a5f93fc4d76..fbdaa593f5e4e84a410b093355165c1ae86f1cf2 100644 (file)
@@ -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 <dhcp/option.h>
 #include <dhcp/option_definition.h>
 #include <dhcpsrv/cfg_option.h>
+#include <dhcpsrv/client_class_def.h>
 #include <dhcpsrv/config_backend_dhcp6.h>
 #include <dhcpsrv/shared_network.h>
 #include <dhcpsrv/subnet.h>
@@ -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.
index d69b286899e352e5d8bf887a29b2644c90bb5368..db87fac7d7201722820baad6d7dd91e7f846cb9e 100644 (file)
@@ -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()) {