aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bin/sh/tests/builtins/read11.04
-rw-r--r--cddl/contrib/opensolaris/cmd/dtrace/dtrace.15
-rw-r--r--etc/mtree/BSD.usr.dist6
-rw-r--r--etc/termcap/Makefile4
-rw-r--r--lib/googletest/Makefile.inc2
-rw-r--r--lib/googletest/tests/Makefile3
-rw-r--r--lib/googletest/tests/Makefile.inc2
-rw-r--r--lib/libsys/Makefile.sys4
-rw-r--r--lib/ofed/Makefile.inc3
-rw-r--r--libexec/makewhatis.local/Makefile1
-rw-r--r--release/packages/ucl/googletest-all.ucl33
-rw-r--r--release/packages/ucl/tests-all.ucl18
-rw-r--r--release/packages/ucl/tests.ucl21
-rw-r--r--release/tools/vmimage.subr6
-rw-r--r--sbin/dumpon/dumpon.819
-rw-r--r--share/doc/llvm/Makefile2
-rw-r--r--share/doc/llvm/Makefile.inc1
-rw-r--r--share/man/man4/Makefile1
-rw-r--r--share/man/man4/ciss.49
-rw-r--r--share/man/man4/dtrace_pid.499
-rw-r--r--share/man/man4/mpr.42
-rw-r--r--share/man/man4/safe.416
-rw-r--r--share/man/man7/ports.76
-rw-r--r--share/misc/bsd-family-tree808
-rw-r--r--share/tabset/Makefile2
-rw-r--r--share/termcap/Makefile11
-rw-r--r--stand/libsa/zfs/zfsimpl.c67
-rw-r--r--sys/cam/ata/ata_da.c72
-rw-r--r--sys/cam/scsi/scsi_da.c21
-rw-r--r--sys/cddl/boot/zfs/zfsimpl.h15
-rw-r--r--sys/dev/safe/safe.c2
-rw-r--r--sys/kern/kern_jail.c16
-rw-r--r--sys/kern/kern_loginclass.c7
-rw-r--r--sys/kern/kern_prot.c54
-rw-r--r--sys/kern/kern_racct.c6
-rw-r--r--sys/modules/iwlwifi/Makefile4
-rw-r--r--sys/netinet/tcp_syncache.c13
-rw-r--r--usr.sbin/freebsd-update/freebsd-update.sh2
-rw-r--r--usr.sbin/jail/jail.820
-rw-r--r--usr.sbin/mixer/mixer.844
-rw-r--r--usr.sbin/periodic/etc/weekly/Makefile11
-rw-r--r--usr.sbin/sysrc/sysrc.889
42 files changed, 914 insertions, 617 deletions
diff --git a/bin/sh/tests/builtins/read11.0 b/bin/sh/tests/builtins/read11.0
index c75ed9c92a83..5bae80318b15 100644
--- a/bin/sh/tests/builtins/read11.0
+++ b/bin/sh/tests/builtins/read11.0
@@ -5,8 +5,8 @@ T=$(mktemp -d ${TMPDIR:-/tmp}/sh-test.XXXXXX)
trap 'rm -rf "$T"' 0
cd $T
mkfifo fifo1
-# Open fifo1 for writing and then read block on a dummy fifo
-{ mkfifo fifo2; read dummy <fifo2; } >fifo1 &
+# Open fifo1 for writing
+{ sleep 10; } >fifo1 &
# Wait for the child to open fifo1 for writing
exec 3<fifo1
v=original_value
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/dtrace.1 b/cddl/contrib/opensolaris/cmd/dtrace/dtrace.1
index 456a9e319987..1a9f8029e6de 100644
--- a/cddl/contrib/opensolaris/cmd/dtrace/dtrace.1
+++ b/cddl/contrib/opensolaris/cmd/dtrace/dtrace.1
@@ -20,7 +20,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd November 4, 2025
+.Dd November 6, 2025
.Dt DTRACE 1
.Os
.Sh NAME
@@ -548,7 +548,7 @@ to disallow the possibility of enabling destructive actions system-wide at any p
Any attempts to enable destructive actions will cause
.Nm
to exit with a runtime error.
-.It Fl x Ar arg Op Ns = Ns value
+.It Fl x Ar arg Ns Op = Ns Ar value
Enable or modify a DTrace runtime option or D compiler option.
Boolean options are enabled by specifying their name.
Options with values are set by separating the option name and value with an
@@ -1299,6 +1299,7 @@ in
.Xr dtrace_ip 4 ,
.Xr dtrace_kinst 4 ,
.Xr dtrace_lockstat 4 ,
+.Xr dtrace_pid 4 ,
.Xr dtrace_proc 4 ,
.Xr dtrace_profile 4 ,
.Xr dtrace_sched 4 ,
diff --git a/etc/mtree/BSD.usr.dist b/etc/mtree/BSD.usr.dist
index 54d408865fa5..79db101e74d9 100644
--- a/etc/mtree/BSD.usr.dist
+++ b/etc/mtree/BSD.usr.dist
@@ -242,8 +242,8 @@
..
legal
..
- llvm
- clang
+ llvm tags=package=clang
+ clang tags=package=clang
..
..
ncurses
@@ -857,7 +857,7 @@
scrnmaps
..
..
- tabset
+ tabset tags=package=ncurses-lib
..
vi
catalog
diff --git a/etc/termcap/Makefile b/etc/termcap/Makefile
index cd5516f3e04b..ea8fab4e839e 100644
--- a/etc/termcap/Makefile
+++ b/etc/termcap/Makefile
@@ -1,6 +1,8 @@
.PATH: ${SRCTOP}/share/termcap
-PACKAGE= runtime
+# Note: This is in ncurses-lib rather than ncurses because without it, ncurses
+# doesn't work, and the base ncurses package is optional.
+PACKAGE= ncurses-lib
CLEANFILES+= termcap.small
CONFS= termcap.small
diff --git a/lib/googletest/Makefile.inc b/lib/googletest/Makefile.inc
index 231d7545f364..43ebace19a15 100644
--- a/lib/googletest/Makefile.inc
+++ b/lib/googletest/Makefile.inc
@@ -1,5 +1,7 @@
.include <googletest.test.inc.mk>
+PACKAGE?= googletest
+
GTEST_DIR= ${SRCTOP}/contrib/googletest
GOOGLEMOCK_SRCROOT= ${GTEST_DIR}/googlemock
GOOGLETEST_SRCROOT= ${GTEST_DIR}/googletest
diff --git a/lib/googletest/tests/Makefile b/lib/googletest/tests/Makefile
index 886b1a2fe49d..350e0fe765fe 100644
--- a/lib/googletest/tests/Makefile
+++ b/lib/googletest/tests/Makefile
@@ -1,4 +1,7 @@
.PATH: ${SRCTOP}/tests
+
+PACKAGE= tests
+
KYUAFILE= yes
# Note: we start the gmock_main and gmock tests first since those take up to
diff --git a/lib/googletest/tests/Makefile.inc b/lib/googletest/tests/Makefile.inc
index 9691aaa93ded..8d19e1fafdea 100644
--- a/lib/googletest/tests/Makefile.inc
+++ b/lib/googletest/tests/Makefile.inc
@@ -3,6 +3,8 @@
# rather than installing all of them to /usr/tests/lib/googletest
TESTSDIR= ${TESTSBASE}/lib/googletest/${.CURDIR:T}
+PACKAGE= tests
+
# Clang's optimizer spends a really long time on these tests at -O2. Changing
# -O2 to -O1 reduces the -j32 time for lib/googletest/test from 131s to 71s.
# Using -O0 further reduces the time to 29s, and also reduces the disk usage
diff --git a/lib/libsys/Makefile.sys b/lib/libsys/Makefile.sys
index 1d1a4f1136ce..5f149170b974 100644
--- a/lib/libsys/Makefile.sys
+++ b/lib/libsys/Makefile.sys
@@ -471,7 +471,9 @@ MLINKS+=intro.2 errno.2
MLINKS+=jail.2 jail_attach.2 \
jail.2 jail_get.2 \
jail.2 jail_remove.2 \
- jail.2 jail_set.2
+ jail.2 jail_set.2 \
+ jail.2 jail_attach_jd.2 \
+ jail.2 jail_remove_jd.2
MLINKS+=kldunload.2 kldunloadf.2
MLINKS+=kqueue.2 kevent.2 \
kqueue.2 kqueue1.2 \
diff --git a/lib/ofed/Makefile.inc b/lib/ofed/Makefile.inc
index 1b911c451c01..5a16e0015c07 100644
--- a/lib/ofed/Makefile.inc
+++ b/lib/ofed/Makefile.inc
@@ -1 +1,4 @@
+PACKAGE?= rdma
+LIB_PACKAGE=
+
WARNS?= 0
diff --git a/libexec/makewhatis.local/Makefile b/libexec/makewhatis.local/Makefile
index 765036623d49..b541dc8e4de1 100644
--- a/libexec/makewhatis.local/Makefile
+++ b/libexec/makewhatis.local/Makefile
@@ -1,3 +1,4 @@
+PACKAGE= mandoc
SCRIPTS= makewhatis.local.sh
MAN= makewhatis.local.8
SCRIPTSDIR= ${LIBEXECDIR}
diff --git a/release/packages/ucl/googletest-all.ucl b/release/packages/ucl/googletest-all.ucl
new file mode 100644
index 000000000000..889e8a65f314
--- /dev/null
+++ b/release/packages/ucl/googletest-all.ucl
@@ -0,0 +1,33 @@
+/*
+ * SPDX-License-Identifier: ISC
+ *
+ * Copyright (c) 2025 Lexi Winter <ivy@FreeBSD.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+comment = "Unit testing framework"
+
+desc = <<EOD
+Google Test (gtest) is an xUnit-based unit testing framework for C++,
+developed by Google LLC.
+
+This version of Google Test is provided for use by unit tests in the
+base system, and is not intended for third-party users. A supported
+version of Google Test may be found in the FreeBSD Ports Collection
+as devel/googletest.
+EOD
+
+annotations {
+ set = "optional,optional-jail"
+}
diff --git a/release/packages/ucl/tests-all.ucl b/release/packages/ucl/tests-all.ucl
index 3ad2d0f50e6b..315ac2e8cce0 100644
--- a/release/packages/ucl/tests-all.ucl
+++ b/release/packages/ucl/tests-all.ucl
@@ -23,24 +23,6 @@ The test suite, installed in /usr/tests, allows the functionality of the
installed system to be verified.
EOD
-deps {
- # Nearly all the tests require atf to run.
- "atf": {
- version = "${VERSION}"
- },
-
- # The test framework requires Kyua.
- "kyua": {
- version = "${VERSION}"
- },
-
- # Since the purpose of the tests is to test the base system, the base
- # system must be installed.
- "set-base": {
- version = "${VERSION}"
- }
-}
-
annotations {
set = tests
}
diff --git a/release/packages/ucl/tests.ucl b/release/packages/ucl/tests.ucl
index bac72f1534d3..da9eb59295bc 100644
--- a/release/packages/ucl/tests.ucl
+++ b/release/packages/ucl/tests.ucl
@@ -18,10 +18,29 @@
deps {
+ # Nearly all the tests require atf to run.
+ "atf": {
+ version = "${VERSION}"
+ },
+
# Quite a few tests require flua.
"flua" {
version = "${VERSION}"
},
-}
+ # Some tests need GoogleTest
+ "googletest": {
+ version = "${VERSION}"
+ },
+ # The test framework requires Kyua.
+ "kyua": {
+ version = "${VERSION}"
+ },
+
+ # Since the purpose of the tests is to test the base system, the base
+ # system must be installed.
+ "set-base": {
+ version = "${VERSION}"
+ }
+}
diff --git a/release/tools/vmimage.subr b/release/tools/vmimage.subr
index 8531e9b8f2d6..92f00f9cf7c3 100644
--- a/release/tools/vmimage.subr
+++ b/release/tools/vmimage.subr
@@ -449,7 +449,11 @@ vm_create_disk() {
# Create an ESP
espfilename=$(mktemp /tmp/efiboot.XXXXXX)
make_esp_file ${espfilename} ${fat32min} ${BOOTFILES}/efi/loader_lua/loader_lua.efi
- BOOTPARTS="${BOOTPARTS} -p efi/efiboot0:=${espfilename}"
+ espsuffix=""
+ if [ -z "${BOOTPARTS}" ]; then
+ espsuffix="${BOOTPARTSOFFSET}"
+ fi
+ BOOTPARTS="${BOOTPARTS} -p efi/efiboot0:=${espfilename}${espsuffix}"
# Add this to fstab
mkdir -p ${DESTDIR}/boot/efi
diff --git a/sbin/dumpon/dumpon.8 b/sbin/dumpon/dumpon.8
index a57dfef7096d..4e4abb8d4b79 100644
--- a/sbin/dumpon/dumpon.8
+++ b/sbin/dumpon/dumpon.8
@@ -25,7 +25,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd April 23, 2020
+.Dd November 6, 2025
.Dt DUMPON 8
.Os
.Sh NAME
@@ -228,6 +228,20 @@ total amount of physical memory as reported by the
.Va hw.physmem
.Xr sysctl 8
variable.
+.Sh SYSCTL VARIABLES
+The following
+.Xr sysctl 8
+variables can be used to modify or monitor the behavior of crash dumps:
+.Bl -tag -width "machdep.dump_retry_count"
+.It Va debug.minidump
+Set the type of kernel crash dump.
+Possible values are 0 for a full crash dump or 1 for a minidump.
+The default is minidump.
+.It Va machdep.dump_retry_count
+The maximum number of times dump will retry before giving up.
+The default value is 5.
+This sysctl is only supported on PowerPC and AMD64.
+.El
.Sh IMPLEMENTATION NOTES
Because the file system layer is already dead by the time a crash dump
is taken, it is not possible to send crash dumps directly to a file.
@@ -339,7 +353,7 @@ when
binds to a server,
.Xr dhclient-script 8
can be used to run
-.Xr dumpon 8 .
+.Nm .
For example, to automatically configure
.Xr netdump 4
on the vtnet0 interface, add the following to
@@ -377,6 +391,7 @@ needed.
.Xr loader 8 ,
.Xr rc 8 ,
.Xr savecore 8 ,
+.Xr sysctl 8 ,
.Xr swapon 8 ,
.Xr panic 9
.Sh HISTORY
diff --git a/share/doc/llvm/Makefile b/share/doc/llvm/Makefile
index 8fde27acf117..35398786a9cb 100644
--- a/share/doc/llvm/Makefile
+++ b/share/doc/llvm/Makefile
@@ -1,5 +1,7 @@
SUBDIR= clang
+PACKAGE= clang
+
SRCDIR= ${SRCTOP}/contrib/llvm-project/llvm
.PATH: ${SRCDIR} ${SRCDIR}/lib/Support
diff --git a/share/doc/llvm/Makefile.inc b/share/doc/llvm/Makefile.inc
new file mode 100644
index 000000000000..915410fe46c4
--- /dev/null
+++ b/share/doc/llvm/Makefile.inc
@@ -0,0 +1 @@
+PACKAGE?= clang
diff --git a/share/man/man4/Makefile b/share/man/man4/Makefile
index 34edf6ad455d..fe1d285aec96 100644
--- a/share/man/man4/Makefile
+++ b/share/man/man4/Makefile
@@ -1012,6 +1012,7 @@ _dtrace_provs= dtrace_audit.4 \
dtrace_ip.4 \
dtrace_kinst.4 \
dtrace_lockstat.4 \
+ dtrace_pid.4 \
dtrace_proc.4 \
dtrace_profile.4 \
dtrace_sched.4 \
diff --git a/share/man/man4/ciss.4 b/share/man/man4/ciss.4
index 28d6556ecd85..d731aaddad38 100644
--- a/share/man/man4/ciss.4
+++ b/share/man/man4/ciss.4
@@ -1,7 +1,7 @@
.\" Written by Tom Rhodes
.\" This file is in the public domain.
.\"
-.Dd January 26, 2012
+.Dd November 6, 2025
.Dt CISS 4
.Os
.Sh NAME
@@ -87,9 +87,10 @@ might be solved by updating the firmware and/or setting the
.Va hw.ciss.nop_message_heartbeat
tunable to non-zero at boot time.
.Sh HARDWARE
-Controllers supported by the
+The
.Nm
-driver include:
+driver supports controllers implementing
+Common Interface for SCSI-3 Support Open Specification v1.04, including:
.Pp
.Bl -bullet -compact
.It
@@ -145,6 +146,8 @@ HP Smart Array P430i
.It
HP Smart Array P431
.It
+HP Smart Array P440ar
+.It
HP Smart Array P530
.It
HP Smart Array P531
diff --git a/share/man/man4/dtrace_pid.4 b/share/man/man4/dtrace_pid.4
new file mode 100644
index 000000000000..1acbdd097ba8
--- /dev/null
+++ b/share/man/man4/dtrace_pid.4
@@ -0,0 +1,99 @@
+.\"
+.\" Copyright (c) 2025 Mateusz Piotrowski <0mp@FreeBSD.org>
+.\"
+.\" SPDX-License-Identifier: BSD-2-Clause
+.\"
+.Dd November 6, 2025
+.Dt DTRACE_PID 4
+.Os
+.Sh NAME
+.Nm dtrace_pid
+.Nd a DTrace provider for dynamic userspace tracing based on function boundary instrumentation
+.Sh SYNOPSIS
+.Nm pid Ns Ar PID Ns Cm \&: Ns Ar module Ns Cm \&: Ns Ar function Ns Cm \&:entry
+.\" XXX: For some reason Op renders here in bold, so use literal square
+.\" brackets instead.
+.Nm pid Ns Ar PID Ns Cm \&: Ns Ar module Ns Cm \&: Ns Ar function Ns Cm \&: Ns No \&[ Ns Ar offset Ns No \&]
+.Nm pid Ns Ar PID Ns Cm \&: Ns Ar module Ns Cm \&: Ns Ar function Ns Cm \&:return
+.Sh DESCRIPTION
+The
+.Nm pid
+provider implements userspace dynamic tracing
+by instrumenting the entry and return of functions in userspace programs.
+Refer to
+.Xr dtrace_fbt 4
+for more details about function boundary instrumentation.
+.Pp
+The
+.Nm pid
+provider provides the following probes:
+.Bl -inset
+.It Nm pid Ns Ar PID Ns Cm \&: Ns Ar module Ns Cm \&: Ns Ar function Ns Cm \&:entry
+instruments the entry of the
+.Ar function .
+.It Nm pid Ns Ar PID Ns Cm \&: Ns Ar module Ns Cm \&: Ns Ar function Ns Cm \&: Ns Op Ar offset
+instruments the instruction within the
+.Ar function
+located at
+.Ar offset
+bytes (expressed as a hexadecimal integer).
+.It Nm pid Ns Ar PID Ns Cm \&: Ns Ar module Ns Cm \&: Ns Ar function Ns Cm \&:return
+instruments the return from the
+.Ar function .
+.El
+.Ss Probe Arguments
+The arguments of the entry probe
+.Pq Nm pid Ns Ar PID Ns Cm \&: Ns Ar module Ns Cm \&: Ns Ar function Ns Cm \&:entry
+are the arguments of the traced function call.
+.Bl -column -offset indent "Entry Probe Argument" "Definition"
+.It Sy Entry Probe Argument Ta Sy Definition
+.It Ft uint64_t Fa arg0 Ta Function's first argument
+.It Ft uint64_t Fa arg1 Ta Function's second argument
+.It Ft uint64_t Fa arg2 Ta Function's third argument
+.It Fa ... Ta ...
+.El
+.Pp
+The offset probes
+.Pq Nm pid Ns Ar PID Ns Cm \&: Ns Ar module Ns Cm \&: Ns Ar function Ns Cm \&: Ns Op Ar offset
+do not define any arguments.
+Use
+.Va uregs[]
+to inspect the registers.
+.Pp
+The arguments of the return probe
+.Pq Nm pid Ns Ar PID Ns Cm \&: Ns Ar module Ns Cm \&: Ns Ar function Ns Cm \&:return
+are the program counter and the function's return value.
+.Bl -column -offset indent "Return Probe Argument" "Definition"
+.It Sy Return Probe Argument Ta Sy Definition
+.It Ft uint64_t Fa arg0 Ta Program counter
+.It Ft uint64_t Fa arg1 Ta Function's return value
+.El
+.Pp
+Note that all probe arguments within the
+.Nm pid
+provider are of type
+.Ft uint64_t .
+.Sh SEE ALSO
+.Xr dtrace 1 ,
+.Xr dtrace_fbt 4 ,
+.Xr dtrace_kinst 4 ,
+.Xr elf 5 ,
+.Xr d 7 ,
+.Xr tracing 7
+.Rs
+.%A Brendan Gregg
+.%A Jim Mauro
+.%B DTrace: Dynamic Tracing in Oracle Solaris, Mac OS X and FreeBSD
+.%I Prentice Hall
+.%D 2011
+.%U https://www.brendangregg.com/dtracebook/
+.Re
+.Rs
+.%B The illumos Dynamic Tracing Guide
+.%O Chapter pid Provider
+.%D 2008
+.%U https://illumos.org/books/dtrace/chp-pid.html
+.Re
+.Sh AUTHORS
+This manual page was written by
+.An Mateusz Piotrowski Aq Mt 0mp@FreeBSD.org .
diff --git a/share/man/man4/mpr.4 b/share/man/man4/mpr.4
index 8de46e4f9272..a88b99ae007b 100644
--- a/share/man/man4/mpr.4
+++ b/share/man/man4/mpr.4
@@ -103,8 +103,6 @@ Broadcom Ltd./Avago Tech (LSI) SAS 3808 (8 Port SAS/PCIe)
.It
Broadcom Ltd./Avago Tech (LSI) SAS 3816 (16 Port SAS/PCIe)
.It
-Broadcom Ltd./Avago Tech (LSI) SAS 3908 (8 Port SAS/PCIe)
-.It
Broadcom Ltd./Avago Tech (LSI) SAS 3916 (16 Port SAS/PCIe)
.El
.Sh CONFIGURATION
diff --git a/share/man/man4/safe.4 b/share/man/man4/safe.4
index 89375d058bf7..914b2dd0dd1c 100644
--- a/share/man/man4/safe.4
+++ b/share/man/man4/safe.4
@@ -25,7 +25,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd November 22, 2024
+.Dd October 31, 2025
.Dt SAFE 4
.Os
.Sh NAME
@@ -57,6 +57,11 @@ In
.Cd hw.safe.rngbufsize
.Cd hw.safe.rngmaxalarm
.Ed
+.Sh DEPRECATION NOTICE
+The
+.Nm
+driver is deprecated and is scheduled for removal in
+.Fx 16.0 .
.Sh DESCRIPTION
The
.Nm
@@ -128,5 +133,14 @@ packet processing.
.Xr random 4 ,
.Xr crypto 7 ,
.Xr crypto 9
+.Sh HISTORY
+The
+.Nm
+driver first appeared in
+.Fx 5.2 .
+It is deprecated in
+.Fx 15.0
+and removed in
+.Fx 16.0 .
.Sh BUGS
Public key support is not implemented.
diff --git a/share/man/man7/ports.7 b/share/man/man7/ports.7
index 75070ce852fe..24c1eb4b7f51 100644
--- a/share/man/man7/ports.7
+++ b/share/man/man7/ports.7
@@ -25,7 +25,7 @@
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
-.Dd September 10, 2025
+.Dd November 6, 2025
.Dt PORTS 7
.Os
.Sh NAME
@@ -597,6 +597,10 @@ data.
The default ports directory.
.It Pa /usr/ports/Mk/bsd.port.mk
The big Kahuna.
+.It Pa /var/db/ports
+The directory where the results of configuring
+.Va OPTIONS
+are stored.
.El
.Sh EXAMPLES
.Bl -tag -width 0n
diff --git a/share/misc/bsd-family-tree b/share/misc/bsd-family-tree
index 82e9ac45c495..01dfd4cc0cbf 100644
--- a/share/misc/bsd-family-tree
+++ b/share/misc/bsd-family-tree
@@ -83,410 +83,410 @@ FreeBSD 2.0.5 \ | BSD/OS 2.0.1
| | | | OpenBSD 2.3 | |
| | | | BSD/OS 3.0 |
FreeBSD 2.1 | | | |
- | | | | *--NetBSD 1.1 -. BSD/OS 2.1
- | FreeBSD 2.1.5 | | | \ |
- | | | | *--NetBSD 1.2 \ BSD/OS 3.0
- | FreeBSD 2.1.6 | | | \ OpenBSD 2.0 |
- | | | | | \ | |
- | FreeBSD 2.1.6.1 | | | \ | |
- | | | | | \ | |
- | FreeBSD 2.1.7 | | | | | |
- | | | | | NetBSD 1.2.1 | |
- | FreeBSD 2.1.7.1 | | | | |
- | | | | | |
- | | | | | |
- *-FreeBSD 2.2 | | | | |
- | \ | | | | |
- | FreeBSD 2.2.1 | | | | |
- | | | | | | |
- | FreeBSD 2.2.2 | | | OpenBSD 2.1 |
- | | | | | | |
- | FreeBSD 2.2.5 | | | | |
- | | | | | OpenBSD 2.2 |
- | | | | *--NetBSD 1.3 | |
- | FreeBSD 2.2.6 | | | | | |
- | | | | | NetBSD 1.3.1 | BSD/OS 3.1
- | | | | | | OpenBSD 2.3 |
- | | | | | NetBSD 1.3.2 | |
- | FreeBSD 2.2.7 | | | | | |
- | | | | | | | BSD/OS 4.0
- | FreeBSD 2.2.8 | | | | | |
- | | | | | | | |
- | v | | | | OpenBSD 2.4 |
- | FreeBSD 2.2.9 | | | | | |
- | | | | | | |
-FreeBSD 3.0 <--------* | | v | |
- | | | NetBSD 1.3.3 | |
- *---FreeBSD 3.1 | | | |
- | | | | | BSD/OS 4.0.1
- | FreeBSD 3.2----* | .--*--NetBSD 1.4 OpenBSD 2.5 |
- | | | | | | | | |
- | | | | | | | | |
- | | | | | | | | |
- | FreeBSD 3.3 | | | | NetBSD 1.4.1 | |
- | | | | | | | OpenBSD 2.6 |
- | FreeBSD 3.4 | | | | | | |
- | | | | | | | | BSD/OS 4.1
-FreeBSD 4.0 | | | | | NetBSD 1.4.2 | |
- | | | | | | | | |
- | | | | | | | | |
- | FreeBSD 3.5 | | | | | OpenBSD 2.7 |
- | | | | | | | | |
- | FreeBSD 3.5.1 | | | | | | |
- | | | | | | | |
- *---FreeBSD 4.1 | | | | | | |
- | | | | | | | | |
- | FreeBSD 4.1.1 | | / | | | |
- | | | | / | | | |
- | FreeBSD 4.2 Darwin/ | NetBSD 1.4.3 | |
- | | Mac OS X | OpenBSD 2.8 BSD/OS 4.2
- | | | | | |
- | | | | | |
- | | 10.0 *--NetBSD 1.5 | |
- | FreeBSD 4.3 | | | | |
- | | | | | OpenBSD 2.9 |
- | | | | NetBSD 1.5.1 | |
- | | | | | | |
- | FreeBSD 4.4-. | | NetBSD 1.5.2 | |
- | | | Mac OS X | | | |
- | | | 10.1 | | OpenBSD 3.0 |
- | FreeBSD 4.5 | | | | | |
- | | \ | | | | BSD/OS 4.3
- | FreeBSD 4.6 \ | | | OpenBSD 3.1 |
- | | \ | | NetBSD 1.5.3 | |
- | FreeBSD 4.6.2 Mac OS X | | |
- | | 10.2 | | |
- | FreeBSD 4.7 | | | |
- | | | *--NetBSD 1.6 OpenBSD 3.2 |
- | FreeBSD 4.8 | | | | |
- | | | | NetBSD 1.6.1 | |
- | |--------. | | | OpenBSD 3.3 BSD/OS 5.0
- | | \ | | | | |
- | FreeBSD 4.9 | | | | OpenBSD 3.4 BSD/OS 5.1 ISE
- | | | | | | |
- | | | | | NetBSD 1.6.2 |
- | | | | | | |
- | | | | | | OpenBSD 3.5
- | | | | | v |
- | FreeBSD 4.10 | | | |
- | | | | | |
- | FreeBSD 4.11 | | | |
- | | | | |
- | `-|------|-----------------|---------------------.
- | | | | \
-FreeBSD 5.0 | | | |
- | | | | |
-FreeBSD 5.1 | | | DragonFly 1.0
- | \ | | | |
- | ----- Mac OS X | | |
- | 10.3 | | |
-FreeBSD 5.2 | | | |
- | | | | | |
- | FreeBSD 5.2.1 | | | |
- | | | | |
- *-------FreeBSD 5.3 | | | |
- | | | | OpenBSD 3.6 |
- | | | *--NetBSD 2.0 | |
- | | | | | | | DragonFly 1.2.0
- | | Mac OS X | | NetBSD 2.0.2 | |
- | | 10.4 | | | | |
- | FreeBSD 5.4 | | | | | |
- | | | | | | OpenBSD 3.7 |
- | | | | | NetBSD 2.0.3 | |
- | | | | | | | |
- *--FreeBSD | | | | v OpenBSD 3.8 |
- | 6.0 | | | | | |
- | | | | | \ | |
- | | | | | NetBSD 2.1 | |
- | | | | | | |
- | | | | *--NetBSD 3.0 | |
- | | | | | | | | DragonFly 1.4.0
- | | | | | | | OpenBSD 3.9 |
- | FreeBSD | | | | | | |
- | 6.1 | | | | | | |
- | | FreeBSD 5.5 | | | | | |
- | | | | | NetBSD 3.0.1 | DragonFly 1.6.0
- | | | | | | | |
- | | | | | | OpenBSD 4.0 |
- | | | | | NetBSD 3.0.2 | |
- | | | | NetBSD 3.1 | |
- | FreeBSD 6.2 | | | |
- | | | | | DragonFly 1.8.0
- | | | | OpenBSD 4.1 |
- | | | | | DragonFly 1.10.0
- | | Mac OS X | | |
- | | 10.5 | | |
- | | | | OpenBSD 4.2 |
- | | | *--NetBSD 4.0 | |
- | FreeBSD 6.3 | | | | |
- | \ | | | | |
- *--FreeBSD | | | | | DragonFly 1.12.0
- | 7.0 | | | | | |
- | | | | | | OpenBSD 4.3 |
- | | | | | NetBSD | DragonFly 2.0.0
- | | FreeBSD | | 4.0.1 OpenBSD 4.4 |
- | | 6.4 | | | |
- | | | | | |
- | FreeBSD 7.1 | | | |
- | | | | | DragonFly 2.2.0
- | FreeBSD 7.2 | *--NetBSD OpenBSD 4.5 |
- | \ | | 5.0 | |
- | \ | | / | \ | |
- | | Mac OS X | | | \ | |
- | | 10.6 | | | \ | |
- | | | | | | NetBSD | DragonFly 2.4.0
- | | | | | | 5.0.1 OpenBSD 4.6 |
- | | | | | | | | |
- *--FreeBSD | | | | | | | |
- | 8.0 | | | | | | | |
- | | FreeBSD | | | | NetBSD | |
- | | 7.3 | | | | 5.0.2 | DragonFly 2.6.0
- | | | | | | | OpenBSD 4.7 |
- | FreeBSD | | | | | | |
- | 8.1 | | | | | | |
- | | | | | | | | DragonFly 2.8.2
- | | | | | | | OpenBSD 4.8 |
- | | | | | | *--NetBSD | |
- | FreeBSD FreeBSD | | | 5.1 | |
- | 8.2 7.4 | | | | | DragonFly 2.10.1
- | | | | | | OpenBSD 4.9 |
- | `-----. Mac OS X | | | | |
- | \ 10.7 | | | | |
- | | | | | | OpenBSD 5.0 |
- *--FreeBSD | | | | | | |
- | 9.0 | | | | NetBSD | DragonFly 3.0.1
- | | FreeBSD | | | 5.1.2 | |
- | | 8.3 | | | | | |
- | | | | | | NetBSD | |
- | | | | | | 5.1.3 | |
- | | | | | | | | |
- | | | | | | NetBSD | |
- | | | | | | 5.1.4 | |
- | | | | | | OpenBSD 5.1 |
- | | | Mac OS X | `--------. | |
- | | | 10.8 | | | |
- | | | | *--NetBSD | | |
- | | | | | 6.0 | | |
- | | | | | | | | OpenBSD 5.2 DragonFly 3.2.1
- | FreeBSD | | | | | NetBSD | |
- | 9.1 | | | | | 5.2 | |
- | | | | | | | | | |
- | | | | | | | NetBSD | |
- | | | | | | | 5.2.1 | |
- | | | | | | | | | |
- | | | | | | | NetBSD | |
- | | | | | | | 5.2.2 | |
- | | | | | | | | |
- | | | | | | \ | |
- | | | | | | NetBSD | |
- | | | | | | 6.0.1 | |
- | | | | | | | OpenBSD 5.3 DragonFly 3.4.1
- | | | | | | NetBSD | |
- | | | | | | 6.0.2 | |
- | | | | | | | | |
- | | | | | | NetBSD | |
- | | | | | | 6.0.3 | |
- | | | | | | | | |
- | | | | | | NetBSD | |
- | | | | | | 6.0.4 | |
- | | | | | | | | |
- | | | | | | NetBSD | |
- | | | | | | 6.0.5 | |
- | | | | | | | | |
- | | | | | | NetBSD | |
- | | | | | | 6.0.6 | |
- | | | | | | | |
- | | | | | *--NetBSD | |
- | | | | | 6.1 | |
- | | FreeBSD | | | | |
- | | 8.4 | | NetBSD | |
- | | | | | 6.1.1 | |
- | | | | | | |
- | FreeBSD | | NetBSD | |
- | 9.2 | | 6.1.2 | |
- | | Mac OS X | | | |
- | | 10.9 | | OpenBSD 5.4 |
- | `-----. | | | | DragonFly 3.6.0
- | \ | | | | |
- *--FreeBSD | | | NetBSD | |
- | 10.0 | | | 6.1.3 | |
- | | | | | | | |
- | | | | | | | DragonFly 3.6.1
- | | | | | | | |
- | | | | | | | |
- | | | | | | | DragonFly 3.6.2
- | | | | | NetBSD | |
- | | | | | 6.1.4 | |
- | | | | | | | |
- | | | | | | OpenBSD 5.5 |
- | | | | | | | |
- | | | | | | | DragonFly 3.8.0
- | | | | | | | |
- | | | | | | | |
- | | | | | | | DragonFly 3.8.1
- | | | | | | | |
- | | | | | | | |
- | | | | | | | DragonFly 3.6.3
- | | | | | | | |
- | | FreeBSD | | | | |
- | | 9.3 | | | | |
- | | | | NetBSD | DragonFly 3.8.2
- | | | | 6.1.5 | |
- | | Mac OS X | | |
- | | 10.10 | | |
- | | | | OpenBSD 5.6 |
- | FreeBSD | | | |
- | 10.1 | | | DragonFly 4.0.1
- | | | | | |
- | | | | | DragonFly 4.0.2
- | | | | | |
- | | | | | DragonFly 4.0.3
- | | | | | |
- | | | | | DragonFly 4.0.4
- | | | | | |
- | | | | | DragonFly 4.0.5
- | | | | | |
- | | | | OpenBSD 5.7 |
- | | | | | DragonFly 4.2.0
- | FreeBSD | | | |
- | 10.2 | | | |
- | | macOS *--NetBSD 7.0 | |
- | | 10.11 | | | OpenBSD 5.8 |
- | | | | | `--. | DragonFly 4.4.1
- | FreeBSD | | | | OpenBSD 5.9 |
- | 10.3 | | | | | |
- | | | | | NetBSD | |
- | | | | | 7.0.1 | |
- | `------. | | | | | DragonFly 4.6.0
- | | | | | | | |
- | | | | | | | |
- *--FreeBSD | macOS | | | OpenBSD 6.0 |
- | 11.0 | 10.12 | | NetBSD | |
- | | | | | | 7.0.2 | |
- | | | | | | | |
- | | | | | *--NetBSD | |
- | | | | | | 7.1 | |
- | | | | | | | | |
- | | | | | | | | |
- | | | macOS | | | | DragonFly 4.8.0
- | | | 10.13 | | | OpenBSD 6.1 |
- | FreeBSD | | | | | | DragonFly 5.0.0
- | 11.1 FreeBSD | | | | | |
- | | 10.4 | | | | OpenBSD 6.2 DragonFly 5.0.1
- | | | | | | | |
- | `------. | | | NetBSD | DragonFly 5.0.2
- | | | | | 7.1.1 | |
- | | | | | | | |
- | | | | | NetBSD | |
- | | | | | 7.1.2 `--. |
- | | | | | | |
- | | | | `-----. OpenBSD 6.3 |
- | | | *--NetBSD | | DragonFly 5.2.0
- | | | | 8.0 | | |
- | | | | | | | DragonFly 5.2.1
- | | | | | | | |
- | | | | | | | DragonFly 5.2.2
- | FreeBSD | | | *--NetBSD | |
- | 11.2 | | | 7.2 | |
- | | macOS | | | |
- | | 10.14 | | OpenBSD 6.4 |
- | | | | | | |
- | | | | | | DragonFly 5.4.0
- *--FreeBSD | | | | | |
- | 12.0 | | | | | DragonFly 5.4.1
- | | | | | | OpenBSD 6.5 |
- | | | | | | | |
- | | | | | NetBSD | |
- | | | | | 8.1 | DragonFly 5.6
- | | | | | | | |
- | | | | | | | DragonFly 5.6.1
- | | FreeBSD macOS | | | |
- | | 11.3 10.15 | | | |
- | FreeBSD | | | | OpenBSD 6.6 |
- | 12.1 | macOS | `-------. | |
- | | | 10.15.1 | | | DragonFly 5.6.2
- | | | | *--NetBSD | | |
- | | | | | 9.0 | | |
- | | | | | | | | |
- | | | | | | | | DragonFly 5.8
- | | | | | | | | |
- | | | | | | | | DragonFly 5.6.3
- | | | | | | NetBSD | |
- | | | | | | 8.2 | |
- | | | | | | | | DragonFly 5.8.1
- | | | | | | | OpenBSD 6.7 |
- | | FreeBSD | | | | | |
- | | 11.4 | | | | | |
- | | | | | | | DragonFly 5.8.2
- | | | | | | | DragonFly 5.8.3
- | | | | NetBSD | OpenBSD 6.8 |
- | FreeBSD macOS | 9.1 | | |
- | 12.2 11 | | | | |
- | | | | | | | |
- | `------. | | | | | |
- | | | | | | | |
- *--FreeBSD | | | | | | |
- | 13.0 | | | NetBSD | OpenBSD 6.9 DragonFly 6.0.0
- | | | | | 9.2 | | |
- | | | | | | | | DragonFly 6.0.1
- | | | | | | | | |
- | | FreeBSD macOS | | | OpenBSD 7.0 |
- | | 12.3 12 | | | | |
- | | | | | | | | DragonFly 6.2.1
- | | | | | | | OpenBSD 7.1 |
- | FreeBSD | | | | | | |
- | 13.1 | | | | | | |
- | | | | | | | | DragonFly 6.2.2
- | | | | | NetBSD | | |
- | | | macOS | 9.3 | OpenBSD 7.2 |
- | | | 13 | | | | |
- | | FreeBSD | | | | | |
- | | 12.4 | | | | | |
- | | | | | | | DragonFly 6.4.0
- | | | | | | OpenBSD 7.3 |
- | FreeBSD | | | | | |
- | 13.2 | | | | | |
- | | | | | | | |
- | `------. | | | | | |
- | | macOS | | | | |
- | | 14 | | | | |
- | | | | | | OpenBSD 7.4 |
- *--FreeBSD | | | | | | |
- | 14.0 | | | | | | |
- | | | | | | | | |
- | | FreeBSD | | NetBSD | | |
- | | 13.3 | | 9.4 | | |
- | | | | | | | |
- | | | | *--NetBSD | | |
- | | | | | 10.0 | | |
- | | | | | | | | |
- | | | | | | | OpenBSD 7.5 |
- | | | | | | NetBSD | |
- | | | | | | 8.3 | |
- | FreeBSD | | | | | |
- | 14.1 | | | | | |
- | | | macOS | | | |
- | | | 15 | | | |
- | | FreeBSD | | | | |
- | | 13.4 | | | OpenBSD 7.6 |
- | FreeBSD | | | | | |
- | 14.2 | | | | | |
- | | | | | NetBSD | |
- | | | | | 10.1 | |
- | | FreeBSD | | | |
- | | 13.5 | | | |
- | | | | OpenBSD 7.7 |
- | | | | | DragonFly 6.4.1
- | | | | | DragonFly 6.4.2
- | FreeBSD | | | |
- | 14.3 | | | |
- | macOS | | |
- | 26 | | |
- | | | OpenBSD 7.8 |
- | | | | |
-FreeBSD 16 -current | NetBSD -current OpenBSD -current DragonFly -current
- | | | | |
- v v v v v
+ | | | | *--NetBSD 1.1 ---. BSD/OS 2.1
+ | FreeBSD 2.1.5 | | | \ |
+ | | | | *--NetBSD 1.2 \ BSD/OS 3.0
+ | FreeBSD 2.1.6 | | | \ OpenBSD 2.0 |
+ | | | | | \ | |
+ | FreeBSD 2.1.6.1 | | | \ | |
+ | | | | | \ | |
+ | FreeBSD 2.1.7 | | | | | |
+ | | | | | NetBSD 1.2.1 | |
+ | FreeBSD 2.1.7.1 | | | | |
+ | | | | | |
+ | | | | | |
+ *-FreeBSD 2.2 | | | | |
+ | \ | | | | |
+ | FreeBSD 2.2.1 | | | | |
+ | | | | | | |
+ | FreeBSD 2.2.2 | | | OpenBSD 2.1 |
+ | | | | | | |
+ | FreeBSD 2.2.5 | | | | |
+ | | | | | OpenBSD 2.2 |
+ | | | | *--NetBSD 1.3 | |
+ | FreeBSD 2.2.6 | | | | | |
+ | | | | | NetBSD 1.3.1 | BSD/OS 3.1
+ | | | | | | OpenBSD 2.3 |
+ | | | | | NetBSD 1.3.2 | |
+ | FreeBSD 2.2.7 | | | | | |
+ | | | | | | | BSD/OS 4.0
+ | FreeBSD 2.2.8 | | | | | |
+ | | | | | | | |
+ | v | | | | OpenBSD 2.4 |
+ | FreeBSD 2.2.9 | | | | | |
+ | | | | | | |
+FreeBSD 3.0 <--------* | | v | |
+ | | | NetBSD 1.3.3 | |
+ *---FreeBSD 3.1 | | | |
+ | | | | | BSD/OS 4.0.1
+ | FreeBSD 3.2----* | .--*--NetBSD 1.4 OpenBSD 2.5 |
+ | | | | | | | | |
+ | | | | | | | | |
+ | | | | | | | | |
+ | FreeBSD 3.3 | | | | NetBSD 1.4.1 | |
+ | | | | | | | OpenBSD 2.6 |
+ | FreeBSD 3.4 | | | | | | |
+ | | | | | | | | BSD/OS 4.1
+FreeBSD 4.0 | | | | | NetBSD 1.4.2 | |
+ | | | | | | | | |
+ | | | | | | | | |
+ | FreeBSD 3.5 | | | | | OpenBSD 2.7 |
+ | | | | | | | | |
+ | FreeBSD 3.5.1 | | | | | | |
+ | | | | | | | |
+ *---FreeBSD 4.1 | | | | | | |
+ | | | | | | | | |
+ | FreeBSD 4.1.1 | | / | | | |
+ | | | | / | | | |
+ | FreeBSD 4.2 Darwin/ | NetBSD 1.4.3 | |
+ | | Mac OS X | OpenBSD 2.8 BSD/OS 4.2
+ | | | | | |
+ | | | | | |
+ | | 10.0 *--NetBSD 1.5 | |
+ | FreeBSD 4.3 | | | | |
+ | | | | | OpenBSD 2.9 |
+ | | | | NetBSD 1.5.1 | |
+ | | | | | | |
+ | FreeBSD 4.4-. | | NetBSD 1.5.2 | |
+ | | | Mac OS X | | | |
+ | | | 10.1 | | OpenBSD 3.0 |
+ | FreeBSD 4.5 | | | | | |
+ | | \ | | | | BSD/OS 4.3
+ | FreeBSD 4.6 \ | | | OpenBSD 3.1 |
+ | | \ | | NetBSD 1.5.3 | |
+ | FreeBSD 4.6.2 Mac OS X | | |
+ | | 10.2 | | |
+ | FreeBSD 4.7 | | | |
+ | | | *--NetBSD 1.6 OpenBSD 3.2 |
+ | FreeBSD 4.8 | | | | |
+ | | | | NetBSD 1.6.1 | |
+ | |--------. | | | OpenBSD 3.3 BSD/OS 5.0
+ | | \ | | | | |
+ | FreeBSD 4.9 | | | | OpenBSD 3.4 BSD/OS 5.1 ISE
+ | | | | | | |
+ | | | | | NetBSD 1.6.2 |
+ | | | | | | |
+ | | | | | | OpenBSD 3.5
+ | | | | | v |
+ | FreeBSD 4.10 | | | |
+ | | | | | |
+ | FreeBSD 4.11 | | | |
+ | | | | |
+ | `-|------|-------------------|-------------------.
+ | | | | \
+FreeBSD 5.0 | | | |
+ | | | | |
+FreeBSD 5.1 | | | DragonFly 1.0
+ | \ | | | |
+ | ----- Mac OS X | | |
+ | 10.3 | | |
+FreeBSD 5.2 | | | |
+ | | | | | |
+ | FreeBSD 5.2.1 | | | |
+ | | | | |
+ *-------FreeBSD 5.3 | | | |
+ | | | | OpenBSD 3.6 |
+ | | | *--NetBSD 2.0 | |
+ | | | | | | | DragonFly 1.2.0
+ | | Mac OS X | | NetBSD 2.0.2 | |
+ | | 10.4 | | | | |
+ | FreeBSD 5.4 | | | | | |
+ | | | | | | OpenBSD 3.7 |
+ | | | | | NetBSD 2.0.3 | |
+ | | | | | | | |
+ *--FreeBSD | | | | v OpenBSD 3.8 |
+ | 6.0 | | | | | |
+ | | | | | \ | |
+ | | | | | NetBSD 2.1 | |
+ | | | | | | |
+ | | | | *--NetBSD 3.0 | |
+ | | | | | | | | DragonFly 1.4.0
+ | | | | | | | OpenBSD 3.9 |
+ | FreeBSD | | | | | | |
+ | 6.1 | | | | | | |
+ | | FreeBSD 5.5 | | | | | |
+ | | | | | NetBSD 3.0.1 | DragonFly 1.6.0
+ | | | | | | | |
+ | | | | | | OpenBSD 4.0 |
+ | | | | | NetBSD 3.0.2 | |
+ | | | | NetBSD 3.1 | |
+ | FreeBSD 6.2 | | | |
+ | | | | | DragonFly 1.8.0
+ | | | | OpenBSD 4.1 |
+ | | | | | DragonFly 1.10.0
+ | | Mac OS X | | |
+ | | 10.5 | | |
+ | | | | OpenBSD 4.2 |
+ | | | *--NetBSD 4.0 | |
+ | FreeBSD 6.3 | | | | |
+ | \ | | | | |
+ *--FreeBSD | | | | | DragonFly 1.12.0
+ | 7.0 | | | | | |
+ | | | | | | OpenBSD 4.3 |
+ | | | | | NetBSD | DragonFly 2.0.0
+ | | FreeBSD | | 4.0.1 OpenBSD 4.4 |
+ | | 6.4 | | | |
+ | | | | | |
+ | FreeBSD 7.1 | | | |
+ | | | | | DragonFly 2.2.0
+ | FreeBSD 7.2 | *--NetBSD OpenBSD 4.5 |
+ | \ | | 5.0 | |
+ | \ | | / | \ | |
+ | | Mac OS X | | | \ | |
+ | | 10.6 | | | \ | |
+ | | | | | | NetBSD | DragonFly 2.4.0
+ | | | | | | 5.0.1 OpenBSD 4.6 |
+ | | | | | | | | |
+ *--FreeBSD | | | | | | | |
+ | 8.0 | | | | | | | |
+ | | FreeBSD | | | | NetBSD | |
+ | | 7.3 | | | | 5.0.2 | DragonFly 2.6.0
+ | | | | | | | OpenBSD 4.7 |
+ | FreeBSD | | | | | | |
+ | 8.1 | | | | | | |
+ | | | | | | | | DragonFly 2.8.2
+ | | | | | | | OpenBSD 4.8 |
+ | | | | | | *--NetBSD | |
+ | FreeBSD FreeBSD | | | 5.1 | |
+ | 8.2 7.4 | | | | | DragonFly 2.10.1
+ | | | | | | OpenBSD 4.9 |
+ | `-----. Mac OS X | | | | |
+ | \ 10.7 | | | | |
+ | | | | | | OpenBSD 5.0 |
+ *--FreeBSD | | | | | | |
+ | 9.0 | | | | NetBSD | DragonFly 3.0.1
+ | | FreeBSD | | | 5.1.2 | |
+ | | 8.3 | | | | | |
+ | | | | | | NetBSD | |
+ | | | | | | 5.1.3 | |
+ | | | | | | | | |
+ | | | | | | NetBSD | |
+ | | | | | | 5.1.4 | |
+ | | | | | | OpenBSD 5.1 |
+ | | | Mac OS X | `--------. | |
+ | | | 10.8 | | | |
+ | | | | *--NetBSD | | |
+ | | | | | 6.0 | | |
+ | | | | | | | | OpenBSD 5.2 DragonFly 3.2.1
+ | FreeBSD | | | | | NetBSD | |
+ | 9.1 | | | | | 5.2 | |
+ | | | | | | | | | |
+ | | | | | | | NetBSD | |
+ | | | | | | | 5.2.1 | |
+ | | | | | | | | | |
+ | | | | | | | NetBSD | |
+ | | | | | | | 5.2.2 | |
+ | | | | | | | | |
+ | | | | | | \ | |
+ | | | | | | NetBSD | |
+ | | | | | | 6.0.1 | |
+ | | | | | | | OpenBSD 5.3 DragonFly 3.4.1
+ | | | | | | NetBSD | |
+ | | | | | | 6.0.2 | |
+ | | | | | | | | |
+ | | | | | | NetBSD | |
+ | | | | | | 6.0.3 | |
+ | | | | | | | | |
+ | | | | | | NetBSD | |
+ | | | | | | 6.0.4 | |
+ | | | | | | | | |
+ | | | | | | NetBSD | |
+ | | | | | | 6.0.5 | |
+ | | | | | | | | |
+ | | | | | | NetBSD | |
+ | | | | | | 6.0.6 | |
+ | | | | | | | |
+ | | | | | *--NetBSD | |
+ | | | | | 6.1 | |
+ | | FreeBSD | | | | |
+ | | 8.4 | | NetBSD | |
+ | | | | | 6.1.1 | |
+ | | | | | | |
+ | FreeBSD | | NetBSD | |
+ | 9.2 | | 6.1.2 | |
+ | | Mac OS X | | | |
+ | | 10.9 | | OpenBSD 5.4 |
+ | `-----. | | | | DragonFly 3.6.0
+ | \ | | | | |
+ *--FreeBSD | | | NetBSD | |
+ | 10.0 | | | 6.1.3 | |
+ | | | | | | | |
+ | | | | | | | DragonFly 3.6.1
+ | | | | | | | |
+ | | | | | | | |
+ | | | | | | | DragonFly 3.6.2
+ | | | | | NetBSD | |
+ | | | | | 6.1.4 | |
+ | | | | | | | |
+ | | | | | | OpenBSD 5.5 |
+ | | | | | | | |
+ | | | | | | | DragonFly 3.8.0
+ | | | | | | | |
+ | | | | | | | |
+ | | | | | | | DragonFly 3.8.1
+ | | | | | | | |
+ | | | | | | | |
+ | | | | | | | DragonFly 3.6.3
+ | | | | | | | |
+ | | FreeBSD | | | | |
+ | | 9.3 | | | | |
+ | | | | NetBSD | DragonFly 3.8.2
+ | | | | 6.1.5 | |
+ | | Mac OS X | | |
+ | | 10.10 | | |
+ | | | | OpenBSD 5.6 |
+ | FreeBSD | | | |
+ | 10.1 | | | DragonFly 4.0.1
+ | | | | | |
+ | | | | | DragonFly 4.0.2
+ | | | | | |
+ | | | | | DragonFly 4.0.3
+ | | | | | |
+ | | | | | DragonFly 4.0.4
+ | | | | | |
+ | | | | | DragonFly 4.0.5
+ | | | | | |
+ | | | | OpenBSD 5.7 |
+ | | | | | DragonFly 4.2.0
+ | FreeBSD | | | |
+ | 10.2 | | | |
+ | | macOS *--NetBSD 7.0 | |
+ | | 10.11 | | | OpenBSD 5.8 |
+ | | | | | `--. | DragonFly 4.4.1
+ | FreeBSD | | | | OpenBSD 5.9 |
+ | 10.3 | | | | | |
+ | | | | | NetBSD | |
+ | | | | | 7.0.1 | |
+ | `------. | | | | | DragonFly 4.6.0
+ | | | | | | | |
+ | | | | | | | |
+ *--FreeBSD | macOS | | | OpenBSD 6.0 |
+ | 11.0 | 10.12 | | NetBSD | |
+ | | | | | | 7.0.2 | |
+ | | | | | | | |
+ | | | | | *--NetBSD | |
+ | | | | | | 7.1 | |
+ | | | | | | | | |
+ | | | | | | | | |
+ | | | macOS | | | | DragonFly 4.8.0
+ | | | 10.13 | | | OpenBSD 6.1 |
+ | FreeBSD | | | | | | DragonFly 5.0.0
+ | 11.1 FreeBSD | | | | | |
+ | | 10.4 | | | | OpenBSD 6.2 DragonFly 5.0.1
+ | | | | | | | |
+ | `------. | | | NetBSD | DragonFly 5.0.2
+ | | | | | 7.1.1 | |
+ | | | | | | | |
+ | | | | | NetBSD | |
+ | | | | | 7.1.2 `--. |
+ | | | | | | |
+ | | | | `-----. OpenBSD 6.3 |
+ | | | *--NetBSD | | DragonFly 5.2.0
+ | | | | 8.0 | | |
+ | | | | | | | DragonFly 5.2.1
+ | | | | | | | |
+ | | | | | | | DragonFly 5.2.2
+ | FreeBSD | | | *--NetBSD | |
+ | 11.2 | | | 7.2 | |
+ | | macOS | | | |
+ | | 10.14 | | OpenBSD 6.4 |
+ | | | | | | |
+ | | | | | | DragonFly 5.4.0
+ *--FreeBSD | | | | | |
+ | 12.0 | | | | | DragonFly 5.4.1
+ | | | | | | OpenBSD 6.5 |
+ | | | | | | | |
+ | | | | | NetBSD | |
+ | | | | | 8.1 | DragonFly 5.6
+ | | | | | | | |
+ | | | | | | | DragonFly 5.6.1
+ | | FreeBSD macOS | | | |
+ | | 11.3 10.15 | | | |
+ | FreeBSD | | | | OpenBSD 6.6 |
+ | 12.1 | macOS | `-------. | |
+ | | | 10.15.1 | | | DragonFly 5.6.2
+ | | | | *--NetBSD | | |
+ | | | | | 9.0 | | |
+ | | | | | | | | |
+ | | | | | | | | DragonFly 5.8
+ | | | | | | | | |
+ | | | | | | | | DragonFly 5.6.3
+ | | | | | | NetBSD | |
+ | | | | | | 8.2 | |
+ | | | | | | | | DragonFly 5.8.1
+ | | | | | | | OpenBSD 6.7 |
+ | | FreeBSD | | | | | |
+ | | 11.4 | | | | | |
+ | | | | | | | DragonFly 5.8.2
+ | | | | | | | DragonFly 5.8.3
+ | | | | NetBSD | OpenBSD 6.8 |
+ | FreeBSD macOS | 9.1 | | |
+ | 12.2 11 | | | | |
+ | | | | | | | |
+ | `------. | | | | | |
+ | | | | | | | |
+ *--FreeBSD | | | | | | |
+ | 13.0 | | | NetBSD | OpenBSD 6.9 DragonFly 6.0.0
+ | | | | | 9.2 | | |
+ | | | | | | | | DragonFly 6.0.1
+ | | | | | | | | |
+ | | FreeBSD macOS | | | OpenBSD 7.0 |
+ | | 12.3 12 | | | | |
+ | | | | | | | | DragonFly 6.2.1
+ | | | | | | | OpenBSD 7.1 |
+ | FreeBSD | | | | | | |
+ | 13.1 | | | | | | |
+ | | | | | | | | DragonFly 6.2.2
+ | | | | | NetBSD | | |
+ | | | macOS | 9.3 | OpenBSD 7.2 |
+ | | | 13 | | | | |
+ | | FreeBSD | | | | | |
+ | | 12.4 | | | | | |
+ | | | | | | | DragonFly 6.4.0
+ | | | | | | OpenBSD 7.3 |
+ | FreeBSD | | | | | |
+ | 13.2 | | | | | |
+ | | | | | | | |
+ | `------. | | | | | |
+ | | macOS | | | | |
+ | | 14 | | | | |
+ | | | | | | OpenBSD 7.4 |
+ *--FreeBSD | | | | | | |
+ | 14.0 | | | | | | |
+ | | | | | | | | |
+ | | FreeBSD | | NetBSD | | |
+ | | 13.3 | | 9.4 | | |
+ | | | | | | | |
+ | | | | *--NetBSD | | |
+ | | | | | 10.0 | | |
+ | | | | | | | | |
+ | | | | | | | OpenBSD 7.5 |
+ | | | | | | NetBSD | |
+ | | | | | | 8.3 | |
+ | FreeBSD | | | | | |
+ | 14.1 | | | | | |
+ | | | macOS | | | |
+ | | | 15 | | | |
+ | | FreeBSD | | | | |
+ | | 13.4 | | | OpenBSD 7.6 |
+ | FreeBSD | | | | | |
+ | 14.2 | | | | | |
+ | | | | | NetBSD | |
+ | | | | | 10.1 | |
+ | | FreeBSD | | | |
+ | | 13.5 | | | |
+ | | | | OpenBSD 7.7 |
+ | | | | | DragonFly 6.4.1
+ | | | | | DragonFly 6.4.2
+ | FreeBSD | | | |
+ | 14.3 | | | |
+ | macOS | | |
+ | 26 | | |
+ | | | OpenBSD 7.8 |
+ | | | | |
+FreeBSD 16 -current | NetBSD -current OpenBSD -current DragonFly -current
+ | | | | |
+ v v v v v
Time
----------------
diff --git a/share/tabset/Makefile b/share/tabset/Makefile
index fe7519084716..4da1a3650888 100644
--- a/share/tabset/Makefile
+++ b/share/tabset/Makefile
@@ -1,3 +1,5 @@
+PACKAGE= ncurses-lib
+
FILES= 3101 9837 aa aed512 beehive diablo dtc382 hp700-wy ibm3101 std \
stdcrt tandem653 teleray vt100 vt100-w wyse-adds xerox1720 xerox1730 \
xerox1730-lm zenith29
diff --git a/share/termcap/Makefile b/share/termcap/Makefile
index 34ad41fd520a..603b098e4de1 100644
--- a/share/termcap/Makefile
+++ b/share/termcap/Makefile
@@ -1,10 +1,13 @@
# reorder gives an editor command for most common terminals
# (in reverse order from n'th to 1'st most commonly used)
# to move them to the front of termcap
-#
-MAN= termcap.5
-PACKAGE= runtime
+MAN= termcap.5
+MANPACKAGE= ncurses
+
+# Note: This is in ncurses-lib rather than ncurses because without it, ncurses
+# doesn't work, and the base ncurses package is optional.
+PACKAGE= ncurses-lib
FILES= termcap termcap.db
FILESDIR= ${BINDIR}/misc
CLEANFILES+= termcap.db
@@ -16,7 +19,7 @@ termcap.db: termcap
${CAP_MKDB_CMD} ${CAP_MKDB_ENDIAN} -f ${.TARGET:R} ${.ALLSRC}
etc-termcap:
- ${INSTALL_SYMLINK} -T "package=runtime" \
+ ${INSTALL_SYMLINK} -T "package=ncurses-lib" \
${BINDIR}/misc/termcap ${DESTDIR}/etc/termcap
.include <bsd.prog.mk>
diff --git a/stand/libsa/zfs/zfsimpl.c b/stand/libsa/zfs/zfsimpl.c
index f15d9b016068..e5920004bd9d 100644
--- a/stand/libsa/zfs/zfsimpl.c
+++ b/stand/libsa/zfs/zfsimpl.c
@@ -128,6 +128,7 @@ static const char *features_for_read[] = {
"org.open-zfs:large_blocks",
"org.openzfs:blake3",
"org.zfsonlinux:large_dnode",
+ "com.klarasystems:dynamic_gang_header",
NULL
};
@@ -141,6 +142,8 @@ static uint64_t dnode_cache_bn;
static char *dnode_cache_buf;
static int zio_read(const spa_t *spa, const blkptr_t *bp, void *buf);
+static int zio_read_impl(const spa_t *spa, const blkptr_t *bp, void *buf,
+ bool print);
static int zfs_get_root(const spa_t *spa, uint64_t *objid);
static int zfs_rlookup(const spa_t *spa, uint64_t objnum, char *result);
static int zap_lookup(const spa_t *spa, const dnode_phys_t *dnode,
@@ -530,7 +533,7 @@ vdev_indirect_mapping_duplicate_adjacent_entries(vdev_t *vd, uint64_t offset,
}
static vdev_t *
-vdev_lookup_top(spa_t *spa, uint64_t vdev)
+vdev_lookup_top(const spa_t *spa, uint64_t vdev)
{
vdev_t *rvd;
vdev_list_t *vlist;
@@ -2270,45 +2273,77 @@ ilog2(int n)
return (-1);
}
+static inline uint64_t
+gbh_nblkptrs(uint64_t size)
+{
+ ASSERT(IS_P2ALIGNED(size, sizeof(blkptr_t)));
+ return ((size - sizeof(zio_eck_t)) / sizeof(blkptr_t));
+}
+
static int
zio_read_gang(const spa_t *spa, const blkptr_t *bp, void *buf)
{
blkptr_t gbh_bp;
- zio_gbh_phys_t zio_gb;
+ void *gbuf;
char *pbuf;
- int i;
+ uint64_t gangblocksize;
+ int err, i;
+
+ gangblocksize = UINT64_MAX;
+ for (int dva = 0; dva < BP_GET_NDVAS(bp); dva++) {
+ vdev_t *vd = vdev_lookup_top(spa,
+ DVA_GET_VDEV(&bp->blk_dva[dva]));
+ gangblocksize = MIN(gangblocksize, 1ULL << vd->v_ashift);
+ }
/* Artificial BP for gang block header. */
gbh_bp = *bp;
- BP_SET_PSIZE(&gbh_bp, SPA_GANGBLOCKSIZE);
- BP_SET_LSIZE(&gbh_bp, SPA_GANGBLOCKSIZE);
+ BP_SET_PSIZE(&gbh_bp, gangblocksize);
+ BP_SET_LSIZE(&gbh_bp, gangblocksize);
BP_SET_CHECKSUM(&gbh_bp, ZIO_CHECKSUM_GANG_HEADER);
BP_SET_COMPRESS(&gbh_bp, ZIO_COMPRESS_OFF);
for (i = 0; i < SPA_DVAS_PER_BP; i++)
DVA_SET_GANG(&gbh_bp.blk_dva[i], 0);
+ gbuf = malloc(gangblocksize);
+ if (gbuf == NULL)
+ return (ENOMEM);
/* Read gang header block using the artificial BP. */
- if (zio_read(spa, &gbh_bp, &zio_gb))
+ err = zio_read_impl(spa, &gbh_bp, gbuf, false);
+ if ((err == EIO || err == ECKSUM) &&
+ gangblocksize > SPA_OLD_GANGBLOCKSIZE) {
+ /* This might be a legacy gang block header, try again. */
+ gangblocksize = SPA_OLD_GANGBLOCKSIZE;
+ BP_SET_PSIZE(&gbh_bp, gangblocksize);
+ BP_SET_LSIZE(&gbh_bp, gangblocksize);
+ err = zio_read(spa, &gbh_bp, gbuf);
+ }
+ if (err != 0) {
+ free(gbuf);
return (EIO);
+ }
pbuf = buf;
- for (i = 0; i < SPA_GBH_NBLKPTRS; i++) {
- blkptr_t *gbp = &zio_gb.zg_blkptr[i];
+ for (i = 0; i < gbh_nblkptrs(gangblocksize); i++) {
+ blkptr_t *gbp = &((blkptr_t *)gbuf)[i];
if (BP_IS_HOLE(gbp))
continue;
- if (zio_read(spa, gbp, pbuf))
+ if (zio_read(spa, gbp, pbuf)) {
+ free(gbuf);
return (EIO);
+ }
pbuf += BP_GET_PSIZE(gbp);
}
+ free(gbuf);
if (zio_checksum_verify(spa, bp, buf))
return (EIO);
return (0);
}
static int
-zio_read(const spa_t *spa, const blkptr_t *bp, void *buf)
+zio_read_impl(const spa_t *spa, const blkptr_t *bp, void *buf, bool print)
{
int cpfunc = BP_GET_COMPRESS(bp);
uint64_t align, size;
@@ -2340,7 +2375,7 @@ zio_read(const spa_t *spa, const blkptr_t *bp, void *buf)
size, buf, BP_GET_LSIZE(bp));
free(pbuf);
}
- if (error != 0)
+ if (error != 0 && print)
printf("ZFS: i/o error - unable to decompress "
"block pointer data, error %d\n", error);
return (error);
@@ -2394,7 +2429,7 @@ zio_read(const spa_t *spa, const blkptr_t *bp, void *buf)
BP_GET_PSIZE(bp), buf, BP_GET_LSIZE(bp));
else if (size != BP_GET_PSIZE(bp))
bcopy(pbuf, buf, BP_GET_PSIZE(bp));
- } else {
+ } else if (print) {
printf("zio_read error: %d\n", error);
}
if (buf != pbuf)
@@ -2402,13 +2437,19 @@ zio_read(const spa_t *spa, const blkptr_t *bp, void *buf)
if (error == 0)
break;
}
- if (error != 0)
+ if (error != 0 && print)
printf("ZFS: i/o error - all block copies unavailable\n");
return (error);
}
static int
+zio_read(const spa_t *spa, const blkptr_t *bp, void *buf)
+{
+ return (zio_read_impl(spa, bp, buf, true));
+}
+
+static int
dnode_read(const spa_t *spa, const dnode_phys_t *dnode, off_t offset,
void *buf, size_t buflen)
{
diff --git a/sys/cam/ata/ata_da.c b/sys/cam/ata/ata_da.c
index 08747cd59131..9434756b87f9 100644
--- a/sys/cam/ata/ata_da.c
+++ b/sys/cam/ata/ata_da.c
@@ -2328,15 +2328,38 @@ adastart(struct cam_periph *periph, union ccb *start_ccb)
{
struct ada_softc *softc = (struct ada_softc *)periph->softc;
struct ccb_ataio *ataio = &start_ccb->ataio;
+ uint32_t priority = start_ccb->ccb_h.pinfo.priority;
CAM_DEBUG(periph->path, CAM_DEBUG_TRACE, ("adastart\n"));
+ /*
+ * When we're running the state machine, we should only accept DEV CCBs.
+ * When we're doing normal I/O we should only accept NORMAL CCBs.
+ *
+ * While in the state machine, we carefully single step the queue, but
+ * there's no protection for 'extra' calls to xpt_schedule() at the
+ * wrong priority. Guard against that so that we filter any CCBs that
+ * are offered at the wrong priority. This avoids generating requests
+ * that are at normal priority.
+` */
+ if ((softc->state != ADA_STATE_NORMAL && priority != CAM_PRIORITY_DEV) ||
+ (softc->state == ADA_STATE_NORMAL && priority != CAM_PRIORITY_NORMAL)) {
+ xpt_print(periph->path, "Bad priority for state %d prio %d\n",
+ softc->state, priority);
+ xpt_release_ccb(start_ccb);
+ return;
+ }
+
switch (softc->state) {
case ADA_STATE_NORMAL:
{
struct bio *bp;
uint8_t tag_code;
+ KASSERT(priority == CAM_PRIORITY_NORMAL,
+ ("Expected priority %d, found %d in state normal",
+ CAM_PRIORITY_NORMAL, priority));
+
bp = cam_iosched_next_bio(softc->cam_iosched);
if (bp == NULL) {
xpt_release_ccb(start_ccb);
@@ -2555,6 +2578,11 @@ out:
case ADA_STATE_RAHEAD:
case ADA_STATE_WCACHE:
{
+ KASSERT(priority == CAM_PRIORITY_DEV,
+ ("Expected priority %d, found %d in state %s",
+ CAM_PRIORITY_DEV, priority,
+ softc->state == ADA_STATE_RAHEAD ? "rahead" : "wcache"));
+
cam_fill_ataio(ataio,
1,
adadone,
@@ -2581,6 +2609,10 @@ out:
{
struct ata_gp_log_dir *log_dir;
+ KASSERT(priority == CAM_PRIORITY_DEV,
+ ("Expected priority %d, found %d in state logdir",
+ CAM_PRIORITY_DEV, priority));
+
if ((softc->flags & ADA_FLAG_CAN_LOG) == 0) {
adaprobedone(periph, start_ccb);
break;
@@ -2615,6 +2647,10 @@ out:
{
struct ata_identify_log_pages *id_dir;
+ KASSERT(priority == CAM_PRIORITY_DEV,
+ ("Expected priority %d, found %d in state iddir",
+ CAM_PRIORITY_DEV, priority));
+
id_dir = malloc(sizeof(*id_dir), M_ATADA, M_NOWAIT | M_ZERO);
if (id_dir == NULL) {
xpt_print(periph->path, "Couldn't malloc id_dir "
@@ -2643,6 +2679,10 @@ out:
{
struct ata_identify_log_sup_cap *sup_cap;
+ KASSERT(priority == CAM_PRIORITY_DEV,
+ ("Expected priority %d, found %d in state sup_cap",
+ CAM_PRIORITY_DEV, priority));
+
sup_cap = malloc(sizeof(*sup_cap), M_ATADA, M_NOWAIT|M_ZERO);
if (sup_cap == NULL) {
xpt_print(periph->path, "Couldn't malloc sup_cap "
@@ -2671,6 +2711,10 @@ out:
{
struct ata_zoned_info_log *ata_zone;
+ KASSERT(priority == CAM_PRIORITY_DEV,
+ ("Expected priority %d, found %d in state zone",
+ CAM_PRIORITY_DEV, priority));
+
ata_zone = malloc(sizeof(*ata_zone), M_ATADA, M_NOWAIT|M_ZERO);
if (ata_zone == NULL) {
xpt_print(periph->path, "Couldn't malloc ata_zone "
@@ -2896,6 +2940,10 @@ adadone(struct cam_periph *periph, union ccb *done_ccb)
struct bio *bp;
int error;
+ KASSERT(priority == CAM_PRIORITY_NORMAL,
+ ("Expected priority %d, found %d for normal I/O",
+ CAM_PRIORITY_NORMAL, priority));
+
cam_periph_lock(periph);
bp = (struct bio *)done_ccb->ccb_h.ccb_bp;
if ((done_ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) {
@@ -3000,6 +3048,10 @@ adadone(struct cam_periph *periph, union ccb *done_ccb)
}
case ADA_CCB_RAHEAD:
{
+ KASSERT(priority == CAM_PRIORITY_DEV,
+ ("Expected priority %d, found %d in ccb state rahead",
+ CAM_PRIORITY_DEV, priority));
+
if ((done_ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) {
if (adaerror(done_ccb, 0, 0) == ERESTART) {
/* Drop freeze taken due to CAM_DEV_QFREEZE */
@@ -3023,6 +3075,10 @@ adadone(struct cam_periph *periph, union ccb *done_ccb)
}
case ADA_CCB_WCACHE:
{
+ KASSERT(priority == CAM_PRIORITY_DEV,
+ ("Expected priority %d, found %d in ccb state wcache",
+ CAM_PRIORITY_DEV, priority));
+
if ((done_ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) {
if (adaerror(done_ccb, 0, 0) == ERESTART) {
/* Drop freeze taken due to CAM_DEV_QFREEZE */
@@ -3054,6 +3110,10 @@ adadone(struct cam_periph *periph, union ccb *done_ccb)
{
int error;
+ KASSERT(priority == CAM_PRIORITY_DEV,
+ ("Expected priority %d, found %d in ccb state logdir",
+ CAM_PRIORITY_DEV, priority));
+
if ((done_ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_CMP) {
error = 0;
softc->valid_logdir_len = 0;
@@ -3123,6 +3183,10 @@ adadone(struct cam_periph *periph, union ccb *done_ccb)
case ADA_CCB_IDDIR: {
int error;
+ KASSERT(priority == CAM_PRIORITY_DEV,
+ ("Expected priority %d, found %d in ccb state iddir",
+ CAM_PRIORITY_DEV, priority));
+
if ((ataio->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_CMP) {
off_t entries_offset, max_entries;
error = 0;
@@ -3208,6 +3272,10 @@ adadone(struct cam_periph *periph, union ccb *done_ccb)
case ADA_CCB_SUP_CAP: {
int error;
+ KASSERT(priority == CAM_PRIORITY_DEV,
+ ("Expected priority %d, found %d in ccb state sup_cap",
+ CAM_PRIORITY_DEV, priority));
+
if ((ataio->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_CMP) {
uint32_t valid_len;
size_t needed_size;
@@ -3312,6 +3380,10 @@ adadone(struct cam_periph *periph, union ccb *done_ccb)
case ADA_CCB_ZONE: {
int error;
+ KASSERT(priority == CAM_PRIORITY_DEV,
+ ("Expected priority %d, found %d in ccb state zone",
+ CAM_PRIORITY_DEV, priority));
+
if ((ataio->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_CMP) {
struct ata_zoned_info_log *zi_log;
uint32_t valid_len;
diff --git a/sys/cam/scsi/scsi_da.c b/sys/cam/scsi/scsi_da.c
index c0c0be12856b..773a786d08f7 100644
--- a/sys/cam/scsi/scsi_da.c
+++ b/sys/cam/scsi/scsi_da.c
@@ -3369,12 +3369,33 @@ static void
dastart(struct cam_periph *periph, union ccb *start_ccb)
{
struct da_softc *softc;
+ uint32_t priority = start_ccb->ccb_h.pinfo.priority;
cam_periph_assert(periph, MA_OWNED);
softc = (struct da_softc *)periph->softc;
CAM_DEBUG(periph->path, CAM_DEBUG_TRACE, ("dastart\n"));
+ /*
+ * When we're running the state machine, we should only accept DEV CCBs.
+ * When we're doing normal I/O we should only accept NORMAL CCBs.
+ *
+ * While in the state machine, we carefully single step the queue, but
+ * there's no protection for 'extra' calls to xpt_schedule() at the
+ * wrong priority. Guard against that so that we filter any CCBs that
+ * are offered at the wrong priority. This avoids generating requests
+ * that are at normal priority. In addition, though we can't easily
+ * enforce it, one must not transition to the NORMAL state via the
+ * skipstate mechanism.
+` */
+ if ((softc->state != DA_STATE_NORMAL && priority != CAM_PRIORITY_DEV) ||
+ (softc->state == DA_STATE_NORMAL && priority != CAM_PRIORITY_NORMAL)) {
+ xpt_print(periph->path, "Bad priority for state %d prio %d\n",
+ softc->state, priority);
+ xpt_release_ccb(start_ccb);
+ return;
+ }
+
skipstate:
switch (softc->state) {
case DA_STATE_NORMAL:
diff --git a/sys/cddl/boot/zfs/zfsimpl.h b/sys/cddl/boot/zfs/zfsimpl.h
index c9de1fe4c391..d3ae3c32635d 100644
--- a/sys/cddl/boot/zfs/zfsimpl.h
+++ b/sys/cddl/boot/zfs/zfsimpl.h
@@ -94,6 +94,7 @@ typedef enum { B_FALSE, B_TRUE } boolean_t;
#define P2END(x, align) (-(~(x) & -(align)))
#define P2PHASEUP(x, align, phase) ((phase) - (((phase) - (x)) & -(align)))
#define P2BOUNDARY(off, len, align) (((off) ^ ((off) + (len) - 1)) > (align) - 1)
+#define IS_P2ALIGNED(v, a) ((((uintptr_t)(v)) & ((uintptr_t)(a) - 1)) == 0)
/*
* General-purpose 32-bit and 64-bit bitfield encodings.
@@ -498,19 +499,7 @@ typedef struct zio_eck {
* Gang block headers are self-checksumming and contain an array
* of block pointers.
*/
-#define SPA_GANGBLOCKSIZE SPA_MINBLOCKSIZE
-#define SPA_GBH_NBLKPTRS ((SPA_GANGBLOCKSIZE - \
- sizeof (zio_eck_t)) / sizeof (blkptr_t))
-#define SPA_GBH_FILLER ((SPA_GANGBLOCKSIZE - \
- sizeof (zio_eck_t) - \
- (SPA_GBH_NBLKPTRS * sizeof (blkptr_t))) /\
- sizeof (uint64_t))
-
-typedef struct zio_gbh {
- blkptr_t zg_blkptr[SPA_GBH_NBLKPTRS];
- uint64_t zg_filler[SPA_GBH_FILLER];
- zio_eck_t zg_tail;
-} zio_gbh_phys_t;
+#define SPA_OLD_GANGBLOCKSIZE SPA_MINBLOCKSIZE
#define VDEV_RAIDZ_MAXPARITY 3
diff --git a/sys/dev/safe/safe.c b/sys/dev/safe/safe.c
index c512f3fc62c0..569bbe51e125 100644
--- a/sys/dev/safe/safe.c
+++ b/sys/dev/safe/safe.c
@@ -424,6 +424,8 @@ safe_attach(device_t dev)
#ifdef SAFE_DEBUG
safec = sc; /* for use by hw.safe.dump */
#endif
+ gone_in(16, "%s(4) is deprecated in 15.0 and removed in 16.0\n",
+ safe_driver->name);
return (0);
bad4:
crypto_unregister_all(sc->sc_cid);
diff --git a/sys/kern/kern_jail.c b/sys/kern/kern_jail.c
index 1b9bd4cf62d5..26a994ef0c32 100644
--- a/sys/kern/kern_jail.c
+++ b/sys/kern/kern_jail.c
@@ -1065,8 +1065,10 @@ kern_jail_set(struct thread *td, struct uio *optuio, int flags)
* than duplicate it under a different name.
*/
error = vfs_buildopts(optuio, &opts);
- if (error)
+ if (error) {
+ opts = NULL;
goto done_free;
+ }
cuflags = flags & (JAIL_CREATE | JAIL_UPDATE);
if (!cuflags) {
@@ -2331,7 +2333,8 @@ kern_jail_set(struct thread *td, struct uio *optuio, int flags)
(void)kern_close(td, jfd_out);
if (g_path != NULL)
free(g_path, M_TEMP);
- vfs_freeopts(opts);
+ if (opts != NULL)
+ vfs_freeopts(opts);
prison_free(mypr);
return (error);
}
@@ -3043,19 +3046,14 @@ do_jail_attach(struct thread *td, struct prison *pr, int drflags)
PROC_LOCK(p);
oldcred = crcopysafe(p, newcred);
newcred->cr_prison = pr;
+ proc_set_cred(p, newcred);
+ setsugid(p);
#ifdef RACCT
racct_proc_ucred_changed(p, oldcred, newcred);
#endif
#ifdef RCTL
crhold(newcred);
#endif
- /*
- * Takes over 'newcred''s reference, so 'newcred' must not be used
- * besides this point except on RCTL where we took an additional
- * reference above.
- */
- proc_set_cred(p, newcred);
- setsugid(p);
PROC_UNLOCK(p);
#ifdef RCTL
rctl_proc_ucred_changed(p, newcred);
diff --git a/sys/kern/kern_loginclass.c b/sys/kern/kern_loginclass.c
index 07d388f18f8d..0c111c4f78d8 100644
--- a/sys/kern/kern_loginclass.c
+++ b/sys/kern/kern_loginclass.c
@@ -222,18 +222,13 @@ sys_setloginclass(struct thread *td, struct setloginclass_args *uap)
PROC_LOCK(p);
oldcred = crcopysafe(p, newcred);
newcred->cr_loginclass = newlc;
+ proc_set_cred(p, newcred);
#ifdef RACCT
racct_proc_ucred_changed(p, oldcred, newcred);
#endif
#ifdef RCTL
crhold(newcred);
#endif
- /*
- * Takes over 'newcred''s reference, so 'newcred' must not be used
- * besides this point except on RCTL where we took an additional
- * reference above.
- */
- proc_set_cred(p, newcred);
PROC_UNLOCK(p);
#ifdef RCTL
rctl_proc_ucred_changed(p, newcred);
diff --git a/sys/kern/kern_prot.c b/sys/kern/kern_prot.c
index f93cee6d7698..3c145851b683 100644
--- a/sys/kern/kern_prot.c
+++ b/sys/kern/kern_prot.c
@@ -832,31 +832,22 @@ kern_setcred(struct thread *const td, const u_int flags,
if (error != 0)
goto unlock_finish;
-#ifdef RACCT
/*
- * Hold a reference to 'new_cred', as we need to call some functions on
- * it after proc_set_cred_enforce_proc_lim().
+ * Set the new credentials, noting that they have changed.
*/
- crhold(new_cred);
-#endif
-
- /* Set the new credentials. */
cred_set = proc_set_cred_enforce_proc_lim(p, new_cred);
if (cred_set) {
setsugid(p);
+ to_free_cred = old_cred;
#ifdef RACCT
- /* Adjust RACCT counters. */
racct_proc_ucred_changed(p, old_cred, new_cred);
#endif
- to_free_cred = old_cred;
- MPASS(error == 0);
- } else {
-#ifdef RACCT
- /* Matches the crhold() just before the containing 'if'. */
- crfree(new_cred);
+#ifdef RCTL
+ crhold(new_cred);
#endif
+ MPASS(error == 0);
+ } else
error = EAGAIN;
- }
unlock_finish:
PROC_UNLOCK(p);
@@ -866,12 +857,10 @@ unlock_finish:
* finishing operations.
*/
-#ifdef RACCT
- if (cred_set) {
#ifdef RCTL
+ if (cred_set) {
rctl_proc_ucred_changed(p, new_cred);
-#endif
- /* Paired with the crhold() above. */
+ /* Paired with the crhold() just above. */
crfree(new_cred);
}
#endif
@@ -1002,19 +991,16 @@ sys_setuid(struct thread *td, struct setuid_args *uap)
change_euid(newcred, uip);
setsugid(p);
}
-
+ /*
+ * This also transfers the proc count to the new user.
+ */
+ proc_set_cred(p, newcred);
#ifdef RACCT
racct_proc_ucred_changed(p, oldcred, newcred);
#endif
#ifdef RCTL
crhold(newcred);
#endif
- /*
- * Takes over 'newcred''s reference, so 'newcred' must not be used
- * besides this point except on RCTL where we took an additional
- * reference above.
- */
- proc_set_cred(p, newcred);
PROC_UNLOCK(p);
#ifdef RCTL
rctl_proc_ucred_changed(p, newcred);
@@ -1418,18 +1404,13 @@ sys_setreuid(struct thread *td, struct setreuid_args *uap)
change_svuid(newcred, newcred->cr_uid);
setsugid(p);
}
+ proc_set_cred(p, newcred);
#ifdef RACCT
racct_proc_ucred_changed(p, oldcred, newcred);
#endif
#ifdef RCTL
crhold(newcred);
#endif
- /*
- * Takes over 'newcred''s reference, so 'newcred' must not be used
- * besides this point except on RCTL where we took an additional
- * reference above.
- */
- proc_set_cred(p, newcred);
PROC_UNLOCK(p);
#ifdef RCTL
rctl_proc_ucred_changed(p, newcred);
@@ -1571,18 +1552,13 @@ sys_setresuid(struct thread *td, struct setresuid_args *uap)
change_svuid(newcred, suid);
setsugid(p);
}
+ proc_set_cred(p, newcred);
#ifdef RACCT
racct_proc_ucred_changed(p, oldcred, newcred);
#endif
#ifdef RCTL
crhold(newcred);
#endif
- /*
- * Takes over 'newcred''s reference, so 'newcred' must not be used
- * besides this point except on RCTL where we took an additional
- * reference above.
- */
- proc_set_cred(p, newcred);
PROC_UNLOCK(p);
#ifdef RCTL
rctl_proc_ucred_changed(p, newcred);
@@ -2807,7 +2783,7 @@ cru2xt(struct thread *td, struct xucred *xcr)
* 'enforce_proc_lim' being true and if no new process can be accounted to the
* new real UID because of the current limit (see the inner comment for more
* details) and the caller does not have privilege (PRIV_PROC_LIMIT) to override
- * that. In this case, the reference to 'newcred' is not taken over.
+ * that.
*/
static bool
_proc_set_cred(struct proc *p, struct ucred *newcred, bool enforce_proc_lim)
diff --git a/sys/kern/kern_racct.c b/sys/kern/kern_racct.c
index d1324935bdc3..17b64ad00bb5 100644
--- a/sys/kern/kern_racct.c
+++ b/sys/kern/kern_racct.c
@@ -949,10 +949,8 @@ racct_proc_exit(struct proc *p)
}
/*
- * Called to signal credentials change, to move resource utilisation
- * between raccts. Must be called with the proc lock held, in the same span as
- * the credentials change itself (i.e., without the proc lock being unlocked
- * between the two), but the order does not matter.
+ * Called after credentials change, to move resource utilisation
+ * between raccts.
*/
void
racct_proc_ucred_changed(struct proc *p, struct ucred *oldcred,
diff --git a/sys/modules/iwlwifi/Makefile b/sys/modules/iwlwifi/Makefile
index 5d4830537a0b..6fe64a611900 100644
--- a/sys/modules/iwlwifi/Makefile
+++ b/sys/modules/iwlwifi/Makefile
@@ -91,7 +91,7 @@ CFLAGS+= -DCONFIG_IWLWIFI_DEVICE_TRACING=1
#CFLAGS+= -DCONFIG_THERMAL=1
#CFLAGS+= -DCONFIG_EFI=1
-# XXX-BZ how to do this just for pcie/drv.c (and gcc vs. clang)?
-CFLAGS += -Wno-override-init -Wno-initializer-overrides
+CWARNFLAGS.clang.drv.c+= -Wno-initializer-overrides
+CWARNFLAGS.drv.c+= -Wno-override-init ${CWARNFLAGS.${COMPILER_TYPE}.${.IMPSRC:T}}
.include <bsd.kmod.mk>
diff --git a/sys/netinet/tcp_syncache.c b/sys/netinet/tcp_syncache.c
index fa7035771714..6c072e0fec38 100644
--- a/sys/netinet/tcp_syncache.c
+++ b/sys/netinet/tcp_syncache.c
@@ -535,6 +535,10 @@ syncache_timer(void *xsch)
TCPSTAT_INC(tcps_sndtotal);
TCPSTAT_INC(tcps_sc_retransmitted);
} else {
+ /*
+ * Most likely we are memory constrained, so free
+ * resources.
+ */
syncache_drop(sc, sch);
TCPSTAT_INC(tcps_sc_dropped);
}
@@ -734,7 +738,7 @@ syncache_unreach(struct in_conninfo *inc, tcp_seq th_seq, uint16_t port)
goto done;
/*
- * If we've rertransmitted 3 times and this is our second error,
+ * If we've retransmitted 3 times and this is our second error,
* we remove the entry. Otherwise, we allow it to continue on.
* This prevents us from incorrectly nuking an entry during a
* spurious network outage.
@@ -1562,6 +1566,10 @@ syncache_add(struct in_conninfo *inc, struct tcpopt *to, struct tcphdr *th,
TCPSTAT_INC(tcps_sndacks);
TCPSTAT_INC(tcps_sndtotal);
} else {
+ /*
+ * Most likely we are memory constrained, so free
+ * resources.
+ */
syncache_drop(sc, sch);
TCPSTAT_INC(tcps_sc_dropped);
}
@@ -1747,6 +1755,9 @@ syncache_add(struct in_conninfo *inc, struct tcpopt *to, struct tcphdr *th,
TCPSTAT_INC(tcps_sndacks);
TCPSTAT_INC(tcps_sndtotal);
} else {
+ /*
+ * Most likely we are memory constrained, so free resources.
+ */
if (sc != &scs)
syncache_free(sc);
TCPSTAT_INC(tcps_sc_dropped);
diff --git a/usr.sbin/freebsd-update/freebsd-update.sh b/usr.sbin/freebsd-update/freebsd-update.sh
index 143d93a6dcc0..2a07bc1fb7bc 100644
--- a/usr.sbin/freebsd-update/freebsd-update.sh
+++ b/usr.sbin/freebsd-update/freebsd-update.sh
@@ -1103,7 +1103,7 @@ IDS_check_params () {
check_pkgbase()
{
# Packaged base requires that pkg is bootstrapped.
- if ! pkg -r ${BASEDIR} -N >/dev/null 2>/dev/null; then
+ if ! pkg -N -r ${BASEDIR} >/dev/null 2>/dev/null; then
return 1
fi
# uname(1) is used by pkg to determine ABI, so it should exist.
diff --git a/usr.sbin/jail/jail.8 b/usr.sbin/jail/jail.8
index 9aed9b671b9e..3a925bda8174 100644
--- a/usr.sbin/jail/jail.8
+++ b/usr.sbin/jail/jail.8
@@ -1,3 +1,6 @@
+.\"
+.\" SPDX-License-Identifier: BSD-2-Clause
+.\"
.\" Copyright (c) 2000, 2003 Robert N. M. Watson
.\" Copyright (c) 2008-2012 James Gritton
.\" All rights reserved.
@@ -23,7 +26,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd October 8, 2025
+.Dd November 6, 2025
.Dt JAIL 8
.Os
.Sh NAME
@@ -1120,7 +1123,7 @@ process.
This manual page documents the configuration steps necessary to support
either of these steps, although the configuration steps may need to be
refined based on local requirements.
-.Ss "Setting up a Jail Directory Tree"
+.Ss Setting up a Jail Directory Tree From Source
To set up a jail directory tree containing an entire
.Fx
distribution, the following
@@ -1133,8 +1136,19 @@ mkdir -p $D
make world DESTDIR=$D
make distribution DESTDIR=$D
.Ed
+.Ss Setting up a Jail Directory Tree from Distribution Files
+To set up a jail directory tree containing an entire
+.Fx
+distribution, the following
+.Xr sh 1
+command script can be used:
+.Bd -literal -offset indent
+D=/here/is/the/jail
+mkdir -p $D
+tar -xf /usr/freebsd-dist/base.txz -C $D --unlink
+.Ed
.Pp
-In many cases this example would put far more in the jail than needed.
+In many cases these examples would put far more in the jail than needed.
In the other extreme case a jail might contain only one file:
the executable to be run in the jail.
.Pp
diff --git a/usr.sbin/mixer/mixer.8 b/usr.sbin/mixer/mixer.8
index 819d8ae73ab1..d7de675bceee 100644
--- a/usr.sbin/mixer/mixer.8
+++ b/usr.sbin/mixer/mixer.8
@@ -19,7 +19,7 @@
.\" OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
.\" THE SOFTWARE.
.\"
-.Dd August 14, 2024
+.Dd October 31, 2025
.Dt MIXER 8
.Os
.Sh NAME
@@ -28,7 +28,7 @@
.Sh SYNOPSIS
.Nm
.Op Fl f Ar device
-.Op Fl d Ar pcmN | N Op Fl V Ar voss_device:mode
+.Op Fl d Ar pcmX | X Op Fl V Ar voss_device:mode
.Op Fl os
.Op Ar dev Ns Op Cm \&. Ns Ar control Ns Op Cm \&= Ns Ar value
.Ar ...
@@ -47,10 +47,10 @@ The options are as follows:
.It Fl a
Print the values for all mixer devices available in the system
.Pq see Sx FILES .
-.It Fl d Ar pcmN | N
+.It Fl d Ar pcmX | X
Change the default audio card to
-.Ar pcmN ,
-where N is the unit number (e.g for pcm0, the unit number is 0).
+.Ar pcmX ,
+where X is the device's unit number (e.g for pcm0, the unit number is 0).
See
.Sx EXAMPLES
on how to list all available audio devices in the system.
@@ -246,30 +246,22 @@ makes
the only recording device.
.El
.Sh FILES
-.Bl -tag -width /dev/mixerN -compact
-.It Pa /dev/mixerN
-The mixer device, where
-.Ar N
-is the number of that device, for example
-.Ar /dev/mixer0 .
-PCM cards and mixers have a 1:1 relationship, which means that
+.Bl -tag -width "/dev/mixerX" -compact
+.It Pa /dev/mixerX
+The mixer device, where X is the unit number of that device,
+.Pa /dev/dsp*
+devices and
+.Pa /dev/mixer*
+devices have a 1:1 relationship, which means that, for instance,
.Pa /dev/mixer0
-is the mixer for
-.Pa /dev/pcm0
-and so on.
-By default,
+is the mixer device for
+.Pa /dev/dsp0 .
+.It /dev/mixer
+Alias to the default device's mixer device.
.Nm
-prints both the audio card's number and the mixer associated with it
-in the form of
-.Ar pcmN:mixer .
-The
-.Pa /dev/mixer
-file, although it does not exist in the filesystem, points to the default
-mixer device and is the file
-.Nm
-opens when the
+opens this when the
.Fl f Ar device
-option has not been specified.
+option is not specified.
.El
.Sh EXAMPLES
List all available audio devices in the system:
diff --git a/usr.sbin/periodic/etc/weekly/Makefile b/usr.sbin/periodic/etc/weekly/Makefile
index d194a988acf0..a5483534c029 100644
--- a/usr.sbin/periodic/etc/weekly/Makefile
+++ b/usr.sbin/periodic/etc/weekly/Makefile
@@ -8,12 +8,11 @@ CONFS= 340.noid \
# NB: keep these sorted by MK_* knobs
-.if ${MK_LOCATE} != "no"
-CONFS+= 310.locate
-.endif
+CONFGROUPS.${MK_LOCATE}+= LOCATE
+LOCATE= 310.locate
-.if ${MK_MAN_UTILS} != "no"
-CONFS+= 320.whatis
-.endif
+CONFGROUPS.${MK_MAN_UTILS}+= WHATIS
+WHATISPACKAGE= mandoc
+WHATIS= 320.whatis
.include <bsd.prog.mk>
diff --git a/usr.sbin/sysrc/sysrc.8 b/usr.sbin/sysrc/sysrc.8
index bdf3353c2cf9..cb32f72ea587 100644
--- a/usr.sbin/sysrc/sysrc.8
+++ b/usr.sbin/sysrc/sysrc.8
@@ -1,3 +1,6 @@
+.\"
+.\" SPDX-License-Identifier: BSD-2-Clause
+.\"
.\" Copyright (c) 2011-2016 Devin Teske
.\" All rights reserved.
.\"
@@ -408,62 +411,52 @@ and
.It Pa /usr/local/etc/rc.conf.d/name/*
.El
.Sh EXAMPLES
-Below are some simple examples of how
-.Nm
-can be used to query certain values from the
-.Xr rc.conf 5
-collection of system configuration files:
-.Pp
-.Nm
-sshd_enable
-.Dl returns the value of $sshd_enable, usually YES or NO .
+.Ss Working with rc.conf files
+Ask the value of
+.Cm sshd_enable ,
+usually YES or NO:
+.Dl sysrc sshd_enable
.Pp
-.Nm
-defaultrouter
-.Dl returns IP address of default router Pq if configured .
-.Pp
-Working on other files, such as
+Return the IP address of default router
+.Pq if configured :
+.Dl sysrc defaultrouter
+.Ss Working with other files
+Return the value of the MAILTO setting, if configured, from
.Xr crontab 5 :
+.Dl sysrc -f /etc/crontab MAILTO
.Pp
-.Nm
--f /etc/crontab MAILTO
-.Dl returns the value of the MAILTO setting Pq if configured .
-.Pp
-Appending to existing values:
-.Pp
-.Nm
-\&cloned_interfaces+=gif0
-.Dl appends Qo gif0 Qc to $cloned_interfaces Pq see APPENDING VALUES .
-.Pp
-.Nm
-\&cloned_interfaces-=gif0
-.Dl removes Qo gif0 Qc from $cloned_interfaces Pq see SUBTRACTING VALUES .
-.Pp
-In addition to the above syntax,
-.Nm
-also supports inline
-.Xr sh 1
-PARAMETER expansion for changing the way values are reported, shown below:
+Append
+.Dq gif0
+to $cloned_interfaces
+.Pq see Sx APPENDING VALUES :
+.Dl sysrc cloned_interfaces+=gif0
.Pp
-.Nm
-\&'hostname%%.*'
-.Dl returns $hostname up to (but not including) first `.' .
+Remove
+.Dq gif0
+from $cloned_interfaces
+.Pq see Sx SUBTRACTING VALUES :
+.Dl sysrc cloned_interfaces-=gif0
+.Ss Inline shell parameter expansion
+Return $hostname up to, but not including, first
+.Ql \&. :
+.Dl sysrc 'hostname%%.*'
.Pp
-.Nm
-\&'network_interfaces%%[$IFS]*'
-.Dl returns first word of $network_interfaces .
+Return first word of $network_interfaces:
+.Dl sysrc 'network_interfaces%%[$IFS]*'
.Pp
-.Nm
-\&'ntpdate_flags##*[$IFS]'
-.Dl returns last word of $ntpdate_flags (time server address) .
+Return last word of $ntpdate_flags
+.Pq time server address :
+.Dl sysrc 'ntpdate_flags##*[$IFS]'
.Pp
-.Nm
-usbd_flags-"default"
-.Dl returns $usbd_flags or "default" if unset or NULL .
+Return $usbd_flags or
+.Dq default
+if unset or NULL:
+.Dl sysrc usbd_flags-"default"
.Pp
-.Nm
-cloned_interfaces+"alternate"
-.Dl returns "alternate" if $cloned_interfaces is set .
+Return
+.Dq alternate
+if $cloned_interfaces is set:
+.Dl sysrc cloned_interfaces+"alternate"
.Sh SEE ALSO
.Xr rc.conf 5 ,
.Xr jail 8 ,