diff options
-rw-r--r-- | src/lib/dhcpsrv/cql_lease_mgr.cc | 71 | ||||
-rw-r--r-- | src/lib/dhcpsrv/dhcpsrv_messages.mes | 8 |
2 files changed, 66 insertions, 13 deletions
diff --git a/src/lib/dhcpsrv/cql_lease_mgr.cc b/src/lib/dhcpsrv/cql_lease_mgr.cc index 8f3c351b7f..5b43200c31 100644 --- a/src/lib/dhcpsrv/cql_lease_mgr.cc +++ b/src/lib/dhcpsrv/cql_lease_mgr.cc @@ -205,18 +205,20 @@ public: static constexpr StatementTag DELETE_LEASE4 = "DELETE_LEASE4"; // Delete expired lease4s in certain state static constexpr StatementTag GET_LEASE4_EXPIRE = "GET_LEASE4_EXPIRE"; + // Get lease4 + static constexpr StatementTag GET_LEASE4 = "GET_LEASE4"; // Get lease4 by address static constexpr StatementTag GET_LEASE4_ADDR = "GET_LEASE4_ADDR"; // Get lease4 by client ID static constexpr StatementTag GET_LEASE4_CLIENTID = "GET_LEASE4_CLIENTID"; // Get lease4 by client ID & subnet ID - static constexpr StatementTag GET_LEASE4_CLIENTID_SUBID = - "GET_LEASE4_CLIENTID_SUBID"; + static constexpr StatementTag GET_LEASE4_CLIENTID_SUBID = "GET_LEASE4_CLIENTID_SUBID"; // Get lease4 by HW address static constexpr StatementTag GET_LEASE4_HWADDR = "GET_LEASE4_HWADDR"; // Get lease4 by HW address & subnet ID - static constexpr StatementTag GET_LEASE4_HWADDR_SUBID = - "GET_LEASE4_HWADDR_SUBID"; + static constexpr StatementTag GET_LEASE4_HWADDR_SUBID = "GET_LEASE4_HWADDR_SUBID"; + // Get lease4 by subnet ID + static constexpr StatementTag GET_LEASE4_SUBID = "GET_LEASE4_SUBID"; /// @} private: @@ -232,11 +234,13 @@ constexpr StatementTag CqlLease4Exchange::INSERT_LEASE4; constexpr StatementTag CqlLease4Exchange::UPDATE_LEASE4; constexpr StatementTag CqlLease4Exchange::DELETE_LEASE4; constexpr StatementTag CqlLease4Exchange::GET_LEASE4_EXPIRE; +constexpr StatementTag CqlLease4Exchange::GET_LEASE4; constexpr StatementTag CqlLease4Exchange::GET_LEASE4_ADDR; constexpr StatementTag CqlLease4Exchange::GET_LEASE4_CLIENTID; constexpr StatementTag CqlLease4Exchange::GET_LEASE4_CLIENTID_SUBID; constexpr StatementTag CqlLease4Exchange::GET_LEASE4_HWADDR; constexpr StatementTag CqlLease4Exchange::GET_LEASE4_HWADDR_SUBID; +constexpr StatementTag CqlLease4Exchange::GET_LEASE4_SUBID; StatementMap CqlLease4Exchange::tagged_statements_{ @@ -286,6 +290,14 @@ StatementMap CqlLease4Exchange::tagged_statements_{ "LIMIT ? " "ALLOW FILTERING "}}, + // Gets an IPv4 lease(s) + {GET_LEASE4, + {GET_LEASE4, + "SELECT " + "address, hwaddr, client_id, valid_lifetime, expire, subnet_id, " + "fqdn_fwd, fqdn_rev, hostname, state " + "FROM lease4 "}}, + // Gets an IPv4 lease with specified IPv4 address {GET_LEASE4_ADDR, {GET_LEASE4_ADDR, @@ -337,6 +349,15 @@ StatementMap CqlLease4Exchange::tagged_statements_{ "AND subnet_id = ? " "ALLOW FILTERING "}}, + // Gets an IPv4 lease(s) with specified subnet-id + {GET_LEASE4_SUBID, + {GET_LEASE4_SUBID, + "SELECT " + "address, hwaddr, client_id, valid_lifetime, expire, subnet_id, " + "fqdn_fwd, fqdn_rev, hostname, state " + "FROM lease4 " + "WHERE subnet_id = ? " + "ALLOW FILTERING "}} }; CqlLease4Exchange::CqlLease4Exchange(const CqlConnection &connection) @@ -361,7 +382,7 @@ CqlLease4Exchange::createBindForInsert(const Lease4Ptr &lease, AnyArray &data) { address_ = static_cast<cass_int32_t>(lease->addr_.toUint32()); // hwaddr: blob - if (lease_->hwaddr_ && lease->hwaddr_->hwaddr_.size() > 0) { + if (lease_->hwaddr_ && lease_->hwaddr_->hwaddr_.size() > 0) { if (lease_->hwaddr_->hwaddr_.size() > HWAddr::MAX_HWADDR_LEN) { isc_throw(DbOperationError, "hardware address " @@ -376,7 +397,7 @@ CqlLease4Exchange::createBindForInsert(const Lease4Ptr &lease, AnyArray &data) { } // client_id: blob - if (lease_->client_id_ && lease->client_id_->getClientId().size() > 0) { + if (lease_->client_id_ && lease_->client_id_->getClientId().size() > 0) { client_id_ = lease_->client_id_->getClientId(); } else { client_id_.clear(); @@ -455,7 +476,7 @@ CqlLease4Exchange::createBindForUpdate(const Lease4Ptr &lease, AnyArray &data, address_ = static_cast<cass_int32_t>(lease->addr_.toUint32()); // hwaddr: blob - if (lease_->hwaddr_ && lease->hwaddr_->hwaddr_.size() > 0) { + if (lease_->hwaddr_ && lease_->hwaddr_->hwaddr_.size() > 0) { if (lease_->hwaddr_->hwaddr_.size() > HWAddr::MAX_HWADDR_LEN) { isc_throw(DbOperationError, "hardware address " @@ -470,7 +491,7 @@ CqlLease4Exchange::createBindForUpdate(const Lease4Ptr &lease, AnyArray &data, } // client_id: blob - if (lease_->client_id_ && lease->client_id_->getClientId().size() > 0) { + if (lease_->client_id_ && lease_->client_id_->getClientId().size() > 0) { client_id_ = lease_->client_id_->getClientId(); } else { client_id_.clear(); @@ -1024,7 +1045,7 @@ CqlLease6Exchange::createBindForInsert(const Lease6Ptr &lease, AnyArray &data) { hostname_ = lease_->hostname_; // hwaddr: blob - if (lease_->hwaddr_ && lease->hwaddr_->hwaddr_.size() > 0) { + if (lease_->hwaddr_ && lease_->hwaddr_->hwaddr_.size() > 0) { if (lease_->hwaddr_->hwaddr_.size() > HWAddr::MAX_HWADDR_LEN) { isc_throw(DbOperationError, "hardware address " << lease_->hwaddr_->toText() << " of length " << lease_->hwaddr_->hwaddr_.size() @@ -1155,7 +1176,7 @@ CqlLease6Exchange::createBindForUpdate(const Lease6Ptr &lease, AnyArray &data, hostname_ = lease_->hostname_; // hwaddr: blob - if (lease_->hwaddr_ && lease->hwaddr_->hwaddr_.size() > 0) { + if (lease_->hwaddr_ && lease_->hwaddr_->hwaddr_.size() > 0) { if (lease_->hwaddr_->hwaddr_.size() > HWAddr::MAX_HWADDR_LEN) { isc_throw(DbOperationError, "hardware address " @@ -1617,13 +1638,37 @@ CqlLeaseMgr::getLease4(const ClientId &clientid, SubnetID subnet_id) const { } Lease4Collection -CqlLeaseMgr::getLeases4(SubnetID) const { - isc_throw(NotImplemented, "getLeases4(subnet_id) is not implemented"); +CqlLeaseMgr::getLeases4(SubnetID subnet_id) const { + LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_GET_SUBID4) + .arg(subnet_id); + + // Set up the WHERE clause value + AnyArray data; + + cass_int32_t subnet_id_data = static_cast<cass_int32_t>(subnet_id); + data.add(&subnet_id_data); + + // Get the data. + Lease4Collection result; + std::unique_ptr<CqlLease4Exchange> exchange4(new CqlLease4Exchange(dbconn_)); + exchange4->getLeaseCollection(CqlLease4Exchange::GET_LEASE4, data, result); + + return (result); } Lease4Collection CqlLeaseMgr::getLeases4() const { - isc_throw(NotImplemented, "getLeases4() is not implemented"); + LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_GET4); + + // Set up the WHERE clause value + AnyArray data; + + // Get the data. + Lease4Collection result; + std::unique_ptr<CqlLease4Exchange> exchange4(new CqlLease4Exchange(dbconn_)); + exchange4->getLeaseCollection(CqlLease4Exchange::GET_LEASE4_SUBID, data, result); + + return (result); } Lease6Ptr diff --git a/src/lib/dhcpsrv/dhcpsrv_messages.mes b/src/lib/dhcpsrv/dhcpsrv_messages.mes index ad5a7d40f3..3e279513c9 100644 --- a/src/lib/dhcpsrv/dhcpsrv_messages.mes +++ b/src/lib/dhcpsrv/dhcpsrv_messages.mes @@ -223,6 +223,10 @@ leases which have expired longer than a specified period of time. The argument is the amount of time Kea waits after a reclaimed lease expires before considering its removal. +% DHCPSRV_CQL_GET4 obtaining all IPv4 leases +A debug message issued when the server is attempting to obtain all IPv4 +leases from the Cassandra database. + % DHCPSRV_CQL_GET_ADDR4 obtaining IPv4 lease for address %1 A debug message issued when the server is attempting to obtain an IPv4 lease from the Cassandra database for the specified address. @@ -266,6 +270,10 @@ A debug message issued when the server is attempting to obtain an IPv6 lease from the Cassandra database for a client with the specified IAID (Identity Association ID), Subnet ID and DUID (DHCP Unique Identifier). +% DHCPSRV_CQL_GET_SUBID4 obtaining IPv4 leases for subnet ID %1 +A debug message issued when the server is attempting to obtain all IPv4 +leases for a given subnet identifier from the Cassandra database. + % DHCPSRV_CQL_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 lease from the Cassandra database for a client with the specified |