]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#2868] Checkpoint: adding upgradeBinaryAddress6
authorFrancis Dupont <fdupont@isc.org>
Tue, 23 May 2023 17:24:46 +0000 (19:24 +0200)
committerFrancis Dupont <fdupont@isc.org>
Thu, 25 May 2023 21:03:53 +0000 (23:03 +0200)
src/lib/dhcpsrv/lease_mgr.h
src/lib/dhcpsrv/memfile_lease_mgr.cc
src/lib/dhcpsrv/memfile_lease_mgr.h
src/lib/dhcpsrv/mysql_lease_mgr.cc
src/lib/dhcpsrv/mysql_lease_mgr.h
src/lib/dhcpsrv/pgsql_lease_mgr.cc
src/lib/dhcpsrv/pgsql_lease_mgr.h
src/lib/dhcpsrv/testutils/concrete_lease_mgr.cc
src/lib/dhcpsrv/testutils/concrete_lease_mgr.h

index 10464546e8160f7ef83c921ea81d3567890c8c0b..f83511cbda4442cd7b677f681bbb679a2c8a7a6c 100644 (file)
@@ -983,6 +983,17 @@ public:
         return (extended_info_tables_enabled_);
     }
 
+    /// @brief Upgrade binary address (v6).
+    ///
+    /// On SQL backends for all leases with null binary address set this
+    /// new column. Memfile uses IOAddress objets so does not need it.
+    /// This function implements the new BLQ hook command named
+    /// "binary-address6-upgrade".
+    ///
+    /// @param page_size The page size used for retrieval.
+    /// @return The number of updates in the database.
+    virtual size_t upgradeBinaryAddress6(const LeasePageSize& page_size) = 0;
+
     /// @brief Build extended info v6 tables.
     ///
     /// @param update Update extended info in database.
index abbde67a55e8aa0addfbaa682d8e87ff4d9e2ad5..e56a116f2f2db6addaadbc361dce8f7e95b163be 100644 (file)
@@ -3099,6 +3099,11 @@ Memfile_LeaseMgr::buildExtendedInfoTables6Internal(bool update, bool current) {
     return (updated);
 }
 
