From: Marcin Siodelski Date: Sun, 19 Jul 2015 08:06:07 +0000 (+0200) Subject: [3958] Fixed the allocation from the large PD pool. X-Git-Tag: trac4006_base~9^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=22071c71555959f58dee3ddca099cebb313e9d92;p=thirdparty%2Fkea.git [3958] Fixed the allocation from the large PD pool. --- diff --git a/src/lib/dhcpsrv/alloc_engine.cc b/src/lib/dhcpsrv/alloc_engine.cc index 1bbf0ca699..96e5e5af3f 100644 --- a/src/lib/dhcpsrv/alloc_engine.cc +++ b/src/lib/dhcpsrv/alloc_engine.cc @@ -631,8 +631,8 @@ AllocEngine::allocateUnreservedLeases6(ClientContext6& ctx) { /// 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 /// dynamic if they're set to 0). - uint32_t max_attempts = ctx.subnet_->getPoolCapacity(ctx.type_); - for (uint32_t i = 0; i < max_attempts; ++i) + uint64_t max_attempts = ctx.subnet_->getPoolCapacity(ctx.type_); + for (uint64_t i = 0; i < max_attempts; ++i) { IOAddress candidate = allocator->pickAddress(ctx.subnet_, ctx.duid_, hint); diff --git a/src/lib/dhcpsrv/tests/alloc_engine6_unittest.cc b/src/lib/dhcpsrv/tests/alloc_engine6_unittest.cc index b4251a8deb..cf10138f4e 100644 --- a/src/lib/dhcpsrv/tests/alloc_engine6_unittest.cc +++ b/src/lib/dhcpsrv/tests/alloc_engine6_unittest.cc @@ -476,6 +476,7 @@ TEST_F(AllocEngine6Test, outOfAddresses6) { } + // This test checks if an expired lease can be reused in SOLICIT (fake allocation) TEST_F(AllocEngine6Test, solicitReuseExpiredLease6) { boost::scoped_ptr engine; @@ -1563,6 +1564,28 @@ TEST_F(AllocEngine6Test, reservedAddressByMacInPoolRequestValidHint) { 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 dhcp