Module Name:    src
Committed By:   christos
Date:           Sun Jan 26 16:30:19 UTC 2025

Added Files:
        src/external/mpl/bind/dist/bin/tests/system/cpu: prereq.sh setup.sh
            tests.sh
        src/external/mpl/bind/dist/bin/tests/system/cpu/ns1: named.conf.in
        src/external/mpl/bind/dist/lib/isc/include/isc: entropy.h queue.h xml.h
        src/external/mpl/bind/include/dns: probes.h
        src/external/mpl/bind/include/ns: pfilter.h probes.h
        src/external/mpl/bind/lib/libns: pfilter.c

Log Message:
new files.


To generate a diff of this commit:
cvs rdiff -u -r0 -r1.3 \
    src/external/mpl/bind/dist/bin/tests/system/cpu/prereq.sh \
    src/external/mpl/bind/dist/bin/tests/system/cpu/setup.sh \
    src/external/mpl/bind/dist/bin/tests/system/cpu/tests.sh
cvs rdiff -u -r0 -r1.3 \
    src/external/mpl/bind/dist/bin/tests/system/cpu/ns1/named.conf.in
cvs rdiff -u -r0 -r1.4 \
    src/external/mpl/bind/dist/lib/isc/include/isc/entropy.h \
    src/external/mpl/bind/dist/lib/isc/include/isc/xml.h
cvs rdiff -u -r0 -r1.7 src/external/mpl/bind/dist/lib/isc/include/isc/queue.h
cvs rdiff -u -r0 -r1.1 src/external/mpl/bind/include/dns/probes.h
cvs rdiff -u -r0 -r1.1 src/external/mpl/bind/include/ns/pfilter.h \
    src/external/mpl/bind/include/ns/probes.h
cvs rdiff -u -r0 -r1.1 src/external/mpl/bind/lib/libns/pfilter.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Added files:

Index: src/external/mpl/bind/dist/bin/tests/system/cpu/prereq.sh
diff -u /dev/null src/external/mpl/bind/dist/bin/tests/system/cpu/prereq.sh:1.3
--- /dev/null	Sun Jan 26 11:30:19 2025
+++ src/external/mpl/bind/dist/bin/tests/system/cpu/prereq.sh	Sun Jan 26 11:30:18 2025
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+#
+# SPDX-License-Identifier: MPL-2.0
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0.  If a copy of the MPL was not distributed with this
+# file, you can obtain one at https://mozilla.org/MPL/2.0/.
+#
+# See the COPYRIGHT file distributed with this work for additional
+# information regarding copyright ownership.
+
+. ../conf.sh
+
+command -v cpuset >/dev/null || command -v numactl >/dev/null || command -v taskset >/dev/null || {
+  echo_i "This test requires cpuset, numactl, or taskset." >&2
+  exit 255
+}
+
+exit 0
Index: src/external/mpl/bind/dist/bin/tests/system/cpu/setup.sh
diff -u /dev/null src/external/mpl/bind/dist/bin/tests/system/cpu/setup.sh:1.3
--- /dev/null	Sun Jan 26 11:30:19 2025
+++ src/external/mpl/bind/dist/bin/tests/system/cpu/setup.sh	Sun Jan 26 11:30:18 2025
@@ -0,0 +1,19 @@
+#!/bin/sh -e
+
+# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+#
+# SPDX-License-Identifier: MPL-2.0
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0.  If a copy of the MPL was not distributed with this
+# file, you can obtain one at https://mozilla.org/MPL/2.0/.
+#
+# See the COPYRIGHT file distributed with this work for additional
+# information regarding copyright ownership.
+
+# shellcheck source=conf.sh
+. ../conf.sh
+
+set -e
+
+copy_setports ns1/named.conf.in ns1/named.conf
Index: src/external/mpl/bind/dist/bin/tests/system/cpu/tests.sh
diff -u /dev/null src/external/mpl/bind/dist/bin/tests/system/cpu/tests.sh:1.3
--- /dev/null	Sun Jan 26 11:30:19 2025
+++ src/external/mpl/bind/dist/bin/tests/system/cpu/tests.sh	Sun Jan 26 11:30:18 2025
@@ -0,0 +1,65 @@
+#!/bin/sh
+
+# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+#
+# SPDX-License-Identifier: MPL-2.0
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0.  If a copy of the MPL was not distributed with this
+# file, you can obtain one at https://mozilla.org/MPL/2.0/.
+#
+# See the COPYRIGHT file distributed with this work for additional
+# information regarding copyright ownership.
+
+# shellcheck source=conf.sh
+. ../conf.sh
+
+status=0
+n=0
+
+CPUSET=$(command -v cpuset)
+NUMACTL=$(command -v numactl)
+TASKSET=$(command -v taskset)
+
+cpulist() (
+  if [ -n "$CPUSET" ]; then
+    cpuset -g | head -1 | sed -e "s/.*: //" | tr -s ', ' '\n'
+  elif [ -n "$NUMACTL" ]; then
+    numactl --show | sed -ne 's/^physcpubind: //p' | tr -s ' ' '\n'
+  elif [ -n "$TASKSET" ]; then
+    # shellcheck disable=SC2046
+    seq $(taskset -c -p $$ | sed -e 's/.*: //' | tr -s ' -' ' ')
+  else
+    echo 0
+  fi
+)
+
+cpulimit() (
+  set -x
+  min_cpu="${1}"
+  shift
+  max_cpu="${1}"
+  shift
+
+  if [ -n "$CPUSET" ]; then
+    cpuset -l "${min_cpu}-${max_cpu}" "$@" 2>&1
+  elif [ -n "$NUMACTL" ]; then
+    numactl --physcpubind="${min_cpu}-${max_cpu}" "$@" 2>&1
+  elif [ -n "$TASKSET" ]; then
+    taskset -c "${min_cpu}-${max_cpu}" "$@" 2>&1
+  fi
+)
+
+ret=0
+for cpu in $(cpulist); do
+  n=$((n + 1))
+  echo_i "testing that limiting CPU sets to 0-${cpu} works ($n)"
+  cpulimit 0 "$cpu" "$NAMED" -g >named.run.$n 2>&1 || true
+  ncpus=$(sed -ne 's/.*found \([0-9]*\) CPU.*\([0-9]*\) worker thread.*/\1/p' named.run.$n)
+  [ "$ncpus" -eq "$((cpu + 1))" ] || ret=1
+done
+test "$ret" -eq 0 || echo_i "failed"
+status=$((status + ret))
+
+echo_i "exit status: $status"
+[ $status -eq 0 ] || exit 1

