]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
Checkpoint: addressed final comment but not yet tested
authorFrancis Dupont <fdupont@isc.org>
Fri, 16 Mar 2018 13:42:24 +0000 (14:42 +0100)
committerFrancis Dupont <fdupont@isc.org>
Fri, 16 Mar 2018 13:42:24 +0000 (14:42 +0100)
13 files changed:
src/hooks/dhcp/lease_cmds/lease_cmds.cc
src/lib/dhcpsrv/cql_lease_mgr.cc
src/lib/dhcpsrv/cql_lease_mgr.h
src/lib/dhcpsrv/dhcpsrv_messages.mes
src/lib/dhcpsrv/lease_mgr.h
src/lib/dhcpsrv/memfile_lease_mgr.cc
src/lib/dhcpsrv/memfile_lease_mgr.h
src/lib/dhcpsrv/mysql_lease_mgr.cc
src/lib/dhcpsrv/mysql_lease_mgr.h
src/lib/dhcpsrv/pgsql_lease_mgr.cc
src/lib/dhcpsrv/pgsql_lease_mgr.h
src/lib/dhcpsrv/tests/generic_lease_mgr_unittest.cc
src/lib/dhcpsrv/tests/lease_mgr_unittest.cc

index c0d593534bd155f2a7a44182deb750d351476827..8fc6972af65d365f61690271bf42adb11e1ea503 100644 (file)
@@ -482,66 +482,50 @@ LeaseCmdsImpl::leaseGetAllHandler(CalloutHandle& handle) {
         // be returned.
         if (cmd_args_) {
             ConstElementPtr subnets = cmd_args_->get("subnets");
-            if (subnets) {
-                if (subnets->getType() != Element::list) {
-                    isc_throw(BadValue, "'subnets' parameter must be a list");
+            if (!subnets) {
+                isc_throw(BadValue, "'subnets' parameter not specified");
+            }
+            if (subnets->getType() != Element::list) {
+                isc_throw(BadValue, "'subnets' parameter must be a list");
+            }
+
+            const std::vector<ElementPtr>& subnet_ids = subnets->listValue();
+            for (auto subnet_id = subnet_ids.begin();
+                 subnet_id != subnet_ids.end();
+                 ++subnet_id) {
+                if ((*subnet_id)->getType() != Element::integer) {
+                    isc_throw(BadValue, "listed subnet identifiers must be numbers");
                 }
 
-                const std::vector<ElementPtr>& subnet_ids = subnets->listValue();
-                for (auto subnet_id = subnet_ids.begin(); subnet_id != subnet_ids.end();
-                     ++subnet_id) {
-                    if ((*subnet_id)->getType() != Element::integer) {
-                        isc_throw(BadValue, "listed subnet identifiers must be numbers");
+                if (v4) {
+                    Lease4Collection leases =
+                        LeaseMgrFactory::instance().getLeases4((*subnet_id)->intValue());
+                    for (auto lease : leases) {
+                        ElementPtr lease_json = lease->toElement();
+                        leases_json->add(lease_json);
                     }
-
-                    if (v4) {
-                        Lease4Collection leases =
-                            LeaseMgrFactory::instance().getLeases4((*subnet_id)->intValue());
-                        for (auto lease = leases.begin(); lease != leases.end(); ++lease) {
-                            ElementPtr lease_json = (*lease)->toElement();
-                            leases_json->add(lease_json);
-                        }
-                    } else {
-                        Lease6Collection leases =
-                            LeaseMgrFactory::instance().getLeases6((*subnet_id)->intValue(),
-                                                                   Lease::TYPE_NA);
-                        for (auto lease = leases.begin(); lease != leases.end(); ++lease) {
-                            ElementPtr lease_json = (*lease)->toElement();
-                            leases_json->add(lease_json);
-                        }
-
-                        leases = LeaseMgrFactory::instance().getLeases6((*subnet_id)->intValue(),
-                                                                   Lease::TYPE_TA);
-                        for (auto lease = leases.begin(); lease != leases.end(); ++lease) {
-                            ElementPtr lease_json = (*lease)->toElement();
-                            leases_json->add(lease_json);
-                        }
-
-                        leases = LeaseMgrFactory::instance().getLeases6((*subnet_id)->intValue(),
-                                                                   Lease::TYPE_PD);
-                        for (auto lease = leases.begin(); lease != leases.end(); ++lease) {
-                            ElementPtr lease_json = (*lease)->toElement();
-                            leases_json->add(lease_json);
-                        }                           
+                } else {
+                    Lease6Collection leases =
+                        LeaseMgrFactory::instance().getLeases6((*subnet_id)->intValue());
+                    for (auto lease : leases) {
+                        ElementPtr lease_json = lease->toElement();
+                        leases_json->add(lease_json);
                     }
                 }
-
-            } else {
-                isc_throw(BadValue, "'subnets' parameter not specified");
             }
 
         } else {
             // There is no 'subnets' argument so let's return all leases.
             if (v4) {
                 Lease4Collection leases = LeaseMgrFactory::instance().getLeases4();
-                for (auto lease = leases.begin(); lease != leases.end(); ++lease) {
-                    ElementPtr lease_json = (*lease)->toElement();
+                for (auto lease : leases) {
+                    ElementPtr lease_json = lease->toElement();
                     leases_json->add(lease_json);
                 }
             } else {
                 Lease6Collection leases = LeaseMgrFactory::instance().getLeases6();
-                for (auto lease = leases.begin(); lease != leases.end(); ++lease) {
-                    ElementPtr lease_json = (*lease)->toElement();
+                for (auto lease : leases) {
+                    ElementPtr lease_json = lease->toElement();
                     leases_json->add(lease_json);
                 }
             }
index fb114dfdf5623a8b3b7874f5e7115bc700e538bb..5dcdfd8f9b4b56910ef23737834fb2dc073c376d 100644 (file)
@@ -1719,7 +1719,7 @@ CqlLeaseMgr::getLeases6(Lease::Type lease_type, const DUID &duid, uint32_t iaid,
 }
 
 Lease6Collection
-CqlLeaseMgr::getLeases6(SubnetID, Lease::Type) const {
+CqlLeaseMgr::getLeases6(SubnetID) const {
     isc_throw(NotImplemented, "getLeases6(subnet_id) is not implemented");
 }
 
index dde931a1034aef5e7acafdfc667ea476b5895ec2..182ce060c67f85c7f443f9ef4264b6c3138842d5 100644 (file)
@@ -272,17 +272,14 @@ public:
                                         uint32_t iaid,
                                         SubnetID subnet_id) const override;
 
-    /// @brief Returns all IPv6 leases for the particular subnet identifier
-    /// and lease type.
+    /// @brief Returns all IPv6 leases for the particular subnet identifier.
     ///
     /// @param subnet_id subnet identifier.
-    /// @param type specifies lease type: (NA, TA or PD)
     ///
     /// @return Lease collection (may be empty if no IPv6 lease found).
     /// @throw NotImplemented because this method is currently not implemented for
     /// this backend.
-    virtual Lease6Collection getLeases6(SubnetID subnet_id,
-                                        Lease::Type type) const;
+    virtual Lease6Collection getLeases6(SubnetID subnet_id) const override;
 
     /// @brief Returns all IPv6 leases.
     ///
index 2fc38426d5a74fca4a602b47a3ed07e776956482..8e3c7cfebd765cdbf24ae285ead2cda05627efe1 100644 (file)
@@ -514,10 +514,9 @@ lease from the memory file database for a client with the specified IAID
 A debug message issued when the server is attempting to obtain all IPv4
 leases for a given subnet identifier from the memory file database.
 
-% DHCPSRV_MEMFILE_GET_SUBID_TYPE6 obtaining IPv6 leases for subnet ID %1 and type %2
+% DHCPSRV_MEMFILE_GET_SUBID6 obtaining IPv6 leases for subnet ID %1
 A debug message issued when the server is attempting to obtain all IPv6
-leases for a given subnet identifier and lease type from the memory file
-database.
+leases for a given subnet identifier from the memory file database.
 
 % DHCPSRV_MEMFILE_GET_SUBID_CLIENTID obtaining IPv4 lease for subnet ID %1 and client ID %2
 A debug message issued when the server is attempting to obtain an IPv4
@@ -752,9 +751,9 @@ lease from the MySQL database for a client with the specified IAID
 A debug message issued when the server is attempting to obtain all IPv4
 leases for a given subnet identifier from the MySQL database.
 
-% DHCPSRV_MYSQL_GET_SUBID_TYPE6 obtaining IPv6 leases for subnet ID %1 and type %2
+% DHCPSRV_MYSQL_GET_SUBID6 obtaining IPv6 leases for subnet ID %1
 A debug message issued when the server is attempting to obtain all IPv6
-leases for a given subnet identifier and lease type from the MySQL database.
+leases for a given subnet identifier from the MySQL database.
 
 % DHCPSRV_MYSQL_GET_SUBID_CLIENTID obtaining IPv4 lease for subnet ID %1 and client ID %2
 A debug message issued when the server is attempting to obtain an IPv4
@@ -922,10 +921,9 @@ lease from the PostgreSQL database for a client with the specified IAID
 A debug message issued when the server is attempting to obtain all IPv4
 leases for a given subnet identifier from the PostgreSQL database.
 
-% DHCPSRV_PGSQL_GET_SUBID_TYPE6 obtaining IPv6 leases for subnet ID %1 and type %2
+% DHCPSRV_PGSQL_GET_SUBID6 obtaining IPv6 leases for subnet ID %1
 A debug message issued when the server is attempting to obtain all IPv6
-leases for a given subnet identifier and lease type from the PostgreSQL
-database.
+leases for a given subnet identifier from the PostgreSQL database.
 
 % DHCPSRV_PGSQL_GET_SUBID_CLIENTID obtaining IPv4 lease for subnet ID %1 and client ID %2
 A debug message issued when the server is attempting to obtain an IPv4
index c4bbf4829283311f64a1c68265ccdae5a8ca7116..f7775845bd80467cf1d50d03fe6caff4e7f93231 100644 (file)
@@ -341,15 +341,12 @@ public:
     Lease6Ptr getLease6(Lease::Type type, const DUID& duid,
                         uint32_t iaid, SubnetID subnet_id) const;
 
-    /// @brief Returns all IPv6 leases for the particular subnet identifier
-    /// and lease type.
+    /// @brief Returns all IPv6 leases for the particular subnet identifier.
     ///
     /// @param subnet_id subnet identifier.
-    /// @param type specifies lease type: (NA, TA or PD)
     ///
     /// @return Lease collection (may be empty if no IPv6 lease found).
-    virtual Lease6Collection getLeases6(SubnetID subnet_id,
-                                        Lease::Type type) const = 0;
+    virtual Lease6Collection getLeases6(SubnetID subnet_id) const = 0;
 
     /// @brief Returns all IPv6 leases.
     ///
index 871905b57fbb919cf31d01b52c0b55b3b24b6f15..61aaf577b1f73c1de33f054c3ad65524b1b38468 100644 (file)
@@ -832,10 +832,9 @@ Memfile_LeaseMgr::getLeases6(Lease::Type type,
 }
 
 Lease6Collection
-Memfile_LeaseMgr::getLeases6(SubnetID subnet_id, Lease::Type type) const {
-    LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_MEMFILE_GET_SUBID_TYPE6)
-        .arg(subnet_id)
-        .arg(Lease::typeToText(type));
+Memfile_LeaseMgr::getLeases6(SubnetID subnet_id) const {
+    LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_MEMFILE_GET_SUBID6)
+        .arg(subnet_id);
 
     Lease6Collection collection;
     const Lease6StorageSubnetIdIndex& idx = storage6_.get<SubnetIdIndexTag>();
@@ -844,10 +843,7 @@ Memfile_LeaseMgr::getLeases6(SubnetID subnet_id, Lease::Type type) const {
         idx.equal_range(subnet_id);
 
     for (auto lease = l.first; lease != l.second; ++lease) {
-        // Filter out the leases which lease type doesn't match.
-        if ((*lease)->type_ == type) {
-            collection.push_back(Lease6Ptr(new Lease6(**lease)));
-        }
+        collection.push_back(Lease6Ptr(new Lease6(**lease)));
     }
 
     return (collection);
index c42d799b91d9440009e360b0c6f066ff94bb9271..0cb5bc829b42a2d3bb3cc074c5b83f7ab34519fe 100644 (file)
@@ -271,15 +271,12 @@ public:
                                         uint32_t iaid,
                                         SubnetID subnet_id) const;
 
-    /// @brief Returns all IPv6 leases for the particular subnet identifier
-    /// and lease type.
+    /// @brief Returns all IPv6 leases for the particular subnet identifier.
     ///
     /// @param subnet_id subnet identifier.
-    /// @param type specifies lease type: (NA, TA or PD)
     ///
     /// @return Lease collection (may be empty if no IPv6 lease found).
-    virtual Lease6Collection getLeases6(SubnetID subnet_id,
-                                        Lease::Type type) const;
+    virtual Lease6Collection getLeases6(SubnetID subnet_id) const;
 
     /// @brief Returns all IPv6 leases.
     ///
index 19dd8e44befbaaac6689cdf29bb2d97a615ac723..9f035564886677a2ae2b813b204fbb8dedef28a9 100644 (file)
@@ -189,7 +189,7 @@ tagged_statements = { {
                             "FROM lease6 "
                             "WHERE duid = ? AND iaid = ? AND subnet_id = ? "
                             "AND lease_type = ?"},
-    {MySqlLeaseMgr::GET_LEASE6_SUBID_TYPE,
+    {MySqlLeaseMgr::GET_LEASE6_SUBID,
                     "SELECT address, duid, valid_lifetime, "
                         "expire, subnet_id, pref_lifetime, "
                         "lease_type, iaid, prefix_len, "
@@ -197,7 +197,7 @@ tagged_statements = { {
                         "hwaddr, hwtype, hwaddr_source, "
                         "state "
                             "FROM lease6 "
-                            "WHERE subnet_id = ? and lease_type = ?"},
+                            "WHERE subnet_id = ?"},
     {MySqlLeaseMgr::GET_LEASE6_EXPIRE,
                     "SELECT address, duid, valid_lifetime, "
                         "expire, subnet_id, pref_lifetime, "
@@ -1927,14 +1927,12 @@ MySqlLeaseMgr::getLeases6(Lease::Type lease_type,
 }
 
 Lease6Collection
-MySqlLeaseMgr::getLeases6(SubnetID subnet_id, Lease::Type type) const {
-    LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL,
-              DHCPSRV_MYSQL_GET_SUBID_TYPE6)
-        .arg(subnet_id)
-        .arg(Lease::typeToText(type));
+MySqlLeaseMgr::getLeases6(SubnetID subnet_id) const {
+    LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_MYSQL_GET_SUBID6)
+        .arg(subnet_id);
 
     // Set up the WHERE clause value
-    MYSQL_BIND inbind[2];
+    MYSQL_BIND inbind[1];
     memset(inbind, 0, sizeof(inbind));
 
     // Subnet ID
@@ -1942,14 +1940,9 @@ MySqlLeaseMgr::getLeases6(SubnetID subnet_id, Lease::Type type) const {
     inbind[0].buffer = reinterpret_cast<char*>(&subnet_id);
     inbind[0].is_unsigned = MLM_TRUE;
 
-    // LEASE_TYPE
-    inbind[1].buffer_type = MYSQL_TYPE_TINY;
-    inbind[1].buffer = reinterpret_cast<char*>(&type);
-    inbind[1].is_unsigned = MLM_TRUE;
-
     // ... and get the data
     Lease6Collection result;
-    getLeaseCollection(GET_LEASE6_SUBID_TYPE, inbind, result);
+    getLeaseCollection(GET_LEASE6_SUBID, inbind, result);
 
     return (result);
 }
index bafafbd8c17c61775ab39a5fb2791af125273a87..91265cc72ba5ca12e6d0cad356ddfb3f80e42c58 100644 (file)
@@ -268,15 +268,12 @@ public:
     virtual Lease6Collection getLeases6(Lease::Type type, const DUID& duid,
                                         uint32_t iaid, SubnetID subnet_id) const;
 
-    /// @brief Returns all IPv6 leases for the particular subnet identifier
-    /// and lease type.
+    /// @brief Returns all IPv6 leases for the particular subnet identifier.
     ///
     /// @param subnet_id subnet identifier.
-    /// @param type specifies lease type: (NA, TA or PD)
     ///
     /// @return Lease collection (may be empty if no IPv6 lease found).
-    virtual Lease6Collection getLeases6(SubnetID subnet_id,
-                                        Lease::Type type) const;
+    virtual Lease6Collection getLeases6(SubnetID subnet_id) const;
 
     /// @brief Returns all IPv6 leases.
     ///
@@ -455,7 +452,7 @@ public:
         GET_LEASE6_ADDR,             // Get lease6 by address
         GET_LEASE6_DUID_IAID,        // Get lease6 by DUID and IAID
         GET_LEASE6_DUID_IAID_SUBID,  // Get lease6 by DUID, IAID and subnet ID
-        GET_LEASE6_SUBID_TYPE,       // Get IPv6 leases by subnet ID and type
+        GET_LEASE6_SUBID,            // Get IPv6 leases by subnet ID
         GET_LEASE6_EXPIRE,           // Get lease6 by expiration.
         GET_VERSION,                 // Obtain version number
         INSERT_LEASE4,               // Add entry to lease4 table
index 156a54290fa9f3ed692e2579d9b2f0d200e8d1cd..c9e68499dd31682490bb554aedbc475d7fd141fa 100644 (file)
@@ -168,15 +168,15 @@ PgSqlTaggedStatement tagged_statements[] = {
       "WHERE lease_type = $1 "
         "AND duid = $2 AND iaid = $3 AND subnet_id = $4"},
 
-    // GET_LEASE6_SUBID_TYPE
-    { 2, { OID_INT8, OID_INT2 },
+    // GET_LEASE6_SUBID
+    { 1, { OID_INT8 },
       "get_lease6_subid",
       "SELECT address, duid, valid_lifetime, "
         "extract(epoch from expire)::bigint, subnet_id, pref_lifetime, "
         "lease_type, iaid, prefix_len, fqdn_fwd, fqdn_rev, hostname, "
         "state "
       "FROM lease6 "
-      "WHERE subnet_id = $1 AND lease_type = $2"},
+      "WHERE subnet_id = $1"},
 
     // GET_LEASE6_EXPIRE
     { 3, { OID_INT8, OID_TIMESTAMP, OID_INT8 },
@@ -1225,10 +1225,9 @@ PgSqlLeaseMgr::getLeases6(Lease::Type lease_type, const DUID& duid,
 }
 
 Lease6Collection
-PgSqlLeaseMgr::getLeases6(SubnetID subnet_id, Lease::Type type) const {
-    LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_PGSQL_GET_SUBID_TYPE6)
-        .arg(subnet_id)
-        .arg(Lease::typeToText(type));
+PgSqlLeaseMgr::getLeases6(SubnetID subnet_id) const {
+    LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_PGSQL_GET_SUBID6)
+        .arg(subnet_id);
 
     // Set up the WHERE clause value
     PsqlBindArray bind_array;
@@ -1237,13 +1236,9 @@ PgSqlLeaseMgr::getLeases6(SubnetID subnet_id, Lease::Type type) const {
     std::string subnet_id_str = boost::lexical_cast<std::string>(subnet_id);
     bind_array.add(subnet_id_str);
 
-    // LEASE_TYPE
-    std::string lease_type_str = boost::lexical_cast<std::string>(type);
-    bind_array.add(lease_type_str);
-
     // ... and get the data
     Lease6Collection result;
-    getLeaseCollection(GET_LEASE6_SUBID_TYPE, bind_array, result);
+    getLeaseCollection(GET_LEASE6_SUBID, bind_array, result);
 
     return (result);
 }
index 9f41350c9cfdb0546f310281a14ca1984f3388da..54ca6df8ecbe585cc4115cedfd9b7e36e54caaeb 100644 (file)
@@ -242,15 +242,12 @@ public:
     virtual Lease6Collection getLeases6(Lease::Type type, const DUID& duid,
                                         uint32_t iaid, SubnetID subnet_id) const;
 
-    /// @brief Returns all IPv6 leases for the particular subnet identifier
-    /// and lease type.
+    /// @brief Returns all IPv6 leases for the particular subnet identifier.
     ///
     /// @param subnet_id subnet identifier.
-    /// @param type specifies lease type: (NA, TA or PD)
     ///
     /// @return Lease collection (may be empty if no IPv6 lease found).
-    virtual Lease6Collection getLeases6(SubnetID subnet_id,
-                                        Lease::Type type) const;
+    virtual Lease6Collection getLeases6(SubnetID subnet_id) const;
 
     /// @brief Returns all IPv6 leases.
     ///
@@ -446,7 +443,7 @@ public:
         GET_LEASE6_ADDR,            // Get lease6 by address
         GET_LEASE6_DUID_IAID,       // Get lease6 by DUID and IAID
         GET_LEASE6_DUID_IAID_SUBID, // Get lease6 by DUID, IAID and subnet ID
-        GET_LEASE6_SUBID_TYPE,      // Get IPv6 leases by subnet ID and type
+        GET_LEASE6_SUBID,           // Get IPv6 leases by subnet ID
         GET_LEASE6_EXPIRE,          // Get expired lease6
         GET_VERSION,                // Obtain version number
         INSERT_LEASE4,              // Add entry to lease4 table
index 8ff4c4ecdd79375877a49fca19f90eaa490779d0..1ec1ed870c0e301ab463dfe3239854758749e38d 100644 (file)
@@ -1255,14 +1255,9 @@ GenericLeaseMgrTest::testGetLeases6SubnetId() {
     }
 
     // There should be exactly two leases for the subnet id that the second
-    // lease belongs to, one TA and one PD.
-    Lease6Collection returned =
-      lmptr_->getLeases6(leases[1]->subnet_id_, Lease::TYPE_NA);
-    EXPECT_EQ(0, returned.size());
-    returned = lmptr_->getLeases6(leases[1]->subnet_id_,Lease::TYPE_TA);
-    EXPECT_EQ(1, returned.size());
-    returned = lmptr_->getLeases6(leases[1]->subnet_id_,Lease::TYPE_PD);
-    EXPECT_EQ(1, returned.size());
+    // lease belongs to.
+    Lease6Collection returned = lmptr_->getLeases6(leases[1]->subnet_id_);
+    EXPECT_EQ(2, returned.size());
 }
 
 void
index 3a20e7b58ecf7639361ae881c6039fa0ebf53b45..88ea5a064a38d16f06c6ed3cf91a4cc85ff31bd9 100644 (file)
@@ -181,10 +181,9 @@ public:
     /// @brief Returns all IPv6 leases for the particular subnet identifier.
     ///
     /// @param subnet_id subnet identifier.
-    /// @param type lease type.
     ///
     /// @return Lease collection (may be empty if no IPv6 lease found).
-    virtual Lease6Collection getLeases6(SubnetID,  Lease::Type) const {
+    virtual Lease6Collection getLeases6(SubnetID) const {
         return (Lease6Collection());
     }