Commit 22071c71 authored by Marcin Siodelski's avatar Marcin Siodelski
Browse files

[3958] Fixed the allocation from the large PD pool.

parent f0d1cb53
...@@ -631,8 +631,8 @@ AllocEngine::allocateUnreservedLeases6(ClientContext6& ctx) { ...@@ -631,8 +631,8 @@ AllocEngine::allocateUnreservedLeases6(ClientContext6& ctx) {
/// try that number of times at most. It would be useful to that value if /// try that number of times at most. It would be useful to that value if
/// attempts_, specified by the user could override that value (and keep /// attempts_, specified by the user could override that value (and keep
/// dynamic if they're set to 0). /// dynamic if they're set to 0).
uint32_t max_attempts = ctx.subnet_->getPoolCapacity(ctx.type_); uint64_t max_attempts = ctx.subnet_->getPoolCapacity(ctx.type_);
for (uint32_t i = 0; i < max_attempts; ++i) for (uint64_t i = 0; i < max_attempts; ++i)
{ {
IOAddress candidate = allocator->pickAddress(ctx.subnet_, ctx.duid_, hint); IOAddress candidate = allocator->pickAddress(ctx.subnet_, ctx.duid_, hint);
......
...@@ -476,6 +476,7 @@ TEST_F(AllocEngine6Test, outOfAddresses6) { ...@@ -476,6 +476,7 @@ TEST_F(AllocEngine6Test, outOfAddresses6) {
} }
// This test checks if an expired lease can be reused in SOLICIT (fake allocation) // This test checks if an expired lease can be reused in SOLICIT (fake allocation)
TEST_F(AllocEngine6Test, solicitReuseExpiredLease6) { TEST_F(AllocEngine6Test, solicitReuseExpiredLease6) {
boost::scoped_ptr<AllocEngine> engine; boost::scoped_ptr<AllocEngine> engine;
...@@ -1563,6 +1564,28 @@ TEST_F(AllocEngine6Test, reservedAddressByMacInPoolRequestValidHint) { ...@@ -1563,6 +1564,28 @@ TEST_F(AllocEngine6Test, reservedAddressByMacInPoolRequestValidHint) {
EXPECT_EQ("2001:db8:1::1c", lease->addr_.toText()); EXPECT_EQ("2001:db8:1::1c", lease->addr_.toText());
} }
// This test checks that the allocation engine can delegate the long prefix.
// The pool with prefix of 64 and with long delegated prefix has a very
// high capacity. The number of attempts that the allocation engine makes
// to allocate the prefix for high capacity pools is equal to the capacity
// value. This test verifies that the prefix can be allocated in that
// case.
TEST_F(AllocEngine6Test, largePDPool) {
AllocEngine engine(AllocEngine::ALLOC_ITERATIVE, 100);
// Remove the default PD pool.
subnet_->delPools(Lease::TYPE_PD);
// Configure the PD pool with the prefix length of /64 and the delegated
// length /96.
Pool6Ptr pool(new Pool6(Lease::TYPE_PD, IOAddress("2001:db8:1::"), 64, 96));
subnet_->addPool(pool);
// We should have got exactly one lease.
Lease6Collection leases = allocateTest(engine, pool, IOAddress("::"),
false, true);
ASSERT_EQ(1, leases.size());
}
}; // namespace test }; // namespace test
}; // namespace dhcp }; // namespace dhcp
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment