From: Marcin Siodelski Date: Thu, 4 Apr 2019 08:21:48 +0000 (+0200) Subject: [#103,!289] Added function to delete subnet by ID from the configuration. X-Git-Tag: Kea-1.6.0-beta~279 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d7bd83376576b88b023ce406467f704b103c2f02;p=thirdparty%2Fkea.git [#103,!289] Added function to delete subnet by ID from the configuration. --- diff --git a/src/lib/dhcpsrv/cfg_subnets4.cc b/src/lib/dhcpsrv/cfg_subnets4.cc index fd86f6dd76..f7a96efb1f 100644 --- a/src/lib/dhcpsrv/cfg_subnets4.cc +++ b/src/lib/dhcpsrv/cfg_subnets4.cc @@ -43,12 +43,20 @@ CfgSubnets4::add(const Subnet4Ptr& subnet) { void CfgSubnets4::del(const ConstSubnet4Ptr& subnet) { + del(subnet->getID()); +} + +void +CfgSubnets4::del(const SubnetID& subnet_id) { auto& index = subnets_.get(); - auto subnet_it = index.find(subnet->getID()); + auto subnet_it = index.find(subnet_id); if (subnet_it == index.end()) { - isc_throw(BadValue, "no subnet with ID of '" << subnet->getID() + isc_throw(BadValue, "no subnet with ID of '" << subnet_id << "' found"); } + + Subnet4Ptr subnet = *subnet_it; + index.erase(subnet_it); LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE, DHCPSRV_CFGMGR_DEL_SUBNET4) diff --git a/src/lib/dhcpsrv/cfg_subnets4.h b/src/lib/dhcpsrv/cfg_subnets4.h index 27890f6a28..aab236e97b 100644 --- a/src/lib/dhcpsrv/cfg_subnets4.h +++ b/src/lib/dhcpsrv/cfg_subnets4.h @@ -48,6 +48,13 @@ public: /// @throw isc::BadValue if such subnet doesn't exist. void del(const ConstSubnet4Ptr& subnet); + /// @brief Removes subnet from the configuration. + /// + /// @param subnet_id Identifier of the subnet to be removed. + /// + /// @throw isc::BadValue if such subnet doesn't exist. + void del(const SubnetID& subnet_id); + /// @brief Merges specified subnet configuration into this configuration. /// /// This method merges subnets from the @c other configuration into this diff --git a/src/lib/dhcpsrv/cfg_subnets6.cc b/src/lib/dhcpsrv/cfg_subnets6.cc index 0370f8fd68..b087ef4f59 100644 --- a/src/lib/dhcpsrv/cfg_subnets6.cc +++ b/src/lib/dhcpsrv/cfg_subnets6.cc @@ -43,12 +43,20 @@ CfgSubnets6::add(const Subnet6Ptr& subnet) { void CfgSubnets6::del(const ConstSubnet6Ptr& subnet) { + del(subnet->getID()); +} + +void +CfgSubnets6::del(const SubnetID& subnet_id) { auto& index = subnets_.get(); - auto subnet_it = index.find(subnet->getID()); + auto subnet_it = index.find(subnet_id); if (subnet_it == index.end()) { - isc_throw(BadValue, "no subnet with ID of '" << subnet->getID() + isc_throw(BadValue, "no subnet with ID of '" << subnet_id << "' found"); } + + Subnet6Ptr subnet = *subnet_it; + index.erase(subnet_it); LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE, DHCPSRV_CFGMGR_DEL_SUBNET6) diff --git a/src/lib/dhcpsrv/cfg_subnets6.h b/src/lib/dhcpsrv/cfg_subnets6.h index 3899fd2837..ce3e1dd9f4 100644 --- a/src/lib/dhcpsrv/cfg_subnets6.h +++ b/src/lib/dhcpsrv/cfg_subnets6.h @@ -48,6 +48,13 @@ public: /// @throw isc::BadValue if such subnet doesn't exist. void del(const ConstSubnet6Ptr& subnet); + /// @brief Removes subnet from the configuration. + /// + /// @param subnet_id Identifier of the subnet to be removed. + /// + /// @throw isc::BadValue if such subnet doesn't exist. + void del(const SubnetID& subnet_id); + /// @brief Returns pointer to the collection of all IPv6 subnets. /// /// This is used in a hook (subnet6_select), where the hook is able diff --git a/src/lib/dhcpsrv/tests/cfg_subnets4_unittest.cc b/src/lib/dhcpsrv/tests/cfg_subnets4_unittest.cc index f883e0a9a0..e21b9bb33a 100644 --- a/src/lib/dhcpsrv/tests/cfg_subnets4_unittest.cc +++ b/src/lib/dhcpsrv/tests/cfg_subnets4_unittest.cc @@ -136,6 +136,11 @@ TEST(CfgSubnets4Test, deleteSubnet) { ASSERT_NO_THROW(cfg.del(subnet2)); ASSERT_EQ(2, cfg.getAll()->size()); EXPECT_FALSE(cfg.getByPrefix("192.0.3.0/26")); + + // Remove another subnet by ID. + ASSERT_NO_THROW(cfg.del(subnet1->getID())); + ASSERT_EQ(1, cfg.getAll()->size()); + EXPECT_FALSE(cfg.getByPrefix("192.0.2.0/26")); } // This test verifies that subnets configuration is properly merged. diff --git a/src/lib/dhcpsrv/tests/cfg_subnets6_unittest.cc b/src/lib/dhcpsrv/tests/cfg_subnets6_unittest.cc index 4707aac648..c411abf1d0 100644 --- a/src/lib/dhcpsrv/tests/cfg_subnets6_unittest.cc +++ b/src/lib/dhcpsrv/tests/cfg_subnets6_unittest.cc @@ -106,6 +106,11 @@ TEST(CfgSubnets6Test, deleteSubnet) { ASSERT_NO_THROW(cfg.del(subnet2)); ASSERT_EQ(2, cfg.getAll()->size()); EXPECT_FALSE(cfg.getByPrefix("2001:db8:2::/48")); + + // Remove another subnet by ID. + ASSERT_NO_THROW(cfg.del(subnet1->getID())); + ASSERT_EQ(1, cfg.getAll()->size()); + EXPECT_FALSE(cfg.getByPrefix("2001:db8:1::/48")); } // This test checks that the subnet can be selected using a relay agent's