2
0
mirror of https://gitlab.isc.org/isc-projects/kea synced 2025-08-31 05:55:28 +00:00

Checkpoint: addressed final comment but not yet tested

This commit is contained in:
Francis Dupont
2018-03-16 14:42:24 +01:00
parent a0cbd06233
commit d6a49e1f2f
13 changed files with 74 additions and 129 deletions

View 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");
}
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.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 {
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");
}
if (v4) {
Lease4Collection leases =
LeaseMgrFactory::instance().getLeases4((*subnet_id)->intValue());
for (auto lease : leases) {
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 {
// 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);
}
}

View 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");
}

View 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.
///

View 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

View 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.
///

View 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);

View 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.
///

View 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);
}

View 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

View 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);
}

View 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

View 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

View 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());
}