From: Stuart Henderson Subject: Re: kea version update To: Sonic Cc: ports@openbsd.org Date: Mon, 30 Mar 2026 23:09:40 +0100 On 2026/03/30 16:20, Sonic wrote: > Wondering if a Kea upgrade is in the works. The 2.4.x version is > apparently dead on the ISC site (https://www.isc.org/download/#Kea) > and 2.6.5 goes EOL on 7/2026. I tried various 2.6 releases several times but couldn't get it to work. diff below is a start at 3.0.3 which gets partway then fails here, which looks like maybe a compat issue with boost rather than kea ----- c++ -Isrc/lib/eval/libkea-eval.so.13.0.p -Isrc/lib/eval -I../kea-3.0.3/src/lib/eval -I. -I../kea-3.0.3 -Isrc -I../kea-3.0.3/src -Isrc/bin -I../kea-3.0.3/src/bin -Isrc/lib -I../kea-3.0.3/src/lib -I/usr/local/include -fdiagnostics-color=always -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_FAST -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -DBOOST_ALL_NO_LIB -pthread -O2 -pipe -g -std=c++14 -fPIC -MD -MQ src/lib/eval/libkea-eval.so.13.0.p/lexer.cc.o -MF src/lib/eval/libkea-eval.so.13.0.p/lexer.cc.o.d -o src/lib/eval/libkea-eval.so.13.0.p/lexer.cc.o -c ../kea-3.0.3/src/lib/eval/lexer.cc In file included from lexer.ll:17: In file included from ../kea-3.0.3/src/lib/eval/eval_context.h:12: In file included from parser.yy:19: In file included from ../kea-3.0.3/src/lib/eval/token.h:11: In file included from ../kea-3.0.3/src/lib/dhcp/pkt.h:14: In file included from ../kea-3.0.3/src/lib/dhcp/classify.h:10: In file included from ../kea-3.0.3/src/lib/cc/data.h:10: In file included from ../kea-3.0.3/src/lib/util/bigints.h:14: In file included from /usr/local/include/boost/multiprecision/cpp_int.hpp:19: In file included from /usr/local/include/boost/multiprecision/number.hpp:11: In file included from /usr/local/include/boost/multiprecision/detail/precision.hpp:11: /usr/local/include/boost/multiprecision/detail/digits.hpp:22:18: error: token is not a valid binary operator in a preprocessor subexpression 22 | #if ULONG_MAX != SIZE_MAX | ^~~~~~~~ lexer.cc:368:42: note: expanded from macro 'SIZE_MAX' 368 | #define SIZE_MAX (~(size_t)0) | ~~~~~~~~~^ 1 error generated. ----- Index: Makefile =================================================================== RCS file: /cvs/ports/net/kea/Makefile,v diff -u -p -r1.51 Makefile --- Makefile 9 Mar 2026 19:49:35 -0000 1.51 +++ Makefile 30 Mar 2026 22:09:29 -0000 @@ -1,21 +1,17 @@ COMMENT= high-performance and extensible DHCP server engine from ISC -VERSION= 2.4.2 -REVISION= 4 -PORTROACH= limitw:1,even - -# 2.6 update notes so far; -# cvs rm -rf patches/patch-src_lib_asiolink_{io_address_cc,io_service_cc,tcp_endpoint_h,udp_endpoint_h,unix_domain_socket_cc} patches/patch-src_lib_dhcp_iface_mgr_cc -# addPktEvent doesn't cope with openbsd nonstandard bpf_timeval +VERSION= 3.0.3 +PORTROACH= limitw:2,even DISTNAME= kea-${VERSION} -PKGNAME-main= kea-${VERSION:S/-P/pl/} +EXTRACT_SUFX= .tar.xz +PKGNAME= kea-${VERSION:S/-P/pl/} .for i in kea-asiodns kea-asiolink kea-cc kea-cfgclient kea-cryptolink \ kea-d2srv kea-database kea-dhcp++ kea-dhcp_ddns kea-dhcpsrv kea-dns++ \ kea-eval kea-exceptions kea-hooks kea-http kea-log kea-mysql kea-pgsql \ kea-process kea-stats kea-tcp kea-threads kea-util kea-util-io -SHARED_LIBS += $i 12.0 +SHARED_LIBS += $i 13.0 .endfor CATEGORIES= net @@ -37,19 +33,15 @@ BUILD_DEPENDS= devel/bison \ FLAVOR?= # postgresql flavor doesn't build with boost >= 1.87 # /usr/local/include/boost/lexical_cast/detail/inf_nan.hpp:115:21: error: no matching function for call to 'signbit' +# (recheck, not tested with 3.x) FLAVORS= mysql# postgresql DEBUG_PACKAGES= ${BUILD_PACKAGES} FAKE_FLAGS= sysconfdir=${PREFIX}/share/examples -CONFIGURE_STYLE= gnu -CONFIGURE_ARGS+= --with-openssl=/usr \ - --with-boost-lib-dir=${LOCALBASE}/lib \ - --enable-generate-parser \ - --enable-perfdhcp - -USE_GMAKE= Yes -LIBTOOL_FLAGS= --tag=disable-static +MODULES= devel/meson +CONFIGURE_ARGS= -Dkrb5=disabled \ + -Dnetconf=disabled COMPILER= base-clang ports-gcc # inherited from the devel/log4cplus depencency @@ -58,21 +50,25 @@ CXXFLAGS_base-clang= -std=c++14 .include .if ${FLAVOR:Mmysql} -CONFIGURE_ARGS+= --with-mysql=${LOCALBASE}/bin/mysql_config +CONFIGURE_ARGS+= -Dmysql=enabled +#-with-mysql=${LOCALBASE}/bin/mysql_config WANTLIB+= mariadb z LIB_DEPENDS+= databases/mariadb .else +CONFIGURE_ARGS+= -Dmysql=disabled RMFILES+= share/doc/kea/examples/kea[46]/*mysql* \ share/kea/scripts/mysql .endif .if ${FLAVOR:Mpostgresql} +CONFIGURE_ARGS+= -Dpostgresql=enabled # requires include/postgresql/server/utils/errcodes.h BUILD_DEPENDS+= databases/postgresql,-server -CONFIGURE_ARGS+= --with-pgsql=${LOCALBASE}/bin/pg_config +#CONFIGURE_ARGS+= --with-pgsql=${LOCALBASE}/bin/pg_config WANTLIB+= pq LIB_DEPENDS+= databases/postgresql .else +CONFIGURE_ARGS+= -Dpostgresql=disabled RMFILES+= share/doc/kea/examples/kea[46]/*pgsql* \ share/kea/scripts/pgsql .endif Index: distinfo =================================================================== RCS file: /cvs/ports/net/kea/distinfo,v diff -u -p -r1.20 distinfo --- distinfo 28 May 2025 21:05:06 -0000 1.20 +++ distinfo 30 Mar 2026 22:09:29 -0000 @@ -1,2 +1,2 @@ -SHA256 (kea-2.4.2.tar.gz) = boL7MZ07hxwNObvVBPLNoMZvoSYoZYcphftPuRtOqvw= -SIZE (kea-2.4.2.tar.gz) = 10218502 +SHA256 (kea-3.0.3.tar.xz) = CXAt2weLY36F3pI2y+3T+51698bnlwJsU4tFdIrU1jE= +SIZE (kea-3.0.3.tar.xz) = 6638984 Index: patches/patch-configure =================================================================== RCS file: patches/patch-configure diff -N patches/patch-configure --- patches/patch-configure 19 Jan 2026 06:15:42 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,12 +0,0 @@ -Index: configure ---- configure.orig -+++ configure -@@ -23169,7 +23169,7 @@ if test ${enable_boost_headers_only+y} - then : - enableval=$enable_boost_headers_only; enable_boost_header="yes"; BOOST_LIBS="" - else $as_nop -- BOOST_LIBS="${BOOST_LIBS} -lboost_system" -+ BOOST_LIBS="${BOOST_LIBS}" - fi - - Index: patches/patch-src_bin_agent_agent_lexer_cc =================================================================== RCS file: patches/patch-src_bin_agent_agent_lexer_cc diff -N patches/patch-src_bin_agent_agent_lexer_cc --- patches/patch-src_bin_agent_agent_lexer_cc 7 Jul 2023 08:07:50 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,14 +0,0 @@ -bodge around https://gitlab.isc.org/isc-projects/kea/-/issues/2970 - -Index: src/bin/agent/agent_lexer.cc ---- src/bin/agent/agent_lexer.cc.orig -+++ src/bin/agent/agent_lexer.cc -@@ -312,7 +312,7 @@ - - /* C99 systems have . Non-C99 systems may or may not. */ - --#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -+#if defined(__OpenBSD__) || (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) - - /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, - * if you want the limit (max/min) macros for int types. Index: patches/patch-src_bin_d2_d2_lexer_cc =================================================================== RCS file: patches/patch-src_bin_d2_d2_lexer_cc diff -N patches/patch-src_bin_d2_d2_lexer_cc --- patches/patch-src_bin_d2_d2_lexer_cc 7 Jul 2023 08:07:50 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,14 +0,0 @@ -bodge around https://gitlab.isc.org/isc-projects/kea/-/issues/2970 - -Index: src/bin/d2/d2_lexer.cc ---- src/bin/d2/d2_lexer.cc.orig -+++ src/bin/d2/d2_lexer.cc -@@ -312,7 +312,7 @@ - - /* C99 systems have . Non-C99 systems may or may not. */ - --#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -+#if defined(__OpenBSD__) || (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) - - /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, - * if you want the limit (max/min) macros for int types. Index: patches/patch-src_bin_dhcp4_dhcp4_lexer_cc =================================================================== RCS file: patches/patch-src_bin_dhcp4_dhcp4_lexer_cc diff -N patches/patch-src_bin_dhcp4_dhcp4_lexer_cc --- patches/patch-src_bin_dhcp4_dhcp4_lexer_cc 7 Jul 2023 08:07:50 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,14 +0,0 @@ -bodge around https://gitlab.isc.org/isc-projects/kea/-/issues/2970 - -Index: src/bin/dhcp4/dhcp4_lexer.cc ---- src/bin/dhcp4/dhcp4_lexer.cc.orig -+++ src/bin/dhcp4/dhcp4_lexer.cc -@@ -312,7 +312,7 @@ - - /* C99 systems have . Non-C99 systems may or may not. */ - --#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -+#if defined(__OpenBSD__) || (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) - - /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, - * if you want the limit (max/min) macros for int types. Index: patches/patch-src_bin_dhcp6_dhcp6_lexer_cc =================================================================== RCS file: patches/patch-src_bin_dhcp6_dhcp6_lexer_cc diff -N patches/patch-src_bin_dhcp6_dhcp6_lexer_cc --- patches/patch-src_bin_dhcp6_dhcp6_lexer_cc 7 Jul 2023 08:07:50 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,14 +0,0 @@ -bodge around https://gitlab.isc.org/isc-projects/kea/-/issues/2970 - -Index: src/bin/dhcp6/dhcp6_lexer.cc ---- src/bin/dhcp6/dhcp6_lexer.cc.orig -+++ src/bin/dhcp6/dhcp6_lexer.cc -@@ -312,7 +312,7 @@ - - /* C99 systems have . Non-C99 systems may or may not. */ - --#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -+#if defined(__OpenBSD__) || (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) - - /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, - * if you want the limit (max/min) macros for int types. Index: patches/patch-src_bin_netconf_netconf_lexer_cc =================================================================== RCS file: patches/patch-src_bin_netconf_netconf_lexer_cc diff -N patches/patch-src_bin_netconf_netconf_lexer_cc --- patches/patch-src_bin_netconf_netconf_lexer_cc 7 Jul 2023 08:07:50 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,14 +0,0 @@ -bodge around https://gitlab.isc.org/isc-projects/kea/-/issues/2970 - -Index: src/bin/netconf/netconf_lexer.cc ---- src/bin/netconf/netconf_lexer.cc.orig -+++ src/bin/netconf/netconf_lexer.cc -@@ -312,7 +312,7 @@ - - /* C99 systems have . Non-C99 systems may or may not. */ - --#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -+#if defined(__OpenBSD__) || (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) - - /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, - * if you want the limit (max/min) macros for int types. Index: patches/patch-src_lib_asiodns_io_fetch_cc =================================================================== RCS file: /cvs/ports/net/kea/patches/patch-src_lib_asiodns_io_fetch_cc,v diff -u -p -r1.1 patch-src_lib_asiodns_io_fetch_cc --- patches/patch-src_lib_asiodns_io_fetch_cc 19 Jan 2026 06:15:42 -0000 1.1 +++ patches/patch-src_lib_asiodns_io_fetch_cc 30 Mar 2026 22:09:29 -0000 @@ -3,7 +3,7 @@ Index: src/lib/asiodns/io_fetch.cc +++ src/lib/asiodns/io_fetch.cc @@ -22,6 +22,7 @@ #include - #include + #include +#include #include Index: patches/patch-src_lib_asiolink_io_address_cc =================================================================== RCS file: patches/patch-src_lib_asiolink_io_address_cc diff -N patches/patch-src_lib_asiolink_io_address_cc --- patches/patch-src_lib_asiolink_io_address_cc 17 Dec 2024 07:42:47 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,23 +0,0 @@ -https://github.com/isc-projects/kea/pull/143 - -Index: src/lib/asiolink/io_address.cc ---- src/lib/asiolink/io_address.cc.orig -+++ src/lib/asiolink/io_address.cc -@@ -37,7 +37,7 @@ IOAddress::Hash::operator()(const IOAddress &io_addres - // because we'd like to throw our own exception on failure. - IOAddress::IOAddress(const std::string& address_str) { - boost::system::error_code err; -- asio_address_ = ip::address::from_string(address_str, err); -+ asio_address_ = ip::make_address(address_str, err); - if (err) { - isc_throw(IOError, "Failed to convert string to address '" - << address_str << "': " << err.message()); -@@ -117,7 +117,7 @@ IOAddress::isV6Multicast() const { - uint32_t - IOAddress::toUint32() const { - if (asio_address_.is_v4()) { -- return (asio_address_.to_v4().to_ulong()); -+ return (asio_address_.to_v4().to_uint()); - } else { - isc_throw(BadValue, "Can't convert " << toText() - << " address to IPv4."); Index: patches/patch-src_lib_asiolink_io_service_cc =================================================================== RCS file: patches/patch-src_lib_asiolink_io_service_cc diff -N patches/patch-src_lib_asiolink_io_service_cc --- patches/patch-src_lib_asiolink_io_service_cc 28 Apr 2025 10:36:35 -0000 1.2 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,106 +0,0 @@ -https://github.com/isc-projects/kea/pull/143 -https://946488.bugs.gentoo.org/attachment.cgi?id=914160 - -Index: src/lib/asiolink/io_service.cc ---- src/lib/asiolink/io_service.cc.orig -+++ src/lib/asiolink/io_service.cc -@@ -24,8 +24,7 @@ class IOServiceImpl { (private) - public: - /// \brief The constructor - IOServiceImpl() : -- io_service_(), -- work_(new boost::asio::io_service::work(io_service_)) { -+ io_context_() { - }; - - /// \brief The destructor. -@@ -37,7 +36,7 @@ class IOServiceImpl { (private) - /// This method does not return control to the caller until - /// the \c stop() method is called via some handler. - void run() { -- io_service_.run(); -+ io_context_.run(); - }; - - /// \brief Run the underlying event loop for a single event. -@@ -46,7 +45,7 @@ class IOServiceImpl { (private) - /// first handler has completed. (If no handlers are ready when - /// it is run, it will block until one is.) - void run_one() { -- io_service_.run_one(); -+ io_context_.run_one(); - }; - - /// \brief Run the underlying event loop for a ready events. -@@ -54,32 +53,32 @@ class IOServiceImpl { (private) - /// This method executes handlers for all ready events and returns. - /// It will return immediately if there are no ready events. - void poll() { -- io_service_.poll(); -+ io_context_.poll(); - }; - - /// \brief Stop the underlying event loop. - /// - /// This will return the control to the caller of the \c run() method. - void stop() { -- io_service_.stop(); -+ io_context_.stop(); - } - - /// \brief Indicates if the IOService has been stopped. - /// - /// \return true if the IOService has been stopped, false otherwise. - bool stopped() const { -- return (io_service_.stopped()); -+ return (io_context_.stopped()); - } - - /// \brief Restarts the IOService in preparation for a subsequent \c run() invocation. - void restart() { -- io_service_.reset(); -+ io_context_.restart(); - } - - /// \brief Removes IO service work object to let it finish running - /// when all handlers have been invoked. - void stopWork() { -- work_.reset(); -+ io_context_.stop(); - } - - /// \brief Return the native \c io_service object used in this wrapper. -@@ -88,20 +87,19 @@ class IOServiceImpl { (private) - /// that share the same \c io_service with the authoritative server. - /// It will eventually be removed once the wrapper interface is - /// generalized. -- boost::asio::io_service& get_io_service() { -- return (io_service_); -+ boost::asio::io_context& get_io_context() { -+ return (io_context_); - } - - /// \brief Post a callback on the IO service - /// - /// \param callback The callback to be run on the IO service. - void post(const std::function& callback) { -- io_service_.post(callback); -+ boost::asio::post(io_context_, callback); - } - - private: -- boost::asio::io_service io_service_; -- boost::shared_ptr work_; -+ boost::asio::io_context io_context_; - }; - - IOService::IOService() : io_impl_(new IOServiceImpl()) { -@@ -147,7 +145,7 @@ IOService::stopWork() { - - boost::asio::io_service& - IOService::get_io_service() { -- return (io_impl_->get_io_service()); -+ return (io_impl_->get_io_context()); - } - - void Index: patches/patch-src_lib_asiolink_tcp_endpoint_h =================================================================== RCS file: patches/patch-src_lib_asiolink_tcp_endpoint_h diff -N patches/patch-src_lib_asiolink_tcp_endpoint_h --- patches/patch-src_lib_asiolink_tcp_endpoint_h 17 Dec 2024 07:42:47 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,14 +0,0 @@ -https://github.com/isc-projects/kea/pull/143 - -Index: src/lib/asiolink/tcp_endpoint.h ---- src/lib/asiolink/tcp_endpoint.h.orig -+++ src/lib/asiolink/tcp_endpoint.h -@@ -42,7 +42,7 @@ class TCPEndpoint : public IOEndpoint { (public) - /// \param port The TCP port number of the endpoint. - TCPEndpoint(const IOAddress& address, const unsigned short port) : - asio_endpoint_placeholder_( -- new boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string(address.toText()), -+ new boost::asio::ip::tcp::endpoint(boost::asio::ip::make_address(address.toText()), - port)), - asio_endpoint_(*asio_endpoint_placeholder_) - {} Index: patches/patch-src_lib_asiolink_udp_endpoint_h =================================================================== RCS file: patches/patch-src_lib_asiolink_udp_endpoint_h diff -N patches/patch-src_lib_asiolink_udp_endpoint_h --- patches/patch-src_lib_asiolink_udp_endpoint_h 17 Dec 2024 07:42:47 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,14 +0,0 @@ -https://github.com/isc-projects/kea/pull/143 - -Index: src/lib/asiolink/udp_endpoint.h ---- src/lib/asiolink/udp_endpoint.h.orig -+++ src/lib/asiolink/udp_endpoint.h -@@ -42,7 +42,7 @@ class UDPEndpoint : public IOEndpoint { (public) - /// \param port The UDP port number of the endpoint. - UDPEndpoint(const IOAddress& address, const unsigned short port) : - asio_endpoint_placeholder_( -- new boost::asio::ip::udp::endpoint(boost::asio::ip::address::from_string(address.toText()), -+ new boost::asio::ip::udp::endpoint(boost::asio::ip::make_address(address.toText()), - port)), - asio_endpoint_(*asio_endpoint_placeholder_) - {} Index: patches/patch-src_lib_asiolink_unix_domain_socket_cc =================================================================== RCS file: patches/patch-src_lib_asiolink_unix_domain_socket_cc diff -N patches/patch-src_lib_asiolink_unix_domain_socket_cc --- patches/patch-src_lib_asiolink_unix_domain_socket_cc 17 Dec 2024 07:42:47 -0000 1.3 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,77 +0,0 @@ -https://github.com/isc-projects/kea/pull/143 - -Index: src/lib/asiolink/unix_domain_socket.cc ---- src/lib/asiolink/unix_domain_socket.cc.orig -+++ src/lib/asiolink/unix_domain_socket.cc -@@ -83,7 +83,7 @@ class UnixDomainSocketImpl : public boost::enable_shar - /// @param buffer Buffers holding the data to be sent. - /// @param handler User supplied callback to be invoked when data have - /// been sent or sending error is signalled. -- void doSend(const boost::asio::const_buffers_1& buffer, -+ void doSend(const boost::asio::const_buffer& buffer, - const UnixDomainSocket::Handler& handler); - - -@@ -103,7 +103,7 @@ class UnixDomainSocketImpl : public boost::enable_shar - /// @param ec Error code returned as a result of sending the data. - /// @param length Length of the data sent. - void sendHandler(const UnixDomainSocket::Handler& remote_handler, -- const boost::asio::const_buffers_1& buffer, -+ const boost::asio::const_buffer& buffer, - const boost::system::error_code& ec, - size_t length); - -@@ -127,7 +127,7 @@ class UnixDomainSocketImpl : public boost::enable_shar - /// @param buffer A buffer into which the data should be received. - /// @param handler User supplied callback invoked when data have been - /// received on an error is signalled. -- void doReceive(const boost::asio::mutable_buffers_1& buffer, -+ void doReceive(const boost::asio::mutable_buffer& buffer, - const UnixDomainSocket::Handler& handler); - - /// @brief Local handler invoked as a result of asynchronous receive. -@@ -146,7 +146,7 @@ class UnixDomainSocketImpl : public boost::enable_shar - /// @param ec Error code returned as a result of asynchronous receive. - /// @param length Size of the received data. - void receiveHandler(const UnixDomainSocket::Handler& remote_handler, -- const boost::asio::mutable_buffers_1& buffer, -+ const boost::asio::mutable_buffer& buffer, - const boost::system::error_code& ec, - size_t length); - -@@ -194,7 +194,7 @@ UnixDomainSocketImpl::asyncSend(const void* data, cons - } - - void --UnixDomainSocketImpl::doSend(const boost::asio::const_buffers_1& buffer, -+UnixDomainSocketImpl::doSend(const boost::asio::const_buffer& buffer, - const UnixDomainSocket::Handler& handler) { - auto local_handler = std::bind(&UnixDomainSocketImpl::sendHandler, - shared_from_this(), -@@ -204,7 +204,7 @@ UnixDomainSocketImpl::doSend(const boost::asio::const_ - - void - UnixDomainSocketImpl::sendHandler(const UnixDomainSocket::Handler& remote_handler, -- const boost::asio::const_buffers_1& buffer, -+ const boost::asio::const_buffer& buffer, - const boost::system::error_code& ec, - size_t length) { - // The asynchronous send may return EWOULDBLOCK or EAGAIN on some -@@ -227,7 +227,7 @@ UnixDomainSocketImpl::asyncReceive(void* data, const s - } - - void --UnixDomainSocketImpl::doReceive(const boost::asio::mutable_buffers_1& buffer, -+UnixDomainSocketImpl::doReceive(const boost::asio::mutable_buffer& buffer, - const UnixDomainSocket::Handler& handler) { - auto local_handler = std::bind(&UnixDomainSocketImpl::receiveHandler, - shared_from_this(), -@@ -237,7 +237,7 @@ UnixDomainSocketImpl::doReceive(const boost::asio::mut - - void - UnixDomainSocketImpl::receiveHandler(const UnixDomainSocket::Handler& remote_handler, -- const boost::asio::mutable_buffers_1& buffer, -+ const boost::asio::mutable_buffer& buffer, - const boost::system::error_code& ec, - size_t length) { - // The asynchronous receive may return EWOULDBLOCK or EAGAIN on some Index: patches/patch-src_lib_dhcp_iface_mgr_cc =================================================================== RCS file: patches/patch-src_lib_dhcp_iface_mgr_cc diff -N patches/patch-src_lib_dhcp_iface_mgr_cc --- patches/patch-src_lib_dhcp_iface_mgr_cc 17 Dec 2024 07:42:47 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,14 +0,0 @@ -https://github.com/isc-projects/kea/pull/143 - -Index: src/lib/dhcp/iface_mgr.cc ---- src/lib/dhcp/iface_mgr.cc.orig -+++ src/lib/dhcp/iface_mgr.cc -@@ -1021,7 +1021,7 @@ IfaceMgr::getLocalAddress(const IOAddress& remote_addr - } - - // Create socket that will be used to connect to remote endpoint. -- boost::asio::io_service io_service; -+ boost::asio::io_context io_service; - boost::asio::ip::udp::socket sock(io_service); - - boost::system::error_code err_code; Index: patches/patch-src_lib_dhcp_pkt_filter_bpf_cc =================================================================== RCS file: patches/patch-src_lib_dhcp_pkt_filter_bpf_cc diff -N patches/patch-src_lib_dhcp_pkt_filter_bpf_cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-src_lib_dhcp_pkt_filter_bpf_cc 30 Mar 2026 22:09:29 -0000 @@ -0,0 +1,12 @@ +Index: src/lib/dhcp/pkt_filter_bpf.cc +--- src/lib/dhcp/pkt_filter_bpf.cc.orig ++++ src/lib/dhcp/pkt_filter_bpf.cc +@@ -539,7 +539,7 @@ PktFilterBPF::receive(Iface& iface, const SocketInfo& + pkt->setRemoteHWAddr(dummy_pkt->getRemoteHWAddr()); + + // Set time the packet was stored in the buffer. +-#if (defined(BPF_TIMEVAL)) && (BPF_TIMEVAL == timeval32) ++#if (defined(BPF_TIMEVAL)) && (BPF_TIMEVAL == timeval32) || defined(__OpenBSD__) + // Convert to ptime directly to avoid timeval vs + // timeval32 definitons under MacOS. + time_t time_t_secs = bpfh.bh_tstamp.tv_sec; Index: patches/patch-src_lib_dns_name_cc =================================================================== RCS file: patches/patch-src_lib_dns_name_cc diff -N patches/patch-src_lib_dns_name_cc --- patches/patch-src_lib_dns_name_cc 3 Jul 2025 05:33:02 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,63 +0,0 @@ -Fix build with libc++ 19.1.7 -https://github.com/isc-projects/kea/commit/d4878ebec89ed1f869940e67cff8f8fe657b2ee4 - -/usr/include/c++/v1/string:820:42: error: implicit instantiation of undefined template 'std::char -_traits' - -Index: src/lib/dns/name.cc ---- src/lib/dns/name.cc.orig -+++ src/lib/dns/name.cc -@@ -305,7 +305,7 @@ Name::Name(const std::string &namestring, bool downcas - // And get the output - labelcount_ = offsets.size(); - isc_throw_assert(labelcount_ > 0 && labelcount_ <= Name::MAX_LABELS); -- ndata_.assign(ndata.data(), ndata.size()); -+ ndata_.assign(ndata.data(), ndata.data() + ndata.size()); - length_ = ndata_.size(); - offsets_.assign(offsets.begin(), offsets.end()); - } -@@ -339,7 +339,7 @@ Name::Name(const char* namedata, size_t data_len, cons - // Get the output - labelcount_ = offsets.size(); - isc_throw_assert(labelcount_ > 0 && labelcount_ <= Name::MAX_LABELS); -- ndata_.assign(ndata.data(), ndata.size()); -+ ndata_.assign(ndata.data(), ndata.data() + ndata.size()); - length_ = ndata_.size(); - offsets_.assign(offsets.begin(), offsets.end()); - -@@ -350,7 +350,7 @@ Name::Name(const char* namedata, size_t data_len, cons - // Drop the last character of the data (the \0) and append a copy of - // the origin's data - ndata_.erase(ndata_.end() - 1); -- ndata_.append(origin->ndata_); -+ ndata_.insert(ndata.end(), origin->ndata_.begin(), origin->ndata_.end()); - - // Do a similar thing with offsets. However, we need to move them - // so they point after the prefix we parsed before. -@@ -586,7 +586,7 @@ Name::concatenate(const Name& suffix) const { - - Name retname; - retname.ndata_.reserve(length); -- retname.ndata_.assign(ndata_, 0, length_ - 1); -+ retname.ndata_.assign(ndata_.data(), ndata_.data() + length_ - 1); - retname.ndata_.insert(retname.ndata_.end(), - suffix.ndata_.begin(), suffix.ndata_.end()); - isc_throw_assert(retname.ndata_.size() == length); -@@ -626,7 +626,7 @@ Name::reverse() const { - NameString::const_iterator n0 = ndata_.begin(); - retname.offsets_.push_back(0); - while (rit1 != offsets_.rend()) { -- retname.ndata_.append(n0 + *rit1, n0 + *rit0); -+ retname.ndata_.insert(retname.ndata_.end(), n0 + *rit1, n0 + *rit0); - retname.offsets_.push_back(retname.ndata_.size()); - ++rit0; - ++rit1; -@@ -666,7 +666,7 @@ Name::split(const unsigned int first, const unsigned i - // original name, and append the trailing dot explicitly. - // - retname.ndata_.reserve(retname.offsets_.back() + 1); -- retname.ndata_.assign(ndata_, offsets_[first], retname.offsets_.back()); -+ retname.ndata_.assign(ndata_.data() + offsets_[first], ndata_.data() + retname.offsets_.back()); - retname.ndata_.push_back(0); - - retname.length_ = retname.ndata_.size(); Index: patches/patch-src_lib_dns_name_h =================================================================== RCS file: patches/patch-src_lib_dns_name_h diff -N patches/patch-src_lib_dns_name_h --- patches/patch-src_lib_dns_name_h 3 Jul 2025 05:33:02 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,18 +0,0 @@ -Fix build with libc++ 19.1.7 -https://github.com/isc-projects/kea/commit/d4878ebec89ed1f869940e67cff8f8fe657b2ee4 - -/usr/include/c++/v1/string:820:42: error: implicit instantiation of undefined template 'std::char -_traits' - -Index: src/lib/dns/name.h ---- src/lib/dns/name.h.orig -+++ src/lib/dns/name.h -@@ -232,7 +232,7 @@ class Name { - //@{ - private: - /// \brief Name data string -- typedef std::basic_string NameString; -+ typedef std::vector NameString; - /// \brief Name offsets type - typedef std::vector NameOffsets; - Index: patches/patch-src_lib_eval_lexer_cc =================================================================== RCS file: patches/patch-src_lib_eval_lexer_cc diff -N patches/patch-src_lib_eval_lexer_cc --- patches/patch-src_lib_eval_lexer_cc 7 Jul 2023 08:07:50 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,14 +0,0 @@ -bodge around https://gitlab.isc.org/isc-projects/kea/-/issues/2970 - -Index: src/lib/eval/lexer.cc ---- src/lib/eval/lexer.cc.orig -+++ src/lib/eval/lexer.cc -@@ -312,7 +312,7 @@ - - /* C99 systems have . Non-C99 systems may or may not. */ - --#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -+#if defined(__OpenBSD__) || (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) - - /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, - * if you want the limit (max/min) macros for int types.