From philipp_subx at redfish-solutions.com Wed Dec 31 15:11:04 2025 From: philipp_subx at redfish-solutions.com (Philip Prindeville) Date: Wed, 31 Dec 2025 08:11:04 -0700 Subject: [kea-dev] Missing boost header file in 3.0.2 Message-ID: I'm trying to build kea-3.0.2 on OpenWRT HEAD and it's regressed, probably because of toolchain updates. Apparently src/lib/log/logger_level_impl.cc needs to be included. From fdupont at isc.org Wed Dec 31 17:23:43 2025 From: fdupont at isc.org (Francis Dupont) Date: Wed, 31 Dec 2025 17:23:43 +0000 Subject: [kea-dev] Missing boost header file in 3.0.2 In-Reply-To: References: Message-ID: <20251231172343.420DE787E0@bikeshed.isc.org> The problem is deeper and will be fixed by #4266. If you also want to avoid obsolete warnings with the deadline timer #4264 (based on #4266) fixes it. A few minutes ago I refreshed my patch for #4264 because the boost on my macOS requires to pass it before any build of Kea... I can send the patch to you if it is easier... BTW what is the kind of Linux that is used? It will be fine to provide a strong argument to my colleagues to review these two tickets soon (but next year) as the unsupported macOS seems to be not enough (and some are not on holidays). And it will help to get it backported too. Bonne ann?e ! Francis Dupont From philipp_subx at redfish-solutions.com Wed Dec 31 22:13:26 2025 From: philipp_subx at redfish-solutions.com (Philip Prindeville) Date: Wed, 31 Dec 2025 15:13:26 -0700 Subject: [kea-dev] Missing boost header file in 3.0.2 In-Reply-To: <20251231172343.420DE787E0@bikeshed.isc.org> References: <20251231172343.420DE787E0@bikeshed.isc.org> Message-ID: <96307940-5A71-4F37-9B0E-1C8105F88512@redfish-solutions.com> Bonne ann?e ? toi aussi, mon vieux! OpenWRT (at least on x86_64 and either APU6 boxes or virtualized as a KVM image) is using 6.12 with the MUSL C runtime. I'm cross-building on Ubuntu 24LTS. > On Dec 31, 2025, at 10:23?AM, Francis Dupont wrote: > > The problem is deeper and will be fixed by #4266. If you also want to > avoid obsolete warnings with the deadline timer #4264 (based on #4266) > fixes it. A few minutes ago I refreshed my patch for #4264 because > the boost on my macOS requires to pass it before any build of Kea... > I can send the patch to you if it is easier... > > BTW what is the kind of Linux that is used? It will be fine to provide > a strong argument to my colleagues to review these two tickets soon > (but next year) as the unsupported macOS seems to be not enough (and > some are not on holidays). And it will help to get it backported too. > > Bonne ann?e ! > > Francis Dupont From philipp_subx at redfish-solutions.com Wed Dec 31 22:13:52 2025 From: philipp_subx at redfish-solutions.com (Philip Prindeville) Date: Wed, 31 Dec 2025 15:13:52 -0700 Subject: [kea-dev] Missing boost header file in 3.0.2 In-Reply-To: <20251231172343.420DE787E0@bikeshed.isc.org> References: <20251231172343.420DE787E0@bikeshed.isc.org> Message-ID: Oh, and yes... please send me the patch or a link to it. > On Dec 31, 2025, at 10:23?AM, Francis Dupont wrote: > > The problem is deeper and will be fixed by #4266. If you also want to > avoid obsolete warnings with the deadline timer #4264 (based on #4266) > fixes it. A few minutes ago I refreshed my patch for #4264 because > the boost on my macOS requires to pass it before any build of Kea... > I can send the patch to you if it is easier... > > BTW what is the kind of Linux that is used? It will be fine to provide > a strong argument to my colleagues to review these two tickets soon > (but next year) as the unsupported macOS seems to be not enough (and > some are not on holidays). And it will help to get it backported too. > > Bonne ann?e ! > > Francis Dupont From fdupont at isc.org Wed Dec 31 22:52:45 2025 From: fdupont at isc.org (Francis Dupont) Date: Wed, 31 Dec 2025 22:52:45 +0000 Subject: [kea-dev] Missing boost header file in 3.0.2 In-Reply-To: References: <20251231172343.420DE787E0@bikeshed.isc.org> Message-ID: <20251231225245.56339787E2@bikeshed.isc.org> diff --git a/src/hooks/d2/gss_tsig/gss_tsig_cfg.cc b/src/hooks/d2/gss_tsig/gss_tsig_cfg.cc index 2edabfe207..78c5a8c05b 100644 --- a/src/hooks/d2/gss_tsig/gss_tsig_cfg.cc +++ b/src/hooks/d2/gss_tsig/gss_tsig_cfg.cc @@ -59,8 +59,10 @@ DnsServer::DnsServer(const string& id, const set& domains, rekey_interval_(DEFAULT_REKEY_INTERVAL), retry_interval_(DEFAULT_RETRY_INTERVAL), tkey_proto_(IOFetch::TCP), fallback_(false), exchange_timeout_(DEFAULT_EXCHANGE_TIMEOUT), timer_() { - BOOST_STATIC_ASSERT(DEFAULT_REKEY_INTERVAL < DEFAULT_KEY_LIFETIME); - BOOST_STATIC_ASSERT(DEFAULT_RETRY_INTERVAL < DEFAULT_REKEY_INTERVAL); + static_assert(DEFAULT_REKEY_INTERVAL < DEFAULT_KEY_LIFETIME, + "DEFAULT_REKEY_INTERVAL < DEFAULT_KEY_LIFETIME"); + static_assert(DEFAULT_RETRY_INTERVAL < DEFAULT_REKEY_INTERVAL, + "DEFAULT_RETRY_INTERVAL < DEFAULT_REKEY_INTERVAL"); initStats(); } diff --git a/src/hooks/dhcp/mysql/mysql_host_data_source.cc b/src/hooks/dhcp/mysql/mysql_host_data_source.cc index ae0fa1db9a..6d5aca4fdf 100644 --- a/src/hooks/dhcp/mysql/mysql_host_data_source.cc +++ b/src/hooks/dhcp/mysql/mysql_host_data_source.cc @@ -31,7 +31,6 @@ #include #include #include -#include #include #include @@ -170,7 +169,7 @@ public: columns_[DHCP4_BOOT_FILE_NAME_COL] = "dhcp4_boot_file_name"; columns_[AUTH_KEY_COL] = "auth_key"; - BOOST_STATIC_ASSERT(13 < HOST_COLUMNS); + static_assert(13 < HOST_COLUMNS, "13 < HOST_COLUMNS"); } /// @brief Virtual destructor. @@ -1761,7 +1760,7 @@ public: columns_[5] = "excluded_prefix"; columns_[6] = "excluded_prefix_len"; - BOOST_STATIC_ASSERT(6 < RESRV_COLUMNS); + static_assert(6 < RESRV_COLUMNS, "6 < RESRV_COLUMNS"); } /// @brief Create MYSQL_BIND objects for IPv6 Reservation. @@ -1945,7 +1944,7 @@ public: subnet_id_(SUBNET_ID_UNUSED), host_id_(0), option_() { - BOOST_STATIC_ASSERT(11 <= OPTION_COLUMNS); + static_assert(11 <= OPTION_COLUMNS, "11 <= OPTION_COLUMNS"); } /// @brief Creates binding array to insert option data into database. diff --git a/src/hooks/dhcp/mysql/mysql_lease_mgr.cc b/src/hooks/dhcp/mysql/mysql_lease_mgr.cc index e7d4d81725..7021efe728 100644 --- a/src/hooks/dhcp/mysql/mysql_lease_mgr.cc +++ b/src/hooks/dhcp/mysql/mysql_lease_mgr.cc @@ -22,7 +22,6 @@ #include #include -#include #include #include @@ -700,7 +699,7 @@ public: columns_[RELAY_ID_COL] = "relay_id"; columns_[REMOTE_ID_COL] = "remote_id"; columns_[POOL_ID_COL] = "pool_id"; - BOOST_STATIC_ASSERT(13 < LEASE_COLUMNS); + static_assert(13 < LEASE_COLUMNS, "13 < LEASE_COLUMNS"); } /// @brief Create MYSQL_BIND objects for Lease4 Pointer @@ -923,7 +922,7 @@ public: setErrorIndicators(bind_, error_, LEASE_COLUMNS); // .. and check that we have the numbers correct at compile time. - BOOST_STATIC_ASSERT(13 < LEASE_COLUMNS); + static_assert(13 < LEASE_COLUMNS, "13 < LEASE_COLUMNS"); } catch (const std::exception& ex) { isc_throw(DbOperationError, @@ -1066,7 +1065,7 @@ public: setErrorIndicators(bind_, error_, LEASE_COLUMNS); // .. and check that we have the numbers correct at compile time. - BOOST_STATIC_ASSERT(13 < LEASE_COLUMNS); + static_assert(13 < LEASE_COLUMNS, "13 < LEASE_COLUMNS"); // Add the data to the vector. Note the end element is one after the // end of the array. @@ -1292,7 +1291,7 @@ public: columns_[STATE_COL] = "state"; columns_[USER_CONTEXT_COL] = "user_context"; columns_[POOL_ID_COL] = "pool_id"; - BOOST_STATIC_ASSERT(17 < LEASE_COLUMNS); + static_assert(17 < LEASE_COLUMNS, "17 < LEASE_COLUMNS"); } /// @brief Create MYSQL_BIND objects for Lease6 Pointer @@ -1536,7 +1535,7 @@ public: setErrorIndicators(bind_, error_, LEASE_COLUMNS); // .. and check that we have the numbers correct at compile time. - BOOST_STATIC_ASSERT(17 < LEASE_COLUMNS); + static_assert(17 < LEASE_COLUMNS, "17 < LEASE_COLUMNS"); } catch (const std::exception& ex) { isc_throw(DbOperationError, @@ -1702,7 +1701,7 @@ public: setErrorIndicators(bind_, error_, LEASE_COLUMNS); // .. and check that we have the numbers correct at compile time. - BOOST_STATIC_ASSERT(17 < LEASE_COLUMNS); + static_assert(17 < LEASE_COLUMNS, "17 < LEASE_COLUMNS"); // Add the data to the vector. Note the end element is one after the // end of the array. diff --git a/src/hooks/dhcp/mysql/mysql_legal_log.cc b/src/hooks/dhcp/mysql/mysql_legal_log.cc index 559e36a247..d7e4720127 100644 --- a/src/hooks/dhcp/mysql/mysql_legal_log.cc +++ b/src/hooks/dhcp/mysql/mysql_legal_log.cc @@ -15,7 +15,6 @@ #include #include -#include #include #include @@ -62,7 +61,7 @@ public: // Set the column names (for error messages) columns_[0] = "address"; columns_[1] = "log"; - BOOST_STATIC_ASSERT(1 < LOG_COLUMNS); + static_assert(1 < LOG_COLUMNS, "1 < LOG_COLUMNS"); } /// @brief Destructor @@ -183,7 +182,7 @@ public: setErrorIndicators(bind_, error_, LOG_COLUMNS); // .. and check that we have the numbers correct at compile time. - BOOST_STATIC_ASSERT(1 < LOG_COLUMNS); + static_assert(1 < LOG_COLUMNS, "1 < LOG_COLUMNS"); } catch (const std::exception& ex) { isc_throw(DbOperationError, diff --git a/src/hooks/dhcp/pgsql/pgsql_host_data_source.cc b/src/hooks/dhcp/pgsql/pgsql_host_data_source.cc index 12fc2d05a6..22e3a4c22e 100644 --- a/src/hooks/dhcp/pgsql/pgsql_host_data_source.cc +++ b/src/hooks/dhcp/pgsql/pgsql_host_data_source.cc @@ -30,7 +30,6 @@ #include #include #include -#include #include @@ -140,7 +139,7 @@ public: columns_[DHCP4_BOOT_FILE_NAME_COL] = "dhcp4_boot_file_name"; columns_[AUTH_KEY_COL] = "auth_key"; - BOOST_STATIC_ASSERT(12 < HOST_COLUMNS); + static_assert(12 < HOST_COLUMNS, "12 < HOST_COLUMNS"); }; /// @brief Virtual destructor. @@ -966,7 +965,7 @@ public: columns_[excluded_prefix_index_] = "excluded_prefix"; columns_[excluded_prefix_len_index_] = "excluded_prefix_len"; - BOOST_STATIC_ASSERT(6 < RESERVATION_COLUMNS); + static_assert(6 < RESERVATION_COLUMNS, "6 < RESERVATION_COLUMNS"); } /// @brief Reinitializes state information @@ -1150,7 +1149,7 @@ public: columns_[5] = "excluded_prefix"; columns_[6] = "excluded_prefix_len"; - BOOST_STATIC_ASSERT(7 < RESRV_COLUMNS); + static_assert(7 < RESRV_COLUMNS, "7 < RESRV_COLUMNS"); } /// @brief Populate a bind array representing an IPv6 reservation @@ -1268,7 +1267,7 @@ public: columns_[DHCP_SUBNET_ID_COL] = "dhcp_subnet_id"; columns_[HOST_ID_COL] = "host_id"; - BOOST_STATIC_ASSERT(11 <= OPTION_COLUMNS); + static_assert(11 <= OPTION_COLUMNS, "11 <= OPTION_COLUMNS"); } /// @brief Creates binding array to insert option data into database. diff --git a/src/hooks/dhcp/pgsql/pgsql_lease_mgr.cc b/src/hooks/dhcp/pgsql/pgsql_lease_mgr.cc index 02c8e7aab2..887029e10a 100644 --- a/src/hooks/dhcp/pgsql/pgsql_lease_mgr.cc +++ b/src/hooks/dhcp/pgsql/pgsql_lease_mgr.cc @@ -21,7 +21,6 @@ #include #include -#include #include #include @@ -780,7 +779,7 @@ public: : lease_(), addr4_(0), client_id_length_(0), relay_id_length_(0), remote_id_length_(0) { - BOOST_STATIC_ASSERT(13 < LEASE_COLUMNS); + static_assert(13 < LEASE_COLUMNS, "13 < LEASE_COLUMNS"); memset(hwaddr_buffer_, 0, sizeof(hwaddr_buffer_)); memset(client_id_buffer_, 0, sizeof(client_id_buffer_)); @@ -1082,7 +1081,7 @@ public: preferred_lifetime_str_(""), hwtype_(0), hwtype_str_(""), hwaddr_source_(0), hwaddr_source_str_("") { - BOOST_STATIC_ASSERT(17 < LEASE_COLUMNS); + static_assert(17 < LEASE_COLUMNS, "17 < LEASE_COLUMNS"); memset(duid_buffer_, 0, sizeof(duid_buffer_)); diff --git a/src/hooks/dhcp/pgsql/pgsql_legal_log.cc b/src/hooks/dhcp/pgsql/pgsql_legal_log.cc index 5b4aef5cdf..2599cff069 100644 --- a/src/hooks/dhcp/pgsql/pgsql_legal_log.cc +++ b/src/hooks/dhcp/pgsql/pgsql_legal_log.cc @@ -14,8 +14,6 @@ #include #include -#include - #include #include #include @@ -65,7 +63,7 @@ public: /// @brief Constructor PgSqlLegLExchange() : address_(""), log_("") { - BOOST_STATIC_ASSERT(0 < LOG_COLUMNS); + static_assert(0 < LOG_COLUMNS, "0 < LOG_COLUMNS"); // Set the column names (for error messages) columns_.push_back("log"); diff --git a/src/lib/asiodns/io_fetch.cc b/src/lib/asiodns/io_fetch.cc index c140676f66..24b1761d7b 100644 --- a/src/lib/asiodns/io_fetch.cc +++ b/src/lib/asiodns/io_fetch.cc @@ -25,6 +25,7 @@ #include #include +#include #include #include // for some IPC/network system calls #include @@ -67,7 +68,7 @@ struct IOFetchData : boost::noncopyable { OutputBufferPtr msgbuf; // Wire buffer for question OutputBufferPtr received; // Received data put here IOFetch::Callback* callback; // Called on I/O Completion - boost::asio::deadline_timer timer; // Timer to measure timeouts + boost::asio::system_timer timer; // Timer to measure timeouts IOFetch::Protocol protocol; // Protocol being used size_t cumulative; // Cumulative received amount size_t expected; // Expected amount of data @@ -227,7 +228,7 @@ IOFetch::operator()(boost::system::error_code ec, size_t length) { // If we timeout, we stop, which cancels outstanding I/O operations and // shuts down everything. if (data_->timeout != -1) { - data_->timer.expires_from_now(boost::posix_time::milliseconds( + data_->timer.expires_after(std::chrono::milliseconds( data_->timeout)); data_->timer.async_wait(std::bind(&IOFetch::stop, *this, TIME_OUT)); diff --git a/src/lib/asiodns/io_fetch.h b/src/lib/asiodns/io_fetch.h index e9c85b58c5..bd5fc1d9ad 100644 --- a/src/lib/asiodns/io_fetch.h +++ b/src/lib/asiodns/io_fetch.h @@ -16,7 +16,7 @@ #include #include -#include +#include #include #include #include diff --git a/src/lib/asiodns/tests/io_fetch_unittest.cc b/src/lib/asiodns/tests/io_fetch_unittest.cc index 7b4cd0568e..045678f51b 100644 --- a/src/lib/asiodns/tests/io_fetch_unittest.cc +++ b/src/lib/asiodns/tests/io_fetch_unittest.cc @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -66,7 +67,7 @@ public: IOFetch tcp_fetch_; ///< For TCP query test IOFetch::Protocol protocol_; ///< Protocol being tested size_t cumulative_; ///< Cumulative data received by "server". - deadline_timer timer_; ///< Timer to measure timeouts + system_timer timer_; ///< Timer to measure timeouts // The next member is the buffer in which the "server" (implemented by the // response handler methods in this class) receives the question sent by the @@ -431,7 +432,7 @@ public: // tcpSendData, which will then send the next chunk. We pass the // socket over which data should be sent as an argument to that // function. - timer_.expires_from_now(boost::posix_time::milliseconds(SEND_INTERVAL)); + timer_.expires_after(std::chrono::milliseconds(SEND_INTERVAL)); timer_.async_wait(std::bind(&IOFetchTest::tcpSendData, this, socket)); } diff --git a/src/lib/asiolink/interval_timer.cc b/src/lib/asiolink/interval_timer.cc index fa0d9e1b67..4c5902b8d2 100644 --- a/src/lib/asiolink/interval_timer.cc +++ b/src/lib/asiolink/interval_timer.cc @@ -16,6 +16,7 @@ #include #include +#include #include #include @@ -88,7 +89,7 @@ private: IOServicePtr io_service_; /// @brief The asio timer. - boost::asio::deadline_timer timer_; + boost::asio::system_timer timer_; /// @brief Controls how the timer behaves after expiration. IntervalTimer::Mode mode_; @@ -141,7 +142,7 @@ void IntervalTimerImpl::update() { try { // Update expire time to (current time + interval_). - timer_.expires_from_now(boost::posix_time::millisec(long(interval_))); + timer_.expires_after(std::chrono::milliseconds(interval_)); // Reset timer. // Pass a function bound with a shared_ptr to this. timer_.async_wait(std::bind(&IntervalTimerImpl::callback, diff --git a/src/lib/asiolink/interval_timer.h b/src/lib/asiolink/interval_timer.h index d340481e94..24f735deb8 100644 --- a/src/lib/asiolink/interval_timer.h +++ b/src/lib/asiolink/interval_timer.h @@ -11,7 +11,7 @@ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Woverloaded-virtual" #endif -#include +#include #ifdef __GNUC__ #pragma GCC diagnostic pop #endif @@ -27,9 +27,9 @@ namespace asiolink { class IntervalTimerImpl; /// \brief The \c IntervalTimer class is a wrapper for the ASIO -/// \c boost::asio::deadline_timer class. +/// \c boost::asio::system_timer class. /// -/// This class is implemented to use \c boost::asio::deadline_timer as interval +/// This class is implemented to use \c boost::asio::system_timer as interval /// timer. /// /// \c setup() sets a timer to expire on (now + interval), a call back @@ -96,7 +96,7 @@ public: /// This destructor never throws an exception. /// /// On the destruction of this class the timer will be canceled - /// inside \c boost::asio::deadline_timer. + /// inside \c boost::asio::system_timer. ~IntervalTimer(); //@} diff --git a/src/lib/asiolink/io_address.cc b/src/lib/asiolink/io_address.cc index e912f0f398..bbc96b15cd 100644 --- a/src/lib/asiolink/io_address.cc +++ b/src/lib/asiolink/io_address.cc @@ -10,7 +10,6 @@ #include #include -#include // moved to container_hash on recent boost versions (backward compatible) #include @@ -71,7 +70,8 @@ IOAddress::fromBytes(short family, const uint8_t* data) { << "are supported"); } - BOOST_STATIC_ASSERT(INET6_ADDRSTRLEN >= INET_ADDRSTRLEN); + static_assert(INET6_ADDRSTRLEN >= INET_ADDRSTRLEN, + "INET6_ADDRSTRLEN >= INET_ADDRSTRLEN"); char addr_str[INET6_ADDRSTRLEN]; inet_ntop(family, data, addr_str, INET6_ADDRSTRLEN); return IOAddress(string(addr_str)); diff --git a/src/lib/dhcp/iface_mgr_linux.cc b/src/lib/dhcp/iface_mgr_linux.cc index d49518c7fb..89dd65d6ff 100644 --- a/src/lib/dhcp/iface_mgr_linux.cc +++ b/src/lib/dhcp/iface_mgr_linux.cc @@ -32,7 +32,6 @@ #include #include -#include #include #include @@ -45,7 +44,7 @@ using namespace isc::asiolink; using namespace isc::dhcp; using namespace isc::util::io::internal; -BOOST_STATIC_ASSERT(IFLA_MAX>=IFA_MAX); +static_assert(IFLA_MAX>=IFA_MAX, "IFLA_MAX>=IFA_MAX"); namespace { @@ -180,7 +179,8 @@ void Netlink::rtnl_send_request(int family, int type) { struct sockaddr_nl nladdr; // do a sanity check. Verify that Req structure is aligned properly - BOOST_STATIC_ASSERT(sizeof(nlmsghdr) == offsetof(Req, generic)); + static_assert(sizeof(nlmsghdr) == offsetof(Req, generic), + "sizeof(nlmsghdr) == offsetof(Req, generic)"); memset(&nladdr, 0, sizeof(nladdr)); nladdr.nl_family = AF_NETLINK; diff --git a/src/lib/dhcp/protocol_util.cc b/src/lib/dhcp/protocol_util.cc index da701045c8..f3bc355fa8 100644 --- a/src/lib/dhcp/protocol_util.cc +++ b/src/lib/dhcp/protocol_util.cc @@ -8,7 +8,6 @@ #include #include #include -#include // in_systm.h is required on some some BSD systems // complaining that n_time is undefined but used // in ip.h. @@ -41,7 +40,8 @@ decodeEthernetHeader(InputBuffer& buf, Pkt4Ptr& pkt) { // The size of the single address is always lower then the size of // the header that holds this address. Otherwise, it is a programming // error that we want to detect in the compilation time. - BOOST_STATIC_ASSERT(ETHERNET_HEADER_LEN > HWAddr::ETHERNET_HWADDR_LEN); + static_assert(ETHERNET_HEADER_LEN > HWAddr::ETHERNET_HWADDR_LEN, + "ETHERNET_HEADER_LEN > HWAddr::ETHERNET_HWADDR_LEN"); // Remember initial position. size_t start_pos = buf.getPosition(); @@ -76,7 +76,8 @@ decodeIpUdpHeader(InputBuffer& buf, Pkt4Ptr& pkt) { " packet headers"); } - BOOST_STATIC_ASSERT(IP_SRC_ADDR_OFFSET < MIN_IP_HEADER_LEN); + static_assert(IP_SRC_ADDR_OFFSET < MIN_IP_HEADER_LEN, + "IP_SRC_ADDR_OFFSET < MIN_IP_HEADER_LEN"); // Remember initial position of the read pointer. size_t start_pos = buf.getPosition(); diff --git a/src/lib/dhcp/tests/pkt4_unittest.cc b/src/lib/dhcp/tests/pkt4_unittest.cc index 72f0da76a7..49d1f11153 100644 --- a/src/lib/dhcp/tests/pkt4_unittest.cc +++ b/src/lib/dhcp/tests/pkt4_unittest.cc @@ -25,7 +25,6 @@ #include #include #include -#include #include #include @@ -87,9 +86,10 @@ const uint8_t dummyFile[] = "Lorem ipsum dolor sit amet, consectetur " const uint8_t dummySname[] = "Lorem ipsum dolor sit amet, consectetur " "adipiscing elit posuere."; -BOOST_STATIC_ASSERT(sizeof(dummyFile) == Pkt4::MAX_FILE_LEN + 1); -BOOST_STATIC_ASSERT(sizeof(dummySname) == Pkt4::MAX_SNAME_LEN + 1); - +static_assert(sizeof(dummyFile) == Pkt4::MAX_FILE_LEN + 1, + "sizeof(dummyFile) == Pkt4::MAX_FILE_LEN + 1"); +static_assert(sizeof(dummySname) == Pkt4::MAX_SNAME_LEN + 1, + "sizeof(dummySname) == Pkt4::MAX_SNAME_LEN + 1"); class Pkt4Test : public ::testing::Test { public: diff --git a/src/lib/dhcpsrv/tests/alloc_engine_expiration_unittest.cc b/src/lib/dhcpsrv/tests/alloc_engine_expiration_unittest.cc index 231266c50b..ea1d4d36cb 100644 --- a/src/lib/dhcpsrv/tests/alloc_engine_expiration_unittest.cc +++ b/src/lib/dhcpsrv/tests/alloc_engine_expiration_unittest.cc @@ -13,7 +13,6 @@ #include #include #include -#include #include #include #include @@ -701,7 +700,8 @@ public: // Hence, it is convenient if the number of test leases is a // multiple of 10. const size_t reclamation_group_size = 10; - BOOST_STATIC_ASSERT(TEST_LEASES_NUM % reclamation_group_size == 0); + static_assert(TEST_LEASES_NUM % reclamation_group_size == 0, + "TEST_LEASES_NUM % reclamation_group_size == 0"); // Leases will be reclaimed in groups of 10. for (unsigned int i = reclamation_group_size; i < TEST_LEASES_NUM; @@ -770,7 +770,8 @@ public: } const size_t reclamation_group_size = 10; - BOOST_STATIC_ASSERT(TEST_LEASES_NUM % reclamation_group_size == 0); + static_assert(TEST_LEASES_NUM % reclamation_group_size == 0, + "TEST_LEASES_NUM % reclamation_group_size == 0"); // Leases will be reclaimed in groups of 10 for (unsigned int i = 10; i < TEST_LEASES_NUM; i += reclamation_group_size) { @@ -1457,7 +1458,7 @@ ExpirationAllocEngine6Test::setLeaseType(const uint16_t lease_index, void ExpirationAllocEngine6Test::testReclaimExpiredLeasesStats() { // This test requires that the number of leases is an even number. - BOOST_STATIC_ASSERT(TEST_LEASES_NUM % 2 == 0); + static_assert(TEST_LEASES_NUM % 2 == 0, "TEST_LEASES_NUM % 2 == 0"); for (unsigned int i = 0; i < TEST_LEASES_NUM; ++i) { // Mark all leases as expired. The higher the index the less @@ -1496,7 +1497,7 @@ ExpirationAllocEngine6Test::testReclaimExpiredLeasesStats() { void ExpirationAllocEngine6Test::testReclaimReusedLeases(const uint16_t msg_type, const bool use_reclaimed) { - BOOST_STATIC_ASSERT(TEST_LEASES_NUM < 1000); + static_assert(TEST_LEASES_NUM < 1000, "TEST_LEASES_NUM < 1000"); for (unsigned int i = 0; i < TEST_LEASES_NUM; ++i) { // Depending on the parameter, mark leases 'expired-reclaimed' or @@ -1604,7 +1605,7 @@ ExpirationAllocEngine6Test::testReclaimDeclinedHook(bool skip) { void ExpirationAllocEngine6Test::testReclaimExpiredLeasesRegisteredStats() { // This test requires that the number of leases is an even number. - BOOST_STATIC_ASSERT(TEST_LEASES_NUM % 2 == 0); + static_assert(TEST_LEASES_NUM % 2 == 0, "TEST_LEASES_NUM % 2 == 0"); for (unsigned int i = 0; i < TEST_LEASES_NUM; ++i) { // Mark all leases as expired. The higher the index the less @@ -1700,7 +1701,8 @@ TEST_F(ExpirationAllocEngine6Test, reclaimExpiredLeasesHooksWithSkip) { // execution of the lease reclamation routine. TEST_F(ExpirationAllocEngine6Test, reclaimExpiredLeasesTimeout) { // This test needs at least 40 leases to make sense. - BOOST_STATIC_ASSERT(TEST_LEASES_NUM >= 40); + static_assert(TEST_LEASES_NUM >= 40, "TEST_LEASES_NUM >= 40"); + // Run with timeout of 1.2s. testReclaimExpiredLeasesTimeout(1200); } @@ -1712,7 +1714,7 @@ TEST_F(ExpirationAllocEngine6Test, reclaimExpiredLeasesTimeout) { // reclamation. TEST_F(ExpirationAllocEngine6Test, reclaimExpiredLeasesShortTimeout) { // We will most likely reclaim just one lease, so 5 is more than enough. - BOOST_STATIC_ASSERT(TEST_LEASES_NUM >= 5); + static_assert(TEST_LEASES_NUM >= 5, "TEST_LEASES_NUM >= 5"); // Reclaim leases with the 1ms timeout. testReclaimExpiredLeasesTimeout(1); } @@ -1720,7 +1722,7 @@ TEST_F(ExpirationAllocEngine6Test, reclaimExpiredLeasesShortTimeout) { // This test verifies that expired-reclaimed leases are removed from the // lease database. TEST_F(ExpirationAllocEngine6Test, deleteExpiredReclaimedLeases) { - BOOST_STATIC_ASSERT(TEST_LEASES_NUM >= 10); + static_assert(TEST_LEASES_NUM >= 10, "TEST_LEASES_NUM >= 10"); testDeleteExpiredReclaimedLeases(); } @@ -2178,7 +2180,7 @@ ExpirationAllocEngine4Test::testReclaimExpiredLeasesWithDDNSAndClientId() { void ExpirationAllocEngine4Test::testReclaimExpiredLeasesStats() { // This test requires that the number of leases is an even number. - BOOST_STATIC_ASSERT(TEST_LEASES_NUM % 2 == 0); + static_assert(TEST_LEASES_NUM % 2 == 0, "TEST_LEASES_NUM % 2 == 0"); for (unsigned int i = 0; i < TEST_LEASES_NUM; ++i) { // Mark all leases as expired. The higher the index the less @@ -2217,7 +2219,7 @@ ExpirationAllocEngine4Test::testReclaimReusedLeases(const uint8_t msg_type, const bool client_renews, const bool use_reclaimed) { // Let's restrict the number of leases. - BOOST_STATIC_ASSERT(TEST_LEASES_NUM < 1000); + static_assert(TEST_LEASES_NUM < 1000, "TEST_LEASES_NUM < 1000"); for (unsigned int i = 0; i < TEST_LEASES_NUM; ++i) { // Depending on the parameter, mark leases 'expired-reclaimed' or @@ -2391,7 +2393,7 @@ TEST_F(ExpirationAllocEngine4Test, reclaimExpiredLeasesHooksWithSkip) { // execution of the lease reclamation routine. TEST_F(ExpirationAllocEngine4Test, reclaimExpiredLeasesTimeout) { // This test needs at least 40 leases to make sense. - BOOST_STATIC_ASSERT(TEST_LEASES_NUM >= 40); + static_assert(TEST_LEASES_NUM >= 40, "TEST_LEASES_NUM >= 40"); // Run with timeout of 1.2s. testReclaimExpiredLeasesTimeout(1200); } @@ -2403,7 +2405,7 @@ TEST_F(ExpirationAllocEngine4Test, reclaimExpiredLeasesTimeout) { // reclamation. TEST_F(ExpirationAllocEngine4Test, reclaimExpiredLeasesShortTimeout) { // We will most likely reclaim just one lease, so 5 is more than enough. - BOOST_STATIC_ASSERT(TEST_LEASES_NUM >= 5); + static_assert(TEST_LEASES_NUM >= 5, "TEST_LEASES_NUM >= 5"); // Reclaim leases with the 1ms timeout. testReclaimExpiredLeasesTimeout(1); } @@ -2411,7 +2413,7 @@ TEST_F(ExpirationAllocEngine4Test, reclaimExpiredLeasesShortTimeout) { // This test verifies that expired-reclaimed leases are removed from the // lease database. TEST_F(ExpirationAllocEngine4Test, deleteExpiredReclaimedLeases) { - BOOST_STATIC_ASSERT(TEST_LEASES_NUM >= 10); + static_assert(TEST_LEASES_NUM >= 10, "TEST_LEASES_NUM >= 10"); testDeleteExpiredReclaimedLeases(); } diff --git a/src/lib/dns/messagerenderer.cc b/src/lib/dns/messagerenderer.cc index 4e1dfeaa8b..5c9cc3674f 100644 --- a/src/lib/dns/messagerenderer.cc +++ b/src/lib/dns/messagerenderer.cc @@ -15,7 +15,6 @@ #include #include -#include #include #include #include diff --git a/src/lib/dns/rdataclass.cc b/src/lib/dns/rdataclass.cc index 1bf515cb0d..79dc09466d 100644 --- a/src/lib/dns/rdataclass.cc +++ b/src/lib/dns/rdataclass.cc @@ -1398,8 +1398,9 @@ SOA::getSerial() const { uint32_t SOA::getMinimum() const { // Make sure the buffer access is safe. - BOOST_STATIC_ASSERT(sizeof(numdata_) == - sizeof(uint32_t) * 4 + sizeof(uint32_t)); + static_assert( + sizeof(numdata_) == sizeof(uint32_t) * 4 + sizeof(uint32_t), + "sizeof(numdata_) == sizeof(uint32_t) * 4 + sizeof(uint32_t)"); InputBuffer b(&numdata_[sizeof(uint32_t) * 4], sizeof(uint32_t)); return (b.readUint32()); diff --git a/src/lib/hooks/callout_manager.cc b/src/lib/hooks/callout_manager.cc index fbf4b90a19..7c30b08097 100644 --- a/src/lib/hooks/callout_manager.cc +++ b/src/lib/hooks/callout_manager.cc @@ -12,8 +12,6 @@ #include #include -#include - #include #include #include diff --git a/src/lib/log/logger_impl.cc b/src/lib/log/logger_impl.cc index 1718f303c9..fe2c3afe56 100644 --- a/src/lib/log/logger_impl.cc +++ b/src/lib/log/logger_impl.cc @@ -17,7 +17,6 @@ #include #include -#include #include #include diff --git a/src/lib/log/logger_level_impl.cc b/src/lib/log/logger_level_impl.cc index a4aba73a20..a6a4fdd40d 100644 --- a/src/lib/log/logger_level_impl.cc +++ b/src/lib/log/logger_level_impl.cc @@ -44,13 +44,20 @@ LoggerLevelImpl::convertFromBindLevel(const Level& level) { }; // ... with compile-time checks to ensure that table indexes are correct. - BOOST_STATIC_ASSERT(static_cast(DEFAULT) == 0); - BOOST_STATIC_ASSERT(static_cast(DEBUG) == 1); - BOOST_STATIC_ASSERT(static_cast(INFO) == 2); - BOOST_STATIC_ASSERT(static_cast(WARN) == 3); - BOOST_STATIC_ASSERT(static_cast(ERROR) == 4); - BOOST_STATIC_ASSERT(static_cast(FATAL) == 5); - BOOST_STATIC_ASSERT(static_cast(NONE) == 6); + static_assert(static_cast(DEFAULT) == 0, + "static_cast(DEFAULT) == 0"); + static_assert(static_cast(DEBUG) == 1, + "static_cast(DEBUG) == 1"); + static_assert(static_cast(INFO) == 2, + "static_cast(INFO) == 2"); + static_assert(static_cast(WARN) == 3, + "static_cast(WARN) == 3"); + static_assert(static_cast(ERROR) == 4, + "static_cast(ERROR) == 4"); + static_assert(static_cast(FATAL) == 5, + "static_cast(FATAL) == 5"); + static_assert(static_cast(NONE) == 6, + "static_cast(NONE) == 6"); // Do the conversion if (level.severity == DEBUG) { diff --git a/src/lib/log/tests/logger_level_impl_unittest.cc b/src/lib/log/tests/logger_level_impl_unittest.cc index c82be69b17..d9375ee09c 100644 --- a/src/lib/log/tests/logger_level_impl_unittest.cc +++ b/src/lib/log/tests/logger_level_impl_unittest.cc @@ -10,7 +10,6 @@ #include #include -#include #include #include @@ -109,7 +108,7 @@ TEST_F(LoggerLevelImplTest, ConversionToBind) { // ... and some invalid valid values test_convert_to("DEBUG-1", INFO, MIN_DEBUG_LEVEL, (log4cplus::DEBUG_LOG_LEVEL + 1)); - BOOST_STATIC_ASSERT(MAX_DEBUG_LEVEL == 99); + static_assert(MAX_DEBUG_LEVEL == 99, "MAX_DEBUG_LEVEL == 99"); test_convert_to("DEBUG+100", DEFAULT, 0, (log4cplus::DEBUG_LOG_LEVEL - MAX_DEBUG_LEVEL - 1)); } From philipp_subx at redfish-solutions.com Wed Dec 31 22:55:19 2025 From: philipp_subx at redfish-solutions.com (Philip Prindeville) Date: Wed, 31 Dec 2025 15:55:19 -0700 Subject: [kea-dev] Missing boost header file in 3.0.2 In-Reply-To: <20251231225245.56339787E2@bikeshed.isc.org> References: <20251231172343.420DE787E0@bikeshed.isc.org> <20251231225245.56339787E2@bikeshed.isc.org> Message-ID: That?s much bigger than my patch was. But I was trying to have a point-fix. --- a/src/lib/log/logger_level_impl.cc +++ b/src/lib/log/logger_level_impl.cc @@ -10,6 +10,7 @@ #include #include #include +#include #include > On Dec 31, 2025, at 3:52?PM, Francis Dupont wrote: > > diff --git a/src/hooks/d2/gss_tsig/gss_tsig_cfg.cc b/src/hooks/d2/gss_tsig/gss_tsig_cfg.cc > index 2edabfe207..78c5a8c05b 100644 > --- a/src/hooks/d2/gss_tsig/gss_tsig_cfg.cc > +++ b/src/hooks/d2/gss_tsig/gss_tsig_cfg.cc > @@ -59,8 +59,10 @@ DnsServer::DnsServer(const string& id, const set& domains, > rekey_interval_(DEFAULT_REKEY_INTERVAL), > retry_interval_(DEFAULT_RETRY_INTERVAL), tkey_proto_(IOFetch::TCP), > fallback_(false), exchange_timeout_(DEFAULT_EXCHANGE_TIMEOUT), timer_() { > - BOOST_STATIC_ASSERT(DEFAULT_REKEY_INTERVAL < DEFAULT_KEY_LIFETIME); > - BOOST_STATIC_ASSERT(DEFAULT_RETRY_INTERVAL < DEFAULT_REKEY_INTERVAL); > + static_assert(DEFAULT_REKEY_INTERVAL < DEFAULT_KEY_LIFETIME, > + "DEFAULT_REKEY_INTERVAL < DEFAULT_KEY_LIFETIME"); > + static_assert(DEFAULT_RETRY_INTERVAL < DEFAULT_REKEY_INTERVAL, > + "DEFAULT_RETRY_INTERVAL < DEFAULT_REKEY_INTERVAL"); > initStats(); > } > > diff --git a/src/hooks/dhcp/mysql/mysql_host_data_source.cc b/src/hooks/dhcp/mysql/mysql_host_data_source.cc > index ae0fa1db9a..6d5aca4fdf 100644 > --- a/src/hooks/dhcp/mysql/mysql_host_data_source.cc > +++ b/src/hooks/dhcp/mysql/mysql_host_data_source.cc > @@ -31,7 +31,6 @@ > #include > #include > #include > -#include > > #include > #include > @@ -170,7 +169,7 @@ public: > columns_[DHCP4_BOOT_FILE_NAME_COL] = "dhcp4_boot_file_name"; > columns_[AUTH_KEY_COL] = "auth_key"; > > - BOOST_STATIC_ASSERT(13 < HOST_COLUMNS); > + static_assert(13 < HOST_COLUMNS, "13 < HOST_COLUMNS"); > } > > /// @brief Virtual destructor. > @@ -1761,7 +1760,7 @@ public: > columns_[5] = "excluded_prefix"; > columns_[6] = "excluded_prefix_len"; > > - BOOST_STATIC_ASSERT(6 < RESRV_COLUMNS); > + static_assert(6 < RESRV_COLUMNS, "6 < RESRV_COLUMNS"); > } > > /// @brief Create MYSQL_BIND objects for IPv6 Reservation. > @@ -1945,7 +1944,7 @@ public: > subnet_id_(SUBNET_ID_UNUSED), > host_id_(0), option_() { > > - BOOST_STATIC_ASSERT(11 <= OPTION_COLUMNS); > + static_assert(11 <= OPTION_COLUMNS, "11 <= OPTION_COLUMNS"); > } > > /// @brief Creates binding array to insert option data into database. > diff --git a/src/hooks/dhcp/mysql/mysql_lease_mgr.cc b/src/hooks/dhcp/mysql/mysql_lease_mgr.cc > index e7d4d81725..7021efe728 100644 > --- a/src/hooks/dhcp/mysql/mysql_lease_mgr.cc > +++ b/src/hooks/dhcp/mysql/mysql_lease_mgr.cc > @@ -22,7 +22,6 @@ > > #include > #include > -#include > #include > > #include > @@ -700,7 +699,7 @@ public: > columns_[RELAY_ID_COL] = "relay_id"; > columns_[REMOTE_ID_COL] = "remote_id"; > columns_[POOL_ID_COL] = "pool_id"; > - BOOST_STATIC_ASSERT(13 < LEASE_COLUMNS); > + static_assert(13 < LEASE_COLUMNS, "13 < LEASE_COLUMNS"); > } > > /// @brief Create MYSQL_BIND objects for Lease4 Pointer > @@ -923,7 +922,7 @@ public: > setErrorIndicators(bind_, error_, LEASE_COLUMNS); > > // .. and check that we have the numbers correct at compile time. > - BOOST_STATIC_ASSERT(13 < LEASE_COLUMNS); > + static_assert(13 < LEASE_COLUMNS, "13 < LEASE_COLUMNS"); > > } catch (const std::exception& ex) { > isc_throw(DbOperationError, > @@ -1066,7 +1065,7 @@ public: > setErrorIndicators(bind_, error_, LEASE_COLUMNS); > > // .. and check that we have the numbers correct at compile time. > - BOOST_STATIC_ASSERT(13 < LEASE_COLUMNS); > + static_assert(13 < LEASE_COLUMNS, "13 < LEASE_COLUMNS"); > > // Add the data to the vector. Note the end element is one after the > // end of the array. > @@ -1292,7 +1291,7 @@ public: > columns_[STATE_COL] = "state"; > columns_[USER_CONTEXT_COL] = "user_context"; > columns_[POOL_ID_COL] = "pool_id"; > - BOOST_STATIC_ASSERT(17 < LEASE_COLUMNS); > + static_assert(17 < LEASE_COLUMNS, "17 < LEASE_COLUMNS"); > } > > /// @brief Create MYSQL_BIND objects for Lease6 Pointer > @@ -1536,7 +1535,7 @@ public: > setErrorIndicators(bind_, error_, LEASE_COLUMNS); > > // .. and check that we have the numbers correct at compile time. > - BOOST_STATIC_ASSERT(17 < LEASE_COLUMNS); > + static_assert(17 < LEASE_COLUMNS, "17 < LEASE_COLUMNS"); > > } catch (const std::exception& ex) { > isc_throw(DbOperationError, > @@ -1702,7 +1701,7 @@ public: > setErrorIndicators(bind_, error_, LEASE_COLUMNS); > > // .. and check that we have the numbers correct at compile time. > - BOOST_STATIC_ASSERT(17 < LEASE_COLUMNS); > + static_assert(17 < LEASE_COLUMNS, "17 < LEASE_COLUMNS"); > > // Add the data to the vector. Note the end element is one after the > // end of the array. > diff --git a/src/hooks/dhcp/mysql/mysql_legal_log.cc b/src/hooks/dhcp/mysql/mysql_legal_log.cc > index 559e36a247..d7e4720127 100644 > --- a/src/hooks/dhcp/mysql/mysql_legal_log.cc > +++ b/src/hooks/dhcp/mysql/mysql_legal_log.cc > @@ -15,7 +15,6 @@ > #include > > #include > -#include > #include > > #include > @@ -62,7 +61,7 @@ public: > // Set the column names (for error messages) > columns_[0] = "address"; > columns_[1] = "log"; > - BOOST_STATIC_ASSERT(1 < LOG_COLUMNS); > + static_assert(1 < LOG_COLUMNS, "1 < LOG_COLUMNS"); > } > > /// @brief Destructor > @@ -183,7 +182,7 @@ public: > setErrorIndicators(bind_, error_, LOG_COLUMNS); > > // .. and check that we have the numbers correct at compile time. > - BOOST_STATIC_ASSERT(1 < LOG_COLUMNS); > + static_assert(1 < LOG_COLUMNS, "1 < LOG_COLUMNS"); > > } catch (const std::exception& ex) { > isc_throw(DbOperationError, > diff --git a/src/hooks/dhcp/pgsql/pgsql_host_data_source.cc b/src/hooks/dhcp/pgsql/pgsql_host_data_source.cc > index 12fc2d05a6..22e3a4c22e 100644 > --- a/src/hooks/dhcp/pgsql/pgsql_host_data_source.cc > +++ b/src/hooks/dhcp/pgsql/pgsql_host_data_source.cc > @@ -30,7 +30,6 @@ > #include > #include > #include > -#include > > #include > > @@ -140,7 +139,7 @@ public: > columns_[DHCP4_BOOT_FILE_NAME_COL] = "dhcp4_boot_file_name"; > columns_[AUTH_KEY_COL] = "auth_key"; > > - BOOST_STATIC_ASSERT(12 < HOST_COLUMNS); > + static_assert(12 < HOST_COLUMNS, "12 < HOST_COLUMNS"); > }; > > /// @brief Virtual destructor. > @@ -966,7 +965,7 @@ public: > columns_[excluded_prefix_index_] = "excluded_prefix"; > columns_[excluded_prefix_len_index_] = "excluded_prefix_len"; > > - BOOST_STATIC_ASSERT(6 < RESERVATION_COLUMNS); > + static_assert(6 < RESERVATION_COLUMNS, "6 < RESERVATION_COLUMNS"); > } > > /// @brief Reinitializes state information > @@ -1150,7 +1149,7 @@ public: > columns_[5] = "excluded_prefix"; > columns_[6] = "excluded_prefix_len"; > > - BOOST_STATIC_ASSERT(7 < RESRV_COLUMNS); > + static_assert(7 < RESRV_COLUMNS, "7 < RESRV_COLUMNS"); > } > > /// @brief Populate a bind array representing an IPv6 reservation > @@ -1268,7 +1267,7 @@ public: > columns_[DHCP_SUBNET_ID_COL] = "dhcp_subnet_id"; > columns_[HOST_ID_COL] = "host_id"; > > - BOOST_STATIC_ASSERT(11 <= OPTION_COLUMNS); > + static_assert(11 <= OPTION_COLUMNS, "11 <= OPTION_COLUMNS"); > } > > /// @brief Creates binding array to insert option data into database. > diff --git a/src/hooks/dhcp/pgsql/pgsql_lease_mgr.cc b/src/hooks/dhcp/pgsql/pgsql_lease_mgr.cc > index 02c8e7aab2..887029e10a 100644 > --- a/src/hooks/dhcp/pgsql/pgsql_lease_mgr.cc > +++ b/src/hooks/dhcp/pgsql/pgsql_lease_mgr.cc > @@ -21,7 +21,6 @@ > #include > > #include > -#include > > #include > #include > @@ -780,7 +779,7 @@ public: > : lease_(), addr4_(0), client_id_length_(0), > relay_id_length_(0), remote_id_length_(0) { > > - BOOST_STATIC_ASSERT(13 < LEASE_COLUMNS); > + static_assert(13 < LEASE_COLUMNS, "13 < LEASE_COLUMNS"); > > memset(hwaddr_buffer_, 0, sizeof(hwaddr_buffer_)); > memset(client_id_buffer_, 0, sizeof(client_id_buffer_)); > @@ -1082,7 +1081,7 @@ public: > preferred_lifetime_str_(""), hwtype_(0), hwtype_str_(""), > hwaddr_source_(0), hwaddr_source_str_("") { > > - BOOST_STATIC_ASSERT(17 < LEASE_COLUMNS); > + static_assert(17 < LEASE_COLUMNS, "17 < LEASE_COLUMNS"); > > memset(duid_buffer_, 0, sizeof(duid_buffer_)); > > diff --git a/src/hooks/dhcp/pgsql/pgsql_legal_log.cc b/src/hooks/dhcp/pgsql/pgsql_legal_log.cc > index 5b4aef5cdf..2599cff069 100644 > --- a/src/hooks/dhcp/pgsql/pgsql_legal_log.cc > +++ b/src/hooks/dhcp/pgsql/pgsql_legal_log.cc > @@ -14,8 +14,6 @@ > #include > #include > > -#include > - > #include > #include > #include > @@ -65,7 +63,7 @@ public: > /// @brief Constructor > PgSqlLegLExchange() : address_(""), log_("") { > > - BOOST_STATIC_ASSERT(0 < LOG_COLUMNS); > + static_assert(0 < LOG_COLUMNS, "0 < LOG_COLUMNS"); > > // Set the column names (for error messages) > columns_.push_back("log"); > diff --git a/src/lib/asiodns/io_fetch.cc b/src/lib/asiodns/io_fetch.cc > index c140676f66..24b1761d7b 100644 > --- a/src/lib/asiodns/io_fetch.cc > +++ b/src/lib/asiodns/io_fetch.cc > @@ -25,6 +25,7 @@ > #include > #include > > +#include > #include > #include // for some IPC/network system calls > #include > @@ -67,7 +68,7 @@ struct IOFetchData : boost::noncopyable { > OutputBufferPtr msgbuf; // Wire buffer for question > OutputBufferPtr received; // Received data put here > IOFetch::Callback* callback; // Called on I/O Completion > - boost::asio::deadline_timer timer; // Timer to measure timeouts > + boost::asio::system_timer timer; // Timer to measure timeouts > IOFetch::Protocol protocol; // Protocol being used > size_t cumulative; // Cumulative received amount > size_t expected; // Expected amount of data > @@ -227,7 +228,7 @@ IOFetch::operator()(boost::system::error_code ec, size_t length) { > // If we timeout, we stop, which cancels outstanding I/O operations and > // shuts down everything. > if (data_->timeout != -1) { > - data_->timer.expires_from_now(boost::posix_time::milliseconds( > + data_->timer.expires_after(std::chrono::milliseconds( > data_->timeout)); > data_->timer.async_wait(std::bind(&IOFetch::stop, *this, > TIME_OUT)); > diff --git a/src/lib/asiodns/io_fetch.h b/src/lib/asiodns/io_fetch.h > index e9c85b58c5..bd5fc1d9ad 100644 > --- a/src/lib/asiodns/io_fetch.h > +++ b/src/lib/asiodns/io_fetch.h > @@ -16,7 +16,7 @@ > #include > > #include > -#include > +#include > #include > #include > #include > diff --git a/src/lib/asiodns/tests/io_fetch_unittest.cc b/src/lib/asiodns/tests/io_fetch_unittest.cc > index 7b4cd0568e..045678f51b 100644 > --- a/src/lib/asiodns/tests/io_fetch_unittest.cc > +++ b/src/lib/asiodns/tests/io_fetch_unittest.cc > @@ -23,6 +23,7 @@ > #include > > #include > +#include > #include > #include > #include > @@ -66,7 +67,7 @@ public: > IOFetch tcp_fetch_; ///< For TCP query test > IOFetch::Protocol protocol_; ///< Protocol being tested > size_t cumulative_; ///< Cumulative data received by "server". > - deadline_timer timer_; ///< Timer to measure timeouts > + system_timer timer_; ///< Timer to measure timeouts > > // The next member is the buffer in which the "server" (implemented by the > // response handler methods in this class) receives the question sent by the > @@ -431,7 +432,7 @@ public: > // tcpSendData, which will then send the next chunk. We pass the > // socket over which data should be sent as an argument to that > // function. > - timer_.expires_from_now(boost::posix_time::milliseconds(SEND_INTERVAL)); > + timer_.expires_after(std::chrono::milliseconds(SEND_INTERVAL)); > timer_.async_wait(std::bind(&IOFetchTest::tcpSendData, this, > socket)); > } > diff --git a/src/lib/asiolink/interval_timer.cc b/src/lib/asiolink/interval_timer.cc > index fa0d9e1b67..4c5902b8d2 100644 > --- a/src/lib/asiolink/interval_timer.cc > +++ b/src/lib/asiolink/interval_timer.cc > @@ -16,6 +16,7 @@ > #include > > #include > +#include > #include > #include > > @@ -88,7 +89,7 @@ private: > IOServicePtr io_service_; > > /// @brief The asio timer. > - boost::asio::deadline_timer timer_; > + boost::asio::system_timer timer_; > > /// @brief Controls how the timer behaves after expiration. > IntervalTimer::Mode mode_; > @@ -141,7 +142,7 @@ void > IntervalTimerImpl::update() { > try { > // Update expire time to (current time + interval_). > - timer_.expires_from_now(boost::posix_time::millisec(long(interval_))); > + timer_.expires_after(std::chrono::milliseconds(interval_)); > // Reset timer. > // Pass a function bound with a shared_ptr to this. > timer_.async_wait(std::bind(&IntervalTimerImpl::callback, > diff --git a/src/lib/asiolink/interval_timer.h b/src/lib/asiolink/interval_timer.h > index d340481e94..24f735deb8 100644 > --- a/src/lib/asiolink/interval_timer.h > +++ b/src/lib/asiolink/interval_timer.h > @@ -11,7 +11,7 @@ > #pragma GCC diagnostic push > #pragma GCC diagnostic ignored "-Woverloaded-virtual" > #endif > -#include > +#include > #ifdef __GNUC__ > #pragma GCC diagnostic pop > #endif > @@ -27,9 +27,9 @@ namespace asiolink { > class IntervalTimerImpl; > > /// \brief The \c IntervalTimer class is a wrapper for the ASIO > -/// \c boost::asio::deadline_timer class. > +/// \c boost::asio::system_timer class. > /// > -/// This class is implemented to use \c boost::asio::deadline_timer as interval > +/// This class is implemented to use \c boost::asio::system_timer as interval > /// timer. > /// > /// \c setup() sets a timer to expire on (now + interval), a call back > @@ -96,7 +96,7 @@ public: > /// This destructor never throws an exception. > /// > /// On the destruction of this class the timer will be canceled > - /// inside \c boost::asio::deadline_timer. > + /// inside \c boost::asio::system_timer. > ~IntervalTimer(); > //@} > > diff --git a/src/lib/asiolink/io_address.cc b/src/lib/asiolink/io_address.cc > index e912f0f398..bbc96b15cd 100644 > --- a/src/lib/asiolink/io_address.cc > +++ b/src/lib/asiolink/io_address.cc > @@ -10,7 +10,6 @@ > #include > #include > > -#include > // moved to container_hash on recent boost versions (backward compatible) > #include > > @@ -71,7 +70,8 @@ IOAddress::fromBytes(short family, const uint8_t* data) { > << "are supported"); > } > > - BOOST_STATIC_ASSERT(INET6_ADDRSTRLEN >= INET_ADDRSTRLEN); > + static_assert(INET6_ADDRSTRLEN >= INET_ADDRSTRLEN, > + "INET6_ADDRSTRLEN >= INET_ADDRSTRLEN"); > char addr_str[INET6_ADDRSTRLEN]; > inet_ntop(family, data, addr_str, INET6_ADDRSTRLEN); > return IOAddress(string(addr_str)); > diff --git a/src/lib/dhcp/iface_mgr_linux.cc b/src/lib/dhcp/iface_mgr_linux.cc > index d49518c7fb..89dd65d6ff 100644 > --- a/src/lib/dhcp/iface_mgr_linux.cc > +++ b/src/lib/dhcp/iface_mgr_linux.cc > @@ -32,7 +32,6 @@ > #include > > #include > -#include > > #include > #include > @@ -45,7 +44,7 @@ using namespace isc::asiolink; > using namespace isc::dhcp; > using namespace isc::util::io::internal; > > -BOOST_STATIC_ASSERT(IFLA_MAX>=IFA_MAX); > +static_assert(IFLA_MAX>=IFA_MAX, "IFLA_MAX>=IFA_MAX"); > > namespace { > > @@ -180,7 +179,8 @@ void Netlink::rtnl_send_request(int family, int type) { > struct sockaddr_nl nladdr; > > // do a sanity check. Verify that Req structure is aligned properly > - BOOST_STATIC_ASSERT(sizeof(nlmsghdr) == offsetof(Req, generic)); > + static_assert(sizeof(nlmsghdr) == offsetof(Req, generic), > + "sizeof(nlmsghdr) == offsetof(Req, generic)"); > > memset(&nladdr, 0, sizeof(nladdr)); > nladdr.nl_family = AF_NETLINK; > diff --git a/src/lib/dhcp/protocol_util.cc b/src/lib/dhcp/protocol_util.cc > index da701045c8..f3bc355fa8 100644 > --- a/src/lib/dhcp/protocol_util.cc > +++ b/src/lib/dhcp/protocol_util.cc > @@ -8,7 +8,6 @@ > #include > #include > #include > -#include > // in_systm.h is required on some some BSD systems > // complaining that n_time is undefined but used > // in ip.h. > @@ -41,7 +40,8 @@ decodeEthernetHeader(InputBuffer& buf, Pkt4Ptr& pkt) { > // The size of the single address is always lower then the size of > // the header that holds this address. Otherwise, it is a programming > // error that we want to detect in the compilation time. > - BOOST_STATIC_ASSERT(ETHERNET_HEADER_LEN > HWAddr::ETHERNET_HWADDR_LEN); > + static_assert(ETHERNET_HEADER_LEN > HWAddr::ETHERNET_HWADDR_LEN, > + "ETHERNET_HEADER_LEN > HWAddr::ETHERNET_HWADDR_LEN"); > > // Remember initial position. > size_t start_pos = buf.getPosition(); > @@ -76,7 +76,8 @@ decodeIpUdpHeader(InputBuffer& buf, Pkt4Ptr& pkt) { > " packet headers"); > } > > - BOOST_STATIC_ASSERT(IP_SRC_ADDR_OFFSET < MIN_IP_HEADER_LEN); > + static_assert(IP_SRC_ADDR_OFFSET < MIN_IP_HEADER_LEN, > + "IP_SRC_ADDR_OFFSET < MIN_IP_HEADER_LEN"); > > // Remember initial position of the read pointer. > size_t start_pos = buf.getPosition(); > diff --git a/src/lib/dhcp/tests/pkt4_unittest.cc b/src/lib/dhcp/tests/pkt4_unittest.cc > index 72f0da76a7..49d1f11153 100644 > --- a/src/lib/dhcp/tests/pkt4_unittest.cc > +++ b/src/lib/dhcp/tests/pkt4_unittest.cc > @@ -25,7 +25,6 @@ > #include > #include > #include > -#include > #include > > #include > @@ -87,9 +86,10 @@ const uint8_t dummyFile[] = "Lorem ipsum dolor sit amet, consectetur " > const uint8_t dummySname[] = "Lorem ipsum dolor sit amet, consectetur " > "adipiscing elit posuere."; > > -BOOST_STATIC_ASSERT(sizeof(dummyFile) == Pkt4::MAX_FILE_LEN + 1); > -BOOST_STATIC_ASSERT(sizeof(dummySname) == Pkt4::MAX_SNAME_LEN + 1); > - > +static_assert(sizeof(dummyFile) == Pkt4::MAX_FILE_LEN + 1, > + "sizeof(dummyFile) == Pkt4::MAX_FILE_LEN + 1"); > +static_assert(sizeof(dummySname) == Pkt4::MAX_SNAME_LEN + 1, > + "sizeof(dummySname) == Pkt4::MAX_SNAME_LEN + 1"); > > class Pkt4Test : public ::testing::Test { > public: > diff --git a/src/lib/dhcpsrv/tests/alloc_engine_expiration_unittest.cc b/src/lib/dhcpsrv/tests/alloc_engine_expiration_unittest.cc > index 231266c50b..ea1d4d36cb 100644 > --- a/src/lib/dhcpsrv/tests/alloc_engine_expiration_unittest.cc > +++ b/src/lib/dhcpsrv/tests/alloc_engine_expiration_unittest.cc > @@ -13,7 +13,6 @@ > #include > #include > #include > -#include > #include > #include > #include > @@ -701,7 +700,8 @@ public: > // Hence, it is convenient if the number of test leases is a > // multiple of 10. > const size_t reclamation_group_size = 10; > - BOOST_STATIC_ASSERT(TEST_LEASES_NUM % reclamation_group_size == 0); > + static_assert(TEST_LEASES_NUM % reclamation_group_size == 0, > + "TEST_LEASES_NUM % reclamation_group_size == 0"); > > // Leases will be reclaimed in groups of 10. > for (unsigned int i = reclamation_group_size; i < TEST_LEASES_NUM; > @@ -770,7 +770,8 @@ public: > } > > const size_t reclamation_group_size = 10; > - BOOST_STATIC_ASSERT(TEST_LEASES_NUM % reclamation_group_size == 0); > + static_assert(TEST_LEASES_NUM % reclamation_group_size == 0, > + "TEST_LEASES_NUM % reclamation_group_size == 0"); > > // Leases will be reclaimed in groups of 10 > for (unsigned int i = 10; i < TEST_LEASES_NUM; i += reclamation_group_size) { > @@ -1457,7 +1458,7 @@ ExpirationAllocEngine6Test::setLeaseType(const uint16_t lease_index, > void > ExpirationAllocEngine6Test::testReclaimExpiredLeasesStats() { > // This test requires that the number of leases is an even number. > - BOOST_STATIC_ASSERT(TEST_LEASES_NUM % 2 == 0); > + static_assert(TEST_LEASES_NUM % 2 == 0, "TEST_LEASES_NUM % 2 == 0"); > > for (unsigned int i = 0; i < TEST_LEASES_NUM; ++i) { > // Mark all leases as expired. The higher the index the less > @@ -1496,7 +1497,7 @@ ExpirationAllocEngine6Test::testReclaimExpiredLeasesStats() { > void > ExpirationAllocEngine6Test::testReclaimReusedLeases(const uint16_t msg_type, > const bool use_reclaimed) { > - BOOST_STATIC_ASSERT(TEST_LEASES_NUM < 1000); > + static_assert(TEST_LEASES_NUM < 1000, "TEST_LEASES_NUM < 1000"); > > for (unsigned int i = 0; i < TEST_LEASES_NUM; ++i) { > // Depending on the parameter, mark leases 'expired-reclaimed' or > @@ -1604,7 +1605,7 @@ ExpirationAllocEngine6Test::testReclaimDeclinedHook(bool skip) { > void > ExpirationAllocEngine6Test::testReclaimExpiredLeasesRegisteredStats() { > // This test requires that the number of leases is an even number. > - BOOST_STATIC_ASSERT(TEST_LEASES_NUM % 2 == 0); > + static_assert(TEST_LEASES_NUM % 2 == 0, "TEST_LEASES_NUM % 2 == 0"); > > for (unsigned int i = 0; i < TEST_LEASES_NUM; ++i) { > // Mark all leases as expired. The higher the index the less > @@ -1700,7 +1701,8 @@ TEST_F(ExpirationAllocEngine6Test, reclaimExpiredLeasesHooksWithSkip) { > // execution of the lease reclamation routine. > TEST_F(ExpirationAllocEngine6Test, reclaimExpiredLeasesTimeout) { > // This test needs at least 40 leases to make sense. > - BOOST_STATIC_ASSERT(TEST_LEASES_NUM >= 40); > + static_assert(TEST_LEASES_NUM >= 40, "TEST_LEASES_NUM >= 40"); > + > // Run with timeout of 1.2s. > testReclaimExpiredLeasesTimeout(1200); > } > @@ -1712,7 +1714,7 @@ TEST_F(ExpirationAllocEngine6Test, reclaimExpiredLeasesTimeout) { > // reclamation. > TEST_F(ExpirationAllocEngine6Test, reclaimExpiredLeasesShortTimeout) { > // We will most likely reclaim just one lease, so 5 is more than enough. > - BOOST_STATIC_ASSERT(TEST_LEASES_NUM >= 5); > + static_assert(TEST_LEASES_NUM >= 5, "TEST_LEASES_NUM >= 5"); > // Reclaim leases with the 1ms timeout. > testReclaimExpiredLeasesTimeout(1); > } > @@ -1720,7 +1722,7 @@ TEST_F(ExpirationAllocEngine6Test, reclaimExpiredLeasesShortTimeout) { > // This test verifies that expired-reclaimed leases are removed from the > // lease database. > TEST_F(ExpirationAllocEngine6Test, deleteExpiredReclaimedLeases) { > - BOOST_STATIC_ASSERT(TEST_LEASES_NUM >= 10); > + static_assert(TEST_LEASES_NUM >= 10, "TEST_LEASES_NUM >= 10"); > testDeleteExpiredReclaimedLeases(); > } > > @@ -2178,7 +2180,7 @@ ExpirationAllocEngine4Test::testReclaimExpiredLeasesWithDDNSAndClientId() { > void > ExpirationAllocEngine4Test::testReclaimExpiredLeasesStats() { > // This test requires that the number of leases is an even number. > - BOOST_STATIC_ASSERT(TEST_LEASES_NUM % 2 == 0); > + static_assert(TEST_LEASES_NUM % 2 == 0, "TEST_LEASES_NUM % 2 == 0"); > > for (unsigned int i = 0; i < TEST_LEASES_NUM; ++i) { > // Mark all leases as expired. The higher the index the less > @@ -2217,7 +2219,7 @@ ExpirationAllocEngine4Test::testReclaimReusedLeases(const uint8_t msg_type, > const bool client_renews, > const bool use_reclaimed) { > // Let's restrict the number of leases. > - BOOST_STATIC_ASSERT(TEST_LEASES_NUM < 1000); > + static_assert(TEST_LEASES_NUM < 1000, "TEST_LEASES_NUM < 1000"); > > for (unsigned int i = 0; i < TEST_LEASES_NUM; ++i) { > // Depending on the parameter, mark leases 'expired-reclaimed' or > @@ -2391,7 +2393,7 @@ TEST_F(ExpirationAllocEngine4Test, reclaimExpiredLeasesHooksWithSkip) { > // execution of the lease reclamation routine. > TEST_F(ExpirationAllocEngine4Test, reclaimExpiredLeasesTimeout) { > // This test needs at least 40 leases to make sense. > - BOOST_STATIC_ASSERT(TEST_LEASES_NUM >= 40); > + static_assert(TEST_LEASES_NUM >= 40, "TEST_LEASES_NUM >= 40"); > // Run with timeout of 1.2s. > testReclaimExpiredLeasesTimeout(1200); > } > @@ -2403,7 +2405,7 @@ TEST_F(ExpirationAllocEngine4Test, reclaimExpiredLeasesTimeout) { > // reclamation. > TEST_F(ExpirationAllocEngine4Test, reclaimExpiredLeasesShortTimeout) { > // We will most likely reclaim just one lease, so 5 is more than enough. > - BOOST_STATIC_ASSERT(TEST_LEASES_NUM >= 5); > + static_assert(TEST_LEASES_NUM >= 5, "TEST_LEASES_NUM >= 5"); > // Reclaim leases with the 1ms timeout. > testReclaimExpiredLeasesTimeout(1); > } > @@ -2411,7 +2413,7 @@ TEST_F(ExpirationAllocEngine4Test, reclaimExpiredLeasesShortTimeout) { > // This test verifies that expired-reclaimed leases are removed from the > // lease database. > TEST_F(ExpirationAllocEngine4Test, deleteExpiredReclaimedLeases) { > - BOOST_STATIC_ASSERT(TEST_LEASES_NUM >= 10); > + static_assert(TEST_LEASES_NUM >= 10, "TEST_LEASES_NUM >= 10"); > testDeleteExpiredReclaimedLeases(); > } > > diff --git a/src/lib/dns/messagerenderer.cc b/src/lib/dns/messagerenderer.cc > index 4e1dfeaa8b..5c9cc3674f 100644 > --- a/src/lib/dns/messagerenderer.cc > +++ b/src/lib/dns/messagerenderer.cc > @@ -15,7 +15,6 @@ > #include > > #include > -#include > #include > #include > #include > diff --git a/src/lib/dns/rdataclass.cc b/src/lib/dns/rdataclass.cc > index 1bf515cb0d..79dc09466d 100644 > --- a/src/lib/dns/rdataclass.cc > +++ b/src/lib/dns/rdataclass.cc > @@ -1398,8 +1398,9 @@ SOA::getSerial() const { > uint32_t > SOA::getMinimum() const { > // Make sure the buffer access is safe. > - BOOST_STATIC_ASSERT(sizeof(numdata_) == > - sizeof(uint32_t) * 4 + sizeof(uint32_t)); > + static_assert( > + sizeof(numdata_) == sizeof(uint32_t) * 4 + sizeof(uint32_t), > + "sizeof(numdata_) == sizeof(uint32_t) * 4 + sizeof(uint32_t)"); > > InputBuffer b(&numdata_[sizeof(uint32_t) * 4], sizeof(uint32_t)); > return (b.readUint32()); > diff --git a/src/lib/hooks/callout_manager.cc b/src/lib/hooks/callout_manager.cc > index fbf4b90a19..7c30b08097 100644 > --- a/src/lib/hooks/callout_manager.cc > +++ b/src/lib/hooks/callout_manager.cc > @@ -12,8 +12,6 @@ > #include > #include > > -#include > - > #include > #include > #include > diff --git a/src/lib/log/logger_impl.cc b/src/lib/log/logger_impl.cc > index 1718f303c9..fe2c3afe56 100644 > --- a/src/lib/log/logger_impl.cc > +++ b/src/lib/log/logger_impl.cc > @@ -17,7 +17,6 @@ > > #include > #include > -#include > #include > > #include > diff --git a/src/lib/log/logger_level_impl.cc b/src/lib/log/logger_level_impl.cc > index a4aba73a20..a6a4fdd40d 100644 > --- a/src/lib/log/logger_level_impl.cc > +++ b/src/lib/log/logger_level_impl.cc > @@ -44,13 +44,20 @@ LoggerLevelImpl::convertFromBindLevel(const Level& level) { > }; > > // ... with compile-time checks to ensure that table indexes are correct. > - BOOST_STATIC_ASSERT(static_cast(DEFAULT) == 0); > - BOOST_STATIC_ASSERT(static_cast(DEBUG) == 1); > - BOOST_STATIC_ASSERT(static_cast(INFO) == 2); > - BOOST_STATIC_ASSERT(static_cast(WARN) == 3); > - BOOST_STATIC_ASSERT(static_cast(ERROR) == 4); > - BOOST_STATIC_ASSERT(static_cast(FATAL) == 5); > - BOOST_STATIC_ASSERT(static_cast(NONE) == 6); > + static_assert(static_cast(DEFAULT) == 0, > + "static_cast(DEFAULT) == 0"); > + static_assert(static_cast(DEBUG) == 1, > + "static_cast(DEBUG) == 1"); > + static_assert(static_cast(INFO) == 2, > + "static_cast(INFO) == 2"); > + static_assert(static_cast(WARN) == 3, > + "static_cast(WARN) == 3"); > + static_assert(static_cast(ERROR) == 4, > + "static_cast(ERROR) == 4"); > + static_assert(static_cast(FATAL) == 5, > + "static_cast(FATAL) == 5"); > + static_assert(static_cast(NONE) == 6, > + "static_cast(NONE) == 6"); > > // Do the conversion > if (level.severity == DEBUG) { > diff --git a/src/lib/log/tests/logger_level_impl_unittest.cc b/src/lib/log/tests/logger_level_impl_unittest.cc > index c82be69b17..d9375ee09c 100644 > --- a/src/lib/log/tests/logger_level_impl_unittest.cc > +++ b/src/lib/log/tests/logger_level_impl_unittest.cc > @@ -10,7 +10,6 @@ > #include > > #include > -#include > #include > > #include > @@ -109,7 +108,7 @@ TEST_F(LoggerLevelImplTest, ConversionToBind) { > // ... and some invalid valid values > test_convert_to("DEBUG-1", INFO, MIN_DEBUG_LEVEL, > (log4cplus::DEBUG_LOG_LEVEL + 1)); > - BOOST_STATIC_ASSERT(MAX_DEBUG_LEVEL == 99); > + static_assert(MAX_DEBUG_LEVEL == 99, "MAX_DEBUG_LEVEL == 99"); > test_convert_to("DEBUG+100", DEFAULT, 0, > (log4cplus::DEBUG_LOG_LEVEL - MAX_DEBUG_LEVEL - 1)); > } > From fdupont at isc.org Wed Dec 31 23:00:20 2025 From: fdupont at isc.org (Francis Dupont) Date: Wed, 31 Dec 2025 23:00:20 +0000 Subject: [kea-dev] Missing boost header file in 3.0.2 In-Reply-To: <96307940-5A71-4F37-9B0E-1C8105F88512@redfish-solutions.com> References: <20251231172343.420DE787E0@bikeshed.isc.org> <96307940-5A71-4F37-9B0E-1C8105F88512@redfish-solutions.com> Message-ID: <20251231230020.0AE4678D5A@bikeshed.isc.org> Philip Prindeville writes: > OpenWRT (at least on x86_64 and either APU6 boxes or virtualized as a = > KVM image) is using 6.12 with the MUSL C runtime. => we support Alpine which should be close to this with at least 2 issues: - some scripts require a full ps command (vs. the busybox one) - the MUSL library does not implement dlclose so it is not possible to remove a loaded hook DSO from the address space. At least the second point is in the Kea doc, Francis Dupont