Index: src/external/mpl/bind/dist/bin/tests/system/cpu/ns1/named.conf.in
diff -u /dev/null src/external/mpl/bind/dist/bin/tests/system/cpu/ns1/named.conf.in:1.3
--- /dev/null	Sun Jan 26 11:30:19 2025
+++ src/external/mpl/bind/dist/bin/tests/system/cpu/ns1/named.conf.in	Sun Jan 26 11:30:18 2025
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0.  If a copy of the MPL was not distributed with this
+ * file, you can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * See the COPYRIGHT file distributed with this work for additional
+ * information regarding copyright ownership.
+ */
+
+options {
+	query-source address 10.53.0.1;
+	port @PORT@;
+	pid-file "named.pid";
+	listen-on { 10.53.0.1; };
+	listen-on-v6 { none; };
+};

Index: src/external/mpl/bind/dist/lib/isc/include/isc/entropy.h
diff -u /dev/null src/external/mpl/bind/dist/lib/isc/include/isc/entropy.h:1.4
--- /dev/null	Sun Jan 26 11:30:19 2025
+++ src/external/mpl/bind/dist/lib/isc/include/isc/entropy.h	Sun Jan 26 11:30:19 2025
@@ -0,0 +1,37 @@
+/*	$NetBSD: entropy.h,v 1.4 2025/01/26 16:30:19 christos Exp $	*/
+
+/*
+ * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, you can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * See the COPYRIGHT file distributed with this work for additional
+ * information regarding copyright ownership.
+ */
+
+#pragma once
+
+#include <stdlib.h>
+
+#include <isc/lang.h>
+
+/*! \file isc/entropy.h
+ * \brief Implements wrapper around CSPRNG cryptographic library calls
+ * for getting cryptographically secure pseudo-random numbers.
+ *
+ * Uses synchronous version of uv_random().
+ */
+
+ISC_LANG_BEGINDECLS
+
+void
+isc_entropy_get(void *buf, size_t buflen);
+/*!<
+ * \brief Get cryptographically-secure pseudo-random data.
+ */
+
+ISC_LANG_ENDDECLS
Index: src/external/mpl/bind/dist/lib/isc/include/isc/xml.h
diff -u /dev/null src/external/mpl/bind/dist/lib/isc/include/isc/xml.h:1.4
--- /dev/null	Sun Jan 26 11:30:19 2025
+++ src/external/mpl/bind/dist/lib/isc/include/isc/xml.h	Sun Jan 26 11:30:19 2025
@@ -0,0 +1,27 @@
+/*	$NetBSD: xml.h,v 1.4 2025/01/26 16:30:19 christos Exp $	*/
+
+/*
+ * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, you can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * See the COPYRIGHT file distributed with this work for additional
+ * information regarding copyright ownership.
+ */
+
+#pragma once
+
+#include <stdbool.h>
+
+void
+isc__xml_initialize(void);
+
+void
+isc__xml_shutdown(void);
+
+void
+isc__xml_setdestroycheck(bool check);

