]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#93,!51] Fetching global options is now possible.
authorMarcin Siodelski <marcin@isc.org>
Tue, 2 Oct 2018 11:28:11 +0000 (13:28 +0200)
committerMarcin Siodelski <marcin@isc.org>
Mon, 8 Oct 2018 18:09:51 +0000 (20:09 +0200)
src/hooks/dhcp/mysql_cb/mysql_cb_dhcp4.cc
src/hooks/dhcp/mysql_cb/mysql_cb_dhcp4.h
src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp4_unittest.cc
src/lib/dhcpsrv/config_backend_dhcp4.h
src/lib/dhcpsrv/config_backend_pool_dhcp4.cc
src/lib/dhcpsrv/config_backend_pool_dhcp4.h

index 7fa569869bbeb79095ae1f52d1c19ce1af912aec..6309ec37a65605214e71b17c3e1674b3b1d6426d 100644 (file)
@@ -57,6 +57,9 @@ public:
         GET_OPTION_DEF4_CODE_SPACE,
         GET_ALL_OPTION_DEFS4,
         GET_MODIFIED_OPTION_DEFS4,
+        GET_OPTION4_CODE_SPACE,
+        GET_ALL_OPTIONS4,
+        GET_MODIFIED_OPTIONS4,
         GET_OPTION4_SUBNET_ID_CODE_SPACE,
         GET_OPTION4_SHARED_NETWORK_CODE_SPACE,
         INSERT_SUBNET4,
@@ -67,6 +70,7 @@ public:
         UPDATE_SUBNET4,
         UPDATE_SHARED_NETWORK4,
         UPDATE_OPTION_DEF4,
+        UPDATE_OPTION4,
         UPDATE_OPTION4_SUBNET_ID,
         UPDATE_OPTION4_SHARED_NETWORK,
         DELETE_SUBNET4_ID,
@@ -77,6 +81,7 @@ public:
         DELETE_ALL_SHARED_NETWORKS4,
         DELETE_OPTION_DEF4_CODE_NAME,
         DELETE_ALL_OPTION_DEFS4,
+        DELETE_OPTION4,
         DELETE_OPTION4_SUBNET_ID,
         DELETE_OPTION4_SHARED_NETWORK,
         DELETE_OPTIONS4_SUBNET_ID,
@@ -709,6 +714,43 @@ public:
         transaction.commit();
     }
 
+    /// @brief Sends query to insert or update global DHCP option.
+    ///
+    /// @param selector Server selector.
+    /// @param option Pointer to the option descriptor encapsulating the option.
+    void createUpdateOption4(const ServerSelector& selector,
+                             const OptionDescriptorPtr& option) {
+
+        MySqlBindingCollection in_bindings = {
+            MySqlBinding::createInteger<uint8_t>(option->option_->getType()),
+            createOptionValueBinding(option),
+            MySqlBinding::condCreateString(option->formatted_value_),
+            MySqlBinding::condCreateString(option->space_name_),
+            MySqlBinding::createInteger<uint8_t>(static_cast<uint8_t>(option->persistent_)),
+            MySqlBinding::createNull(),
+            MySqlBinding::createNull(),
+            MySqlBinding::createInteger<uint8_t>(0),
+            createInputContextBinding(option),
+            MySqlBinding::createNull(),
+            MySqlBinding::createNull(),
+            MySqlBinding::createTimestamp(option->getModificationTime())
+        };
+
+        OptionDescriptorPtr existing_option = getOption4(selector,
+                                                         option->option_->getType(),
+                                                         option->space_name_);
+        if (existing_option) {
+            in_bindings.push_back(MySqlBinding::createInteger<uint8_t>(option->option_->getType()));
+            in_bindings.push_back(MySqlBinding::condCreateString(option->space_name_));
+            conn_.updateDeleteQuery(MySqlConfigBackendDHCPv4Impl::UPDATE_OPTION4,
+                                    in_bindings);
+
+        } else {
+            conn_.insertQuery(MySqlConfigBackendDHCPv4Impl::INSERT_OPTION4,
+                              in_bindings);
+        }
+    }
+
     /// @brief Sends query to insert or update DHCP option in a subnet.
     ///
     /// @param selector Server selector.
@@ -839,6 +881,58 @@ public:
         return (option_defs);
     }
 
+    /// @brief Sends query to retrieve single global option by code and
+    /// option space.
+    ///
+    /// @param selector Server selector.
+    /// @param code Option code.
+    /// @param space Option space name.
+    ///
+    /// @return Pointer to the returned option or NULL if such option
+    /// doesn't exist.
+    OptionDescriptorPtr
+    getOption4(const ServerSelector& selector, const uint16_t code,
+               const std::string& space) {
+        OptionContainer options;
+        MySqlBindingCollection in_bindings = {
+            MySqlBinding::createInteger<uint8_t>(static_cast<uint8_t>(code)),
+            MySqlBinding::createString(space)
+        };
+        getOptions(GET_OPTION4_CODE_SPACE, in_bindings, Option::V4, options);
+        return (options.empty() ? OptionDescriptorPtr() :
+                OptionDescriptorPtr(new OptionDescriptor(*options.begin())));
+    }
+
+    /// @brief Sends query to retrieve all global options.
+    ///
+    /// @param selector Server selector.
+    /// @return Container holding returned options.
+    OptionContainer
+    getAllOptions4(const ServerSelector& selector) {
+        OptionContainer options;
+        MySqlBindingCollection in_bindings;
+        getOptions(MySqlConfigBackendDHCPv4Impl::GET_ALL_OPTIONS4,
+                   in_bindings, Option::V4, options);
+        return (options);
+    }
+
+    /// @brief Sends query to retrieve global options with modification
+    /// time later than specified timestamp.
+    ///
+    /// @param selector Server selector.
+    /// @return Container holding returned options.
+    OptionContainer
+    getModifiedOptions4(const ServerSelector& selector,
+                        const boost::posix_time::ptime& modification_time) {
+        OptionContainer options;
+        MySqlBindingCollection in_bindings = {
+            MySqlBinding::createTimestamp(modification_time)
+        };
+        getOptions(MySqlConfigBackendDHCPv4Impl::GET_MODIFIED_OPTIONS4,
+                   in_bindings, Option::V4, options);
+        return (options);
+    }
+
     /// @brief Sends query to retrieve single option by code and option space
     /// for a giben subnet id.
     ///
