From 9623ed7694212152e371e388310e79922632b2ab Mon Sep 17 00:00:00 2001 From: Francis Dupont Date: Tue, 23 May 2023 19:24:46 +0200 Subject: [PATCH] [#2868] Checkpoint: adding upgradeBinaryAddress6 --- src/lib/dhcpsrv/lease_mgr.h | 11 +++++++++++ src/lib/dhcpsrv/memfile_lease_mgr.cc | 5 +++++ src/lib/dhcpsrv/memfile_lease_mgr.h | 11 ++++++++--- src/lib/dhcpsrv/mysql_lease_mgr.cc | 11 +++++++++++ src/lib/dhcpsrv/mysql_lease_mgr.h | 1 + src/lib/dhcpsrv/pgsql_lease_mgr.cc | 13 +++++++++++++ src/lib/dhcpsrv/pgsql_lease_mgr.h | 1 + src/lib/dhcpsrv/testutils/concrete_lease_mgr.cc | 5 +++++ src/lib/dhcpsrv/testutils/concrete_lease_mgr.h | 4 ++++ 9 files changed, 59 insertions(+), 3 deletions(-) diff --git a/src/lib/dhcpsrv/lease_mgr.h b/src/lib/dhcpsrv/lease_mgr.h index 10464546e8..f83511cbda 100644 --- a/src/lib/dhcpsrv/lease_mgr.h +++ b/src/lib/dhcpsrv/lease_mgr.h @@ -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. diff --git a/src/lib/dhcpsrv/memfile_lease_mgr.cc b/src/lib/dhcpsrv/memfile_lease_mgr.cc index abbde67a55..e56a116f2f 100644 --- a/src/lib/dhcpsrv/memfile_lease_mgr.cc +++ b/src/lib/dhcpsrv/memfile_lease_mgr.cc @@ -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()) { diff --git a/src/lib/dhcpsrv/memfile_lease_mgr.h b/src/lib/dhcpsrv/memfile_lease_mgr.h index e22dcead58..ac4a858f52 100644 --- a/src/lib/dhcpsrv/memfile_lease_mgr.h +++ b/src/lib/dhcpsrv/memfile_lease_mgr.h @@ -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 diff --git a/src/lib/dhcpsrv/mysql_lease_mgr.cc b/src/lib/dhcpsrv/mysql_lease_mgr.cc index 037e4b53ce..7ccd3871df 100644 --- a/src/lib/dhcpsrv/mysql_lease_mgr.cc +++ b/src/lib/dhcpsrv/mysql_lease_mgr.cc @@ -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, " diff --git a/src/lib/dhcpsrv/mysql_lease_mgr.h b/src/lib/dhcpsrv/mysql_lease_mgr.h index 91fd4ebc48..b81f651220 100644 --- a/src/lib/dhcpsrv/mysql_lease_mgr.h +++ b/src/lib/dhcpsrv/mysql_lease_mgr.h @@ -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 diff --git a/src/lib/dhcpsrv/pgsql_lease_mgr.cc b/src/lib/dhcpsrv/pgsql_lease_mgr.cc index 61a24352b1..9db98c442f 100644 --- a/src/lib/dhcpsrv/pgsql_lease_mgr.cc +++ b/src/lib/dhcpsrv/pgsql_lease_mgr.cc @@ -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", diff --git a/src/lib/dhcpsrv/pgsql_lease_mgr.h b/src/lib/dhcpsrv/pgsql_lease_mgr.h index 7bc64d2b58..09e1ced554 100644 --- a/src/lib/dhcpsrv/pgsql_lease_mgr.h +++ b/src/lib/dhcpsrv/pgsql_lease_mgr.h @@ -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 diff --git a/src/lib/dhcpsrv/testutils/concrete_lease_mgr.cc b/src/lib/dhcpsrv/testutils/concrete_lease_mgr.cc index b24b404bb7..5d2d4521b2 100644 --- a/src/lib/dhcpsrv/testutils/concrete_lease_mgr.cc +++ b/src/lib/dhcpsrv/testutils/concrete_lease_mgr.cc @@ -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 */) { diff --git a/src/lib/dhcpsrv/testutils/concrete_lease_mgr.h b/src/lib/dhcpsrv/testutils/concrete_lease_mgr.h index 53956dc20a..4a85c26864 100644 --- a/src/lib/dhcpsrv/testutils/concrete_lease_mgr.h +++ b/src/lib/dhcpsrv/testutils/concrete_lease_mgr.h @@ -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; -- 2.47.2