Index: src/external/mpl/bind/dist/lib/isc/include/isc/queue.h
diff -u /dev/null src/external/mpl/bind/dist/lib/isc/include/isc/queue.h:1.7
--- /dev/null	Sun Jan 26 11:30:19 2025
+++ src/external/mpl/bind/dist/lib/isc/include/isc/queue.h	Sun Jan 26 11:30:19 2025
@@ -0,0 +1,105 @@
+/*	$NetBSD: queue.h,v 1.7 2025/01/26 16:30:19 christos Exp $	*/
+
+/*
+ * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, you can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * See the COPYRIGHT file distributed with this work for additional
+ * information regarding copyright ownership.
+ */
+
+#include <isc/os.h>
+#include <isc/urcu.h>
+
+STATIC_ASSERT(sizeof(struct __cds_wfcq_head) <= ISC_OS_CACHELINE_SIZE,
+	      "size of struct __cds_wfcq_head must be smaller than "
+	      "ISC_OS_CACHELINE_SIZE");
+
+typedef struct isc_queue {
+	struct __cds_wfcq_head head;
+	uint8_t		       __padding[ISC_OS_CACHELINE_SIZE -
+				 sizeof(struct __cds_wfcq_head)];
+	struct cds_wfcq_tail   tail;
+} isc_queue_t;
+
+typedef struct cds_wfcq_node isc_queue_node_t;
+
+static inline void
+isc_queue_node_init(isc_queue_node_t *node) {
+	cds_wfcq_node_init(node);
+}
+
+static inline void
+isc_queue_init(isc_queue_t *queue) {
+	__cds_wfcq_init(&(queue)->head, &(queue)->tail);
+}
+
+static inline void
+isc_queue_destroy(isc_queue_t *queue) {
+	UNUSED(queue);
+}
+
+static inline bool
+isc_queue_empty(isc_queue_t *queue) {
+	return cds_wfcq_empty(&(queue)->head, &(queue)->tail);
+}
+
+static inline bool
+isc_queue_enqueue(isc_queue_t *queue, isc_queue_node_t *node) {
+	return cds_wfcq_enqueue(&(queue)->head, &(queue)->tail, node);
+}
+
+#define isc_queue_enqueue_entry(queue, entry, member) \
+	cds_wfcq_enqueue(&(queue)->head, &(queue)->tail, &((entry)->member))
+
+static inline isc_queue_node_t *
+isc_queue_dequeue(isc_queue_t *queue) {
+	return __cds_wfcq_dequeue_nonblocking(&(queue)->head, &(queue)->tail);
+}
+
+#define isc_queue_entry(ptr, type, member) \
+	caa_container_of_check_null(ptr, type, member)
+
+#define isc_queue_dequeue_entry(queue, type, member) \
+	isc_queue_entry(isc_queue_dequeue(queue), type, member)
+
+static inline bool
+isc_queue_splice(isc_queue_t *dest, isc_queue_t *src) {
+	enum cds_wfcq_ret ret = __cds_wfcq_splice_blocking(
+		&dest->head, &dest->tail, &src->head, &src->tail);
+	INSIST(ret != CDS_WFCQ_RET_WOULDBLOCK &&
+	       ret != CDS_WFCQ_RET_DEST_NON_EMPTY);
+
+	return ret != CDS_WFCQ_RET_SRC_EMPTY;
+}
+
+#define isc_queue_first_entry(queue, type, member)                         \
+	isc_queue_entry(                                                   \
+		__cds_wfcq_first_blocking(&(queue)->head, &(queue)->tail), \
+		type, member)
+
+#define isc_queue_next_entry(queue, node, type, member)                 \
+	isc_queue_entry(__cds_wfcq_next_blocking(&(queue)->head,        \
+						 &(queue)->tail, node), \
+			type, member)
+
+#define isc_queue_for_each_entry(queue, pos, member)                       \
+	for (pos = isc_queue_first_entry(queue, __typeof__(*pos), member); \
+	     pos != NULL;                                                  \
+	     pos = isc_queue_next_entry(queue, &(pos)->member,             \
+					__typeof__(*pos), member))
+
+#define isc_queue_for_each_entry_safe(queue, pos, next, member)            \
+	for (pos = isc_queue_first_entry(queue, __typeof__(*pos), member), \
+	    next = (pos ? isc_queue_next_entry(queue, &(pos)->member,      \
+					       __typeof__(*pos), member)   \
+			: NULL);                                           \
+	     pos != NULL; pos = next,                                      \
+	    next = (pos ? isc_queue_next_entry(queue, &(pos)->member,      \
+					       __typeof__(*pos), member)   \
+			: NULL))