+size_t
+Memfile_LeaseMgr::upgradeBinaryAddress6(const LeasePageSize& /* page_size */) {
+    return (0);
+}
+
 size_t
 Memfile_LeaseMgr::buildExtendedInfoTables6(bool update, bool current) {
     if (MultiThreadingMgr::instance().getMode()) {
index e22dcead5817d8ec43c830a82a7055ee686c4b62..ac4a858f52f73206c4acbe95c8243d90d2626739 100644 (file)
@@ -1388,10 +1388,15 @@ public:
     /// @return The number of updates in the database or 0.
     size_t extractExtendedInfo4(bool update, bool current);
 
-    /// @brief Build extended info v6 tables.
+    /// @brief Upgrade binary address (v6).
+    ///
+    /// @note: this method is a nop for memfile which uses IOAddress objects.
     ///
-    /// @note: this method is a nop for memfile when update is false
-    /// as tables are built at start time.
+    /// @param page_size The page size used for retrieval.
+    /// @return Always return 0 as this function is a noop for not SQL backends.
+    virtual size_t upgradeBinaryAddress6(const LeasePageSize& page_size) override;
+
+    /// @brief Build extended info v6 tables.
     ///
     /// @param update Update extended info in database.
     /// @param current specify whether to use current (true) or staging
index 037e4b53ce9ee44e2ce737d1c0126fcc32daaebf..7ccd3871dfdf8f1c639555d67ea6f59b17690185 100644 (file)
@@ -350,6 +350,17 @@ tagged_statements = { {
                             "WHERE address > ? AND user_context IS NOT NULL "
                             "ORDER BY address "
                             "LIMIT ?"},
+    {MySqlLeaseMgr::GET_LEASE6_BINADDR_PAGE,
+                    "SELECT address, duid, valid_lifetime, "
+                        "expire, subnet_id, pref_lifetime, "
+                        "lease_type, iaid, prefix_len, "
+                        "fqdn_fwd, fqdn_rev, hostname, "
+                        "hwaddr, hwtype, hwaddr_source, "
+                        "state, user_context "
+                            "FROM lease6 "
+                            "WHERE address > ? AND binaddr IS NULL "
+                            "ORDER BY address "
+                            "LIMIT ?"},
     {MySqlLeaseMgr::GET_LEASE6_SUBID,
                     "SELECT address, duid, valid_lifetime, "
                         "expire, subnet_id, pref_lifetime, "
index 91fd4ebc48e5df5a7cf29b03d84d5a5628168e40..b81f651220ddbaf09583d571b0e72dbf7555daf7 100644 (file)
@@ -720,6 +720,7 @@ public:
         GET_LEASE6_DUID_IAID_SUBID,  // Get lease6 by DUID, IAID and subnet ID
         GET_LEASE6_PAGE,             // Get page of leases beginning with an address
         GET_LEASE6_UCTX_PAGE,        // Get page of leases with user context
+        GET_LEASE6_BINADDR_PAGE,     // Get page of leases with null binary address
         GET_LEASE6_SUBID,            // Get IPv6 leases by subnet ID
         GET_LEASE6_DUID,             // Get IPv6 leases by DUID
         GET_LEASE6_HOSTNAME,         // Get IPv6 leases by hostname
index 61a24352b1451cda94bf1c5a8372585c7a1adfe3..9db98c442f685a9634aa286d390f9d81e192d6c2 100644 (file)
@@ -360,6 +360,19 @@ PgSqlTaggedStatement tagged_statements[] = {
       "ORDER BY address "
       "LIMIT $2"},
 
+    // GET_LEASE6_BINADDR_PAGE
+    { 2, { OID_VARCHAR, OID_INT8 },
+      "get_lease6_binaddr_page",
+      "SELECT address, duid, valid_lifetime, "
+        "extract(epoch from expire)::bigint, subnet_id, pref_lifetime, "
+        "lease_type, iaid, prefix_len, fqdn_fwd, fqdn_rev, hostname, "
+        "hwaddr, hwtype, hwaddr_source, "
+        "state, user_context "
+      "FROM lease6 "
+      "WHERE address > $1 AND binaddr IS NULL "
+      "ORDER BY address "
+      "LIMIT $2"},
+
     // GET_LEASE6_SUBID
     { 1, { OID_INT8 },
       "get_lease6_subid",
index 7bc64d2b58c2fde4eabc29ee05c0b230c2ce7d33..09e1ced55408f8b22c49080ea0ca9a61843dd84d 100644 (file)
@@ -696,6 +696,7 @@ public:
         GET_LEASE6_DUID_IAID_SUBID,  // Get lease6 by DUID, IAID and subnet ID
         GET_LEASE6_PAGE,             // Get page of leases beginning with an address
         GET_LEASE6_UCTX_PAGE,        // Get page of leases with user context
+        GET_LEASE6_BINADDR_PAGE,     // Get page of leases with null binary address
         GET_LEASE6_SUBID,            // Get IPv6 leases by subnet ID
         GET_LEASE6_DUID,             // Get IPv6 leases by DUID
         GET_LEASE6_HOSTNAME,         // Get IPv6 leases by hostname
index b24b404bb7051c62fd5ab0de03e363dbe865eace..5d2d4521b2c3df0f50c6a9f6b95fe025dbf20c6e 100644 (file)
@@ -296,6 +296,11 @@ ConcreteLeaseMgr::upgradeExtendedInfo4(const LeasePageSize& /* page_size */) {
     return (0);
 }
 
+size_t
+ConcreteLeaseMgr::upgradeBinaryAddress6(const LeasePageSize& /* page_size */) {
+    return (0);
+}
+
 size_t
 ConcreteLeaseMgr::buildExtendedInfoTables6(bool /* update */,
                                            bool /* current */) {
index 53956dc20a187fd555c9ea83e9c60dffb73efa94..4a85c26864686bf3236029cf8a058fb7c2c8766a 100644 (file)
@@ -381,6 +381,10 @@ public:
     virtual size_t
     upgradeExtendedInfo4(const LeasePageSize& /* page_size */) override;
 
+    /// @brief Stub implementation.
+    virtual size_t
+    upgradeBinaryAddress6(const LeasePageSize& /* page_size */) override;
+
     /// @brief Stub implementation.
     virtual size_t buildExtendedInfoTables6(bool /* update */,
                                             bool /* current */) override;