From: Thomas Markwalder Date: Fri, 17 Feb 2023 18:58:42 +0000 (-0500) Subject: [#2660] Lease6::fromElement sets NA prefix length to 128 X-Git-Tag: Kea-2.3.6~122 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=543a8c06d15331517cd9cbfd2ef10bbebdcd78b7;p=thirdparty%2Fkea.git [#2660] Lease6::fromElement sets NA prefix length to 128 src/bin/dhcp6/dhcp6_srv.cc Dhcpv6Srv::processDhcp6Query() - Restrict prefix lenght test to PD leases src/lib/dhcpsrv/lease.cc Lease6::fromElement(const data::ConstElementPtr& element) - set prefix lenght to 128 for non-PD leases src/lib/dhcpsrv/tests/lease_unittest.cc Update fromElementNA test --- diff --git a/src/bin/dhcp6/dhcp6_srv.cc b/src/bin/dhcp6/dhcp6_srv.cc index b80cab316c..b4200ce822 100644 --- a/src/bin/dhcp6/dhcp6_srv.cc +++ b/src/bin/dhcp6/dhcp6_srv.cc @@ -1120,7 +1120,8 @@ Dhcpv6Srv::processDhcp6Query(Pkt6Ptr& query, Pkt6Ptr& rsp) { bool in_new = false; for (auto const& new_lease : ctx.new_leases_) { if ((new_lease->addr_ == old_lease->addr_) && - (new_lease->prefixlen_ == old_lease->prefixlen_)) { + (new_lease->type_ != Lease::TYPE_PD || + (new_lease->prefixlen_ == old_lease->prefixlen_))) { in_new = true; break; } diff --git a/src/lib/dhcpsrv/lease.cc b/src/lib/dhcpsrv/lease.cc index 81fe2aa977..2d58063638 100644 --- a/src/lib/dhcpsrv/lease.cc +++ b/src/lib/dhcpsrv/lease.cc @@ -704,8 +704,10 @@ Lease6::fromElement(const data::ConstElementPtr& element) { lease->type_ = textToType(lease_type->stringValue()); // prefix length - ConstElementPtr prefix_len = element->get("prefix-len"); - if (lease->type_ == Lease::TYPE_PD) { + if (lease->type_ != Lease::TYPE_PD) { + lease->prefixlen_ = 128; + } else { + ConstElementPtr prefix_len = element->get("prefix-len"); if (!prefix_len || (prefix_len->getType() != Element::integer)) { isc_throw(BadValue, "prefix-len is not present in the parsed lease" " or it is not a number"); diff --git a/src/lib/dhcpsrv/tests/lease_unittest.cc b/src/lib/dhcpsrv/tests/lease_unittest.cc index a16a7e0171..7c024491ba 100644 --- a/src/lib/dhcpsrv/tests/lease_unittest.cc +++ b/src/lib/dhcpsrv/tests/lease_unittest.cc @@ -1290,7 +1290,7 @@ TEST(Lease6Test, fromElementNA) { // IPv6 specific properties. EXPECT_EQ(Lease::TYPE_NA, lease->type_); - EXPECT_EQ(0, lease->prefixlen_); + EXPECT_EQ(128, lease->prefixlen_); EXPECT_EQ(123456, lease->iaid_); ASSERT_TRUE(lease->duid_); EXPECT_EQ("00:01:02:03:04:05:06:0a:0b:0c:0d:0e:0f", lease->duid_->toText());