Index: src/external/mpl/bind/include/dns/probes.h
diff -u /dev/null src/external/mpl/bind/include/dns/probes.h:1.1
--- /dev/null	Sun Jan 26 11:30:19 2025
+++ src/external/mpl/bind/include/dns/probes.h	Sun Jan 26 11:30:19 2025
@@ -0,0 +1,285 @@
+/*
+ * Generated by dtrace(1M).
+ */
+
+#ifndef	_PROBES_H
+#define	_PROBES_H
+
+#include <unistd.h>
+
+#ifdef	__cplusplus
+extern "C" {
+#endif
+
+#include <sys/sdt.h>
+
+#if defined(DTRACE) && _DTRACE_VERSION
+
+#define	LIBDNS_XFRIN_AXFR_FINALIZE_BEGIN(arg0, arg1) \
+	__dtrace_libdns___xfrin_axfr_finalize_begin(arg0, arg1)
+#ifndef	__sparc
+#define	LIBDNS_XFRIN_AXFR_FINALIZE_BEGIN_ENABLED() \
+	__dtraceenabled_libdns___xfrin_axfr_finalize_begin()
+#else
+#define	LIBDNS_XFRIN_AXFR_FINALIZE_BEGIN_ENABLED() \
+	__dtraceenabled_libdns___xfrin_axfr_finalize_begin(0)
+#endif
+#define	LIBDNS_XFRIN_AXFR_FINALIZE_END(arg0, arg1, arg2) \
+	__dtrace_libdns___xfrin_axfr_finalize_end(arg0, arg1, arg2)
+#ifndef	__sparc
+#define	LIBDNS_XFRIN_AXFR_FINALIZE_END_ENABLED() \
+	__dtraceenabled_libdns___xfrin_axfr_finalize_end()
+#else
+#define	LIBDNS_XFRIN_AXFR_FINALIZE_END_ENABLED() \
+	__dtraceenabled_libdns___xfrin_axfr_finalize_end(0)
+#endif
+#define	LIBDNS_XFRIN_CONNECTED(arg0, arg1, arg2) \
+	__dtrace_libdns___xfrin_connected(arg0, arg1, arg2)
+#ifndef	__sparc
+#define	LIBDNS_XFRIN_CONNECTED_ENABLED() \
+	__dtraceenabled_libdns___xfrin_connected()
+#else
+#define	LIBDNS_XFRIN_CONNECTED_ENABLED() \
+	__dtraceenabled_libdns___xfrin_connected(0)
+#endif
+#define	LIBDNS_XFRIN_DONE_CALLBACK_BEGIN(arg0, arg1, arg2) \
+	__dtrace_libdns___xfrin_done_callback_begin(arg0, arg1, arg2)
+#ifndef	__sparc
+#define	LIBDNS_XFRIN_DONE_CALLBACK_BEGIN_ENABLED() \
+	__dtraceenabled_libdns___xfrin_done_callback_begin()
+#else
+#define	LIBDNS_XFRIN_DONE_CALLBACK_BEGIN_ENABLED() \
+	__dtraceenabled_libdns___xfrin_done_callback_begin(0)
+#endif
+#define	LIBDNS_XFRIN_DONE_CALLBACK_END(arg0, arg1, arg2) \
+	__dtrace_libdns___xfrin_done_callback_end(arg0, arg1, arg2)
+#ifndef	__sparc
+#define	LIBDNS_XFRIN_DONE_CALLBACK_END_ENABLED() \
+	__dtraceenabled_libdns___xfrin_done_callback_end()
+#else
+#define	LIBDNS_XFRIN_DONE_CALLBACK_END_ENABLED() \
+	__dtraceenabled_libdns___xfrin_done_callback_end(0)
+#endif
+#define	LIBDNS_XFRIN_READ(arg0, arg1, arg2) \
+	__dtrace_libdns___xfrin_read(arg0, arg1, arg2)
+#ifndef	__sparc
+#define	LIBDNS_XFRIN_READ_ENABLED() \
+	__dtraceenabled_libdns___xfrin_read()
+#else
+#define	LIBDNS_XFRIN_READ_ENABLED() \
+	__dtraceenabled_libdns___xfrin_read(0)
+#endif
+#define	LIBDNS_XFRIN_RECV_ANSWER(arg0, arg1, arg2) \
+	__dtrace_libdns___xfrin_recv_answer(arg0, arg1, arg2)
+#ifndef	__sparc
+#define	LIBDNS_XFRIN_RECV_ANSWER_ENABLED() \
+	__dtraceenabled_libdns___xfrin_recv_answer()
+#else
+#define	LIBDNS_XFRIN_RECV_ANSWER_ENABLED() \
+	__dtraceenabled_libdns___xfrin_recv_answer(0)
+#endif
+#define	LIBDNS_XFRIN_RECV_DONE(arg0, arg1, arg2) \
+	__dtrace_libdns___xfrin_recv_done(arg0, arg1, arg2)
+#ifndef	__sparc
+#define	LIBDNS_XFRIN_RECV_DONE_ENABLED() \
+	__dtraceenabled_libdns___xfrin_recv_done()
+#else
+#define	LIBDNS_XFRIN_RECV_DONE_ENABLED() \
+	__dtraceenabled_libdns___xfrin_recv_done(0)
+#endif
+#define	LIBDNS_XFRIN_RECV_PARSED(arg0, arg1, arg2) \
+	__dtrace_libdns___xfrin_recv_parsed(arg0, arg1, arg2)
+#ifndef	__sparc
+#define	LIBDNS_XFRIN_RECV_PARSED_ENABLED() \
+	__dtraceenabled_libdns___xfrin_recv_parsed()
+#else
+#define	LIBDNS_XFRIN_RECV_PARSED_ENABLED() \
+	__dtraceenabled_libdns___xfrin_recv_parsed(0)
+#endif
+#define	LIBDNS_XFRIN_RECV_QUESTION(arg0, arg1, arg2) \
+	__dtrace_libdns___xfrin_recv_question(arg0, arg1, arg2)
+#ifndef	__sparc
+#define	LIBDNS_XFRIN_RECV_QUESTION_ENABLED() \
+	__dtraceenabled_libdns___xfrin_recv_question()
+#else
+#define	LIBDNS_XFRIN_RECV_QUESTION_ENABLED() \
+	__dtraceenabled_libdns___xfrin_recv_question(0)
+#endif
+#define	LIBDNS_XFRIN_RECV_SEND_REQUEST(arg0, arg1) \
+	__dtrace_libdns___xfrin_recv_send_request(arg0, arg1)
+#ifndef	__sparc
+#define	LIBDNS_XFRIN_RECV_SEND_REQUEST_ENABLED() \
+	__dtraceenabled_libdns___xfrin_recv_send_request()
+#else
+#define	LIBDNS_XFRIN_RECV_SEND_REQUEST_ENABLED() \
+	__dtraceenabled_libdns___xfrin_recv_send_request(0)
+#endif
+#define	LIBDNS_XFRIN_RECV_START(arg0, arg1, arg2) \
+	__dtrace_libdns___xfrin_recv_start(arg0, arg1, arg2)
+#ifndef	__sparc
+#define	LIBDNS_XFRIN_RECV_START_ENABLED() \
+	__dtraceenabled_libdns___xfrin_recv_start()
+#else
+#define	LIBDNS_XFRIN_RECV_START_ENABLED() \
+	__dtraceenabled_libdns___xfrin_recv_start(0)
+#endif
+#define	LIBDNS_XFRIN_RECV_TRY_AXFR(arg0, arg1, arg2) \
+	__dtrace_libdns___xfrin_recv_try_axfr(arg0, arg1, arg2)
+#ifndef	__sparc
+#define	LIBDNS_XFRIN_RECV_TRY_AXFR_ENABLED() \
+	__dtraceenabled_libdns___xfrin_recv_try_axfr()
+#else
+#define	LIBDNS_XFRIN_RECV_TRY_AXFR_ENABLED() \
+	__dtraceenabled_libdns___xfrin_recv_try_axfr(0)
+#endif
+#define	LIBDNS_XFRIN_SENT(arg0, arg1, arg2) \
+	__dtrace_libdns___xfrin_sent(arg0, arg1, arg2)
+#ifndef	__sparc
+#define	LIBDNS_XFRIN_SENT_ENABLED() \
+	__dtraceenabled_libdns___xfrin_sent()
+#else
+#define	LIBDNS_XFRIN_SENT_ENABLED() \
+	__dtraceenabled_libdns___xfrin_sent(0)
+#endif
+#define	LIBDNS_XFRIN_START(arg0, arg1) \
+	__dtrace_libdns___xfrin_start(arg0, arg1)
+#ifndef	__sparc
+#define	LIBDNS_XFRIN_START_ENABLED() \
+	__dtraceenabled_libdns___xfrin_start()
+#else
+#define	LIBDNS_XFRIN_START_ENABLED() \
+	__dtraceenabled_libdns___xfrin_start(0)
+#endif
+
+
+extern void __dtrace_libdns___xfrin_axfr_finalize_begin(void *, char *);
+#ifndef	__sparc
+extern int __dtraceenabled_libdns___xfrin_axfr_finalize_begin(void);
+#else
+extern int __dtraceenabled_libdns___xfrin_axfr_finalize_begin(long);
+#endif
+extern void __dtrace_libdns___xfrin_axfr_finalize_end(void *, char *, int);
+#ifndef	__sparc
+extern int __dtraceenabled_libdns___xfrin_axfr_finalize_end(void);
+#else
+extern int __dtraceenabled_libdns___xfrin_axfr_finalize_end(long);
+#endif
+extern void __dtrace_libdns___xfrin_connected(void *, char *, int);
+#ifndef	__sparc
+extern int __dtraceenabled_libdns___xfrin_connected(void);
+#else
+extern int __dtraceenabled_libdns___xfrin_connected(long);
+#endif
+extern void __dtrace_libdns___xfrin_done_callback_begin(void *, char *, int);
+#ifndef	__sparc
+extern int __dtraceenabled_libdns___xfrin_done_callback_begin(void);
+#else
+extern int __dtraceenabled_libdns___xfrin_done_callback_begin(long);
+#endif
+extern void __dtrace_libdns___xfrin_done_callback_end(void *, char *, int);
+#ifndef	__sparc
+extern int __dtraceenabled_libdns___xfrin_done_callback_end(void);
+#else
+extern int __dtraceenabled_libdns___xfrin_done_callback_end(long);
+#endif
+extern void __dtrace_libdns___xfrin_read(void *, char *, int);
+#ifndef	__sparc
+extern int __dtraceenabled_libdns___xfrin_read(void);
+#else
+extern int __dtraceenabled_libdns___xfrin_read(long);
+#endif
+extern void __dtrace_libdns___xfrin_recv_answer(void *, char *, void *);
+#ifndef	__sparc
+extern int __dtraceenabled_libdns___xfrin_recv_answer(void);
+#else
+extern int __dtraceenabled_libdns___xfrin_recv_answer(long);
+#endif
+extern void __dtrace_libdns___xfrin_recv_done(void *, char *, int);
+#ifndef	__sparc
+extern int __dtraceenabled_libdns___xfrin_recv_done(void);
+#else
+extern int __dtraceenabled_libdns___xfrin_recv_done(long);
+#endif
+extern void __dtrace_libdns___xfrin_recv_parsed(void *, char *, int);
+#ifndef	__sparc
+extern int __dtraceenabled_libdns___xfrin_recv_parsed(void);
+#else
+extern int __dtraceenabled_libdns___xfrin_recv_parsed(long);
+#endif
+extern void __dtrace_libdns___xfrin_recv_question(void *, char *, void *);
+#ifndef	__sparc
+extern int __dtraceenabled_libdns___xfrin_recv_question(void);
+#else
+extern int __dtraceenabled_libdns___xfrin_recv_question(long);
+#endif
+extern void __dtrace_libdns___xfrin_recv_send_request(void *, char *);
+#ifndef	__sparc
+extern int __dtraceenabled_libdns___xfrin_recv_send_request(void);
+#else
+extern int __dtraceenabled_libdns___xfrin_recv_send_request(long);
+#endif
+extern void __dtrace_libdns___xfrin_recv_start(void *, char *, int);
+#ifndef	__sparc
+extern int __dtraceenabled_libdns___xfrin_recv_start(void);
+#else
+extern int __dtraceenabled_libdns___xfrin_recv_start(long);
+#endif
+extern void __dtrace_libdns___xfrin_recv_try_axfr(void *, char *, int);
+#ifndef	__sparc
+extern int __dtraceenabled_libdns___xfrin_recv_try_axfr(void);
+#else
+extern int __dtraceenabled_libdns___xfrin_recv_try_axfr(long);
+#endif
+extern void __dtrace_libdns___xfrin_sent(void *, char *, int);
+#ifndef	__sparc
+extern int __dtraceenabled_libdns___xfrin_sent(void);
+#else
+extern int __dtraceenabled_libdns___xfrin_sent(long);
+#endif
+extern void __dtrace_libdns___xfrin_start(void *, char *);
+#ifndef	__sparc
+extern int __dtraceenabled_libdns___xfrin_start(void);
+#else
+extern int __dtraceenabled_libdns___xfrin_start(long);
+#endif
+
+#else
+
+#define	LIBDNS_XFRIN_AXFR_FINALIZE_BEGIN(arg0, arg1)
+#define	LIBDNS_XFRIN_AXFR_FINALIZE_BEGIN_ENABLED() (0)
+#define	LIBDNS_XFRIN_AXFR_FINALIZE_END(arg0, arg1, arg2)
+#define	LIBDNS_XFRIN_AXFR_FINALIZE_END_ENABLED() (0)
+#define	LIBDNS_XFRIN_CONNECTED(arg0, arg1, arg2)
+#define	LIBDNS_XFRIN_CONNECTED_ENABLED() (0)
+#define	LIBDNS_XFRIN_DONE_CALLBACK_BEGIN(arg0, arg1, arg2)
+#define	LIBDNS_XFRIN_DONE_CALLBACK_BEGIN_ENABLED() (0)
+#define	LIBDNS_XFRIN_DONE_CALLBACK_END(arg0, arg1, arg2)
+#define	LIBDNS_XFRIN_DONE_CALLBACK_END_ENABLED() (0)
+#define	LIBDNS_XFRIN_READ(arg0, arg1, arg2)
+#define	LIBDNS_XFRIN_READ_ENABLED() (0)
+#define	LIBDNS_XFRIN_RECV_ANSWER(arg0, arg1, arg2)
+#define	LIBDNS_XFRIN_RECV_ANSWER_ENABLED() (0)
+#define	LIBDNS_XFRIN_RECV_DONE(arg0, arg1, arg2)
+#define	LIBDNS_XFRIN_RECV_DONE_ENABLED() (0)
+#define	LIBDNS_XFRIN_RECV_PARSED(arg0, arg1, arg2)
+#define	LIBDNS_XFRIN_RECV_PARSED_ENABLED() (0)
+#define	LIBDNS_XFRIN_RECV_QUESTION(arg0, arg1, arg2)
+#define	LIBDNS_XFRIN_RECV_QUESTION_ENABLED() (0)
+#define	LIBDNS_XFRIN_RECV_SEND_REQUEST(arg0, arg1)
+#define	LIBDNS_XFRIN_RECV_SEND_REQUEST_ENABLED() (0)
+#define	LIBDNS_XFRIN_RECV_START(arg0, arg1, arg2)
+#define	LIBDNS_XFRIN_RECV_START_ENABLED() (0)
+#define	LIBDNS_XFRIN_RECV_TRY_AXFR(arg0, arg1, arg2)
+#define	LIBDNS_XFRIN_RECV_TRY_AXFR_ENABLED() (0)
+#define	LIBDNS_XFRIN_SENT(arg0, arg1, arg2)
+#define	LIBDNS_XFRIN_SENT_ENABLED() (0)
+#define	LIBDNS_XFRIN_START(arg0, arg1)
+#define	LIBDNS_XFRIN_START_ENABLED() (0)
+
+
+#ifdef	__cplusplus
+}
+#endif
+#endif
+
+#endif	/* _PROBES_H */