@@ -966,6 +1060,23 @@ public:
         return (conn_.updateDeleteQuery(DELETE_OPTION_DEF4_CODE_NAME, in_bindings));
     }
 
+    /// @brief Deletes global option.
+    ///
+    /// @param selector Server selector.
+    /// @param code Code of the deleted option.
+    /// @param space Option space of the deleted option.
+    void deleteOption4(const db::ServerSelector& /* selector */,
+                       const uint16_t code,
+                       const std::string& space) {
+        MySqlBindingCollection in_bindings = {
+            MySqlBinding::createInteger<uint8_t>(code),
+            MySqlBinding::createString(space)
+        };
+
+        // Run DELETE.
+        conn_.updateDeleteQuery(DELETE_OPTION4, in_bindings);
+    }
+
     /// @brief Deletes subnet level option.
     ///
     /// @param selector Server selector.
@@ -1373,6 +1484,66 @@ TaggedStatementArray tagged_statements = { {
       "WHERE modification_ts > ? "
       "ORDER BY d.id" },
 
+    // Retrieves global option by code and space.
+    { MySqlConfigBackendDHCPv4Impl::GET_OPTION4_CODE_SPACE,
+      "SELECT"
+      "  option_id,"
+      "  code,"
+      "  value,"
+      "  formatted_value,"
+      "  space,"
+      "  persistent,"
+      "  dhcp4_subnet_id,"
+      "  scope_id,"
+      "  user_context,"
+      "  shared_network_name,"
+      "  pool_id,"
+      "  modification_ts "
+      "FROM dhcp4_options "
+      "WHERE scope_id = 0 AND code = ? AND space = ? "
+      "ORDER BY option_id"
+    },
+
+    // Retrieves all global options.
+    { MySqlConfigBackendDHCPv4Impl::GET_ALL_OPTIONS4, 
+      "SELECT"
+      "  option_id,"
+      "  code,"
+      "  value,"
+      "  formatted_value,"
+      "  space,"
+      "  persistent,"
+      "  dhcp4_subnet_id,"
+      "  scope_id,"
+      "  user_context,"
+      "  shared_network_name,"
+      "  pool_id,"
+      "  modification_ts "
+      "FROM dhcp4_options "
+      "WHERE scope_id = 0 "
+      "ORDER BY option_id"
+    },
+
+    // Retrieves modified options.
+    { MySqlConfigBackendDHCPv4Impl::GET_MODIFIED_OPTIONS4,
+      "SELECT"
+      "  option_id,"
+      "  code,"
+      "  value,"
+      "  formatted_value,"
+      "  space,"
+      "  persistent,"
+      "  dhcp4_subnet_id,"
+      "  scope_id,"
+      "  user_context,"
+      "  shared_network_name,"
+      "  pool_id,"
+      "  modification_ts "
+      "FROM dhcp4_options "
+      "WHERE scope_id = 0 AND modification_ts > ? "
+      "ORDER BY option_id"
+    },
+
     // Retrieves an option for a given subnet, option code and space.
     { MySqlConfigBackendDHCPv4Impl::GET_OPTION4_SUBNET_ID_CODE_SPACE,
       "SELECT"
@@ -1552,6 +1723,24 @@ TaggedStatementArray tagged_statements = { {
       "  user_context = ? "
       "WHERE code = ? AND space = ?" },
 
+    // Update existing global option.
+    { MySqlConfigBackendDHCPv4Impl::UPDATE_OPTION4,
+      "UPDATE dhcp4_options SET"
+      "  code = ?,"
+      "  value = ?,"
+      "  formatted_value = ?,"
+      "  space = ?,"
+      "  persistent = ?,"
+      "  dhcp_client_class = ?,"
+      "  dhcp4_subnet_id = ?,"
+      "  scope_id = ?,"
+      "  user_context = ?,"
+      "  shared_network_name = ?,"
+      "  pool_id = ?,"
+      "  modification_ts = ? "
+      "WHERE scope_id = 0 AND code = ? AND space = ?"
+    },
+
     // Update existing subnet level option.
     { MySqlConfigBackendDHCPv4Impl::UPDATE_OPTION4_SUBNET_ID,
       "UPDATE dhcp4_options SET"
@@ -1625,6 +1814,11 @@ TaggedStatementArray tagged_statements = { {
     { MySqlConfigBackendDHCPv4Impl::DELETE_ALL_OPTION_DEFS4,
       "DELETE FROM dhcp4_option_def" },
 
+    // Delete single global option.
+    { MySqlConfigBackendDHCPv4Impl::DELETE_OPTION4,
+      "DELETE FROM dhcp4_options "
+      "WHERE scope_id = 0  AND code = ? AND space = ?" },
+
     // Delete single option from a subnet.
     { MySqlConfigBackendDHCPv4Impl::DELETE_OPTION4_SUBNET_ID,
       "DELETE FROM dhcp4_options "
@@ -1745,6 +1939,25 @@ getModifiedOptionDefs4(const ServerSelector& server_selector,
     return (impl_->getModifiedOptionDefs4(server_selector, modification_time));
 }
 
+OptionDescriptorPtr
+MySqlConfigBackendDHCPv4::getOption4(const ServerSelector& selector,
+                                     const uint16_t code,
+                                     const std::string& space) const {
+    return (impl_->getOption4(selector, code, space));
+}
+
+OptionContainer
+MySqlConfigBackendDHCPv4::getAllOptions4(const ServerSelector& selector) const {
+    return (impl_->getAllOptions4(selector));
+}
+
+OptionContainer
+MySqlConfigBackendDHCPv4::
+getModifiedOptions4(const ServerSelector& selector,
+                    const boost::posix_time::ptime& modification_time) const {
+    return (impl_->getModifiedOptions4(selector, modification_time));
+}
+
 util::OptionalValue<std::string>
 MySqlConfigBackendDHCPv4::getGlobalStringParameter4(const ServerSelector& /* server_selector */,
                                                     const std::string& /* name */) const {
@@ -1781,8 +1994,9 @@ MySqlConfigBackendDHCPv4::createUpdateOptionDef4(const ServerSelector& server_se
 }
 
 void
-MySqlConfigBackendDHCPv4::createUpdateOption4(const ServerSelector& /* server_selector */,
-                                              const OptionDescriptorPtr& /* option */) {
+MySqlConfigBackendDHCPv4::createUpdateOption4(const ServerSelector& selector,
+                                              const OptionDescriptorPtr& option) {
+    impl_->createUpdateOption4(selector, option);
 }
 
 void
@@ -1861,10 +2075,10 @@ MySqlConfigBackendDHCPv4::deleteAllOptionDefs4(const ServerSelector& /* server_s
 }
 
 uint64_t
-MySqlConfigBackendDHCPv4::deleteOption4(const ServerSelector& /* server_selector */,
-                                        const uint16_t /* code */,
-                                        const std::string& /* space */) {
-    return (0);
+MySqlConfigBackendDHCPv4::deleteOption4(const ServerSelector& selector,
+                                        const uint16_t code,
+                                        const std::string& space) {
+    impl_->deleteOption4(selector, code, space);
 }
 
 uint64_t
index 09ee3d48d497d29a0455a0f1c82f160532ce2e76..7b025277ce6ac060fc886603906a81ca5909e075 100644 (file)
@@ -116,6 +116,33 @@ public:
     getModifiedOptionDefs4(const db::ServerSelector& server_selector,
                            const boost::posix_time::ptime& modification_time) const;
 
+    /// @brief Retrieves single option by code and space.
+    ///
+    /// @param selector Server selector.
+    /// @return Pointer to the retrieved option descriptor or null if
+    /// no option was found.
+    virtual OptionDescriptorPtr
+    getOption4(const db::ServerSelector& selector, const uint16_t code,
+               const std::string& space) const;
+
+    /// @brief Retrieves all global options.
+    ///
+    /// @param selector Server selector.
+    /// @return Collection of global options or empty collection if no
+    /// option found.
+    virtual OptionContainer
+    getAllOptions4(const db::ServerSelector& selector) const;
+
+    /// @brief Retrieves option modified after specified time.
+    ///
+    /// @param selector Server selector.
+    /// @param modification_time Lower bound option modification time.
+    /// @return Collection of global options or empty collection if no
+    /// option found.
+    virtual OptionContainer
+    getModifiedOptions4(const db::ServerSelector& selector,
+                        const boost::posix_time::ptime& modification_time) const;
+
     /// @brief Retrieves global string parameter value.
     ///
     /// @param server_selector Server selector.
index 7ccb133840ad9e6aa1299a23173fe2f7ee2b45a2..d040baffb4876811b300f222962e72c1ed84bd44 100644 (file)
@@ -618,7 +618,7 @@ TEST_F(MySqlConfigBackendDHCPv4Test, getAllOptionDefs4) {
 }
 
 // Test that option definitions modified after given time can be fetched.
-TEST_F(MySqlConfigBackendDHCPv4Test, getModifiedOptionDefinitions4) {
+TEST_F(MySqlConfigBackendDHCPv4Test, getModifiedOptionDefs4) {
     // Explicitly set timestamps of option definitions. First option
     // definition has a timestamp pointing to the future. Second option
     // definition has timestamp pointing to the past (yesterday).
@@ -654,6 +654,107 @@ TEST_F(MySqlConfigBackendDHCPv4Test, getModifiedOptionDefinitions4) {
     ASSERT_TRUE(option_defs.empty());
 }
 
+// This test verifies that global option can be added, updated and deleted.
+TEST_F(MySqlConfigBackendDHCPv4Test, createUpdateDeleteOption4) {
+    // Add option to the database.
+    OptionDescriptorPtr opt_boot_file_name = test_options_[0];
+    cbptr_->createUpdateOption4(ServerSelector::UNASSIGNED(),
+                                opt_boot_file_name);
+
+    // Make sure we can retrieve this option and that it is equal to the
+    // option we have inserted into the database.
+    OptionDescriptorPtr returned_opt_boot_file_name =
+        cbptr_->getOption4(ServerSelector::UNASSIGNED(),
+                           opt_boot_file_name->option_->getType(),
+                           opt_boot_file_name->space_name_);
+    ASSERT_TRUE(returned_opt_boot_file_name);
+    EXPECT_TRUE(returned_opt_boot_file_name->equals(*opt_boot_file_name));
+
+    // Modify option and update it in the database.
+    opt_boot_file_name->persistent_ = !opt_boot_file_name->persistent_;
+    cbptr_->createUpdateOption4(ServerSelector::UNASSIGNED(),
+                                opt_boot_file_name);
+
+    // Retrieve the option again and make sure that updates were
+    // properly propagated to the database.
+    returned_opt_boot_file_name = cbptr_->getOption4(ServerSelector::UNASSIGNED(),
+                                                     opt_boot_file_name->option_->getType(),
+                                                     opt_boot_file_name->space_name_);
+    ASSERT_TRUE(returned_opt_boot_file_name);
+    EXPECT_TRUE(returned_opt_boot_file_name->equals(*opt_boot_file_name));
+
+    // Delete option from the database and make sure it is gone.
+    cbptr_->deleteOption4(ServerSelector::UNASSIGNED(),
+                          opt_boot_file_name->option_->getType(),
+                          opt_boot_file_name->space_name_);
+    EXPECT_FALSE(cbptr_->getOption4(ServerSelector::UNASSIGNED(),
+                                    opt_boot_file_name->option_->getType(),
+                                    opt_boot_file_name->space_name_));
+}
+
+// This test verifies that all global options can be retrieved.
+TEST_F(MySqlConfigBackendDHCPv4Test, getAllOptions4) {
+    // Add three global options to the database.
+    cbptr_->createUpdateOption4(ServerSelector::UNASSIGNED(),
+                                test_options_[0]);
+    cbptr_->createUpdateOption4(ServerSelector::UNASSIGNED(),
+                                test_options_[1]);
+    cbptr_->createUpdateOption4(ServerSelector::UNASSIGNED(),
+                                test_options_[5]);
+
+    // Retrieve all these options.
+    OptionContainer returned_options = cbptr_->getAllOptions4(ServerSelector::UNASSIGNED());
+    ASSERT_EQ(3, returned_options.size());
+
+    // Get the container index used to search options by option code.
+    const OptionContainerTypeIndex& index = returned_options.get<1>();
+
+    // Verify that all options we put into the database were
+    // returned.
+    auto option0 = index.find(test_options_[0]->option_->getType());
+    ASSERT_FALSE(option0 == index.end());
+    EXPECT_TRUE(option0->equals(*test_options_[0]));
+
+    auto option1 = index.find(test_options_[1]->option_->getType());
+    ASSERT_FALSE(option1 == index.end());
+    EXPECT_TRUE(option1->equals(*test_options_[1]));
+
+    auto option5 = index.find(test_options_[5]->option_->getType());
+    ASSERT_FALSE(option5 == index.end());
+    EXPECT_TRUE(option5->equals(*test_options_[5]));
+}
+
+// This test verifies that modified global options can be retrieved.
+TEST_F(MySqlConfigBackendDHCPv4Test, getModifiedOptions4) {
+    // Assign timestamps to the options we're going to store in the
+    // database.
+    test_options_[0]->setModificationTime(timestamps_["tomorrow"]);
+    test_options_[1]->setModificationTime(timestamps_["yesterday"]);
+    test_options_[5]->setModificationTime(timestamps_["today"]);
+
+    // Put options into the database.
+    cbptr_->createUpdateOption4(ServerSelector::UNASSIGNED(),
+                                test_options_[0]);
+    cbptr_->createUpdateOption4(ServerSelector::UNASSIGNED(),
+                                test_options_[1]);
+    cbptr_->createUpdateOption4(ServerSelector::UNASSIGNED(),
+                                test_options_[5]);
+
+    // Get options with the timestamp later than today. Only
+    // one option should be returned.
+    OptionContainer returned_options =
+        cbptr_->getModifiedOptions4(ServerSelector::UNASSIGNED(),
+                                    timestamps_["today"]);
+    ASSERT_EQ(1, returned_options.size());
+
+    // The returned option should be the one with the timestamp
+    // set to tomorrow.
+    const OptionContainerTypeIndex& index = returned_options.get<1>();
+    auto option0 = index.find(test_options_[0]->option_->getType());
+    ASSERT_FALSE(option0 == index.end());
+    EXPECT_TRUE(option0->equals(*test_options_[0]));
+}
+
 // This test verifies that subnet level option can be added, updated and
 // deleted.
 TEST_F(MySqlConfigBackendDHCPv4Test, createUpdateDeleteSubnetOption4) {
index 69632fa63055cab213f2329ff11cc3864f2bc9f0..29fe307814735bf39067c3d409eb2d423b071f6d 100644 (file)
@@ -118,6 +118,33 @@ public:
     getModifiedOptionDefs4(const db::ServerSelector& server_selector,
                            const boost::posix_time::ptime& modification_time) const = 0;
 
+    /// @brief Retrieves single option by code and space.
+    ///
+    /// @param selector Server selector.
+    /// @return Pointer to the retrieved option descriptor or null if
+    /// no option was found.
+    virtual OptionDescriptorPtr
+    getOption4(const db::ServerSelector& selector, const uint16_t code,
+               const std::string& space) const = 0;
+
+    /// @brief Retrieves all global options.
+    ///
+    /// @param selector Server selector.
+    /// @return Collection of global options or empty collection if no
+    /// option found.
+    virtual OptionContainer
+    getAllOptions4(const db::ServerSelector& selector) const = 0;
+
+    /// @brief Retrieves option modified after specified time.
+    ///
+    /// @param selector Server selector.
+    /// @param modification_time Lower bound option modification time.
+    /// @return Collection of global options or empty collection if no
+    /// option found.
+    virtual OptionContainer
+    getModifiedOptions4(const db::ServerSelector& selector,
+                        const boost::posix_time::ptime& modification_time) const = 0;
+
     /// @brief Retrieves global string parameter value.
     ///
     /// @param server_selector Server selector.
index cd89e99ad649437ab93bc193c0c933ebabb1e588..f1056e2e964e385b112235d7bfe7ef490df88f1e 100644 (file)
@@ -15,8 +15,8 @@ namespace isc {
 namespace dhcp {
 
 Subnet4Ptr
-ConfigBackendPoolDHCPv4::getSubnet4(const db::BackendSelector& backend_selector,
-                                    const db::ServerSelector& server_selector,
+ConfigBackendPoolDHCPv4::getSubnet4(const BackendSelector& backend_selector,
+                                    const ServerSelector& server_selector,
                                     const std::string& subnet_prefix) const {
     Subnet4Ptr subnet;
     getPropertyPtrConst<Subnet4Ptr, const std::string&>
@@ -26,8 +26,8 @@ ConfigBackendPoolDHCPv4::getSubnet4(const db::BackendSelector& backend_selector,
 }
 
 Subnet4Ptr
-ConfigBackendPoolDHCPv4::getSubnet4(const db::BackendSelector& backend_selector,
-                                    const db::ServerSelector& server_selector,
+ConfigBackendPoolDHCPv4::getSubnet4(const BackendSelector& backend_selector,
+                                    const ServerSelector& server_selector,
                                     const SubnetID& subnet_id) const {
     Subnet4Ptr subnet;
     getPropertyPtrConst<Subnet4Ptr, const SubnetID&>
@@ -37,8 +37,8 @@ ConfigBackendPoolDHCPv4::getSubnet4(const db::BackendSelector& backend_selector,
 }
 
 Subnet4Collection
-ConfigBackendPoolDHCPv4::getAllSubnets4(const db::BackendSelector& backend_selector,
-                                        const db::ServerSelector& server_selector) const {
+ConfigBackendPoolDHCPv4::getAllSubnets4(const BackendSelector& backend_selector,
+                                        const ServerSelector& server_selector) const {
     Subnet4Collection subnets;
     getAllPropertiesConst<Subnet4Collection>
         (&ConfigBackendDHCPv4::getAllSubnets4, backend_selector, server_selector,
@@ -47,8 +47,8 @@ ConfigBackendPoolDHCPv4::getAllSubnets4(const db::BackendSelector& backend_selec
 }
 
 Subnet4Collection
-ConfigBackendPoolDHCPv4::getModifiedSubnets4(const db::BackendSelector& backend_selector,
-                                             const db::ServerSelector& server_selector,
+ConfigBackendPoolDHCPv4::getModifiedSubnets4(const BackendSelector& backend_selector,
+                                             const ServerSelector& server_selector,
                                              const boost::posix_time::ptime& modification_time) const {
     Subnet4Collection subnets;
     getMultiplePropertiesConst<Subnet4Collection, const boost::posix_time::ptime&>
@@ -58,8 +58,8 @@ ConfigBackendPoolDHCPv4::getModifiedSubnets4(const db::BackendSelector& backend_
 }
 
 SharedNetwork4Ptr
-ConfigBackendPoolDHCPv4::getSharedNetwork4(const db::BackendSelector& backend_selector,
-                                           const db::ServerSelector& server_selector,
+ConfigBackendPoolDHCPv4::getSharedNetwork4(const BackendSelector& backend_selector,
+                                           const ServerSelector& server_selector,
                                            const std::string& name) const {
     SharedNetwork4Ptr shared_network;
     getPropertyPtrConst<SharedNetwork4Ptr, const std::string&>
@@ -69,8 +69,8 @@ ConfigBackendPoolDHCPv4::getSharedNetwork4(const db::BackendSelector& backend_se
 }
 
 SharedNetwork4Collection
-ConfigBackendPoolDHCPv4::getAllSharedNetworks4(const db::BackendSelector& backend_selector,
-                                               const db::ServerSelector& server_selector) const {
+ConfigBackendPoolDHCPv4::getAllSharedNetworks4(const BackendSelector& backend_selector,
+                                               const ServerSelector& server_selector) const {
     SharedNetwork4Collection shared_networks;
     getAllPropertiesConst<SharedNetwork4Collection>
         (&ConfigBackendDHCPv4::getAllSharedNetworks4, backend_selector, server_selector,
@@ -80,8 +80,8 @@ ConfigBackendPoolDHCPv4::getAllSharedNetworks4(const db::BackendSelector& backen
 
 SharedNetwork4Collection
 ConfigBackendPoolDHCPv4::
-getModifiedSharedNetworks4(const db::BackendSelector& backend_selector,
-                           const db::ServerSelector& server_selector,
+getModifiedSharedNetworks4(const BackendSelector& backend_selector,
+                           const ServerSelector& server_selector,
                            const boost::posix_time::ptime& modification_time) const {
     SharedNetwork4Collection shared_networks;
     getMultiplePropertiesConst<SharedNetwork4Collection, const boost::posix_time::ptime&>
@@ -91,8 +91,8 @@ getModifiedSharedNetworks4(const db::BackendSelector& backend_selector,
 }
 
 OptionDefinitionPtr
-ConfigBackendPoolDHCPv4::getOptionDef4(const db::BackendSelector& backend_selector,
-                                       const db::ServerSelector& server_selector,
+ConfigBackendPoolDHCPv4::getOptionDef4(const BackendSelector& backend_selector,
+                                       const ServerSelector& server_selector,
                                        const uint16_t code,
                                        const std::string& space) const {
     OptionDefinitionPtr option_def;
@@ -103,8 +103,8 @@ ConfigBackendPoolDHCPv4::getOptionDef4(const db::BackendSelector& backend_select
 }
 
 OptionDefContainer
-ConfigBackendPoolDHCPv4::getAllOptionDefs4(const db::BackendSelector& backend_selector,
-                                           const db::ServerSelector& server_selector) const {
+ConfigBackendPoolDHCPv4::getAllOptionDefs4(const BackendSelector& backend_selector,
+                                           const ServerSelector& server_selector) const {
     OptionDefContainer option_defs;
     getAllPropertiesConst<OptionDefContainer>
         (&ConfigBackendDHCPv4::getAllOptionDefs4, backend_selector, server_selector,
@@ -113,8 +113,8 @@ ConfigBackendPoolDHCPv4::getAllOptionDefs4(const db::BackendSelector& backend_se
 }
 
 OptionDefContainer
-ConfigBackendPoolDHCPv4::getModifiedOptionDefs4(const db::BackendSelector& backend_selector,
-                                                const db::ServerSelector& server_selector,
+ConfigBackendPoolDHCPv4::getModifiedOptionDefs4(const BackendSelector& backend_selector,
+                                                const ServerSelector& server_selector,
                                                 const boost::posix_time::ptime& modification_time) const {
     OptionDefContainer option_defs;
     getMultiplePropertiesConst<OptionDefContainer, const boost::posix_time::ptime&>
@@ -123,9 +123,42 @@ ConfigBackendPoolDHCPv4::getModifiedOptionDefs4(const db::BackendSelector& backe
     return (option_defs);
 }
 
+OptionDescriptorPtr
+ConfigBackendPoolDHCPv4::getOption4(const BackendSelector& backend_selector,
+                                    const ServerSelector& server_selector,
+                                    const uint16_t code,
+                                    const std::string& space) const {
+    OptionDescriptorPtr option;
+    getPropertyPtrConst<OptionDescriptorPtr, uint16_t, const std::string&>
+        (&ConfigBackendDHCPv4::getOption4, backend_selector, server_selector,
+         option, code, space);
+    return (option);
+}
+
+OptionContainer
+ConfigBackendPoolDHCPv4::getAllOptions4(const BackendSelector& backend_selector,
+                                        const ServerSelector& server_selector) const {
+    OptionContainer options;
+    getAllPropertiesConst<OptionContainer>
+        (&ConfigBackendDHCPv4::getAllOptions4, backend_selector, server_selector,
+         options);
+    return (options);
+}
+
+OptionContainer
+ConfigBackendPoolDHCPv4::getModifiedOptions4(const BackendSelector& backend_selector,
+                                             const ServerSelector& server_selector,
+                                             const boost::posix_time::ptime& modification_time) const {
+    OptionContainer options;
+    getMultiplePropertiesConst<OptionContainer, const boost::posix_time::ptime&>
+        (&ConfigBackendDHCPv4::getModifiedOptions4, backend_selector, server_selector,
+         options, modification_time);
+    return (options);
+}
+
 util::OptionalValue<std::string>
-ConfigBackendPoolDHCPv4::getGlobalStringParameter4(const db::BackendSelector& backend_selector,
-                                                   const db::ServerSelector& server_selector,
+ConfigBackendPoolDHCPv4::getGlobalStringParameter4(const BackendSelector& backend_selector,
+                                                   const ServerSelector& server_selector,
                                                    const std::string& name) const {
     OptionalValue<std::string> parameter;
     getOptionalPropertyConst<std::string, const std::string&>
@@ -135,8 +168,8 @@ ConfigBackendPoolDHCPv4::getGlobalStringParameter4(const db::BackendSelector& ba
 }
 
 util::OptionalValue<int64_t>
-ConfigBackendPoolDHCPv4::getGlobalNumberParameter4(const db::BackendSelector& backend_selector,
-                                                   const db::ServerSelector& server_selector,
+ConfigBackendPoolDHCPv4::getGlobalNumberParameter4(const BackendSelector& backend_selector,
+                                                   const ServerSelector& server_selector,
                                                    const std::string& name) const {
     OptionalValue<int64_t> parameter;
     getOptionalPropertyConst<int64_t, const std::string&>
@@ -146,8 +179,8 @@ ConfigBackendPoolDHCPv4::getGlobalNumberParameter4(const db::BackendSelector& ba
 }
 
 std::map<std::string, std::string>
-ConfigBackendPoolDHCPv4::getAllGlobalParameters4(const db::BackendSelector& backend_selector,
-                                                 const db::ServerSelector& server_selector) const {
+ConfigBackendPoolDHCPv4::getAllGlobalParameters4(const BackendSelector& backend_selector,
+                                                 const ServerSelector& server_selector) const {
     std::map<std::string, std::string> parameters;
     getAllPropertiesConst<std::map<std::string, std::string> >
         (&ConfigBackendDHCPv4::getAllGlobalParameters4, backend_selector,
@@ -156,8 +189,8 @@ ConfigBackendPoolDHCPv4::getAllGlobalParameters4(const db::BackendSelector& back
 }
 
 void
-ConfigBackendPoolDHCPv4::createUpdateSubnet4(const db::BackendSelector& backend_selector,
-                                             const db::ServerSelector& server_selector,
+ConfigBackendPoolDHCPv4::createUpdateSubnet4(const BackendSelector& backend_selector,
+                                             const ServerSelector& server_selector,
                                              const Subnet4Ptr& subnet) {
     createUpdateDeleteProperty<void, const Subnet4Ptr&>
         (&ConfigBackendDHCPv4::createUpdateSubnet4, backend_selector,
@@ -165,8 +198,8 @@ ConfigBackendPoolDHCPv4::createUpdateSubnet4(const db::BackendSelector& backend_
 }
 
 void
-ConfigBackendPoolDHCPv4::createUpdateSharedNetwork4(const db::BackendSelector& backend_selector,
-                                                    const db::ServerSelector& server_selector,
+ConfigBackendPoolDHCPv4::createUpdateSharedNetwork4(const BackendSelector& backend_selector,
+                                                    const ServerSelector& server_selector,
                                                     const SharedNetwork4Ptr& shared_network) {
     createUpdateDeleteProperty<void, const SharedNetwork4Ptr&>
         (&ConfigBackendDHCPv4::createUpdateSharedNetwork4, backend_selector,
@@ -174,8 +207,8 @@ ConfigBackendPoolDHCPv4::createUpdateSharedNetwork4(const db::BackendSelector& b
 }
 
 void
-ConfigBackendPoolDHCPv4::createUpdateOptionDef4(const db::BackendSelector& backend_selector,
-                                                const db::ServerSelector& server_selector,
+ConfigBackendPoolDHCPv4::createUpdateOptionDef4(const BackendSelector& backend_selector,
+                                                const ServerSelector& server_selector,
                                                 const OptionDefinitionPtr& option_def) {
     createUpdateDeleteProperty<void, const OptionDefinitionPtr&>
         (&ConfigBackendDHCPv4::createUpdateOptionDef4, backend_selector,
@@ -183,8 +216,8 @@ ConfigBackendPoolDHCPv4::createUpdateOptionDef4(const db::BackendSelector& backe
 }
 
 void
-ConfigBackendPoolDHCPv4::createUpdateOption4(const db::BackendSelector& backend_selector,
-                                             const db::ServerSelector& server_selector,
+ConfigBackendPoolDHCPv4::createUpdateOption4(const BackendSelector& backend_selector,
+                                             const ServerSelector& server_selector,
                                              const OptionDescriptorPtr& option) {
     createUpdateDeleteProperty<void, const OptionPtr&>
         (&ConfigBackendDHCPv4::createUpdateOption4, backend_selector,
@@ -192,8 +225,8 @@ ConfigBackendPoolDHCPv4::createUpdateOption4(const db::BackendSelector& backend_
 }
 
 void
-ConfigBackendPoolDHCPv4::createUpdateOption4(const db::BackendSelector& backend_selector,
-                                             const db::ServerSelector& server_selector,
+ConfigBackendPoolDHCPv4::createUpdateOption4(const BackendSelector& backend_selector,
+                                             const ServerSelector& server_selector,
                                              const std::string& shared_network_name,
                                              const OptionDescriptorPtr& option) {
     createUpdateDeleteProperty<const std::string&, const OptionDescriptorPtr&>
@@ -203,8 +236,8 @@ ConfigBackendPoolDHCPv4::createUpdateOption4(const db::BackendSelector& backend_
 
 
 void
-ConfigBackendPoolDHCPv4::createUpdateOption4(const db::BackendSelector& backend_selector,
-                                             const db::ServerSelector& server_selector,
+ConfigBackendPoolDHCPv4::createUpdateOption4(const BackendSelector& backend_selector,
+                                             const ServerSelector& server_selector,
                                              const SubnetID& subnet_id,
                                              const OptionDescriptorPtr& option) {
     createUpdateDeleteProperty<void, const SubnetID&, const OptionPtr&>
@@ -213,8 +246,8 @@ ConfigBackendPoolDHCPv4::createUpdateOption4(const db::BackendSelector& backend_
 }
 
 void
-ConfigBackendPoolDHCPv4::createUpdateOption4(const db::BackendSelector& backend_selector,
-                                             const db::ServerSelector& server_selector,
+ConfigBackendPoolDHCPv4::createUpdateOption4(const BackendSelector& backend_selector,
+                                             const ServerSelector& server_selector,
                                              const IOAddress& pool_start_address,
                                              const IOAddress& pool_end_address,
                                              const OptionDescriptorPtr& option) {
@@ -225,8 +258,8 @@ ConfigBackendPoolDHCPv4::createUpdateOption4(const db::BackendSelector& backend_
 }
 
 void
-ConfigBackendPoolDHCPv4::createUpdateGlobalParameter4(const db::BackendSelector& backend_selector,
-                                                      const db::ServerSelector& server_selector,
+ConfigBackendPoolDHCPv4::createUpdateGlobalParameter4(const BackendSelector& backend_selector,
+                                                      const ServerSelector& server_selector,
                                                       const std::string& name,
                                                       const std::string& value) {
     createUpdateDeleteProperty<void, const std::string&, const std::string&>
@@ -235,8 +268,8 @@ ConfigBackendPoolDHCPv4::createUpdateGlobalParameter4(const db::BackendSelector&
 }
 
 void
-ConfigBackendPoolDHCPv4::createUpdateGlobalParameter4(const db::BackendSelector& backend_selector,
-                                                      const db::ServerSelector& server_selector,
+ConfigBackendPoolDHCPv4::createUpdateGlobalParameter4(const BackendSelector& backend_selector,
+                                                      const ServerSelector& server_selector,
                                                       const std::string& name,
                                                       const int64_t value) {
     createUpdateDeleteProperty<void, const std::string&, int64_t>
@@ -245,8 +278,8 @@ ConfigBackendPoolDHCPv4::createUpdateGlobalParameter4(const db::BackendSelector&
 }
     
 uint64_t
-ConfigBackendPoolDHCPv4::deleteSubnet4(const db::BackendSelector& backend_selector,
-                                       const db::ServerSelector& server_selector,
+ConfigBackendPoolDHCPv4::deleteSubnet4(const BackendSelector& backend_selector,
+                                       const ServerSelector& server_selector,
                                        const std::string& subnet_prefix) {
     return (createUpdateDeleteProperty<uint64_t, const std::string&>
             (&ConfigBackendDHCPv4::deleteSubnet4, backend_selector, server_selector,
@@ -254,8 +287,8 @@ ConfigBackendPoolDHCPv4::deleteSubnet4(const db::BackendSelector& backend_select
 }
 
 uint64_t
-ConfigBackendPoolDHCPv4::deleteSubnet4(const db::BackendSelector& backend_selector,
-                                       const db::ServerSelector& server_selector,
+ConfigBackendPoolDHCPv4::deleteSubnet4(const BackendSelector& backend_selector,
+                                       const ServerSelector& server_selector,
                                        const SubnetID& subnet_id) {
     return (createUpdateDeleteProperty<uint64_t, const SubnetID&>
             (&ConfigBackendDHCPv4::deleteSubnet4, backend_selector, server_selector,
@@ -263,15 +296,15 @@ ConfigBackendPoolDHCPv4::deleteSubnet4(const db::BackendSelector& backend_select
 }
 
 uint64_t
-ConfigBackendPoolDHCPv4::deleteAllSubnets4(const db::BackendSelector& backend_selector,
-                                          const db::ServerSelector& server_selector) {
+ConfigBackendPoolDHCPv4::deleteAllSubnets4(const BackendSelector& backend_selector,
+                                          const ServerSelector& server_selector) {
     return (createUpdateDeleteProperty<uint64_t>
             (&ConfigBackendDHCPv4::deleteAllSubnets4, backend_selector, server_selector));
 }
 
 uint64_t
-ConfigBackendPoolDHCPv4::deleteSharedNetwork4(const db::BackendSelector& backend_selector,
-                                              const db::ServerSelector& server_selector,
+ConfigBackendPoolDHCPv4::deleteSharedNetwork4(const BackendSelector& backend_selector,
+                                              const ServerSelector& server_selector,
                                               const std::string& name) {
     return (createUpdateDeleteProperty<uint64_t, const std::string&>
             (&ConfigBackendDHCPv4::deleteSharedNetwork4, backend_selector,
@@ -279,15 +312,15 @@ ConfigBackendPoolDHCPv4::deleteSharedNetwork4(const db::BackendSelector& backend
 }
 
 uint64_t
-ConfigBackendPoolDHCPv4::deleteAllSharedNetworks4(const db::BackendSelector& backend_selector,
-                                                  const db::ServerSelector& server_selector) {
+ConfigBackendPoolDHCPv4::deleteAllSharedNetworks4(const BackendSelector& backend_selector,
+                                                  const ServerSelector& server_selector) {
     return (createUpdateDeleteProperty<uint64_t>
             (&ConfigBackendDHCPv4::deleteAllSharedNetworks4, backend_selector, server_selector));
 }
 
 uint64_t
-ConfigBackendPoolDHCPv4::deleteOptionDef4(const db::BackendSelector& backend_selector,
-                                          const db::ServerSelector& server_selector,
+ConfigBackendPoolDHCPv4::deleteOptionDef4(const BackendSelector& backend_selector,
+                                          const ServerSelector& server_selector,
                                           const uint16_t code,
                                           const std::string& space) {
     return (createUpdateDeleteProperty<uint64_t, uint16_t, const std::string&>
@@ -296,15 +329,15 @@ ConfigBackendPoolDHCPv4::deleteOptionDef4(const db::BackendSelector& backend_sel
 }
 
 uint64_t
-ConfigBackendPoolDHCPv4::deleteAllOptionDefs4(const db::BackendSelector& backend_selector,
-                                              const db::ServerSelector& server_selector) {
+ConfigBackendPoolDHCPv4::deleteAllOptionDefs4(const BackendSelector& backend_selector,
+                                              const ServerSelector& server_selector) {
     return (createUpdateDeleteProperty<uint64_t>
             (&ConfigBackendDHCPv4::deleteAllOptionDefs4, backend_selector, server_selector));
 }
 
 uint64_t
-ConfigBackendPoolDHCPv4::deleteOption4(const db::BackendSelector& backend_selector,
-                                       const db::ServerSelector& server_selector,
+ConfigBackendPoolDHCPv4::deleteOption4(const BackendSelector& backend_selector,
+                                       const ServerSelector& server_selector,
                                        const uint16_t code,
                                        const std::string& space) {
     return (createUpdateDeleteProperty<uint64_t, uint16_t, const std::string&>
@@ -313,8 +346,8 @@ ConfigBackendPoolDHCPv4::deleteOption4(const db::BackendSelector& backend_select
 }
 
 void
-ConfigBackendPoolDHCPv4::deleteOption4(const db::BackendSelector& backend_selector,
-                                       const db::ServerSelector& server_selector,
+ConfigBackendPoolDHCPv4::deleteOption4(const BackendSelector& backend_selector,
+                                       const ServerSelector& server_selector,
                                        const std::string& shared_network_name,
                                        const uint16_t code,
                                        const std::string& space) {
@@ -324,8 +357,8 @@ ConfigBackendPoolDHCPv4::deleteOption4(const db::BackendSelector& backend_select
 }
 
 uint64_t
-ConfigBackendPoolDHCPv4::deleteOption4(const db::BackendSelector& backend_selector,
-                                       const db::ServerSelector& server_selector,
+ConfigBackendPoolDHCPv4::deleteOption4(const BackendSelector& backend_selector,
+                                       const ServerSelector& server_selector,
                                        const SubnetID& subnet_id,
                                        const uint16_t code,
                                        const std::string& space) {
@@ -335,8 +368,8 @@ ConfigBackendPoolDHCPv4::deleteOption4(const db::BackendSelector& backend_select
 }
 
 uint64_t
-ConfigBackendPoolDHCPv4::deleteOption4(const db::BackendSelector& backend_selector,
-                                       const db::ServerSelector& server_selector,
+ConfigBackendPoolDHCPv4::deleteOption4(const BackendSelector& backend_selector,
+                                       const ServerSelector& server_selector,
                                        const asiolink::IOAddress& pool_start_address,
                                        const asiolink::IOAddress& pool_end_address,
                                        const uint16_t code,
@@ -348,8 +381,8 @@ ConfigBackendPoolDHCPv4::deleteOption4(const db::BackendSelector& backend_select
 }
 
 uint64_t
-ConfigBackendPoolDHCPv4::deleteGlobalParameter4(const db::BackendSelector& backend_selector,
-                                                const db::ServerSelector& server_selector,
+ConfigBackendPoolDHCPv4::deleteGlobalParameter4(const BackendSelector& backend_selector,
+                                                const ServerSelector& server_selector,
                                                 const std::string& name) {
     return (createUpdateDeleteProperty<uint64_t, const std::string&>
             (&ConfigBackendDHCPv4::deleteGlobalParameter4, backend_selector,
@@ -357,8 +390,8 @@ ConfigBackendPoolDHCPv4::deleteGlobalParameter4(const db::BackendSelector& backe
 }
 
 uint64_t
-ConfigBackendPoolDHCPv4::deleteAllGlobalParameters4(const db::BackendSelector& backend_selector,
-                                                    const db::ServerSelector& server_selector) {
+ConfigBackendPoolDHCPv4::deleteAllGlobalParameters4(const BackendSelector& backend_selector,
+                                                    const ServerSelector& server_selector) {
     return (createUpdateDeleteProperty<uint64_t>
             (&ConfigBackendDHCPv4::deleteAllGlobalParameters4, backend_selector,
              server_selector));
index 21bc3504d650c1931d175e8b83228e4849d3a054..ca5ad7ed9c424bbf12bfec304f0a8e4e9292bbd3 100644 (file)
@@ -138,6 +138,40 @@ public:
                            const db::ServerSelector& server_selector,
                            const boost::posix_time::ptime& modification_time) const;
 
+    /// @brief Retrieves single option by code and space.
+    ///
+    /// @param backend_selector Backend selector.
+    /// @param server_selector Server selector.
+    /// @return Pointer to the retrieved option descriptor or null if
+    /// no option was found.
+    virtual OptionDescriptorPtr
+    getOption4(const db::BackendSelector& backend_selector,
+               const db::ServerSelector& server_selector,
+               const uint16_t code,
+               const std::string& space) const;
+
+    /// @brief Retrieves all global options.
+    ///
+    /// @param backend_selector Backend selector.
+    /// @param server_selector Server selector.
+    /// @return Collection of global options or empty collection if no
+    /// option found.
+    virtual OptionContainer
+    getAllOptions4(const db::BackendSelector& backend_selector,
+                   const db::ServerSelector& server_selector) const;
+
+    /// @brief Retrieves option modified after specified time.
+    ///
+    /// @param backend_selector Backend selector.
+    /// @param server_selector Server selector.
+    /// @param modification_time Lower bound option modification time.
+    /// @return Collection of global options or empty collection if no
+    /// option found.
+    virtual OptionContainer
+    getModifiedOptions4(const db::BackendSelector& backend_selector,
+                        const db::ServerSelector& server_selector,
+                        const boost::posix_time::ptime& modification_time) const;
+
     /// @brief Retrieves global string parameter value.
     ///
     /// @param backend_selector Backend selector.