]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#2660] Lease6::fromElement sets NA prefix length to 128
authorThomas Markwalder <tmark@isc.org>
Fri, 17 Feb 2023 18:58:42 +0000 (13:58 -0500)
committerThomas Markwalder <tmark@isc.org>
Mon, 27 Feb 2023 16:02:46 +0000 (11:02 -0500)
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

src/bin/dhcp6/dhcp6_srv.cc
src/lib/dhcpsrv/lease.cc
src/lib/dhcpsrv/tests/lease_unittest.cc

index b80cab316cac7a8683a8f42316e753e88d892447..b4200ce822d88b110a285c11bf6041e7f057b6cc 100644 (file)
@@ -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;
                         }
index 81fe2aa977ba316493acf650bc19d3b99a8373d5..2d5806363807ad88af07f66be8d30abfbd6139f6 100644 (file)
@@ -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");
index a16a7e0171a246e7c668d630f71b446fb3512a2a..7c024491ba7a27e664f4b89d43585bf29b45b9fc 100644 (file)
@@ -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());