Index: src/external/mpl/bind/include/ns/pfilter.h
diff -u /dev/null src/external/mpl/bind/include/ns/pfilter.h:1.1
--- /dev/null	Sun Jan 26 11:30:19 2025
+++ src/external/mpl/bind/include/ns/pfilter.h	Sun Jan 26 11:30:19 2025
@@ -0,0 +1,2 @@
+void pfilter_enable(void);
+void pfilter_notify(isc_result_t, ns_client_t *, const char *);
Index: src/external/mpl/bind/include/ns/probes.h
diff -u /dev/null src/external/mpl/bind/include/ns/probes.h:1.1
--- /dev/null	Sun Jan 26 11:30:19 2025
+++ src/external/mpl/bind/include/ns/probes.h	Sun Jan 26 11:30:19 2025
@@ -0,0 +1,48 @@
+/*
+ * Generated by dtrace(1M).
+ */
+
+#ifndef	_PROBES_H
+#define	_PROBES_H
+
+#include <unistd.h>
+
+#ifdef	__cplusplus
+extern "C" {
+#endif
+
+#include <sys/sdt.h>
+
+#if defined(DTRACE) && _DTRACE_VERSION
+
+#define	LIBNS_RRL_DROP(arg0, arg1, arg2, arg3) \
+	__dtrace_libns___rrl_drop(arg0, arg1, arg2, arg3)
+#ifndef	__sparc
+#define	LIBNS_RRL_DROP_ENABLED() \
+	__dtraceenabled_libns___rrl_drop()
+#else
+#define	LIBNS_RRL_DROP_ENABLED() \
+	__dtraceenabled_libns___rrl_drop(0)
+#endif
+
+
+extern void __dtrace_libns___rrl_drop(char *, char *, char *, int);
+#ifndef	__sparc
+extern int __dtraceenabled_libns___rrl_drop(void);
+#else
+extern int __dtraceenabled_libns___rrl_drop(long);
+#endif
+
+#else
+
+#define	LIBNS_RRL_DROP(arg0, arg1, arg2, arg3)
+#define	LIBNS_RRL_DROP_ENABLED() (0)
+
+#endif
+
+
+#ifdef	__cplusplus
+}
+#endif
+
+#endif	/* _PROBES_H */

