Download raw body.
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.
kea version update