Index | Thread | Search

From:
Stuart Henderson <stu@spacehopper.org>
Subject:
Re: kea version update
To:
Sonic <sonicsmith@gmail.com>
Cc:
ports@openbsd.org
Date:
Mon, 30 Mar 2026 23:09:40 +0100

Download raw body.

Thread
  • Sonic:

    kea version update

    • Stuart Henderson:

      kea version update

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 <bsd.port.arch.mk>
 
 .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 <inttypes.h>. 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 <inttypes.h>. 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 <inttypes.h>. 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 <inttypes.h>. 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 <inttypes.h>. 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 <dns/rcode.h>
- #include <util/buffer.h>
+ #include <util/io.h>
  
 +#include <boost/asio/deadline_timer.hpp>
  #include <boost/scoped_ptr.hpp>
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<void ()>& callback) {
--        io_service_.post(callback);
-+        boost::asio::post(io_context_, callback);
-     }
- 
- private:
--    boost::asio::io_service io_service_;
--    boost::shared_ptr<boost::asio::io_service::work> 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<unsigned char>'
-
-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<unsigned char>'
-
-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<uint8_t> NameString;
-+    typedef std::vector<uint8_t> NameString;
-     /// \brief Name offsets type
-     typedef std::vector<uint8_t> 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 <inttypes.h>. 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.