Index: src/external/mpl/bind/lib/libns/pfilter.c
diff -u /dev/null src/external/mpl/bind/lib/libns/pfilter.c:1.1
--- /dev/null	Sun Jan 26 11:30:19 2025
+++ src/external/mpl/bind/lib/libns/pfilter.c	Sun Jan 26 11:30:19 2025
@@ -0,0 +1,43 @@
+
+#include <isc/util.h>
+#include <ns/types.h>
+#include <ns/client.h>
+
+#include <blocklist.h>
+
+#include <ns/pfilter.h>
+
+static struct blocklist *blstate;
+static int blenable;
+
+void
+pfilter_enable(void) {
+	blenable = 1;
+}
+
+#define TCP_CLIENT(c)  (((c)->attributes & NS_CLIENTATTR_TCP) != 0)
+
+void
+pfilter_notify(isc_result_t res, ns_client_t *client, const char *msg)
+{
+	int fd;
+
+	if (!blenable)
+		return;
+
+	if (blstate == NULL)
+		blstate = blocklist_open();
+
+	if (blstate == NULL)
+		return;
+
+	if (!TCP_CLIENT(client) && !client->peeraddr_valid)
+		return;
+
+	if ((fd = isc_nmhandle_getfd(client->handle)) == -1)
+		return;
+
+	blocklist_sa_r(blstate, 
+	    res != ISC_R_SUCCESS, fd,
+	    &client->peeraddr.type.sa, client->peeraddr.length, msg);
+}

Reply via email to