return (list_);
}
+bool
+ClientClassDictionary::empty() const {
+ return (list_->empty());
+}
+
bool
ClientClassDictionary::dependOnClass(const std::string& name,
std::string& dependent_class) const {
/// @return ClientClassDefListPtr to the list of classes
const ClientClassDefListPtr& getClasses() const;
+ /// @brief Checks if the class dictionary is empty.
+ ///
+ /// @return true if there are no classes, false otherwise.
+ bool empty() const;
+
/// @brief Checks direct dependency.
///
/// @param name The client class name.
virtual uint64_t
deleteAllClientClasses4(const db::ServerSelector& server_selector) = 0;
-
/// @brief Deletes a server from the backend.
///
/// @param server_tag Tag of the server to be deleted.
-// Copyright (C) 2018-2020 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2018-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
return (parameters);
}
+ClientClassDefPtr
+ConfigBackendPoolDHCPv4::getClientClass4(const BackendSelector& backend_selector,
+ const ServerSelector& server_selector,
+ const std::string& name) const {
+ ClientClassDefPtr client_class;
+ getPropertyPtrConst<ClientClassDefPtr, const std::string&>
+ (&ConfigBackendDHCPv4::getClientClass4, backend_selector, server_selector,
+ client_class, name);
+ return (client_class);
+}
+
+ClientClassDictionary
+ConfigBackendPoolDHCPv4::getAllClientClasses4(const BackendSelector& backend_selector,
+ const ServerSelector& server_selector) const {
+ ClientClassDictionary client_classes;
+ getAllPropertiesConst<ClientClassDictionary>
+ (&ConfigBackendDHCPv4::getAllClientClasses4, backend_selector, server_selector,
+ client_classes);
+ return (client_classes);
+
+}
+
+ClientClassDictionary
+ConfigBackendPoolDHCPv4::getModifiedClientClasses4(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&>
+ (&ConfigBackendDHCPv4::getModifiedClientClasses4, backend_selector, server_selector,
+ client_classes, modification_time);
+ return (client_classes);
+}
+
AuditEntryCollection
ConfigBackendPoolDHCPv4::
getRecentAuditEntries(const db::BackendSelector& backend_selector,
server_selector, value);
}
+void
+ConfigBackendPoolDHCPv4::createUpdateClientClass4(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&>
+ (&ConfigBackendDHCPv4::createUpdateClientClass4, backend_selector,
+ server_selector, client_class, follow_class_name);
+}
+
void
ConfigBackendPoolDHCPv4::createUpdateServer4(const BackendSelector& backend_selector,
const ServerPtr& server) {
server_selector));
}
+uint64_t
+ConfigBackendPoolDHCPv4::deleteClientClass4(const BackendSelector& backend_selector,
+ const ServerSelector& server_selector,
+ const std::string& name) {
+ return (createUpdateDeleteProperty<uint64_t, const std::string&>
+ (&ConfigBackendDHCPv4::deleteClientClass4, backend_selector,
+ server_selector, name));
+}
+
+uint64_t
+ConfigBackendPoolDHCPv4::deleteAllClientClasses4(const BackendSelector& backend_selector,
+ const ServerSelector& server_selector) {
+ return (createUpdateDeleteProperty<uint64_t>
+ (&ConfigBackendDHCPv4::deleteAllClientClasses4, backend_selector, server_selector));
+}
+
uint64_t
ConfigBackendPoolDHCPv4::deleteServer4(const BackendSelector& backend_selector,
const ServerTag& server_tag) {
-// Copyright (C) 2018-2020 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2018-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
#include <dhcp/option.h>
#include <dhcp/option_definition.h>
#include <dhcpsrv/cfg_option.h>
+#include <dhcpsrv/client_class_def.h>
#include <dhcpsrv/config_backend_dhcp4.h>
#include <dhcpsrv/shared_network.h>
#include <dhcpsrv/subnet.h>
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
+ getClientClass4(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
+ getAllClientClasses4(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
+ getModifiedClientClasses4(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.
const db::ServerSelector& server_selector,
const data::StampedValuePtr& value);
+ /// @brief Creates or updates DHCPv4 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
+ createUpdateClientClass4(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.
deleteAllGlobalParameters4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector);
+ /// @brief Deletes DHCPv4 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
+ deleteClientClass4(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
+ deleteAllClientClasses4(const db::BackendSelector& backend_selector,
+ const db::ServerSelector& server_selector);
+
/// @brief Deletes a server from the backend.
///
/// @param backend_selector Backend selector.
const ClientClassDefListPtr classes = dictionary->getClasses();
ASSERT_TRUE(classes);
EXPECT_EQ(0, classes->size());
+ EXPECT_TRUE(classes->empty());
// Verify that we can add classes with both addClass variants
// First addClass(name, expression, cfg_option)
// Map should show 3 entries.
EXPECT_EQ(3, classes->size());
+ EXPECT_FALSE(classes->empty());
// Verify we can find them all.
ASSERT_NO_THROW(cclass = dictionary->findClass("cc1"));
// Verify that we can remove a class
ASSERT_NO_THROW(dictionary->removeClass("cc3"));
EXPECT_EQ(2, classes->size());
+ EXPECT_FALSE(classes->empty());
// Shouldn't be able to find anymore
ASSERT_NO_THROW(cclass = dictionary->findClass("cc3"));
// without harm.
ASSERT_NO_THROW(dictionary->removeClass("cc3"));
EXPECT_EQ(2, classes->size());
+ EXPECT_FALSE(classes->empty());
}
// Verifies copy constructor and equality tools (methods/operators)
TestConfigBackendDHCPv4::getClientClass4(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()) {