> For the complete documentation index, see [llms.txt](https://book.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://book.bsdcn.org/ask/flat/chapter-40-freebsd-kernel-architecture/di-40.4-jie-ji-qi-wu-guan-de-nei-he-xuan-xiang-zhu-jie.md).

# 40.4 Machine-Independent Kernel Options

Machine-independent options form the core abstraction layer of the kernel, enabling cross-hardware-platform portability. This section translates and annotates the general configuration options in **sys/conf/NOTES**, listing the original text and English interpretations by functional category.

* Source: [freebsd-src/main/sys/conf/NOTES](https://github.com/freebsd/freebsd-src/blob/main/sys/conf/NOTES)
* Version: [random: allow disabling of entropy harvesting from keyboard & mice](https://github.com/freebsd/freebsd-src/commit/d6f10a5d013fdcc92847644ffbaf65cbf491bb39)

> **Tip**
>
> You can directly cut and paste the entries below into the kernel configuration file.
>
> > Lines starting with `device`, `options`, `machine`, `ident`, `maxusers`, `makeoptions`, `hints`, etc. should be placed in the kernel configuration file where config(8) will be run.
> >
> > Lines starting with `envvar hint.` should be placed in the hints file.
> >
> > For kernel test builds, use `make LINT` to create the old-style LINT file.
> >
> > This file contains machine-independent kernel configuration notes.

> **Tip**
>
> NOTES conventions and style guide:
>
> Large comment blocks should begin and end with a line containing only the comment character.
>
> When describing a specific object, if a block comment exists, it should be written first. Next, write device, options, and hints entries in that order. All device and option lines must have comments, and the comments must not merely repeat the device or option name. Where possible, comments should be concise and placed on the same line. Detailed descriptions of devices and subsystems should be placed in manual pages.
>
> `options` and the option name are separated by one space plus one tab. `device` and the device name are separated by two spaces plus one tab. Comments after an option or device should have one space after the comment character. To comment out disabling negative options (and thus should not be enabled in a LINT build), prefix with `#!` before `options`.

```ini
ident		LINT
```

This is the kernel "identifier," which should typically be the same as the kernel name.

```ini
maxusers	10
```

The `maxusers` parameter controls the static sizing of multiple internal system tables through formulas defined in `subr_param.c`.

Omitting this parameter or setting it to `0` allows the system to automatically adjust sizes based on physical memory.

```ini
#hints		"LINT.hints"		# Default location to find device hints
```

Statically compile device connection information instead of using **/boot/device.hints**.

```ini
#env		"LINT.env"
```

Use the above method to compile values into the kernel so that the kernel can access them via `getenv()` (or kenv(1) from user space). The file format is `variable=value`; see [kenv(1)](https://man.freebsd.org/cgi/man.cgi?query=kenv\&sektion=1) for details.

```ini
makeoptions	CONF_CFLAGS=-fno-builtin  # ①② Disable gcc built-in functions such as memcmp
#makeoptions	DEBUG=-g		# ③ Build a kernel with gdb(1) debugging symbols
#makeoptions	KERNEL=foo		# ④ Build kernel "foo" and install to "/foo"
#makeoptions	MODULES_OVERRIDE="ext2fs sound/sound sound/driver/maestro3" # ⑤ Only build ext2fs module and required sound system parts
makeoptions	DESTDIR=/tmp # Temporarily set the target installation directory to /tmp
```

* ①: `makeoptions` parameters can pass variables to the Makefile generated in the build area.
* ②: `CONF_CFLAGS` provides additional compiler flags that are appended to `${CFLAGS}` after most other flags. Here it is used to disable the use of non-optimal gcc built-in functions (such as `memcmp`).
* ③: `DEBUG` is a special flag.

The following approach is equivalent to running `config -g KERNELNAME`, which generates `kernel.debug` with debugging information `-g`, and also generates a normal `kernel`. Use `make install.debug` to install the debug kernel, but since the kernel does not load debug symbols, this is usually unnecessary.

* ④: Renames `KERNEL`, i.e., changes the default name of the kernel.
* ⑤: `MODULES_OVERRIDE` can be used to restrict the list of modules built, compiling only the specified modules.

```ini
options 	MAXDSIZ=(1024UL*1024*1024)
options 	MAXSSIZ=(128UL*1024*1024)
options 	DFLDSIZ=(1024UL*1024*1024)
```

FreeBSD processes have certain limits when using system resources. For more details, see: getrlimit(2)\[EB/OL]. \[2026-03-26]. <https://man.freebsd.org/cgi/man.cgi?query=getrlimit&sektion=2>. Each resource limit has two values: a "soft limit" and a "hard limit."

The soft limit can be modified during normal system operation, while the hard limit can only be set at boot time. Their default values are defined in **sys/architecture/include/vmparam.h**. There are two ways to modify the above limits:

1. Set values at kernel compile time. The following options can raise the limit to 1 GB. These values can be further increased by modifying the relevant parameters.
2. Set tunable parameters in the **/boot/loader.conf** file: `kern.maxswzone`, `kern.maxbcache`, `kern.maxtsiz`, `kern.dfldsiz`, `kern.maxdsiz`, `kern.dflssiz`, `kern.maxssiz`, and `kern.sgrowsiz`.

Settings in the **/boot/loader.conf** file override any values in the kernel configuration file. For more details, see the function `init_param1` in **sys/kern/subr\_param.c**. It is recommended to use the **/boot/loader.conf.local** file to extend local configuration and avoid directly modifying the **/boot/loader.conf** file.

```ini
options 	BLKDEV_IOSIZE=8192
```

`BLKDEV_IOSIZE` can set the default block size used for user block device I/O.

> **Note**
>
> When specifying a block device via a label with a non-zero partition block size, the label overrides this value. The default value is `PAGE_SIZE`.

```ini
options 	DFLTPHYS=(64*1024) # DFLTPHYS indicates the safe size for raw I/O block device access, default 64K
options 	MAXPHYS=(128*1024) # MAXPHYS indicates the maximum size for raw I/O block device access, default 128K on ILP32 platforms and 1M on LP64 platforms
```

For known reliable devices, read/write operations will be split into MAXPHYS-sized chunks; for other devices, DFLTPHYS-sized chunks are used. Some applications perform better with larger raw I/O access blocks.

> **Note**
>
> Some virtual memory (VM) parameters are derived from these values; setting them too large may prevent the kernel from booting.

```ini
options 	INCLUDE_CONFIG_FILE     # Embed this file into the kernel
```

This configuration file can be actually stored in the kernel binary. See config(8) for details.

```ini
options 	BOOTVERBOSE=1
options 	BOOTHOWTO=RB_MULTIPLE
```

Compile-time defaults for various boot parameters.

```ini
options 	BOOT_TAG=\"\"
```

Compile-time default for the `dmesg` boot tag.

Default boot tag; can be overridden using the loader tunable `kern.boot_tag`. The current boot tag is also exposed via the sysctl `kern.boot_tag`.

```ini
options 	BOOT_TAG_SZ=32
```

Maximum boot tag size that the kernel static buffer should accommodate. Maximum size of BOOT\_TAG and its related tunables.

```ini
options 	GEOM_CACHE		# Disk cache
options 	GEOM_CONCAT		# Disk concatenation
options 	GEOM_ELI		# Disk encryption
options 	GEOM_GATE		# Userland service
options 	GEOM_JOURNAL		# Journaling
options 	GEOM_LABEL		# Provider labeling
options 	GEOM_LINUX_LVM		# Linux LVM2 volumes
options 	GEOM_MAP		# Map-based partitioning
options 	GEOM_MIRROR		# Disk mirroring
options 	GEOM_MULTIPATH		# Disk multipathing
options 	GEOM_NOP		# Test class
options 	GEOM_PART_APM		# Apple partitioning
options 	GEOM_PART_BSD		# BSD disklabels
options 	GEOM_PART_BSD64		# BSD disklabels 64
options 	GEOM_PART_EBR		# Extended Boot Records
options 	GEOM_PART_GPT		# GPT partitions
options 	GEOM_PART_LDM		# Logical Disk Manager
options 	GEOM_PART_MBR		# MBR partitions
options 	GEOM_RAID		# Software RAID functionality
options 	GEOM_RAID3		# RAID3 functionality
options 	GEOM_SHSEC		# Shared secret
options 	GEOM_STRIPE		# Disk striping
options 	GEOM_UZIP		# Read-only compressed disks
options 	GEOM_VIRSTOR		# Virtual storage
options 	GEOM_ZERO		# Performance testing helper
```

GEOM-related options.

```ini
options 	ROOTDEVNAME=\"ufs:da0s2e\"
```

The root device and filesystem type can be specified at compile time; if the bootloader cannot correctly identify the root device, this provides a fallback; or specify the `RB_DFLTROOT` flag (`-r`) at kernel boot time to override the option.

## Scheduler

The scheduler is the core component in the kernel responsible for allocating CPU time to different threads and processes.

```ini
options 	SCHED_4BSD # Historic, battle-tested BSD scheduler
options 	SCHED_STATS # Statistics
#options 	SCHED_ULE # Default ULE scheduler
```

Either `SCHED_4BSD` or `SCHED_ULE` must be selected. These options select which scheduler to compile into the kernel.

Explanation:

* `SCHED_4BSD` uses global run queues and has no CPU affinity, which results in relatively limited performance on SMP systems. However, it has excellent interactivity and priority selection capabilities. Since FreeBSD 7.1, `SCHED_ULE` has replaced `SCHED_4BSD` as the default scheduler. `SCHED_4BSD` is only meaningful on uniprocessor systems or in specific debugging scenarios; `SCHED_ULE` is recommended on modern SMP systems.
* `SCHED_ULE` provides significant performance advantages over 4BSD on many SMP machine workloads. It supports CPU affinity, per-CPU run queues, and scheduler locks. It also has stronger support for interactivity, providing better responsiveness even on uniprocessor machines.
* `SCHED_STATS` saves some statistics under the sysctl `kern.sched.stats`, which is helpful for debugging scheduling decisions.

## SMP

Symmetric MultiProcessor (SMP) systems contain multiple processor cores that share memory and other resources.

```ini
options 	SMP			# Symmetric MultiProcessor (SMP) kernel
```

SMP builds a symmetric multiprocessor kernel. Must be specified.

```ini
options 	EARLY_AP_STARTUP
```

`EARLY_AP_STARTUP` releases application processors earlier during kernel startup (before device probing), rather than at the end of startup.

This option was used as a transitional option during the migration from late to early AP startup.

```ini
options 	MAXCPU=32
```

`MAXCPU` defines the maximum number of CPUs that can be started in the system. Each architecture typically already has a default value.

```ini
options 	NUMA
```

NUMA enables support for Non-Uniform Memory Access policies in various kernel subsystems.

```ini
options 	MAXMEMDOM=2
```

`MAXMEMDOM` defines the maximum number of memory domains that can be started in the system. Each architecture typically already has a default value.

```ini
options 	NO_ADAPTIVE_MUTEXES
```

`ADAPTIVE_MUTEXES` changes the behavior of blocking mutexes: if the thread currently holding the mutex is executing on another CPU, the mutex spins. This behavior is enabled by default; this option can be used to disable the above behavior.

```ini
options 	NO_ADAPTIVE_RWLOCKS
```

`ADAPTIVE_RWLOCKS` changes the behavior of read-write locks: if the thread currently holding the read-write lock is executing on another CPU, the lock spins. This behavior is enabled by default; this option can be used to disable the above behavior.

```ini
options 	NO_ADAPTIVE_SX
```

`ADAPTIVE_SX` changes the behavior of sx locks: if the thread currently holding the sx lock is executing on another CPU, the lock spins. This behavior is enabled by default; this option can be used to disable the above behavior.

```ini
options 	MUTEX_NOINLINE
```

`MUTEX_NOINLINE` forces mutex operations to call a function for each operation rather than inlining the simple cases. Can be used to reduce the kernel text segment size.

> **Note**
>
> The options `INVARIANT_SUPPORT`, `INVARIANTS`, `KTR`, `LOCK_PROFILING`, and `WITNESS` implicitly enable this behavior.

```ini
options 	RWLOCK_NOINLINE
```

`RWLOCK_NOINLINE` forces read-write lock operations to call a function for each operation rather than inlining the simple cases. Can be used to reduce the kernel text segment size.

> **Note**
>
> The options `INVARIANT_SUPPORT`, `INVARIANTS`, `KTR`, `LOCK_PROFILING`, and `WITNESS` implicitly enable this behavior.

```ini
options 	SX_NOINLINE
```

`SX_NOINLINE` forces sx lock operations to call a function for each operation rather than inlining the simple cases. This can be used to reduce the kernel text segment size.

> **Note**
>
> This behavior is implicitly enabled by the options `INVARIANT_SUPPORT`, `INVARIANTS`, `KTR`, `LOCK_PROFILING`, and `WITNESS`.

### SMP Debugging Options

The following are kernel configuration options related to SMP debugging.

```ini
options 	PREEMPTION
options 	FULL_PREEMPTION
options 	WITNESS
options 	WITNESS_KDB
options 	WITNESS_SKIPSPIN
```

* `CALLOUT_PROFILING`: Enable basic profiling of the callwheel data structure used by the [callout(9)](https://man.freebsd.org/cgi/man.cgi?query=callout\&sektion=9) backend.
* `PREEMPTION`: Allows higher-priority interrupt threads to preempt threads in the kernel. Improves interactivity by enabling interrupt threads to run sooner rather than waiting.
* `FULL_PREEMPTION`: Instructs the kernel to preempt non-realtime kernel threads. Primarily used during development to expose race conditions and other defects. Enabling it degrades performance and increases kernel panic frequency. Depends on the `PREEMPTION` option; not recommended to enable.
* `SLEEPQUEUE_PROFILING`: Basic profiling that saves hash tables of active sleep queues and the frequency of sleep wait messages.
* `TURNSTILE_PROFILING`: Basic profiling that saves hash tables of active lock queues.
* `UMTX_PROFILING`: Basic profiling that saves hash tables of active lock queues.
* `WITNESS`: Enables witness code to detect deadlocks and cycles during lock operations.
* WITNESS\_KDB: Enter the kernel debugger on lock hierarchy violations or when a thread holds a lock before sleeping.
* WITNESS\_SKIPSPIN: Disable witness checks on spin mutexes.

```ini
options 	LOCK_PROFILING
```

`LOCK_PROFILING` — lock profiling. See [LOCK\_PROFILING(9)](https://man.freebsd.org/cgi/man.cgi?query=LOCK_PROFILING\&sektion=9) for details.

```ini
options 	MPROF_BUFFERS="1536" # Set number of buffers
options 	MPROF_HASH_SIZE="1543"# Set buffer hash table size
```

The `MPROF_HASH_SIZE` hash table size must be greater than the number of buffers `MPROF_BUFFERS` and should be a prime number.

```ini
options 	CALLOUT_PROFILING
```

Profiling for the [callout(9)](https://man.freebsd.org/cgi/man.cgi?query=callout\&sektion=9) backend.

```ini
options 	SLEEPQUEUE_PROFILING
options 	TURNSTILE_PROFILING
options 	UMTX_PROFILING
```

Profiling of internal hash tables.

```ini
options 	EPOCH_TRACE
```

Debug tracing for [epoch(9)](https://man.freebsd.org/cgi/man.cgi?query=epoch\&sektion=9) misuse.

## Compatibility

Compatibility options allow the kernel to support system calls and interfaces from older versions of FreeBSD, thereby running programs written for those older versions.

```ini
options 	COMPAT_43TTY
```

Legacy TTY interface.

```ini
options 	COMPAT_FREEBSD4
```

Enable FreeBSD 4 compatibility system calls. FreeBSD 4 was released in 2000, over 20 years ago, and applications actually requiring this compatibility layer are extremely rare. This option has been removed from streamlined kernel configurations such as MINIMAL; it is recommended to enable it only when there is a confirmed need for legacy binary programs.

> **Note**
>
> In general, `COMPAT_FREEBSD<n>` depends on `COMPAT_FREEBSD<n+1>`, `COMPAT_FREEBSD<n+2>`, etc.

```ini
options 	COMPAT_FREEBSD5
```

Enable FreeBSD 5 compatibility system calls. FreeBSD 5 was released in 2003, over 20 years ago; actual demand is extremely low.

```ini
options 	COMPAT_FREEBSD6
```

Enable FreeBSD 6 compatibility system calls. FreeBSD 6 was released in 2005, over 20 years ago; actual demand is extremely low.

```ini
options 	COMPAT_FREEBSD7
```

Enable FreeBSD 7 compatibility system calls. FreeBSD 7 was released in 2008, over 15 years ago; actual demand is extremely low. This option has been removed from streamlined kernel configurations such as MINIMAL.

```ini
options 	COMPAT_FREEBSD8
```

Enable FreeBSD 8 compatibility system calls.

```ini
options 	COMPAT_FREEBSD9
```

Enable FreeBSD 9 compatibility system calls.

```ini
options 	COMPAT_FREEBSD10
```

Enable FreeBSD 10 compatibility system calls.

```ini
options 	COMPAT_FREEBSD11
```

Enable FreeBSD 11 compatibility system calls.

```ini
options 	COMPAT_FREEBSD12
```

Enable FreeBSD 12 compatibility system calls.

```ini
options 	COMPAT_FREEBSD13
```

Enable FreeBSD 13 compatibility system calls.

```ini
options 	COMPAT_FREEBSD14
```

Enable FreeBSD 14 compatibility system calls.

```ini
options 	COMPAT_LINUXKPI
```

Enable Linux Kernel Programming Interface.

```ini
options 	SYSVSHM
options 	SYSVSEM
options 	SYSVMSG
```

* `SYSVSHM`: Enable System V-style shared memory support.
* `SYSVSEM`: Enable System V-style semaphore support.
* `SYSVMSG`: Enable System V-style message queue support.

## Debugging

Debugging options are used to enable debugging features in the kernel, including the kernel debugger, call stack tracing, lock verification, and other functions to help developers diagnose and fix problems.

```ini
options 	KDB
```

Compile kernel debugger-related code at build time.

```ini
options 	KDB_TRACE
```

Print the call stack trace of the current thread on the console when the system panics.

```ini
options 	KDB_UNATTENDED
```

Do not enter the debugger on panic. Suitable for unattended operating environments; if you need to manually enter the debugger from the console but still want the system to recover on its own after a panic, this option can be enabled.

```ini
options 	DDB
```

Enable the ddb debugger backend.

```ini
options 	DDB_NUMSYM
```

Print numeric values of symbols in addition to symbolic representation.

```ini
options 	GDB
```

Enable the remote gdb debugger backend.

```ini
options 	QUEUE_MACRO_DEBUG_TRASH
```

Trash list pointers when they become invalid (i.e., when elements are removed from the list). Relatively low cost to enable.

```ini
#options 	QUEUE_MACRO_DEBUG_TRACE
```

Store information about the last caller that modified the list object in the list object. Requires additional memory overhead.

```ini
options 	SYSCTL_DEBUG
```

When `SYSCTL_DEBUG` is enabled, it generates a sysctl debug tree that can be used to dump the contents of registered sysctl nodes on the console.

Because it generates overly verbose console output that may interfere with serial console operations, it is disabled by default.

```ini
options 	TEXTDUMP_PREFERRED
```

Enable textdump by default and disable kernel core dumps.

```ini
options 	TEXTDUMP_VERBOSE
```

Enable additional debug information when performing a textdump.

```ini
options 	NO_SYSCTL_DESCR
```

`NO_SYSCTL_DESCR` omits sysctl node descriptions to save space in the generated kernel.

```ini
options 	MALLOC_DEBUG_MAXZONES=8
```

`MALLOC_DEBUG_MAXZONES` enables multiple uma zones for [malloc(9)](https://man.freebsd.org/cgi/man.cgi?query=malloc\&sektion=9) allocations smaller than one page. Its purpose is to isolate different malloc types into hash categories, so that all buffer overflows and use-after-free (UAF) issues typically only affect memory of malloc types within that hash category. This is purely a debugging tool; by changing the hash function and tracking the corrupted hash category, the intersection of hash categories across instances can point to the single abusive malloc type. At that point, inspection or [memguard(9)](https://man.freebsd.org/cgi/man.cgi?query=memguard\&sektion=9) can be used to catch the offending code.

```ini
options 	DEBUG_MEMGUARD
```

`DEBUG_MEMGUARD` builds and enables memguard(9), an alternative allocator for the kernel used to detect scenarios such as use-after-free (UAF).

```ini
options 	DEBUG_REDZONE
```

`DEBUG_REDZONE` enables buffer underflow and buffer overflow detection for [malloc(9)](https://man.freebsd.org/cgi/man.cgi?query=malloc\&sektion=9).

```ini
#options 	EARLY_PRINTF
```

`EARLY_PRINTF` allows a special `printf` (`eprintf`) to be used very early in the kernel (before `cn_init()` is called). This is typically only used for early boot debugging. Since this functionality is generally unavailable and the required `eputc()` is also undefined, it is normally not defined and is commented out here.

```ini
options 	KTRACE			# Kernel tracing
options 	KTRACE_REQUEST_POOL=101
```

`KTRACE` enables the system call tracing facility [ktrace(2)](https://man.freebsd.org/cgi/man.cgi?query=ktrace\&sektion=2). For better SMP support, KTRACE uses a worker thread to asynchronously process most trace events rather than having the generating thread process them directly. This requires pre-allocating a pool for storing trace event objects. The `KTRACE_REQUEST_POOL` option specifies the initial size of this pool.

```ini
options 	KTR
options 	KTR_BOOT_ENTRIES=1024
options 	KTR_ENTRIES=(128*1024)
options 	KTR_COMPILE=(KTR_ALL)
options 	KTR_MASK=KTR_INTR
options 	KTR_CPUMASK=0x3
options 	KTR_VERBOSE
```

KTR is a kernel tracing facility ported from BSD/OS. It is enabled via the `KTR` option.

* `KTR_ENTRIES` defines the number of entries in the circular trace buffer; it can be any number.
* `KTR_BOOT_ENTRIES` defines the number of entries during early boot, used before [malloc(9)](https://man.freebsd.org/cgi/man.cgi?query=malloc\&sektion=9) is available.
* `KTR_COMPILE` defines the event mask to compile into the kernel, defined by the `KTR_*` constants in `<sys/ktr.h>`.
* `KTR_MASK` defines the initial value of the variable `ktr_mask`, which determines at runtime which events to trace.
* `KTR_CPUMASK` determines which CPUs record events; bit X corresponds to CPU X. The value of this option can be a series of comma-separated bitmasks. (e.g.: `KTR_CPUMASK=0xAF,0xFFFFFFFFFFFFFFFF`).
* `KTR_VERBOSE` enables KTR event output to the console by default. This feature can be adjusted via the sysctl `debug.ktr.verbose`; if `KTR_VERBOSE` is not defined, it is disabled by default.

For details, see: ktr(4)\[EB/OL]. \[2026-03-26]. <https://man.freebsd.org/cgi/man.cgi?query=ktr&sektion=4> and ktrdump(8)\[EB/OL]. \[2026-03-26]. <https://man.freebsd.org/cgi/man.cgi?query=ktrdump&sektion=8>.

```ini
options 	ALQ
options 	KTR_ALQ
```

* [ALQ(9)](https://man.freebsd.org/cgi/man.cgi?query=alq\&sektion=9) is a mechanism for asynchronously queuing kernel records to a vnode.
* Services such as [ktr(4)](https://man.freebsd.org/cgi/man.cgi?query=ktr\&sektion=4) use it to generate trace files based on the kernel event stream. Records are written asynchronously by a worker thread.

```ini
options 	INVARIANTS
```

The `INVARIANTS` option is used in multiple source files to enable additional integrity checks on internal structures. Since checking these conditions consumes additional time and related issues are typically only caused by programming errors, this option is disabled by default.

```ini
options 	INVARIANT_SUPPORT
```

The `INVARIANT_SUPPORT` option adds verification support for some internal structures at compile time. Since enabling `INVARIANTS` calls these verification functions, `INVARIANT_SUPPORT` is a prerequisite for enabling `INVARIANTS`. The purpose of this is to allow `INVARIANTS` to be set for individual source files (by modifying the source file or specifying on the command line) after `INVARIANT_SUPPORT` is enabled. If you want to build kernel modules with `INVARIANTS`, adding `INVARIANT_SUPPORT` to the kernel provides all the necessary infrastructure without additional overhead.

```ini
options 	KASSERT_PANIC_OPTIONAL
```

The `KASSERT_PANIC_OPTIONAL` option allows kasserts to not necessarily cause a panic when triggered. Panic is the default behavior, but runtime options can turn it off entirely or disable it under set limits.

```ini
options 	DIAGNOSTIC
```

The `DIAGNOSTIC` option enables additional debugging information and integrity checks. Since these additional checks are too costly or too verbose for `INVARIANTS` kernels, they are disabled by default. Typically, a kernel configured with `DIAGNOSTIC` also enables the `INVARIANTS` option.

```ini
options 	REGRESSION
```

`REGRESSION` enables optional kernel interfaces that are only needed in regression testing. Enabling these interfaces may pose a security risk, as they allow processes to easily modify certain aspects of the runtime environment, reproducing unlikely or anomalous (possibly normally impossible) scenarios.

```ini
options 	COMPILING_LINT
```

This option allows certain drivers that cannot coexist in a running system to coexist. It is used to compile all kernel code at once for quality assurance (such as this file, whose name derives from this option).

```ini
options 	STACK
```

STACK enables the [stack(9)](https://man.freebsd.org/cgi/man.cgi?query=stack\&sektion=9) facility, which can capture kernel stacks. If [DDB(4)](https://man.freebsd.org/cgi/man.cgi?query=ddb\&sektion=4) is compiled into the kernel, [stack(9)](https://man.freebsd.org/cgi/man.cgi?query=stack\&sektion=9) is also automatically compiled in.

```ini
options 	NUM_CORE_FILES=5
```

The `NUM_CORE_FILES` option specifies the upper limit on the number of core files generated by a specific process. This option takes effect when the core file format specifier includes the `%I` pattern. Since the core count in the format string is only `1` character, the representable range is 0-9, so the maximum value allowed by this option is `10` (i.e., specifying this parameter as `9`). The core file count limit can be adjusted at runtime via the sysctl `debug.ncores`.

```ini
options 	TSLOG
options 	TSLOGSIZE=262144
```

The `TSLOG` option enables timestamped recording of events, particularly function entry/exit, to track time consumed by the kernel. Since more advanced tools such as DTrace are not yet available at that point, this option is especially useful during early boot.

* The `TSLOGSIZE` option controls the size of the (pre-allocated, fixed-length) buffer used to store these events (default: `262144` records).
* The `TSLOG_PAGEZERO` option enables TSLOG for `pmap_zero_page`; since it typically generates too many records to be practical, it must be explicitly enabled.

For security reasons, TSLOG should not be enabled on production systems.

## Performance Monitoring

Performance monitoring options provide the ability to measure and analyze system performance, particularly utilizing CPU built-in performance monitoring counters.

```ini
device		hwpmc			# Driver (also available as a loadable module)
options 	HWPMC_DEBUG
options 	HWPMC_HOOKS		# Additional required kernel hooks
```

The `hwpmc` driver can monitor performance using CPU built-in performance monitoring counters. The base kernel needs to be configured via `options` entries; the hwpmc device can be compiled into the kernel or loaded as a loadable kernel module.

Additional configuration options may be required on specific architectures; see: hwpmc(4)\[EB/OL]. \[2026-03-26]. <https://man.freebsd.org/cgi/man.cgi?query=hwpmc&sektion=4>.

## Network Interfaces

Network interfaces are a key part of the FreeBSD kernel responsible for handling network communication, including protocol stacks, network device drivers, etc.

### Protocol Stack

The network protocol stack is responsible for handling the transmission and reception of network data, including protocols such as TCP/IP and UDP.

```ini
options 	INET			# Internet communications protocol (IPv4)
options 	INET6			# Internet communications protocol (IPv6)
```

```ini
options 	CC_CDG # CAIA Delay-Gradient algorithm
options 	CC_CHD # CAIA Hamilton-Delay algorithm
options 	CC_CUBIC # Cubic algorithm
options 	CC_DCTCP # DCTCP algorithm
options 	CC_HD # Hamilton Delay algorithm
options 	CC_HTCP # H-TCP algorithm
options 	CC_NEWRENO # NewReno algorithm
options 	CC_VEGAS # Vegas algorithm
options 	CC_DEFAULT=\"cubic\" # Specify Cubic as the default congestion control algorithm
options 	RATELIMIT		# Transmit rate limiting support

options 	ROUTETABLES=2		# Allocate up to 65536 FIBs. Default is 1, but this is not recommended as each FIB entry consumes significant memory

options 	TCP_OFFLOAD		# TCP offload
options  	TCP_RFC7413		# TCP Fast Open

options  	TCPHPTS # Enable TCP HPTS (High Precision Timer) support
#options 	TCP_HPTS_KTEST		# Add KTEST support for HPTS
```

> **Note**
>
> If the options `INET`, `INET6`, or both are used: at least one congestion control option must be specified, otherwise compilation will fail. `GENERIC` defines `CC_CUBIC`. If multiple congestion controls are compiled, a default value may need to be specified.

The string in `default` is the name of the `cc` module, used in sysctl to set the default. The code defines `CUBIC` as the default, or if only one `cc_module` is compiled, that module is used.

```ini
options 	IPSEC			# IPsec (requires device crypto support)
```

IPsec (IP Security). To enable `IPSEC`, device crypto support **must** also be specified in the kernel configuration.

```ini
options 	IPSEC_SUPPORT
#options 	IPSEC_DEBUG		# IPsec debugging
```

The `IPSEC_SUPPORT` option does not directly enable IPsec, but it allows IPsec to be loaded as a kernel module. Device crypto support **must** still be added to the kernel configuration.

```ini
options 	TCP_BBR # BBR (Bottleneck Bandwidth and Round-trip propagation time)
options 	TCP_RACK # RACK stack, Recent ACKnowledgment
```

Optional TCP stacks.

```ini
options 	KERN_TLS		# TLS send and receive offload
```

TLS is used for framing and encrypting/decrypting data over TCP sockets.

```ini
options 	NETLINK
```

Netlink is a message passing interface between the kernel and user space.

```ini
options 	NETSMB			# SMB/CIFS requester
```

SMB/CIFS requester. NETSMB enables support for the SMB protocol; it requires the `LIBMCHAIN` and `LIBICONV` options.

```ini
options 	LIBMCHAIN
```

mchain library. It can be loaded as a KLD (loadable kernel module) or compiled into the kernel.

```ini
options 	LIBALIAS
```

libalias library, used for performing NAT (Network Address Translation).

```ini
options 	SCTP
options 	SCTP_SUPPORT
```

SCTP is a transport layer protocol originally defined by RFC 2960, later updated by RFC 3309 and RFC 3758; RFC 4960, published in 2007, superseded RFC 2960 and RFC 3309 as the new base specification, subsequently updated by RFC 6096, RFC 7053, etc.; RFC 9260, published in 2022, further superseded RFC 4960 (IETF. RFC 9260: Stream Control Transmission Protocol\[EB/OL]. (2022-05). \[2026-04-19]. <https://datatracker.ietf.org/doc/rfc9260/>). This version supports all extensions, including many drafts (most of which are about to become RFCs). It is the reference implementation of SCTP and has been thoroughly tested.

> **Note**
>
> **Both INET and INET6 must be defined**. It is not necessary to enable IPv6, but SCTP is a dual-stack protocol because an association can span both IPv6 and IPv4 addresses; IPv6 and IPv4 have not yet been separated.

The `SCTP_SUPPORT` option does not directly enable SCTP, but provides the support needed to load SCTP as a loadable kernel module.

```ini
options 	SCTP_DEBUG
```

The following are SCTP debugging options:

`SCTP_DEBUG` enables various verbose print functions. It is controlled by a bitmask (settable via socket options and sysctl). Including this option alone does not immediately produce logs; the corresponding bits must be set first. However, the print output can be very verbose. Therefore, if the option is not enabled, the code will not perform bit checks and printing, which improves running speed. Do not use unless for debugging purposes.

```ini
options 	SCTP_LOCK_LOGGING
options 	SCTP_MBUF_LOGGING
options 	SCTP_MBCNT_LOGGING
options 	SCTP_PACKET_LOGGING
options 	SCTP_LTRACE_CHUNKS
options 	SCTP_LTRACE_ERRORS
```

All the above options are used to enable specific types of logging. They can monitor congestion window (CWND) growth, flight size, and various other metrics. See the code for more details.

Using these features requires enabling [ktr(4)](https://man.freebsd.org/cgi/man.cgi?query=ktr\&sektion=4), then setting various log bits via sysctl to turn them on or off. Use [ktrdump(8)](https://man.freebsd.org/cgi/man.cgi?query=ktrdump\&sektion=8) to extract logs, then process them with a display program to generate charts and other visualizations.

```ini
options 	OFED
options 	OFED_DEBUG_INIT
```

OpenFabrics Enterprise Distribution (OFED, InfiniBand).

```ini
options 	SDP
options 	SDP_DEBUG
```

Sockets Direct Protocol (SDP).

```ini
options 	IPOIB # InfiniBand protocol stack and support
options 	IPOIB_DEBUG
options 	IPOIB_CM # Use connected mode IPoIB
```

IP over InfiniBand (IPoIB), Internet Protocol based on InfiniBand, see: wiki/InfiniBand\[EB/OL]. \[2026-03-26]. <https://wiki.freebsd.org/InfiniBand>.

```ini
options 	ALTQ # Alternate queuing
options 	ALTQ_CBQ	# Class-Based Queuing
options 	ALTQ_RED	# Random Early Detection
options 	ALTQ_RIO	# RED In/Out
options 	ALTQ_CODEL	# CoDel active queue management
options 	ALTQ_HFSC	# Hierarchical Fair Service Curve scheduler
options 	ALTQ_FAIRQ	# Fair packet scheduler
options 	ALTQ_CDNR	# Traffic conditioner
options 	ALTQ_PRIQ	# Priority queue
options 	ALTQ_NOPCC	# Required when TSC is unavailable
options 	ALTQ_DEBUG	# Enable ALTQ debugging
```

[altq(9)](https://man.freebsd.org/cgi/man.cgi?query=altq\&sektion=9). The base part enabling hooks via the `ALTQ` option. Individual scheduling policies must be compiled into the base system and cannot be loaded as modules at this stage. ALTQ requires a stable TSC; if the TSC is unstable or changes during CPU throttling, the `ALTQ_NOPCC` option must also be enabled.

```ini
options 	NETGRAPH		# netgraph(4) system ①
options 	NETGRAPH_DEBUG		# Enable extra debugging for netgraph(4) and its nodes
```

* ①: The [netgraph(4)](https://man.freebsd.org/cgi/man.cgi?query=netgraph\&sektion=4) system is a networking toolkit. Use the `NETGRAPH` option to enable netgraph core code.

Individual node types can be enabled via the corresponding options below; however, this is not strictly necessary because if a node type has not been compiled into the kernel, netgraph will automatically load the corresponding KLD module. Each type below has a corresponding manual page, e.g., [ng\_async(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_async\&apropos=0\&sektion=4).

```ini
options 	NETGRAPH_ASYNC # ng_async(4)
options 	NETGRAPH_BLUETOOTH		# ng_bluetooth(4)
options 	NETGRAPH_BLUETOOTH_HCI		# ng_hci(4)
options 	NETGRAPH_BLUETOOTH_L2CAP	# ng_l2cap(4)
options 	NETGRAPH_BLUETOOTH_SOCKET	# ng_btsocket(4)
options 	NETGRAPH_BLUETOOTH_UBT		# ng_ubt(4)
options 	NETGRAPH_BLUETOOTH_UBTBCMFW	# ubtbcmfw(4)
options 	NETGRAPH_BPF # ng_bpf(4)
options 	NETGRAPH_BRIDGE # ng_bridge(4)
options 	NETGRAPH_CAR # ng_car(4)
options 	NETGRAPH_CHECKSUM # ng_checksum(4)
options 	NETGRAPH_CISCO # ng_cisco(4)
options 	NETGRAPH_DEFLATE # ng_deflate(4)
options 	NETGRAPH_DEVICE # ng_device(4)
options 	NETGRAPH_ECHO # ng_echo(4)
options 	NETGRAPH_EIFACE # ng_eiface(4)
options 	NETGRAPH_ETHER # ng_ether(4)
options 	NETGRAPH_FRAME_RELAY # ng_frame_relay(4)
options 	NETGRAPH_GIF # ng_gif(4)
options 	NETGRAPH_GIF_DEMUX # ng_gif_demux(4)
options 	NETGRAPH_HOLE # ng_hole(4)
options 	NETGRAPH_IFACE # ng_iface(4)
options 	NETGRAPH_IP_INPUT # ng_ip_input(4)
options 	NETGRAPH_IPFW # ng_ipfw(4)
options 	NETGRAPH_KSOCKET # ng_ksocket(4)
options 	NETGRAPH_L2TP # ng_l2tp(4)
options 	NETGRAPH_LMI # ng_lmi(4)
options 	NETGRAPH_MPPC_COMPRESSION # ng_mppc(4)
options 	NETGRAPH_MPPC_ENCRYPTION # ng_mppc(4)
options 	NETGRAPH_NETFLOW # ng_netflow(4)
options 	NETGRAPH_NAT # ng_nat(4)
options 	NETGRAPH_ONE2MANY # ng_one2many(4)
options 	NETGRAPH_PATCH # ng_patch(4)
options 	NETGRAPH_PIPE # ng_pipe(4)
options 	NETGRAPH_PPP # ng_ppp(4)
options 	NETGRAPH_PPPOE # ng_pppoe(4)
options 	NETGRAPH_PPTPGRE # ng_pptpgre(4)
options 	NETGRAPH_PRED1 # ng_pred1(4)
options 	NETGRAPH_RFC1490 # ng_rfc1490(4)
options 	NETGRAPH_SOCKET # ng_socket(4)
options 	NETGRAPH_SPLIT # ng_split(4)
options 	NETGRAPH_TAG # ng_tag(4)
options 	NETGRAPH_TCPMSS # ng_tcpmss(4)
options 	NETGRAPH_TEE # ng_tee(4)
options 	NETGRAPH_UI # ng_UI(4)
options 	NETGRAPH_VJC # ng_vjc(4)
options 	NETGRAPH_VLAN # ng_vlan(4)
```

netgraph node types:

* NETGRAPH\_ASYNC --- [ng\_async(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_async\&apropos=0\&sektion=4)
* NETGRAPH\_BLUETOOTH --- [ng\_bluetooth(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_bluetooth\&sektion=4)
* NETGRAPH\_BLUETOOTH\_HCI --- [ng\_hci(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_hci\&sektion=4)
* NETGRAPH\_BLUETOOTH\_L2CAP --- [ng\_l2cap(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_l2cap\&sektion=4)
* NETGRAPH\_BLUETOOTH\_SOCKET --- [ng\_btsocket(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_btsocket\&sektion=4)
* NETGRAPH\_BLUETOOTH\_UBT --- [ng\_ubt(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_ubt\&sektion=4)
* NETGRAPH\_BLUETOOTH\_UBTBCMFW --- [ubtbcmfw(4)](https://man.freebsd.org/cgi/man.cgi?query=ubtbcmfw\&sektion=4)
* NETGRAPH\_BPF --- [ng\_bpf(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_bpf\&sektion=4)
* NETGRAPH\_BRIDGE --- [ng\_bridge(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_bridge\&sektion=4)
* NETGRAPH\_CAR --- [ng\_car(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_car\&sektion=4)
* NETGRAPH\_CHECKSUM --- [ng\_checksum(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_checksum\&sektion=4)
* NETGRAPH\_CISCO --- [ng\_cisco(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_cisco\&sektion=4)
* NETGRAPH\_DEFLATE --- [ng\_deflate(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_deflate\&sektion=4)
* NETGRAPH\_DEVICE --- [ng\_device(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_device\&sektion=4)
* NETGRAPH\_ECHO --- [ng\_echo(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_echo\&sektion=4)
* NETGRAPH\_EIFACE --- [ng\_eiface(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_eiface\&sektion=4)
* NETGRAPH\_ETHER --- [ng\_ether(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_ether\&sektion=4)
* NETGRAPH\_FRAME\_RELAY --- [ng\_frame\_relay(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_frame_relay\&sektion=4)
* NETGRAPH\_GIF --- [ng\_gif(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_gif\&sektion=4)
* NETGRAPH\_GIF\_DEMUX --- [ng\_gif\_demux(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_gif_demux\&sektion=4)
* NETGRAPH\_HOLE --- [ng\_hole(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_hole\&sektion=4)
* NETGRAPH\_IFACE --- [ng\_iface(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_iface\&sektion=4)
* NETGRAPH\_IP\_INPUT --- [ng\_ip\_input(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_ip_input\&sektion=4)
* NETGRAPH\_IPFW --- [ng\_ipfw(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_ipfw\&sektion=4)
* NETGRAPH\_KSOCKET --- [ng\_ksocket(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_ksocket\&sektion=4)
* NETGRAPH\_L2TP --- [ng\_l2tp(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_l2tp\&sektion=4)
* NETGRAPH\_LMI --- [ng\_lmi(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_lmi\&sektion=4)
* NETGRAPH\_MPPC\_COMPRESSION --- [ng\_mppc(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_mppc\&sektion=4)
* NETGRAPH\_MPPC\_ENCRYPTION --- [ng\_mppc(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_mppc\&sektion=4)
* NETGRAPH\_NETFLOW --- [ng\_netflow(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_netflow\&sektion=4)
* NETGRAPH\_NAT --- [ng\_nat(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_nat\&sektion=4)
* NETGRAPH\_ONE2MANY --- [ng\_one2many(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_one2many\&sektion=4)
* NETGRAPH\_PATCH --- [ng\_patch(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_patch\&sektion=4)
* NETGRAPH\_PIPE --- [ng\_pipe(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_pipe\&apropos=0\&sektion=4)
* NETGRAPH\_PPP --- [ng\_ppp(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_ppp\&sektion=4)
* NETGRAPH\_PPPOE --- [ng\_pppoe(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_pppoe\&sektion=4)
* NETGRAPH\_PPTPGRE --- [ng\_pptpgre(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_pptpgre\&sektion=4)
* NETGRAPH\_PRED1 --- [ng\_pred1(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_pred1\&sektion=4)
* NETGRAPH\_RFC1490 --- [ng\_rfc1490(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_rfc1490\&sektion=4)
* NETGRAPH\_SOCKET --- [ng\_socket(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_socket\&sektion=4)
* NETGRAPH\_SPLIT --- [ng\_split(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_split\&sektion=4)
* NETGRAPH\_TAG --- [ng\_tag(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_tag\&sektion=4)
* NETGRAPH\_TCPMSS --- [ng\_tcpmss(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_tcpmss\&sektion=4)
* NETGRAPH\_TEE --- [ng\_tee(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_tee\&sektion=4)
* NETGRAPH\_UI --- [ng\_UI(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_UI\&sektion=4)
* NETGRAPH\_VJC --- [ng\_vjc(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_vjc\&sektion=4)
* NETGRAPH\_VLAN --- [ng\_vlan(4)](https://man.freebsd.org/cgi/man.cgi?query=ng_vlan\&sektion=4)

```ini
options 	VIMAGE
options 	VNET_DEBUG	# VIMAGE debug support
```

[vimage(9)](https://man.freebsd.org/cgi/man.cgi?query=vimage\&sektion=9) (an alias for VNET(9)), used for network stack virtualization.

### Network Interfaces

Network interface devices provide the system with the ability to physically connect to networks.

```ini
device		loop
```

When networking is enabled, the [loop(4)](https://man.freebsd.org/cgi/man.cgi?query=loop\&apropos=0\&sektion=4) device is **required**.

```ini
device		ether
```

The `ether` device provides generic code for handling Ethernet; it is **required** when configuring Ethernet device drivers.

```ini
device		vlan
```

The [vlan(4)](https://man.freebsd.org/cgi/man.cgi?query=vlan\&apropos=0\&sektion=4) device implements Ethernet frame VLAN tagging per IEEE 802.1Q.

```ini
device		vxlan
```

The [vxlan(4)](https://man.freebsd.org/cgi/man.cgi?query=vxlan\&apropos=0\&sektion=4) device implements VXLAN encapsulation of Ethernet frames in UDP packets per RFC 7348.

```ini
device		wlan
options 	IEEE80211_DEBUG		# Enable debug information
options 	IEEE80211_DEBUG_REFCNT
options 	IEEE80211_SUPPORT_MESH	# Enable 802.11s D3.0 / Mesh support
options 	IEEE80211_SUPPORT_TDMA	# Enable TDMA
```

The [wlan(4)](https://man.freebsd.org/cgi/man.cgi?query=wlan\&apropos=0\&sektion=4) device provides generic code supporting 802.11 drivers, including host AP mode; the wi and ath drivers require `wlan`, and it will eventually become a requirement for all 802.11 drivers.

```ini
device		wlan_wep # Support WEP encryption protocol
device		wlan_tkip # Support TKIP encryption protocol
device		wlan_ccmp # Support AES-CCMP encryption protocol
device		wlan_gcmp # Support AES-GCMP encryption protocol
```

Optional devices, dependent on the 802.11 `wlan` module.

```ini
device		wlan_xauth
```

The `wlan_xauth` device provides support for external (i.e., user-space) authenticators for 802.11 drivers that depend on the `wlan` module and support 802.1x and/or WPA security protocols.

```ini
device		wlan_acl
device		wlan_amrr
```

* The `wlan_acl` device provides a MAC-based access control mechanism for 802.11 drivers operating in AP mode and using the `wlan` module.
* The `wlan_amrr` device provides the AMRR transmit rate control algorithm.

```ini
device		bpf
```

The `bpf` device enables the Berkeley Packet Filter. Be aware of the relevant security and administrative implications when enabling this option.

DHCP depends on this option.

```ini
device		netmap
```

The `netmap` device enables memory-mapped access to network devices from user space, achieving wire-speed packet capture and generation even at 10 Gbit/s rates. Requires device driver support. Supported drivers include ixgbe, ixl, iflib (providing igb and em), re, vtnet, cxgbe.

```ini
device		disc
```

The `disc` device implements a minimal network interface that discards all sent packets and never receives any packets, used for testing and performance benchmarking.

```ini
device		epair
```

The `epair` device implements a pair of virtual back-to-back connected Ethernet interfaces.

```ini
device		edsc
```

The `edsc` device implements a minimal Ethernet interface that discards all sent packets and receives no packets.

```ini
device		tuntap
```

The `tuntap` device implements user-space PPP, [nos-tun(8)](https://man.freebsd.org/cgi/man.cgi?query=nos-tun\&sektion=8), and pty-like virtual Ethernet interfaces.

```ini
device		gif
device		gre
device		me
options 	XBONEHACK
```

* The `gif` device implements IPv6 over IPv4 tunneling, IPv4 over IPv6 tunneling, IPv4 over IPv4 tunneling, and IPv6 over IPv6 tunneling
* The `gre` device implements GRE (Generic Routing Encapsulation) tunneling per RFC 2784 and RFC 2890
* The `me` device implements Minimal Encapsulation within IPv4 per RFC 2004
* The `XBONEHACK` option allows configuring the same address pair on multiple `gif` interfaces

```ini
device		stf
```

The `stf` device implements 6to4 encapsulation.

```ini
device		pf
device		pflog
device		pfsync
```

The PF packet filter consists of three devices:

* The `pf` device provides **/dev/pf** and the firewall code itself.
* The `pflog` device provides the `pflog0` interface for logging packets.
* The `pfsync` device provides the `pfsync0` interface for firewall state table synchronization (over the network).

```ini
device		if_bridge
```

Bridged network interface.

```ini
device		carp
```

Common Address Redundancy Protocol (CARP). For more details see: carp(4)\[EB/OL]. \[2026-03-26]. <https://man.freebsd.org/cgi/man.cgi?query=carp&sektion=4>.

```ini
device		enc
```

IPsec interface.

```ini
device		lagg
```

LAGG link aggregation interface.

```ini
device		wg
```

WireGuard interface.

```ini
device		dummymbuf
```

`dummymbuf` is a pfil hook for mbuf modification.

### Internet Protocol Suite

The Internet Protocol Suite provides basic protocol support for network communication.

```ini
options 	MROUTING		# Multicast routing ①
options 	IPFIREWALL		# IP firewall ②
options 	IPFIREWALL_VERBOSE	# Enable logging to syslogd(8) ③
options 	IPFIREWALL_VERBOSE_LIMIT=100	# Limit log verbosity ④
options 	IPFIREWALL_DEFAULT_TO_ACCEPT	# Allow all traffic by default ⑤
options 	IPFIREWALL_NAT		# Provides support for IPFW kernel NAT, requires LIBALIAS
options 	IPFIREWALL_NAT64	# Provides support for IPFW kernel NAT64
options 	IPFIREWALL_NPTV6	# Provides support for IPFW kernel NPTv6
options 	IPDIVERT		# Divert sockets. Enables divert IP sockets, used for ipfw divert; if compiled into the kernel, depends on IPFIREWALL
options 	IPFILTER		# ipfilter support
options 	IPFILTER_LOG		# ipfilter logging
options 	IPFILTER_LOOKUP		# ipfilter pools
options 	IPFILTER_DEFAULT_BLOCK	# Block all packets by default
options 	IPSTEALTH		# Support for stealth forwarding (forward packets without modifying TTL), used to hide firewalls from tools like traceroute
options 	PF_DEFAULT_TO_DROP	# Drop all packets by default, making pf(4) default rules deny all traffic
options 	TCP_BLACKBOX # Enable enhanced TCP event logging
options 	TCP_HHOOK # Enable hhook(9) framework hooks for the TCP stack
options		SOCKET_HHOOK # Enable hhook(9) framework hooks for socket operations
options 	ROUTE_MPATH # Provides multipath routing support
```

* ①: `MROUTING` enables kernel multicast packet forwarding, which can be used with mrouted and XORP.
* ②: `IPFIREWALL` requires the `ipfw` program.
* ③: `IPFIREWALL_VERBOSE` sends logged packets to the system log.
* ④: `IPFIREWALL_VERBOSE_LIMIT` limits the number of log entries for matching rules.

> **Warning**:
>
> IPFIREWALL default policy is `deny ip from any to any`. If no rules are added to allow access at boot time, it may result in being unable to remotely access the system.
>
> It is recommended to set `firewall_type` to `open` in the **/etc/rc.conf** file when first enabling this feature, and then refine firewall rules in the **/etc/rc.firewall** file after confirming the new kernel functionality works correctly.

* ⑤: `IPFIREWALL_DEFAULT_TO_ACCEPT` makes the default rule (at boot) allow all traffic. Use with caution; if an attacker can compromise the firewall host, they may access protected machines. However, it may be suitable as a tool for filtering specific problems on demand. Changing the default policy to `allow` can prevent unresponsiveness when the kernel and **/sbin/ipfw** binary are out of sync.

`IPFIREWALL_PMOD` enables protocol modification module support. Currently only supports TCP MSS modification.

```ini
options 	MBUF_STRESS_TEST
options 	MBUF_PROFILING
```

The `MBUF_STRESS_TEST` option enables various random failure or edge case tests related to mbuf functions. See: mbuf(9)\[EB/OL]. \[2026-03-26]. <https://man.freebsd.org/cgi/man.cgi?query=mbuf&sektion=9> for a list of available test cases.

`MBUF_PROFILING` enables code for analyzing system output mbuf chains and returns logarithmic histograms of monitored parameters (e.g., packet size, wasted space, and number of mbufs in the chain) through the corresponding interface.

```ini
options 	ACCEPT_FILTER_DATA	# Data connection accept filter
options 	ACCEPT_FILTER_DNS	# DNS request accept filter
options 	ACCEPT_FILTER_HTTP	# HTTP request accept filter
options		ACCEPT_FILTER_TLS	# TLS handshake accept filter
```

These options are used to enable statically linked accept filters.

```ini
options 	TCP_SIGNATURE		# Support for RFC 2385
```

`TCP_SIGNATURE` provides support for RFC 2385 (TCP-MD5) digests. These digests are carried via TCP option 19. This option is typically used to protect TCP sessions (e.g., BGP) in situations where IPsec cannot or should not be used.

This feature can be enabled per socket via the TCP\_MD5SIG socket option.

Enabling this feature requires `device crypto` and either `options IPSEC` or `options IPSEC_SUPPORT`.

```ini
options 	DUMMYNET
```

DUMMYNET enables the bandwidth limiter “dummynet”. This feature also requires IPFIREWALL. See: dummynet(4)\[EB/OL]. \[2026-03-26]. <https://man.freebsd.org/cgi/man.cgi?query=dummynet&sektion=4> and ipfw(8)\[EB/OL]. \[2026-03-26]. <https://man.freebsd.org/cgi/man.cgi?query=ipfw&sektion=8>. When running DUMMYNET, HZ/kern.hz should be at least 1000 to ensure sufficiently timely responses.

```ini
options 	DEBUGNET
```

The `DEBUGNET` option enables the basic debugging/network API during kernel panic. NETDUMP and NETGDB require `DEBUGNET`.

```ini
options 	NETDUMP
```

The `NETDUMP` option enables [netdump(4)](https://man.freebsd.org/cgi/man.cgi?query=netdump\&sektion=4) client support in the kernel. It can send kernel dumps to a remote host during a kernel panic.

```ini
options 	NETGDB
```

The `NETGDB` option enables [netgdb(4)](https://man.freebsd.org/cgi/man.cgi?query=netgdb\&sektion=4) support in the kernel. It can make a panicked kernel available as a GDB remote debugging target over the network.

## File Systems

Only the root file system needs to be statically compiled or preloaded as a module; other file systems can be loaded automatically at mount time. However, some users prefer to statically compile other file systems as well.

> **Note**
>
> The UNION filesystem previously had bugs and is now actively maintained, although some issues still need to be resolved.

```ini
options 	FFS			# Fast Filesystem, i.e., UFS
options 	NFSCL			# Network File System client (NFS client)
```

At least one of the above options must be selected.

```ini
options 	AUTOFS			# Automount file system
options 	CD9660			# ISO 9660 file system
options 	FDESCFS			# File descriptor file system
options 	FUSEFS			# FUSEFS support module
options 	MSDOSFS			# MS DOS file system (FAT, FAT32)
options 	NFSLOCKD		# Network lock manager
options 	NFSD			# Network File System server
options 	KGSSAPI			# Kernel GSSAPI implementation

options 	NULLFS			# NULL file system
options 	PROCFS			# Process file system (requires PSEUDOFS)
options 	PSEUDOFS		# Pseudo file system framework
options 	PSEUDOFS_TRACE		# PSEUDOFS debugging support
options 	SMBFS			# SMB/CIFS file system
options 	TMPFS			# Efficient memory file system
options 	UDF			# Universal Disk Format
options 	UNIONFS			# Union file system
```

The above options are all optional.

```ini
options 	NFS_ROOT
```

Support for using NFS as the root filesystem (root device).

```ini
options 	SOFTUPDATES
```

Soft Updates improve filesystem performance and reduce the risk of data inconsistency due to sudden shutdowns.

```ini
options 	UFS_EXTATTR # ①
options 	UFS_EXTATTR_AUTOSTART # ②
```

UFS Extended Attributes allow additional data to be associated with files, used for ACLs, Capabilities, and MAC labels. See `src/sys/ufs/ufs/README.extattr` for more information.

* ①: `UFS_EXTATTR`: Extended attributes allow additional arbitrary metadata to be associated with files and directories, which can be allocated and read from user space as well as operated on within the kernel; see extattrctl(8).
* ②: If the option `UFS_EXTATTR_AUTOSTART` is defined, UFS will search for the `.attribute` subdirectory under the filesystem root during mount operations. If found, extended attribute support will be automatically enabled for that filesystem.

See: ffs(7)\[EB/OL]. \[2026-03-26]. <https://man.freebsd.org/cgi/man.cgi?query=ffs&sektion=7>.

```ini
options 	UFS_ACL
```

Support for Access Control Lists (ACLs) on UFS filesystems. The current ACL implementation depends on the underlying filesystem's extended attribute support (UFS\_EXTATTR). See `src/sys/ufs/ufs/README.acls` for more information.

```ini
options 	UFS_DIRHASH
```

UFS Directory Hashing improves the speed of operations on very large directories at the cost of memory consumption.

```ini
options 	UFS_GJOURNAL
```

UFS journaling support based on [gjournal(8)](https://man.freebsd.org/cgi/man.cgi?query=gjournal\&sektion=8).

```ini
options 	MD_ROOT_SIZE=10
```

Reserves space in the kernel for an md device-based root filesystem. The value defined here is the number of kilobytes (KB) reserved for the filesystem.

This definition is now optional.

* If not defined, the root filesystem passed via the `MFS_IMAGE` build option will be automatically embedded into the kernel at link time, and its actual size will occupy kernel space entirely.
* If defined, the legacy kernel embedded filesystem method is used: a fixed space of `MD_ROOT_SIZE` kilobytes (KB) is first allocated in the kernel, and if the filesystem image passed via the `MFS_IMAGE` build option matches the size, it will be written into the reserved area using the `dd` command.

```ini
options 	MD_ROOT
```

Configures the md device as a potential root device, supporting preloaded mfs\_root and md\_root type images.

```ini
options 	MD_ROOT_READONLY
```

Enables write protection for the md root device to prevent it from being mounted writable.

```ini
options 	MD_ROOT_MEM
```

Allows reading md images from external memory regions.

```ini
options 	QUOTA			# Enable disk quotas
```

Enabling this option enables disk quota support.

```ini
options 	SUIDDIR
```

If the device is used solely as a file server for PC and MAC users (using Samba services), it is recommended to enable this option and set user directories on filesystems that support the `suiddir` mount option. This setting causes newly created files to automatically inherit the directory owner's permissions (similar to group permissions).

> **Note**
>
> If these users are allowed to execute programs, there will be security risks, so please limit usage to pure file server environments (this can effectively avoid many administrative difficulties). Directories owned by the root user are not subject to this restriction, and the execute permission bit will be automatically cleared.

> **Note**
>
> The directory must also have the suid permission bit set (see chmod(1) manual for details). Since PC users cannot view/set file ownership, permission conflicts often occur. After enabling this feature, the relevant filesystem will align with user intuition: “Since this is my directory, the files I create naturally belong to me,” thereby significantly reducing technical support requirements.

```ini
options 	NFS_MINATTRTIMO=3	# VREG attribute cache timeout (seconds)
options 	NFS_MAXATTRTIMO=60
options 	NFS_MINDIRATTRTIMO=30	# VDIR attribute cache timeout (seconds)
options 	NFS_MAXDIRATTRTIMO=60
options 	NFS_DEBUG		# Enable NFS debugging
```

Several NFS options.

```ini
options 	EXT2FS
```

Provides support for the Linux EXT2 filesystem.

Use this feature with extreme caution; the ext2 code often lags behind kernel updates and lacks sufficient testing, so mounting in read-write mode may be risky (even mounting in read-only mode may cause system crashes).

```ini
device		mem
```

System memory devices: **/dev/mem**, **/dev/kmem**

```ini
device		ksyms
```

Kernel symbol table device: **/dev/ksyms**.

```ini
options 	CD9660_ICONV
options 	MSDOSFS_ICONV
options 	UDF_ICONV
```

Optional character encoding conversion support, requires `LIBICONV`. Each option requires its base filesystem and the `LIBICONV` library.

## POSIX P1003.1B

POSIX P1003.1B is the real-time extension of the POSIX standard, providing features such as priority scheduling, semaphores, and message queues.

```ini
options 	_KPOSIX_PRIORITY_SCHEDULING
```

The real-time extension `_KPOSIX_PRIORITY_SCHEDULING` added in the 1993 POSIX standard provides support for `_POSIX_PRIORITY_SCHEDULING`.

```ini
options 	P1003_1B_SEMAPHORES
```

The `p1003_1b_semaphores` feature is still highly experimental; if issues arise, users need to assist with debugging.

```ini
options 	P1003_1B_MQUEUE
```

POSIX message queues.

## Security Policy Parameters

Security policy parameters provide kernel configuration options related to system security, including auditing, mandatory access control, and other features.

```ini
options 	AUDIT
```

BSM auditing.

```ini
options 	MAC
options 	MAC_BIBA
options 	MAC_BSDEXTENDED
options 	MAC_DDB
options 	MAC_DO
options 	MAC_IFOFF
options 	MAC_IPACL
options 	MAC_LOMAC
options 	MAC_MLS
options 	MAC_NONE
options 	MAC_NTPD
options 	MAC_PARTITION
options 	MAC_PORTACL
options 	MAC_PRIORITY
options 	MAC_SEEOTHERUIDS
options 	MAC_STUB
options 	MAC_TEST
options 	MAC_VERIEXEC
options 	MAC_VERIEXEC_SHA1
options 	MAC_VERIEXEC_SHA256
options 	MAC_VERIEXEC_SHA384
options 	MAC_VERIEXEC_SHA512
device		mac_veriexec_parser
```

Mandatory Access Control (MAC).

```ini
options 	CAPABILITIES	# Fine-grained capability control for file descriptors
options 	CAPABILITY_MODE	# Sandbox environment (no access to global namespaces)
```

Capsicum technology.

## Clock

Clock options are used to configure the kernel clock frequency and time synchronization related features.

```ini
options 	HZ=100
```

The operation granularity is controlled by the kernel option `HZ` (default frequency is 1000 Hz, i.e., a scheduling interval of 1 millisecond).

Virtual machine guest systems typically use the value `100`. Lower values may reduce system overhead at the cost of scheduling precision, but the adaptive timer code can mitigate this overhead.

```ini
options 	PPS_SYNC
```

Enables the kernel PLL to use external PPS signal functionality, operating under the supervision of \[x]ntpd(8). See the ntpd documentation for more information: <https://www.ntp.org>

```ini
options 	FFCLOCK
```

Enables support for generic feed-forward clock in the kernel. Feed-forward clock support is an alternative to the feedback-oriented ntpd/system clock approach and requires a feed-forward synchronization algorithm (e.g., RADclock). See: <https://www.synclab.org/radclock>

## SCSI Devices

SCSI (Small Computer System Interface) is a standard interface for connecting computers and external devices.

```ini
envvar		hint.scbus.0.at="ahc0"
envvar		hint.scbus.1.at="ahc1"
envvar		hint.scbus.1.bus="0"
envvar		hint.scbus.3.at="ahc2"
envvar		hint.scbus.3.bus="0"
envvar		hint.scbus.2.at="ahc2"
envvar		hint.scbus.2.bus="1"
envvar		hint.da.0.at="scbus0"
envvar		hint.da.0.target="0"
envvar		hint.da.0.unit="0"
envvar		hint.da.1.at="scbus3"
envvar		hint.da.1.target="1"
envvar		hint.da.2.at="scbus2"
envvar		hint.da.2.target="3"
envvar		hint.sa.1.at="scbus1"
envvar		hint.sa.1.target="6"
```

SCSI device configuration.

The SCSI subsystem consists of SCSI core code, multiple high-level SCSI device “type” drivers, and low-level host adapter device drivers. Refer to the ISA and PCI device configuration sections below for the host adapter list.

The system can fix SCSI device configurations to ensure that specific buses, targets, and LUNs always correspond to the same device unit. In earlier versions, device unit numbers were assigned in the order detected on the SCSI bus. This means that if a disk drive is removed, the file **/etc/fstab** may need to be rewritten; caution is also needed when adding new disks, as new devices may be probed earlier, changing the configuration of existing devices.

The system maintains this legacy behavior by default. Device unit allocation will start from the first non-fixed unit of that device type. For example, if a disk is fixed as `da3`, the first non-fixed disk will be assigned as `da4`.

The syntax for device fixing configuration is as described above.

```ini
device		scbus		# SCSI core code
device		ch		# SCSI media changer
device		da		# SCSI direct access ("disk") and optical media ("WORM") devices
device		sa		# SCSI tape
device		cd		# SCSI read-only direct access ("CD-ROM")
device		ses		# Enclosure services (SES and SAF-TE)
device		pt		# SCSI processor
device		targ		# SCSI target mode code
device		targbh		# SCSI target mode black hole device
device		pass		# CAM passthrough driver
device		sg		# Linux SCSI passthrough
device		ctl		# CAM Target Layer
```

Devices that do not explicitly specify a “unit” (SCSI logical unit number) will default to LUN 0.

All SCSI devices will be allocated the appropriate number of units based on actual needs.

* The ch driver is used to drive SCSI media changer (“jukebox”) devices.
* The da driver is used to drive SCSI direct access (“disk”) and optical media (“WORM”) devices.
* The sa driver is used to drive SCSI sequential access (“tape”) devices.
* The cd driver is used to drive SCSI read-only direct access (“CD-ROM”) devices.
* The ses driver is used to drive SCSI Enclosure Services (“ses”) and SAF-TE (“SCSI Accessed Fault-Tolerant Enclosure”) devices.
* The `pt` driver is used to drive SCSI processor devices.
* The `sg` driver provides a passthrough API compatible with the Linux SG driver, and can work with Linux emulators to run Linux SG applications. It can also run independently, providing source-level API compatibility for porting applications to FreeBSD.

Target mode support is implemented in this section, but still requires corresponding support from the SIM (SCSI host adapter driver).

* The `targ` driver provides target mode support in the form of a processor type device, whose purpose is to provide the minimal context environment needed to respond to inquiry commands. The **/usr/share/examples/scsi\_target** directory contains user application examples demonstrating how to implement support for the remaining commands.
* The `targbh` driver provides target mode support specifically for responding to incoming commands for unassigned logical units.
* The `pass` driver provides a passthrough API for accessing the CAM subsystem.

## CAM

CAM, Common Access Method storage subsystem, see: cam(4)\[EB/OL]. \[2026-03-26]. <https://man.freebsd.org/cgi/man.cgi?query=CAM&sektion=4&n=1>.

### CAM Debugging

The following are kernel configuration options related to CAM debugging.

```ini
options 	CAMDEBUG
```

Enable and compile all debugging features.

```ini
options 	CAM_DEBUG_COMPILE=-1
```

Specify the debug level to compile into the kernel.

```ini
options 	CAM_DEBUG_FLAGS=(CAM_DEBUG_INFO|CAM_DEBUG_PROBE|CAM_DEBUG_PERIPH)
```

Specify the debug level to enable at system boot.

```ini
options 	CAM_DEBUG_BUS=-1
```

Restrict debugging to the specified bus.

```ini
options 	CAM_DEBUG_TARGET=-1
```

Restrict debugging to the specified target.

```ini
options 	CAM_DEBUG_LUN=-1
```

Restrict debugging to the specified LUN.

```ini
options 	CAM_DEBUG_DELAY=1
```

Delay time (in microseconds) after printing each line of debug information.

```ini
options 	CAM_MAX_HIGHPOWER=4
```

Maximum number of high-power (START UNIT) commands executed concurrently.

```ini
options 	SCSI_NO_SENSE_STRINGS
```

Defining this option disables sense description strings.

```ini
options 	SCSI_NO_OP_STRINGS
```

Defining this option disables opcode description strings.

```ini
options 	SCSI_DELAY=5000	# Use conservative delay for regular SCSI devices
```

`SCSI_DELAY`: The number of milliseconds to freeze the SIM (SCSI adapter) queue after a bus reset, and the number of milliseconds to freeze the device queue after a bus device reset. This value can be changed at boot time and runtime via the sysctl tunable `kern.cam.scsi_delay`.

```ini
options 	CAM_IOSCHED_DYNAMIC
```

Enables dynamic decision-making in the I/O scheduler based on hints and the current performance of storage devices.

```ini
options 	CAM_IO_STATS
```

Displays additional CAM device statistics via sysctl.

```ini
options 	CAM_TEST_FAILURE
```

Enables the ability to simulate I/O failures.

### CAM CD-ROM Read-Only Direct Access ("CD-ROM") Devices

The following are kernel configuration options related to CD-ROM devices.

```ini
options 	CHANGER_MIN_BUSY_SECONDS=2
```

Minimum guaranteed service time slice for changer LUNs.

The compile-time default value for this variable is 2 seconds. It can be adjusted via the sysctl `kern.cam.cd.changer.min_busy_seconds`.

```ini
options 	CHANGER_MAX_BUSY_SECONDS=10
```

Maximum time slice per changer LUN, only effective when there is I/O waiting for other LUNs.

The compile-time default value for this variable is 10 seconds. It can be adjusted via the sysctl `kern.cam.cd.changer.max_busy_seconds`.

### CAM Sequential Access ("Tape") Device Driver

The following are kernel configuration options related to tape devices.

```ini
options 	SA_IO_TIMEOUT=4
```

Timeout for read/write/WFM operations, in minutes.

```ini
options 	SA_SPACE_TIMEOUT=60
```

Timeout for space operations, in minutes.

```ini
options 	SA_REWIND_TIMEOUT=(2*60)
```

Timeout for rewind operations, in minutes.

```ini
options 	SA_ERASE_TIMEOUT=(4*60)
```

Timeout for erase operations, in minutes.

```ini
options 	SA_1FM_AT_EOD
```

Default for device models that only have a single file mark at the end of tape (EOT).

### CAM Processor Target (PT) Device

The following are kernel configuration options related to processor target devices.

```ini
options 	SCSI_PT_DEFAULT_TIMEOUT=60
```

Timeout for CAM processor target (pt) devices (optional), in seconds. Default value is 60 seconds.

### SES Passthrough Access on Other Devices (e.g., Disks)

The following are kernel configuration options related to SES passthrough access.

```ini
options 	SES_ENABLE_PASSTHROUGH
```

Since many newer SCSI disks report themselves as having SES (SCSI Enclosure Services) capabilities, they may conflict with the SES device of the enclosure containing the disk when building the topology, this feature is typically disabled by default.

### iSCSI

iSCSI is a protocol for accessing SCSI devices over network connections.

```ini
device		cfiscsi		# CAM Target Layer iSCSI target frontend
device		iscsi		# iSCSI initiator
device		iser		# iSCSI RDMA Extensions (iSER) initiator
```

iSCSI allows access to SCSI peripherals over network connections (e.g., TCP/IP sockets).

## Miscellaneous Devices and Options

The following are various miscellaneous devices and kernel configuration options.

```ini
device		pty
```

BSD-style compatible pseudo terminals (pty).

```ini
device		nmdm
```

Back-to-back tty devices.

```ini
device		md
```

Memory-based (allocated via malloc) disk device.

```ini
device		snp
```

Snoop device, used to monitor terminal devices such as pty, vty, etc.

```ini
device		ccd
```

Concatenated Disk driver. This driver's functionality has been superseded by gconcat(8) (disk concatenation), gstripe(8) (disk striping), gmirror(8) (disk mirroring), and graid(8) (software RAID) under the GEOM framework. New deployments are recommended to use the corresponding GEOM modules.

```ini
device		firmware
```

[firmware(9)](https://man.freebsd.org/cgi/man.cgi?query=firmware\&sektion=9) support, firmware image loading and management.

```ini
options 	LIBICONV
```

Kernel-side iconv library, see: iconv(3)\[EB/OL]. \[2026-03-26]. <https://man.freebsd.org/cgi/man.cgi?query=iconv&sektion=3>.

```ini
options 	MSGBUF_SIZE=40960
```

Size of the kernel message buffer. Should be **N × pagesize (memory page size)**.

## Hardware Bus Configuration

Hardware bus configuration is used to set up communication interfaces between the system and hardware devices.

```ini
device		pci
options 	PCI_HP			# PCIe native hot-plug
options 	PCI_IOV			# PCI SR-IOV support
```

PCI bus and its related options.

## Hardware Device Configuration

For ISA buses, the required hints are listed. PCI, CardBus, and SD/MMC are self-identifying buses, so hints are not required.

### Required Devices

The following are basic device configuration options required for system operation.

```ini
options 	KBD_DISABLE_KEYMAP_LOAD	# Deny loading of keyboard layouts
options 	KBD_INSTALL_CDEV	# Generate CDEV entries in /dev
```

These options also apply to other keyboard drivers.

```ini
options 	KBD_DELAY1=200		# Define initial key delay
options 	KBD_DELAY2=15		# Define key repeat delay
```

Define keyboard delay parameters (for a responsive interactive console, try `200` and `15`).

```ini
device		kbdmux			# Keyboard multiplexer
options 	KBDMUX_DFLT_KEYMAP	# Specify built-in keyboard layout
makeoptions	KBDMUX_DFLT_KEYMAP=it.iso  # Set default keyboard layout to Italian ISO
```

```ini
options 	FB_DEBUG
```

Framebuffer debugging.

```ini
options 	TEKEN_CONS25		# cons25 style terminal emulation
options 	TEKEN_UTF8		# UTF-8 output processing
```

Enable experimental feature support for the syscons terminal emulator (teken).

```ini
device		vt
options 	VT_ALT_TO_ESC_HACK=1	# Add ESC sequence before ALT key
options 	VT_MAXWINDOWS=16	# Number of virtual consoles
options 	VT_TWOBUTTON_MOUSE	# Use right button to paste
```

vt video console driver.

```ini
options 	VT_FB_MAX_HEIGHT=480  # Height
options 	VT_FB_MAX_WIDTH=640  # Width
```

The above options are used to set the maximum framebuffer size.

```ini
options 	TERMINAL_NORM_ATTR=(FG_GREEN|BG_BLACK)  # Set normal terminal text color: foreground green, background black
options 	TERMINAL_KERN_ATTR=(FG_LIGHTRED|BG_BLACK)  # Set kernel message text color: foreground light red, background black
```

The above options are used to customize the default vt terminal colors.

### Optional Devices

The following are various optional hardware device driver configuration options.

#### SCSI Host Adapters

```ini
device		aacraid
```

PMC Adaptec RAID controllers, supporting 6th, 7th, 8th generation and later models. This driver uses the CAM container interface.

```ini
device		ahc
```

Adaptec 274x, 284x, 2910, 293x, 294x, 394x, 3950x, 3960x, 398x, 4944, 19160x, 29160x, and aic7770/aic78xx series.

```ini
device		ahd
```

Adaptec 29320/39320 controllers

```ini
device		isp
```

* Qlogic ISP 1020, 1040, and 1040B PCI SCSI host adapters
* ISP 1240 Dual Ultra SCSI, ISP 1080 and 1280 (Dual) Ultra2
* ISP 12160 Ultra3 SCSI
* Qlogic ISP 2100 and ISP 2200 1Gb Fibre Channel host adapters
* Qlogic ISP 2300 and ISP 2312 2Gb Fibre Channel host adapters
* Qlogic ISP 2322 and ISP 6322 2Gb Fibre Channel host adapters

```ini
envvar		hint.isp.0.disable="1"
envvar		hint.isp.0.role="3"
envvar		hint.isp.0.prefer_iomap="1"
envvar		hint.isp.0.prefer_memmap="1"
envvar		hint.isp.0.fwload_disable="1"
envvar		hint.isp.0.ignore_nvram="1"
envvar		hint.isp.0.fullduplex="1"
envvar		hint.isp.0.topology="lport"
envvar		hint.isp.0.topology="nport"
envvar		hint.isp.0.topology="lport-only"
envvar		hint.isp.0.topology="nport-only"
```

Description of isp-related hint parameters.

```ini
envvar		hint.isp.0.portwnn="w50000000aaaa0000"
envvar		hint.isp.0.nodewnn="w50000000aaaa0001"
```

isp-related hints.

This workaround is adopted because values of type `u_int64_t` cannot be obtained and strings starting with `0x` cannot be parsed.

```ini
device		ispfw
```

Firmware module for Qlogic host adapters.

```ini
#device		mpi3mr
```

Broadcom MPIMR 3.0 IT/IR 24Gb/s SAS Tri-Mode RAID controller (aarch64 and amd64 only).

```ini
device		mpr
```

3rd generation LSI-Logic MPT/Fusion (aarch64 and amd64 only).

```ini
device		mps
```

2nd generation LSI-Logic MPT/Fusion (aarch64 and amd64 only).

```ini
device		mpt
```

LSI-Logic MPT/Fusion 53c1020, 53c1030 Ultra4, FC9x9 Fibre Channel host adapters.

```ini
device		sym
```

Symbios/Logic 53C8XX series PCI-SCSI I/O processors (aarch64 and amd64 only):

* 53C810
* 53C810A
* 53C815
* 53C825
* 53C825A
* 53C860
* 53C875
* 53C876
* 53C885
* 53C895
* 53C895A
* 53C896
* 53C897
* 53C1510D
* 53C1010-33
* 53C1010-66

```ini
options 	AHC_ALLOW_MEMIO
```

Only when this option is set will the aic7xxx driver attempt to use memory-mapped I/O for all PCI controllers configured with memory-mapped I/O. However, this method does not work correctly on some motherboards, so it cannot be the default setting.

```ini
options 	AHC_DUMP_EEPROM
```

Dump the contents of the ahc controller configuration PROM.

```ini
options 	AHC_TMODE_ENABLE
```

Enable the target mode operation unit bitmap for [ahc(4)](https://man.freebsd.org/cgi/man.cgi?query=ahc\&sektion=4).

```ini
options 	AHC_DEBUG
```

Compile Aic7xxx debugging code.

```ini
options 	AHC_DEBUG_OPTS
```

Aic7xxx driver debug options. See: sys/dev/aic7xxx/aic7xxx.h\[EB/OL]. \[2026-03-26]. <https://github.com/freebsd/freebsd-src/blob/main/sys/dev/aic7xxx/aic7xxx.h>.

```ini
options 	AHC_REG_PRETTY_PRINT
```

Print register bit fields in debug output. Increases the driver size by approximately 128 KB. See: ahc(4)\[EB/OL]. \[2026-03-26]. <https://man.freebsd.org/cgi/man.cgi?query=ahc&sektion=4>.

```ini
options 	AHD_DEBUG
```

Compile aic79xx debugging code.

```ini
options 	AHD_DEBUG_OPTS=0xFFFFFFFF
```

Aic79xx driver debug options. Increases the driver size by approximately 215 KB. See: ahd(4)\[EB/OL]. \[2026-03-26]. <https://man.freebsd.org/cgi/man.cgi?query=ahd&sektion=4>.

```ini
options 	AHD_REG_PRETTY_PRINT
```

Print readable register definitions when debugging.

```ini
options 	AHD_TMODE_ENABLE
```

Enable the target mode operation unit bitmap for [ahd(4)](https://man.freebsd.org/cgi/man.cgi?query=ahd\&sektion=4).

#### `dev/isp/` (Qlogic SCSI/FC Driver) Related

The following are kernel configuration options related to the Qlogic ISP driver.

```ini
options 	ISP_TARGET_MODE=1
```

`ISP_TARGET_MODE` enables [isp(4)](https://man.freebsd.org/cgi/man.cgi?query=isp\&sektion=4) target mode operation.

```ini
options 	ISP_DEFAULT_ROLES=0
```

`ISP_DEFAULT_ROLES`: default roles.

* none = 0
* target = 1
* initiator = 2
* both = 3 (currently not supported)

```ini
#	ISP_INTERNAL_TARGET		(simple internal disk target for testing)
```

> **Note**
>
> This item appears as-is in the original text; it is uncertain whether it is an options entry. Readers should verify for themselves.

```ini
#options 	SYM_SETUP_SCSI_DIFF
```

HVD support for 825A, 875, 885.

Disabled: 0 (default); Enabled: 1.

```ini
#options 	SYM_SETUP_PCI_PARITY
```

PCI parity check.

Disabled: 0; Enabled: 1 (default).

```ini
#options 	SYM_SETUP_MAX_LUN
```

Number of supported LUNs.

Default: 8, range: 1-64.

```ini
device		ciss
```

Compaq “CISS” RAID controllers (Smart Array 5\*/6\* series).

These controllers provide a SCSI-like interface and depend on the CAM infrastructure.

```ini
device		ida		# Compaq Smart RAID
device		mlx		# Mylex DAC960
device		mfi		# LSI MegaRAID SAS
device		mfip		# LSI MegaRAID SAS passthrough, requires CAM
options 	MFI_DEBUG
device		mrsas		# LSI/Avago MegaRAID SAS/SATA, 6Gb/s and 12Gb/s
```

Compaq Smart RAID, Mylex DAC960, and AMI MegaRAID controllers.

Only the relevant entries need to be added; the code automatically discovers and configures all controllers it supports.

#### NVMe

NVMe is an interface protocol designed specifically for flash storage.

```ini
device		nvme		# PCIe NVMe host driver/host controller
options 	NVME_USE_NVD=1	# Use nvd(4) instead of CAM's nda(4) driver
device		nvmf		# NVMeoF host driver/NVMeoF host
device		nvmft		# NVMeoF ctl(4) frontend / NVMeoF CAM Target Layer frontend
device		nvmf_tcp	# NVMeoF TCP transport
device		nda		# NVMe direct access device (i.e., disk)
device		nvd		# Non-CAM NVMe disk driver. Exposes NVMe namespaces as disks, depends on nvme
```

#### Serial ATA (SATA) Host Controllers

SATA is an interface standard for connecting storage devices.

```ini
device		ahci		# AHCI-compliant SATA controllers
```

Compatible with Advanced Host Controller Interface (AHCI).

```ini
device		mvs
```

Marvell 88SX50XX/88SX60XX/88SX70XX/SoC SATA controllers.

```ini
device		siis
```

SiliconImage SiI3124/SiI3132/SiI3531 SATA controllers.

```ini
device		ada
```

ATA/SATA direct access devices (i.e., disks).

The above drivers are all part of the [cam(4)](https://man.freebsd.org/cgi/man.cgi?query=cam\&sektion=4) subsystem.

They replace the less feature-rich [ata(4)](https://man.freebsd.org/cgi/man.cgi?query=ata\&sektion=4) subsystem drivers and support the same hardware.

***

```ini
device		ata		# Legacy ATA/SATA controller
```

The `ATA` driver supports all legacy ATA/ATAPI controllers, including PC Card devices.

On modern hosts, simply adding the line `device ata` allows the system to discover all PCI and PC Card ATA/ATAPI devices.

It is also possible to use the `atacore` driver and then select individual bus and chipset drivers by vendor. For example, to build a system that only supports VIA chipsets, you can omit the `ata` line and only include the `atacore`, `atapci`, and `atavia` drivers.

```ini
#device		atacore		# ATA core functionality
#device		ataisa		# ISA bus support
#device		atapci		# PCI bus support; generic chipset support only
```

Modular ATA drivers.

```ini
#device		ataacard	# ACARD
#device		ataacerlabs	# Acer Labs Inc. (ALI)
#device		ataamd		# Advanced Micro Devices (AMD)
#device		ataati		# ATI
#device		atacenatek	# Cenatek
#device		atacypress	# Cypress
#device		atacyrix	# Cyrix
#device		atahighpoint	# HighPoint
#device		ataintel	# Intel
#device		ataite		# Integrated Technology Inc. (ITE)
#device		atajmicron	# JMicron
#device		atamarvell	# Marvell
#device		atamicron	# Micron
#device		atanational	# National
#device		atanetcell	# NetCell
#device		atanvidia	# nVidia
#device		atapromise	# Promise
#device		ataserverworks	# ServerWorks
#device		atasiliconimage	# Silicon Image Inc. (SiI) (formerly CMD)
#device		atasis		# Silicon Integrated Systems Corp. (SiS)
#device		atavia		# VIA Technologies Inc.
```

PCI ATA chipsets.

```ini
envvar		hint.ata.0.at="isa"
envvar		hint.ata.0.port="0x1f0"
envvar		hint.ata.0.irq="14"
envvar		hint.ata.1.at="isa"
envvar		hint.ata.1.port="0x170"
envvar		hint.ata.1.irq="15"
```

For older non-PCI, non-PnP BIOS systems, these hint lines need to be added.

#### Serial Interface (uart)

The serial interface provides serial communication capability between the system and external devices.

```ini
device		uart
```

[uart(4)](https://man.freebsd.org/cgi/man.cgi?query=uart\&sektion=4) generic serial interface driver.

```ini
options 	UART_PPS_ON_CTS		# Use CTS instead of DCD to capture time pulses
options 	UART_POLL_FREQ		# Set polling frequency, used when hardware does not support interrupts (default 50 Hz)
```

[uart(4)](https://man.freebsd.org/cgi/man.cgi?query=uart\&sektion=4) driver options.

```ini
envvar		hint.uart.0.at="isa"
```

This hint should only be used for pure ISA devices; it is not needed in other cases and is strongly discouraged.

```ini
envvar		hint.uart.0.port="0x3f8"
envvar		hint.uart.0.flags="0x10"
envvar		hint.uart.0.baud="115200"
```

The above three hints: UART is a system device (e.g., console or debug port) and is only used when the platform has no other way to pass information to the kernel. The hint unit number (i.e., `0`) is only used to group hints together and is unrelated to the unit number of the probed UART.

`flags` is used for serial drivers that support consoles, such as [uart(4)](https://man.freebsd.org/cgi/man.cgi?query=uart\&sektion=4):

* 0x10: Enable console support for this unit. Other console flags (if applicable) are ignored when this flag is not set. Enabling console support does not mean the unit is the preferred console. It can be enabled by using `-h` at boot, or by setting `boot_serial=YES` in the loader. Currently, at most one unit can have console support enabled; the first unit in the configuration file with this flag set is preferred.
* `0x80`: Use this port for serial line gdb support in ddb, also known as the debug port.

```ini
options 	BREAK_TO_DEBUGGER
```

Options for serial drivers supporting consoles:

`BREAK_TO_DEBUGGER`: BREAK/DBG on the console will enter ddb (if available)

```ini
options 	ALT_BREAK_TO_DEBUGGER
```

Solaris implemented a new BREAK, triggered by the character sequence `CR ~ ^b` (press **Enter**, then `~`, then the shortcut **Ctrl** + **B**. Similar below), similar to the common pattern used on remote consoles on Sun servers.

FreeBSD has supplemented this feature: `CR ~ ^p` triggers a forced panic, `CR ~ ^r` triggers a clean reboot.

```ini
device		scc
```

Serial communication controller.

Supports Freescale/NXP Quad Integrated and Zilog Z8530 multi-channel communication controllers.

```ini
device		puc
```

PCI generic communication driver.

Supports various multi-port PCI I/O cards.

#### Network Interfaces

The following are configuration options for various network interface device drivers.

**MII Bus**

```ini
device  	mii		# Minimal MII support
device  	mii_bitbang	# Generic module for bit-bang MII operations
device  	miibus		# MII support, with bit-bang and all PHYs
```

The MII bus is required for many PCI Ethernet cards, especially those using MII-compatible transceivers or implementing MII-like transceiver control interfaces.

Adding `device miibus` to the kernel configuration introduces support for the generic miibus API, generic bit-bang support for MII, and all PHY drivers, including a generic driver for PHYs not specifically handled by an individual driver.

If a NIC driver requires support for specific PHYs, this can be achieved by adding `device mii`, `device mii_bitbang`, and then the corresponding PHY drivers.

```ini
device  	acphy		# Altima Communications AC101
device  	amphy		# AMD AM79c873 / Davicom DM910{1,2}
device  	atphy		# Attansic/Atheros F1
device  	axphy		# Asix Semiconductor AX88x9x
device  	bmtphy		# Broadcom BCM5201/BCM5202 and 3Com 3c905C
```

```ini
device		bnxt		# Broadcom NetXtreme-C/NetXtreme-E
```

This driver is based on the generic MII bus controller code. `bnxt` supports Broadcom NetXtreme-C and NetXtreme-E PCIe 10/25/50G Ethernet adapters.

```ini
device  	brgphy		# Broadcom BCM54xx/57xx 1000baseTX
device  	cgem		# Cadence GEM Gigabit Ethernet
device  	ciphy		# Cicada/Vitesse CS/VSC8xxx
device  	e1000phy	# Marvell 88E1000 1000/100/10-BT
device  	gentbi		# Generic 10-bit 1000BASE-{LX,SX} fiber interface
device  	icsphy		# ICS ICS1889-1893
device  	ip1000phy	# IC Plus IP1000A/IP1001
device  	jmphy		# JMicron JMP211/JMP202
device  	lxtphy		# Level One LXT-970
device  	nsgphy		# NatSemi DP8361/DP83865/DP83891
device  	nsphy		# NatSemi DP83840A
device  	nsphyter	# NatSemi DP83843/DP83815
device  	pnaphy		# HomePNA
device  	qsphy		# Quality Semiconductor QS6612
device  	rdcphy		# RDC Semiconductor R6040
device  	rgephy		# Realtek 8169S/8110S/8211B/8211C
device  	rlphy		# Realtek 8139
device  	rlswitch	# Realtek 8305
device  	smcphy		# SMSC LAN91C111
device  	tdkphy		# TDK 89Q2120
device  	truephy		# LSI TruePHY
device		xmphy		# XaQti XMAC II
```

**PCI Ethernet Cards Based on Generic MII Bus Controller Code**

> **Tip**
>
> `bxe` Broadcom NetXtreme II (BCM5771X/BCM578XX) PCIe 10Gb Ethernet adapter. Entry located in `sys/x86/conf/NOTES`. This PCI Ethernet card is based on the generic MII bus controller code.

```ini
device		ae		# Attansic/Atheros L2 Fast Ethernet
```

Supports 10/100Mbps Fast Ethernet adapters based on Attansic/Atheros L2 PCI-Express FastEthernet controllers.

```ini
device		age		# Attansic/Atheros L1 Gigabit Ethernet
```

Supports Gigabit Ethernet adapters based on Attansic/Atheros L1 PCIe Gigabit Ethernet controllers.

```ini
device		alc		# Atheros AR8131/AR8132 Ethernet
```

Supports Atheros AR8131/AR8132 PCIe Ethernet controllers.

```ini
device		ale		# Atheros AR8121/AR8113/AR8114 Ethernet
```

Supports Atheros AR8121/AR8113/AR8114 PCIe Ethernet controllers.

> **Note**
>
> `ath` Atheros a/b/g wireless cards (requires `ath_hal` and `wlan`). This entry is located elsewhere.

```ini
device		bce		# Broadcom BCM5706/BCM5708 Gigabit Ethernet
```

Broadcom NetXtreme II (BCM5706/BCM5708) PCI/PCIe Gigabit Ethernet adapters.

```ini
device		bfe		# Broadcom BCM440x 10/100 Ethernet
```

Broadcom BCM4401 Ethernet adapter.

```ini
device		bge		# Broadcom BCM570xx Gigabit Ethernet
```

Supports Gigabit Ethernet adapters based on Broadcom BCM570x series controllers, including 3Com 3c996-T, Netgear GA302T, SysKonnect SK-9D21 and SK-9D41, as well as embedded Gigabit NICs on Dell PowerEdge 2550 servers.

```ini
device		cas		# Sun Cassini/Cassini+ and NS DP83065 Saturn
```

Sun Cassini/Cassini+ and National Semiconductor DP83065 Saturn.

```ini
device		dc		# DEC/Intel 21143 and various similar models
```

Supports PCI Fast Ethernet adapters based on DEC/Intel 21143 and similar chips, including ADMtek AL981 Comet, AN985 Centaur, ASIX AX88140A/AX88141, Davicom DM9100/DM9102, Lite-On 82c168/82c169, Lite-On/Macronix LC82C115 PNIC II, and Macronix 98713/98713A/98715/98715A/98725 PMAC. Replaces the old al, ax, dm, pn, and mx drivers. Examples of supported brands: Digital DE500-BA, Kingston KNE100TX, D-Link DFE-570TX, etc.

```ini
device		et		# Agere ET1310 10/100/Gigabit Ethernet
```

```ini
device		fxp		# Intel EtherExpress PRO/100B (82557, 82558)
envvar		hint.fxp.0.prefer_iomap="0"
```

Intel EtherExpress Pro/100B (I/O access can be selected instead of memory mapping via the prefer\_iomap environment variable).

```ini
device		gem		# Apple GMAC/Sun ERI/Sun GEM
```

Apple GMAC/Sun ERI/Sun GEM.

```ini
device		jme		# JMicron JMC250 Gigabit/JMC260 Fast Ethernet
```

JMicron JMC260 Fast Ethernet/JMC250 Gigabit Ethernet adapters.

```ini
device		lge		# Level 1 LXT1001 Gigabit Ethernet
```

Supports PCI Gigabit Ethernet adapters based on the Level 1 LXT1001 NetCellerator chip, including D-Link DGE-500SX, SMC TigerCard 1000 (SMC9462SX), and some Addtron cards.

```ini
device		lio		# Marvell 23XX Ethernet adapter support
```

`lio`: supports Marvell 23XX series Ethernet adapters.

```ini
device		mlxfw		# Mellanox firmware update module
```

`mlxfw`: Mellanox firmware update module.

```ini
device		mlx5		# IB and Ethernet shared code module
```

Mellanox ConnectX-4 and ConnectX-4 LX IB and Ethernet shared code module.

```ini
device		mlx5en		# Mellanox ConnectX-4 and ConnectX-4 LX
```

Mellanox ConnectX-4 and ConnectX-4 LX PCIe Ethernet adapters.

```ini
device		msk		# Marvell/SysKonnect Yukon II Gigabit Ethernet
```

msk: Supports PCI Gigabit Ethernet adapters based on Marvell/SysKonnect Yukon II Gigabit controllers, including 88E8021, 88E8022, 88E8061, 88E8062, 88E8035, 88E8036, 88E8038, 88E8050, 88E8052, 88E8053, 88E8055, 88E8056, and D-Link 560T/550SX.

```ini
device		my
```

Myson Fast Ethernet (MTD80X, MTD89X).

```ini
device		nge		# NatSemi DP83820 Gigabit Ethernet
```

Supports PCI Gigabit Ethernet adapters based on the National Semiconductor DP83820/DP83821 chip, including SMC EZ Card 1000 (SMC9462TX), D-Link DGE-500T, Asante FriendlyNet GigaNIX 1000TA/1000TPC, Addtron AEG320T, Surecom EP-320G-TX, and Netgear GA622T.

```ini
device		re		# Realtek 8139C+/8169/8169S/8110S
```

Realtek 8139C+/8169/8169S/8110S/8101E PCI/PCIe Ethernet adapters.

```ini
device		rl		# Realtek 8129/8139
```

Supports PCI Fast Ethernet adapters based on the Realtek 8129/8139 chip. Since memory-mapped mode can cause serious lockups on SMP hardware, this driver defaults to using programmed I/O to access registers. This driver also supports the Accton EN1207D “Cheetah” card, using the MPX 5030/5038 chip (Realtek or its clone). The D-Link DFE-530TX+ uses a Realtek chip and should use this driver, not the `vr` driver.

```ini
device		sge		# Silicon Integrated Systems SiS190/191
```

Silicon Integrated Systems SiS190/191 Fast/Gigabit Ethernet adapters.

```ini
device		sis		# Silicon Integrated Systems SiS 900/SiS 7016
```

Supports NICs based on Silicon Integrated Systems SiS 900/SiS 7016 and NS DP83815 PCI Fast Ethernet controller chips.

```ini
device		sk		# SysKonnect SK-984x & SK-982x Gigabit Ethernet
```

Supports SysKonnect SK-984x series PCI Gigabit Ethernet adapters, including SK-9841/9842 single-port (single-mode/multi-mode fiber) and SK-9843/9844 dual-port (single-mode/multi-mode). The driver automatically detects the number of card ports and treats each port as an independent network interface.

```ini
device		ste		# Sundance ST201 (D-Link DFE-550TX)
```

Sundance ST201 PCI Fast Ethernet controller, including D-Link DFE-550TX.

```ini
device		stge		# Sundance/Tamarack TC9021 Gigabit Ethernet
```

Supports Gigabit Ethernet adapters based on Sundance/Tamarack TC9021 series controllers, including Sundance ST2021/ST2023, Sundance/Tamarack TC9021, D-Link DL-4000, and ASUS NX1101.

```ini
device		vr		# VIA Rhine, Rhine II
```

Supports various Fast Ethernet adapters based on VIA VT3043 “Rhine I” and VT86C100A “Rhine II” chips. Includes D-Link DFE520TX, DFE530TX (DFE530TX+ uses the rl driver), Hawking PN102TX, and AOpen/Acer ALN-320.

```ini
device		vte		# DM&P Vortex86 RDC R6040 Fast Ethernet
```

DM\&P Vortex86 RDC R6040 Fast Ethernet.

```ini
device		xl		# 3Com 3c90x ("Boomerang", "Cyclone")
```

Supports 3Com 3c900, 3c905, 3c905B, and 3c905C (Fast) Etherlink XL NICs and integrated controllers, including the 3c905B-TX chip on some Dell Optiplex and Dell Precision desktops, and the 3c905-TX chip on Dell Latitude laptop docking stations. Also supports 3Com 3c980(C)-TX, 3Com 3cSOHO100-TX, 3Com 3c450-TX.

**PCI/PCI-X/PCIe Ethernet Cards Using the iflib Framework**

```ini
device          iflib
```

[iflib](https://man.freebsd.org/cgi/man.cgi?query=iflib\&sektion=9) network interface driver framework.

```ini
device          em      # Intel Pro/1000 Gigabit Ethernet
```

Intel PRO/1000 Gigabit Ethernet 82542/82543/82544 series adapters.

This NIC is based on the generic MII bus controller code.

```ini
device          ix      # Intel Pro/10GbE PCIe Ethernet
device          ixv     # Intel Pro/10GbE PCIe Ethernet VF
```

**PCI Ethernet Cards (Ethernet)**

```ini
device          cxgb        # Chelsio T3 10 Gigabit Ethernet
device          cxgb_t3fw   # Chelsio T3 10 Gigabit Ethernet firmware
```

1 GbE / 10 GbE PCIe Ethernet adapters based on the Chelsio T3 chip.

This NIC is based on the generic MII bus controller code.

```ini
device          cxgbe       # Chelsio T4-T6 1/10/25/40/100 Gigabit Ethernet
```

Chelsio T4 / T5 / T6 series 1 / 10 / 25 / 40 / 100 GbE PCIe Ethernet adapters.

This NIC is based on the generic MII bus controller code.

```ini
device          cxgbev      # Chelsio T4-T6 Virtual Function
```

PCIe Virtual Functions based on Chelsio T4, T5, and T6.

This NIC is based on the generic MII bus controller code.

```ini
device          le          # AMD Am7900 LANCE and Am79C9xx PCnet
```

AMD Am7900 LANCE and Am79C9xx PCnet NICs.

This NIC is based on the generic MII bus controller code.

```ini
device          mxge
```

Myricom Myri-10G 10 GbE Ethernet card.

```ini
device          oce         # Emulex 10 GbE (OneConnect Ethernet)
```

Emulex 10 GbE adapter (OneConnect Ethernet).

This NIC is based on the generic MII bus controller code.

```ini
device          ti          # Alteon Networks Tigon I/II Gigabit Ethernet
```

Supports PCI Gigabit Ethernet adapters based on Alteon Tigon I / II chips, including Alteon AceNIC, 3Com 3C985, Netgear GA620, etc. It is recommended to significantly increase the value of `kern.ipc.nmbclusters` when using this driver.

This NIC is based on the generic MII bus controller code.

**PCI IEEE 802.11 Wireless Cards (Wi-Fi)**

```ini
device          ath         # Atheros PCI/CardBus cards
device          ath_hal     # PCI/CardBus chip support
#device        ath_ar5210   # AR5210 chip
#device        ath_ar5211   # AR5211 chip
#device        ath_ar5212   # AR5212 chip
#device        ath_rf2413   # AR2413 chip
#device        ath_rf2417   # AR2417 chip
#device        ath_rf2425   # AR2425 chip
#device        ath_rf5111   # AR5111 chip
#device        ath_rf5112   # AR5112 chip
#device        ath_rf5413   # AR5413 chip
#device        ath_ar5416   # AR5416 chip
```

Atheros series wireless cards.

```ini
options    	AH_RXCFG_SDMAMW_4BYTES
```

All AR5212 chips have issues when used with AR71xx CPUs. These models have a bug that triggers a fatal bus error only on AR71xx.

The specific details of the bug are not yet clear, but some information can be found on pages 4, 5, and 6 of the [relevant discussion thread](https://forum.openwrt.org/viewtopic.php?pid=70060) on the OpenWrt forum.

Enabling this option applies the workaround. This workaround incurs a performance penalty, but without it, the device will not work at all. Normally, DMA transfers for this NIC use 128-byte bursts, but on affected CPUs, only 4-byte bursts are safe.

```ini
#device        ath_ar9160      # AR9160 chip
#device        ath_ar9280      # AR9280 chip
#device        ath_ar9285      # AR9285 chip
device          ath_rate_sample # SampleRate transmit rate control for ath
```

Atheros-related wireless cards.

```ini
device          bwi             # Broadcom BCM430* BCM431*
```

Broadcom `BCM430*` and `BCM431*` series wireless cards.

This NIC is based on the generic MII bus controller code.

```ini
device          bwn             # Broadcom BCM43xx
```

Broadcom BCM43xx series wireless cards.

This NIC is based on the generic MII bus controller code.

```ini
device          malo            # Marvell Libertas wireless cards
```

This NIC is based on the generic MII bus controller code.

```ini
device          mwl             # Marvell 88W8363 802.11n wireless cards
device          mwlfw  # Marvell 88W8363 firmware
```

This NIC is based on the generic MII bus controller code. The `mwl` driver depends on the `mwlfw` firmware.

```ini
device          ral             # Ralink Technology RT2500 wireless cards
```

Ralink Technology IEEE 802.11 wireless adapters.

This NIC is based on the generic MII bus controller code.

```ini
device          rtwn            # Realtek wireless cards/Realtek wireless adapters
device          rtwnfw  # Realtek wireless firmware
```

This NIC is based on the generic MII bus controller code.

```ini
#options 	TI_SF_BUF_JUMBO
```

Use the [sf\_buf(9)](https://man.freebsd.org/cgi/man.cgi?query=sf_buf\&sektion=9) interface to handle jumbo buffers on [ti(4)](https://man.freebsd.org/cgi/man.cgi?query=ti\&sektion=4) controllers.

```ini
#options 	TI_JUMBO_HDRSPLIT
```

Enable the header splitting option for the [ti(4)](https://man.freebsd.org/cgi/man.cgi?query=ti\&sektion=4) driver firmware. This feature only applies to Tigon II chips and has no effect on Tigon I chips. This option depends on the `TI_SF_BUF_JUMBO` option above.

```ini
options     MCLSHIFT=12   # mbuf cluster shift size, 12 == 4 kB; default value is 11 == 2 kB
options     MSIZE=256     # mbuf size (bytes)
```

These two options are used to adjust the mbuf cluster size and mbuf size respectively. Since changing the default values may cause a mismatch between the mbuf size assumed by the kernel and the mbuf size assumed by modules, extreme caution must be exercised when changing their default values to other values when handling NIC driver modules. Currently, the only driver capable of detecting this mismatch is [ti(4)](https://man.freebsd.org/cgi/man.cgi?query=ti\&sektion=4).

#### Audio Devices

```ini
device		sound
```

Generic audio driver.

**`snd_*`: Device-Specific Drivers**

```ini
device		snd_als4000
```

Avance Logic ALS4000 PCI.

```ini
device		snd_atiixp
```

ATI IXP 200/300/400 PCI.

```ini
device		snd_cmi
```

CMedia CMI8338/CMI8738 PCI.

```ini
device		snd_cs4281
```

Crystal Semiconductor CS4281 PCI.

```ini
device		snd_csa
```

Crystal Semiconductor CS461x/428x PCI (excluding 4281).

```ini
device		snd_emu10k1
```

Creative EMU10K1 PCI and EMU10K2 (Audigy) PCI.

```ini
device		snd_emu10kx
```

Creative SoundBlaster Live! and Audigy.

```ini
device		snd_envy24
```

VIA Envy24 and compatible devices, depends on `snd_spicds`.

```ini
device		snd_envy24ht
```

VIA Envy24HT and compatible devices, depends on `snd_spicds`.

```ini
device		snd_es137x
```

Ensoniq AudioPCI ES137x PCI.

```ini
device		snd_fm801
```

Forte Media FM801 PCI.

```ini
device		snd_hda
```

Intel High Definition Audio (controller) and compatible devices.

```ini
device		snd_hdsp
```

RME HDSP 9632 and HDSP 9652.

```ini
device		snd_hdspe
```

RME HDSPe AIO and RayDAT.

```ini
device		snd_ich
```

Intel ICH AC’97 and many more audio controllers integrated in chipsets, such as NVIDIA nForce controllers.

```ini
device		snd_maestro3
```

ESS Technology Maestro-3/Allegro PCI.

```ini
device		snd_neomagic
```

Neomagic 256 AV/ZX PCI.

```ini
device		snd_solo
```

ESS Solo-1x PCI.

```ini
device		snd_spicds
```

SPI codec driver, required by Envy24/Envy24HT drivers.

```ini
device		snd_t4dwave
```

Trident 4DWave DX/NX PCI, SiS 7018 PCI, and Acer Labs M5451 PCI.

```ini
device		snd_uaudio
```

USB audio.

```ini
device		snd_via8233
```

VIA VT8233x PCI.

```ini
device		snd_via82c686
```

VIA VT82C686A PCI.

```ini
device		snd_vibes
```

S3 Sonicvibes PCI.

**Hint Configuration for Non-PnP Sound Cards**

The device flags can provide additional information to the driver, which is normally obtained automatically through the PnP interface.

* bit 2..0: secondary DMA channel;
* bit 4: set if the board uses two DMA channels;
* bit 15..8: board type, used to override auto-detection; leave as `0` if unsure (currently not implemented).

```ini
envvar		hint.pcm.0.at="isa"
envvar		hint.pcm.0.irq="10"
envvar		hint.pcm.0.drq="1"
envvar		hint.pcm.0.flags="0x0"
envvar		hint.sbc.0.at="isa"
envvar		hint.sbc.0.port="0x220"
envvar		hint.sbc.0.irq="5"
envvar		hint.sbc.0.drq="1"
envvar		hint.sbc.0.flags="0x15"
envvar		hint.gusc.0.at="isa"
envvar		hint.gusc.0.port="0x220"
envvar		hint.gusc.0.irq="5"
envvar		hint.gusc.0.drq="1"
envvar		hint.gusc.0.flags="0x13"
```

**Debugging/Testing**

```ini
options 	SND_DEBUG
```

Enables additional debugging code, including sanity checks and potentially increased verbosity.

```ini
options 	SND_DIAGNOSTIC
```

`SND_DIAGNOSTIC` is similar to `INVARIANTS` / `DIAGNOSTIC`, tolerating no inconsistencies whatsoever.

```ini
options 	SND_FEEDER_MULTIFORMAT
```

`SND_FEEDER_MULTIFORMAT` compiles only 16/32-bit feeders by default. This option enables most feeder format converters (excluding 8-bit).

> **Warning**
>
> May result in increased kernel size.

```ini
options 	SND_FEEDER_FULL_MULTIFORMAT
```

`SND_FEEDER_FULL_MULTIFORMAT` is the same as above (`SND_FEEDER_MULTIFORMAT`), but includes 8-bit feeders.

```ini
options 	SND_FEEDER_RATE_HP
```

`SND_FEEDER_RATE_HP` (feeder\_rate) will use high-precision 64-bit arithmetic whenever possible (which is avoided by default). May cause decreased operation speed.

```ini
options 	SND_PCM_64
```

`SND_PCM_64` (i386/32-bit architecture only) processes 32-bit samples through 64-bit integers/arithmetic. May slightly improve dynamic range, but operation speed may slow down.

```ini
options 	SND_OLDSTEREO
```

`SND_OLDSTEREO` only allows 2 channels, effectively disabling multi-channel processing.

#### CardBus (PC Card Bus Interface, PC Card)

```ini
device		cbb
```

Implements PCI/CardBus bridges with the YENTA interface.

```ini
device		cardbus
```

CardBus slot.

#### MMC/SD

```ini
device		mmc
```

MMC/SD bus, required for eMMC chips.

```ini
device		mmcsd
```

MMC/SD memory card. Required for eMMC chips.

```ini
device		sdhci
```

Generic PCI SD host controller.

```ini
device		rtsx
```

Realtek SD card reader (RTS5209, RTS5227, etc.).

#### SMB Bus

System Management Bus (System Management Bus) support is provided by the "smbus" device.

Access SMBus through the `smb` device (**/dev/smb\***), which is a child of the `smbus` device.

**Device Support**

```ini
device		smb
```

Standard I/O through **/dev/smb\***.

**SMB Interface Support**

```ini
device		smbus
```

`smbus` bus support, dependent on the `smb` device above.

```ini
device		intpm
```

Intel PIIX4 (82371AB, 82443MX) power management unit.

```ini
options 	ENABLE_ALART
```

Controls alarm on the Intel intpm driver.

```ini
device		alpm
```

Acer Aladdin-IV/V/Pro2 power management unit.

```ini
device		ichsmb
```

Intel ICH SMBus controller chips (82801AA, 82801AB, 82801BA).

```ini
device		viapm
```

VIA VT82C586B/596B/686A and VT8233 power management unit.

```ini
device		amdpm
```

AMD 756 power management unit.

```ini
device		amdsmb
```

AMD 8111 SMBus 2.0 controller.

```ini
device		nfpm
```

NVIDIA nForce power management unit.

```ini
device		nfsmb
```

NVIDIA nForce2/3/4 MCP SMBus 2.0 controller.

```ini
device		ismt
```

Intel SMBus 2.0 controller chip (for Atom S1200, C2000)

**SMBus Peripheral Devices**

```ini
device		jedec_dimm
```

Provides asset information and temperature reporting for DDR3 and DDR4 DIMMs.

#### I²C Bus

I²C bus support is provided by the `iicbus` device.

```ini
device		iicbus
```

Provides I²C bus support; devices below such as `ic`, `iic`, `iicsmb` all depend on this device.

**Supported Devices**

```ini
device		ic
```

I²C network interface, depends on `iicbus`.

```ini
device		iic
```

I²C standard I/O interface, depends on `iicbus`.

Access I²C slave devices from userspace via [ioctl(2)](https://man.freebsd.org/cgi/man.cgi?query=ioctl\&sektion=2).

```ini
device		iicsmb
```

SMB bridged via I²C (I²C to SMB bridge using any `iicbus` interface). Allows I²C I/O through SMB commands, depends on `iicbus`.

```ini
device		iicoc
```

OpenCores I²C controller support.

Simple polling driver for the OpenCores I²C controller.

**Others**

```ini
device		iicbb
```

Bitbang driver, implements I²C on a pair of GPIO pins. Provides generic I²C bit-banging code (required by `lpbb`).

**I²C Bus Multiplexer (mux) Devices**

```ini
device		iicmux
```

I²C multiplexer core driver.

```ini
device		iic_gpiomux
```

I²C multiplexer hardware controlled via GPIO pins.

```ini
device		ltc430x
```

LTC4305 and LTC4306 I²C multiplexer chips.

**I²C Peripheral Devices**

```ini
device		ad7418
```

Analog Devices temperature and voltage sensor driver.

```ini
device		ads111x
```

Texas Instruments ADS101x and ADS111x ADC.

```ini
device		ds1307
```

Dallas DS1307 RTC and compatible chips.

```ini
device		ds13rtc
```

All Dallas/Maxim ds13xx series chips.

```ini
device		ds1672
```

Dallas DS1672 RTC.

```ini
device		ds3231
```

Dallas DS3231 RTC and temperature sensor.

```ini
device		fan53555
```

Fairchild Semiconductor FAN53555/SYR82x regulator.

```ini
device		icee
```

AT24Cxxx and compatible EEPROM.

```ini
device		isl12xx
```

Intersil ISL12xx RTC.

```ini
device		lm75
```

LM75 compatible temperature sensor.

```ini
device		nxprtc
```

NXP RTC: PCA/PFC212x, PCA/PCF85xx series.

```ini
device		rtc8583
```

Epson RTC-8583.

```ini
device		s35390a
```

Seiko Instruments S-35390A RTC.

```ini
device		sy8106a
```

Silergy SY8106A buck regulator.

#### Parallel Bus Interface

The parallel bus interface is driven by the `ppbus` device. Multiple devices can be connected to the parallel interface simultaneously, and they can be automatically probed and attached when detected.

**Supported Interfaces**

```ini
device		ppc
```

ISA bus parallel port interface.

**Supported Devices**

```ini
options 	PPC_PROBE_CHIPSET
```

Enables chipset-specific detection (see flags in ppc(4)).

```ini
options 	DEBUG_1284
```

IEEE1284 signal protocol debugging.

```ini
options 	PERIPH_1284
```

Enables the computer to act as an IEEE 1284 compliant peripheral.

```ini
options 	DONTPROBE_1284
```

Avoid probing PnP parallel devices at boot.

```ini
options 	LPT_DEBUG
```

Printer driver debugging.

```ini
options 	PPC_DEBUG
```

Parallel chipset level debugging.

```ini
options 	PLIP_DEBUG
```

Parallel network IP interface debugging.

```ini
options 	PCFCLOCK_VERBOSE
```

`pcfclock` driver verbose output.

```ini
options 	PCFCLOCK_MAX_RETRIES=5
```

Maximum read attempts (default 10).

```ini
envvar		hint.ppc.0.at="isa"
envvar		hint.ppc.0.irq="7"
device		ppbus
```

```ini
device		lpt
```

Parallel printer.

```ini
device		plip
```

Parallel network interface.

```ini
device		ppi
```

General-purpose I/O (“Geek Port”) and IEEE 1284 I/O.

```ini
device		pps
```

Pulse per second timing interface.

```ini
device		lpbb
```

Philips official parallel port I²C bit-banging interface.

```ini
device		pcfclock
```

Parallel port clock driver.

#### General Purpose I/O Pins (GPIO)

```ini
device		dwgpio
```

Synopsys DesignWare APB GPIO controller.

```ini
device  	gpio
```

GPIO interface and bus support.

```ini
device  	gpiobacklight
```

sysctl-controlled backlight, based on GPIO.

```ini
device  	gpioiic
```

I²C via GPIO bitbang.

```ini
device  	gpiokeys
```

[kbd(4)](https://man.freebsd.org/cgi/man.cgi?query=kbd\&sektion=4\&n=1) linkage layer for GPIO key input.

```ini
device  	gpioled
```

[LED(4)](https://man.freebsd.org/cgi/man.cgi?query=led\&sektion=4) GPIO linkage layer.

```ini
device  	gpiopower
```

GPIO power-off event handler.

```ini
device  	gpiopps
```

Pulse per second input from GPIO pins.

```ini
device  	gpioregulator
```

extres/regulator linkage layer interface for GPIO pins.

```ini
device  	gpiospi
```

SPI via GPIO bitbang.

```ini
device  	gpioths
```

1-Wire (one-wire protocol) temperature and humidity sensor based on GPIO pins.

#### Pulse Width Modulation (PWM)

```ini
device  	pwmbus
```

PWM interface and bus support.

```ini
device  	pwmc
```

User-space control access to PWM outputs.

#### Etherswitch Framework and Drivers

```ini
device		etherswitch
```

[etherswitch(4)](https://man.freebsd.org/cgi/man.cgi?query=etherswitch\&sektion=4) Ethernet switch framework.

```ini
device		miiproxy
```

[miibus(4)](https://man.freebsd.org/cgi/man.cgi?query=miibus\&sektion=4) MII bus function proxy device.

```ini
device		arswitch
```

Atheros switch.

```ini
device		ip17x
```

IC+ 17x series switch.

```ini
device		rtl8366rb
```

Realtek RTL8366 switch.

```ini
device		ukswitch
```

Multi-PHY switch.

#### Kernel BOOTP Support

```ini
options 	BOOTP
```

Use BOOTP to obtain IP address and hostname.

```ini
options 	BOOTP_NFSROOT
```

Mount NFS root filesystem via BOOTP information, depends on NFSCL and NFS\_ROOT.

```ini
options 	BOOTP_NFSV3
```

Use NFS v3 protocol to mount NFS root.

```ini
options 	BOOTP_COMPAT
```

Workaround for compatibility with buggy bootp daemons.

```ini
options 	BOOTP_WIRED_TO=fxp0
```

Specify the fxp0 network interface to run BOOTP.

```ini
options 	BOOTP_BLOCKSIZE=8192
```

Overwrite NFS block size to 8192.

```ini
options 	SW_WATCHDOG
```

Enable software watchdog routines even if a hardware watchdog is present.

By default, the software watchdog timer is only enabled when no hardware watchdog is present.

```ini
options 	DEADLKRES
```

Add a software deadlock resolver thread.

```ini
options 	NSFBUFS=1024
```

Sets the number of `sf_buf` to allocate. `sf_buf` are virtual buffers used by sendfile(2) for mapping file virtual memory pages; the default count is approximately 16\*MAXUSERS+512. Typically, each concurrent file transfer requires about 4 such buffers.

```ini
options 	DEBUG_LOCKS
```

Enables additional debugging code for the lock mechanism. This feature stores filename and line number information of lock acquisitions in the lock structure and modifies several function calls to pass relevant data.

This feature has no practical use unless debugging lock-related code.

> **Note**
>
> This option modifies the Kernel Binary Interface (KBI) and requires recompilation of all kernel modules.

#### VirtIO

virtio entries provide a generic bus for device drivers to use. This bus must be used in conjunction with an interface for communicating with the host.

The VirtIO specification defines several such interfaces, including PCI and MMIO interfaces.

```ini
device		virtio
```

Generic VirtIO bus (must be enabled).

```ini
device		virtio_mmio
```

VirtIO MMIO interface.

```ini
device		virtio_pci
```

VirtIO PCI interface.

```ini
device		vtnet
```

VirtIO Ethernet device.

```ini
device		virtio_balloon
```

VirtIO Memory Balloon device.

```ini
device		virtio_blk
```

VirtIO block device.

```ini
device		virtio_console
```

VirtIO console device.

```ini
device		virtio_gpu
```

VirtIO GPU device.

```ini
device		virtio_random
```

VirtIO random number (entropy) device.

```ini
device		virtio_scmi
```

VirtIO SCMI (System Control and Management Interface) device.

```ini
device		virtio_scsi
```

VirtIO SCSI device.

#### HID (Human Interface Device) Support

```ini
device		hid
```

Generic HID support.

```ini
options 	HID_DEBUG
```

Enable debug information.

```ini
device		hidbus
```

HID bus.

```ini
device		hidmap
```

HID to evdev mapping.

```ini
device		hidraw
```

Raw device access driver.

```ini
options 	HIDRAW_MAKE_UHID_ALIAS
```

Install alias **/dev/uhid** for **/dev/hidraw**.

```ini
device		hconf
```

Multi-touch configuration table.

```ini
device		hcons
```

Consumer control device.

```ini
device		hgame
```

Generic game controller.

```ini
device		hkbd
```

HID keyboard.

```ini
device		hms
```

HID mouse.

```ini
device		hmt
```

HID multi-touch device (Microsoft standard compatible).

```ini
device		hpen
```

Generic stylus driver.

```ini
device		hsctrl
```

System control.

```ini
device		ps4dshock
```

Sony PS4 DualShock 4 gamepad driver.

```ini
device		u2f
```

FIDO/U2F authentication device.

```ini
options 	U2F_DROP_UHID_ALIAS
```

Do not install alias **/dev/uhid** for **/dev/u2f**, and change the driver name from `uhid` to `u2f`.

```ini
device		xb360gp
```

Xbox 360 gamepad driver.

### USB Support

```ini
device		uhci
```

UHCI controller.

```ini
device		ohci
```

OHCI controller.

```ini
device		ehci
```

EHCI controller.

```ini
device		xhci
```

xHCI controller.

```ini
#device		slhci
```

SL811 controller.

```ini
device		usb
```

Generic USB framework (required for USB).

```ini
device		udbp
```

USB double bulk pipe driver.

```ini
device		ugold
```

USB thermometer.

```ini
device		uled
```

USB LED light.

```ini
device		uhid
```

HID human interface device (for other devices with buttons and dials).

```ini
device		ukbd
```

USB keyboard.

```ini
device		ulpt
```

USB printer.

```ini
device		umass
```

USB mass storage device driver (depends on `scbus` and `da` devices).

```ini
device		usfs
```

USB mass storage driver in device-side mode.

```ini
device		umct
```

USB support for Belkin F5U109 and Magic Control Technology serial adapters.

```ini
device		umodem
```

USB modem.

```ini
device		ums
```

USB mouse.

```ini
device		atp # Apple Touchpad driver
device		wsp # Wellspring touchpad, for Apple laptops
```

USB touchpad.

```ini
device		uep
```

eGalax USB touchscreen.

```ini
device		urio
```

Diamond Rio 500 MP3 player.

```ini
device		usbhid
```

HID-over-USB driver.

#### USB Serial Ports

```ini
device		ucom
```

USB serial port support.

```ini
device		u3g
```

USB support for Option, Novatel, Huawei, and Sierra 3G modem cards.

```ini
device		uark
```

USB support for serial adapters based on the Technologies ARK3116 chip.

```ini
device		ubsa
```

USB support for Belkin F5U103 and compatible serial adapters.

```ini
device		uftdi
```

USB support for serial adapters based on the FT8U100AX and FT8U232AM chips.

```ini
device		uipaq
```

USB support for certain Windows CE-based serial communication devices.

```ini
device		uplcom
```

USB support for Prolific PL-2303 serial adapters.

```ini
device		uslcom
```

USB support for serial adapters based on Silicon Laboratories CP2101/CP2102 chips.

```ini
device		uvisor
```

USB Visor and Palm device support.

```ini
device		uvscom
```

USB serial support for DDI Pocket PHS devices.

#### USB Ethernet

```ini
device		uether
```

USB Ethernet support.

```ini
device		aue
```

ADMtek USB Ethernet device. Supports LinkSys USB100TX, Billionton USB100, Melco LU-ATX, D-Link DSB-650TX, and SMC 2202USB. Also compatible with the ADMtek AN986 Pegasus evaluation board.

```ini
device		axe
```

ASIX Electronics AX88172 USB 2.0 Ethernet driver. Used for LinkSys USB200M and various other adapters.

```ini
device		axge
```

ASIX Electronics AX88178A/AX88179 USB 2.0/3.0 Gigabit Ethernet driver.

```ini
device		cdce
```

Devices using USB-based Ethernet communication, specifically those conforming to the Communication Device Class (CDC) Ethernet specification. Supports Sharp Zaurus PDAs, certain DOCSIS cable modems, mobile phones, and other devices.

```ini
device		cue
```

CATC USB-EL1201A USB Ethernet device. Supports CATC Netmate and Netmate II, as well as Belkin F5U111.

```ini
device		kue
```

Kawasaki LSI Ethernet device. Supports the following adapters:

* LinkSys USB10T
* Entrega USB-NET-E45
* Peracom Ethernet adapter
* 3Com 3c19250
* ADS Technologies USB-10BT
* ATen UC10T
* Netgear EA101
* D-Link DSB-650
* SMC 2102USB and 2104USB
* Corega USB-T

```ini
device		rue
```

Realtek RTL8150 USB to Fast Ethernet device. Supports Melco LUA-KTX and GREEN HOUSE GH-USB100B.

```ini
device		udav
```

Davicom DM9601E USB to Fast Ethernet device. Supports Corega FEther USB-TXC.

```ini
device		ure
```

Realtek RTL8152/RTL8153 USB Ethernet driver.

```ini
device		mos
```

Moschip MCS7730/MCS7840 USB to Fast Ethernet device. Supports Sitecom LN030.

```ini
device		uhso
```

Option N.V. HSDPA device.

```ini
device		rsu
```

Realtek RTL8188SU/RTL8191SU/RTL8192SU wireless driver.

```ini
device		rum
```

Ralink Technology RT2501USB/RT2601USB wireless driver.

```ini
device		run
```

Ralink Technology RT2700U/RT2800U/RT3000U wireless driver.

```ini
device		uath
```

Atheros AR5523 wireless driver.

```ini
device		upgt
```

Conexant/Intersil PrismGT wireless driver.

```ini
device		ural
```

Ralink Technology RT2500USB wireless driver.

```ini
device		urndis
```

RNDIS USB Ethernet driver.

```ini
device		urtw
```

Realtek RTL8187B/L wireless NIC driver.

```ini
device		zyd
```

ZyDas ZD1211/ZD1211B wireless driver.

```ini
device		usie
```

Sierra USB wireless device driver.

```ini
options 	USB_DEBUG
options 	U3G_DEBUG
```

USB subsystem debugging options.

```ini
options 	UKBD_DFLT_KEYMAP	# Specify built-in keyboard layout
makeoptions	UKBD_DFLT_KEYMAP=jp.106 # Set built-in keyboard layout to Japanese 106-key
```

Options for the ukbd driver.

```ini
options 	UPLCOM_INTR_INTERVAL=100	# Interrupt pipe interval (milliseconds)
```

Options for the uplcom driver.

```ini
options 	UVSCOM_DEFAULT_OPKTSIZE=8	# Default output packet size
options 	UVSCOM_INTR_INTERVAL=100	# Interrupt pipe interval (milliseconds)
```

Options for the uvscom driver.

### FireWire (Bus)

> **Note**
>
> FireWire (IEEE 1394) drivers have been marked deprecated in FreeBSD 15.0 and are planned for removal in FreeBSD 16. FireWire hardware has largely exited the market, and new systems do not need to enable this option.

```ini
device		firewire
```

FireWire bus code.

```ini
device		sbp
```

FireWire-based SCSI (depends on `scbus` and `da`).

```ini
device		sbp_targ
```

SBP-2 target mode (depends on `scbus` and `targ`).

```ini
device		fwe
```

FireWire-based Ethernet (non-standard implementation).

```ini
device		fwip
```

FireWire-based IP protocol (RFC2734 and RFC3146).

### dcons Dumb Terminal Support (Simple Console Device)

```ini
device		dcons
```

Dumb terminal driver.

```ini
device		dcons_crom
```

Dumb terminal FireWire attachment.

```ini
options 	DCONS_BUF_SIZE=16384
```

Dumb terminal buffer size.

```ini
options 	DCONS_POLL_HZ=100
```

Dumb terminal polling rate.

```ini
options 	DCONS_FORCE_CONSOLE=0
```

Force the dumb terminal as the primary console.

```ini
options 	DCONS_FORCE_GDB=1
```

Force the dumb terminal as the GDB device.

## Cryptographic Subsystem

This subsystem is based on the cryptographic framework ported from OpenBSD. It must be included when configuring IPSEC or when hardware cryptographic devices are present, and can accelerate user applications linked with OpenSSL.

The relevant drivers are ported from OpenBSD, and include some simple feature enhancements that have been fed back to OpenBSD.

```ini
device		crypto
```

Core cryptographic subsystem support.

```ini
device		cryptodev
```

**/dev/crypto**: interface for accessing hardware cryptographic devices.

The `cryptodev` device should only be installed when testing or when explicitly known to be needed. In most cases, this device is not required and may cause system performance degradation.

```ini
device		rndtest
```

FIPS 140-2 entropy testing tool.

```ini

device		ccr
```

Chelsio T6 cryptographic accelerator driver.

```ini
device		safe
```

SafeNet SafeXcel 1141/1741 cryptographic accelerator.

```ini
options 	SAFE_DEBUG
```

Enable debug support: `hw.safe.debug`.

```ini
options 	SAFE_RNDTEST
```

Enable [rndtest(4)](https://man.freebsd.org/cgi/man.cgi?query=rndtest\&apropos=0\&sektion=0) (FIPS 140-2 random number generator test monitor) support.

## Embedded Systems

```ini
options 	INIT_PATH=/sbin/init:/rescue/init
```

In embedded systems, it may be necessary to run programs other than init.

### Debugging Options

```ini
options 	BUS_DEBUG
```

Enable newbus debugging.

```ini
options 	DEBUG_VFS_LOCKS
```

Enable VFS lock debugging.

```ini
options 	SOCKBUF_DEBUG
```

Enable sockbuf last record and mbuf tail checking.

```ini
options 	IFMEDIA_DEBUG
```

Enable debugging functionality in `net/if_media.c`.

### SYSINIT Verbose Output

```ini
options 	VERBOSE_SYSINIT
```

Makes the SYSINIT process executed by `mi_startup()` output more verbose information. This is useful when porting to new architectures. If the DDB debugger is also enabled, function names will be displayed instead of addresses. If the value is defined as `0`, the verbose output code will be compiled into the kernel but disabled by default, and can be enabled via the tunable `debug.verbose_sysinit=1`.

## SYSV IPC Kernel Parameters

```ini
options 	SEMMNI=11
```

Maximum number of System V semaphores that can be used simultaneously by the system.

```ini
options 	SEMMNS=61
```

Total number of semaphores system-wide.

```ini
options 	SEMMNU=31
```

Total number of undo structures in the system.

```ini
options 	SEMMSL=61
```

Maximum number of System V semaphores that can be used simultaneously by a single process.

```ini
options 	SEMOPM=101
```

Maximum number of operations that can be simultaneously pending on a single System V semaphore.

```ini
options 	SEMUME=11
```

Maximum number of undo operations that can be simultaneously pending on a single System V semaphore.

```ini
options 	SHMALL=1025
```

Maximum number of shared memory pages system-wide.

```ini
options 	SHMMAX=(SHMMAXPGS*PAGE_SIZE+1)
options 	SHMMAXPGS=1025
```

Maximum size of a single System V shared memory region (in bytes).

```ini
options 	SHMMIN=2
```

Minimum size of a single System V shared memory region (in bytes).

```ini
options 	SHMMNI=33
```

Maximum number of shared memory regions that can be used simultaneously by the system.

```ini
options 	SHMSEG=9
```

Maximum number of System V shared memory regions that can be simultaneously attached by a single process.

```ini
options 	PANIC_REBOOT_WAIT_TIME=16
```

Sets the wait time (in seconds) before the system automatically reboots after a kernel panic. If set to (`-1`), the system will wait indefinitely until any key is pressed on the console.

```ini
options 	DIRECTIO
```

When a file has the `O_DIRECT` flag set, attempts to bypass the buffer cache and read data directly into a user-space buffer.

The offset and length of read operations must be multiples of the physical media sector size.

```ini
options 	NSWBUF_MIN=120
```

Specifies the lower limit for the number of swap I/O buffers. These buffers are used (among other cases) to bypass the buffer cache when the kernel option `DIRECTIO` is enabled and a file has the `O_DIRECT` flag set.

```ini
options 	CAM_DEBUG_DELAY

options 	DEBUG
```

Undocumented lint check option.

> **Note**
>
> No offense is intended by documenting these options.

```ini
options 	LOCKF_DEBUG
```

Kernel file lock debugging.

## System V Compatible Message Queues

```ini
options 	MSGMNB=2049
```

Maximum number of characters in a queue.

> **Note**
>
> The values given here are for testing kernel builds only.

The defaults in the source code provide nearly identical values. `MSGSSZ` must be a power of 2 between `8` and `1024`.

```ini
options 	MSGMNI=41
```

Maximum number of message queue identifiers.

```ini
options 	MSGSEG=2049
```

Maximum number of message segments.

```ini
options 	MSGSSZ=16
```

Message segment size.

```ini
options 	MSGTQL=41
```

Maximum number of messages in the system.

```ini
options 	NBUF=512
```

Number of buffer headers.

```ini
options 	SC_DEBUG_LEVEL=5
```

syscons debug level.

```ini
options 	SC_RENDER_DEBUG
```

syscons render debugging.

```ini
options 	VFS_BIO_DEBUG
```

VFS buffer I/O debugging.

```ini
options 	KSTACK_MAX_PAGES=32
```

Maximum number of pages allocatable for the kernel stack.

```ini
options 	KSTACK_USAGE_PROF
```

Tracks the maximum stack space used by threads in the kernel.

## Adaptec Array Controller Driver Options

```ini
options 	AAC_DEBUG
```

Debug level:

| Level | Description                                                                            |
| ----- | -------------------------------------------------------------------------------------- |
| `0`   | Silent mode, only displays warning messages                                            |
| `1`   | Verbose mode, displays major function points and completed operations                  |
| `2`   | Extremely verbose mode, displays detailed information such as trace items within loops |

```ini
options 	RACCT
```

Resource accounting.

```ini
options 	RCTL
```

Resource limits.

```ini
options 	MAXFILES=999
```

Undocumented lint check option.

## Random Number Generator

```ini
options 	RANDOM_FENESTRASX
```

Optional algorithm.

```ini
#options 	RANDOM_LOADABLE
```

Load CSPRNG algorithm as a module.

```ini
options 	RANDOM_ENABLE_UMA	# slab allocator
```

Selecting this collects entropy from the Slab allocator at a high frequency (which may be resource-intensive). The value of this feature is questionable in extremely high-frequency scenarios.

```ini
options 	RANDOM_ENABLE_ETHER	# Ethernet inbound
```

Selecting this collects entropy from the `m_next` pointer in mbufs at a high frequency (which may be resource-intensive).

> **Note**
>
> Unless receiving jumbo frames exceeding 4 K or achieving sustained data bursts through LRO technology, the `m_next` pointer is typically NULL. Therefore, under normal circumstances, this operation is effectively injecting zero values into the entropy pool. Even if the pointer is non-null, it merely points to a 256-byte-aligned mbuf (whose quantity ranges from thousands to tens of thousands). Thus, even in the best case scenario, this is a poor entropy source. Without actual runtime analysis of entropy collection, users may be misled into believing that far more entropy has been collected than actually achieved, which introduces another class of security risk. In high packet rate scenarios, the cost of Ethernet entropy collection is extremely high, potentially causing up to 50% packet receive loss. This option is provided solely for backward compatibility and is not recommended for use in any environment under any circumstances.

```ini
options 	RANDOM_ENABLE_KBD
```

Collect entropy from the keyboard.

```ini
options 	RANDOM_ENABLE_MOUSE
```

Collect entropy from the mouse.

```ini
options 	RANDOM_ENABLE_TPM	# implicitly depends on TPM_HARVEST
```

Collect entropy from the TPM.

```ini
options         IMGACT_BINMISC
```

Module for enabling application execution through emulators such as QEMU.

## zlib Input/Output Stream Support

```ini
options 	GZIO
```

This option is used to support generating compressed core dump files.

## zstd

```ini
options 	ZSTDIO
```

This option is used to support Zstd-compressed core dump files, GEOM\_UZIP images, and is a required component for the ZFS filesystem when statically linked.

## BHND(4) Driver

```ini
options 	BHND_LOGLEVEL
```

Logging threshold level.

## evdev Interface

```ini
device		evdev
```

Input event device support.

```ini
options 	EVDEV_SUPPORT
```

evdev support in legacy drivers.

```ini
options 	EVDEV_DEBUG
```

Enable event debug messages.

```ini
device		uinput
```

Install the character device **/dev/uinput**.

```ini
options 	UINPUT_DEBUG
```

Enable uinput debug messages.

## Encrypted Kernel Crash Dumps

```ini
options 	EKCD
```

Encrypted kernel crash dump functionality.

## Serial Peripheral Interface (SPI)

```ini
device		spibus
```

SPI bus support.

```ini
device		at45d
device		cqspi
```

DataFlash driver.

```ini
device		mx25l
device		n25q
```

SPI flash driver.

```ini
device		spigen
```

User-space generic access support for SPI devices.

```ini
options 	SPIGEN_LEGACY_CDEVNAME
```

Legacy device name for spigen: enables the legacy alias **/dev/spigenN** for **/dev/spigenX.Y** devices.

## Compression Support

```ini
device		zlib
```

gzip/zlib compression/decompression library.

```ini
device		xz
```

xz\_embedded LZMA decompression library.

## Kernel stats(3) Support

```ini
options 	STATS
```

Kernel-level stats(3) support.

## File System Monitoring

```ini
device		filemon
```

File monitoring for make(1) meta mode.

## Intel QuickAssist (QAT) Driver

```ini
options		QAT_DISABLE_SAFE_DC_MODE
```

Intel QuickAssist (QAT), Intel data protection and compression acceleration technology.

Disable QAT safe mode.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://book.bsdcn.org/ask/flat/chapter-40-freebsd-kernel-architecture/di-40.4-jie-ji-qi-wu-guan-de-nei-he-xuan-xiang-zhu-jie.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
