For the complete documentation index, see llms.txt. This page is also available as Markdown.

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.

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.

ident		LINT

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

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.

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

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) for details.

  • ①: 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.

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.

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.

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.

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

Compile-time defaults for various boot parameters.

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.

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

GEOM-related options.

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.

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.

SMP builds a symmetric multiprocessor kernel. Must be specified.

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.

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

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

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

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.

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.

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.

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.

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.

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.

  • CALLOUT_PROFILING: Enable basic profiling of the callwheel data structure used by the callout(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.

LOCK_PROFILING — lock profiling. See LOCK_PROFILING(9) for details.

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

Profiling for the callout(9) backend.

Profiling of internal hash tables.

Debug tracing for epoch(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.

Legacy TTY interface.

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.

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

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

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.

Enable FreeBSD 8 compatibility system calls.

Enable FreeBSD 9 compatibility system calls.

Enable FreeBSD 10 compatibility system calls.

Enable FreeBSD 11 compatibility system calls.

Enable FreeBSD 12 compatibility system calls.

Enable FreeBSD 13 compatibility system calls.

Enable FreeBSD 14 compatibility system calls.

Enable Linux Kernel Programming Interface.

  • 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.

Compile kernel debugger-related code at build time.

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

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.

Enable the ddb debugger backend.

Print numeric values of symbols in addition to symbolic representation.

Enable the remote gdb debugger backend.

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

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

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.

Enable textdump by default and disable kernel core dumps.

Enable additional debug information when performing a textdump.

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

MALLOC_DEBUG_MAXZONES enables multiple uma zones for malloc(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) can be used to catch the offending code.

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

DEBUG_REDZONE enables buffer underflow and buffer overflow detection for malloc(9).

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.

KTRACE enables the system call tracing facility ktrace(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.

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) 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.

  • ALQ(9) is a mechanism for asynchronously queuing kernel records to a vnode.

  • Services such as ktr(4) use it to generate trace files based on the kernel event stream. Records are written asynchronously by a worker thread.

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.

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.

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.

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.

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.

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).

STACK enables the stack(9) facility, which can capture kernel stacks. If DDB(4) is compiled into the kernel, stack(9) is also automatically compiled in.

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.

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.

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.

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.

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

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.

Optional TCP stacks.

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

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

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

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

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

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.

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.

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), then setting various log bits via sysctl to turn them on or off. Use ktrdump(8) to extract logs, then process them with a display program to generate charts and other visualizations.

OpenFabrics Enterprise Distribution (OFED, InfiniBand).

Sockets Direct Protocol (SDP).

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

altq(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.

  • ①: The netgraph(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).

netgraph node types:

vimage(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.

When networking is enabled, the loop(4) device is required.

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

The vlan(4) device implements Ethernet frame VLAN tagging per IEEE 802.1Q.

The vxlan(4) device implements VXLAN encapsulation of Ethernet frames in UDP packets per RFC 7348.

The wlan(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.

Optional devices, dependent on the 802.11 wlan module.

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.

  • 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.

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.

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.

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

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

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

The tuntap device implements user-space PPP, nos-tun(8), and pty-like virtual Ethernet interfaces.

  • 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

The stf device implements 6to4 encapsulation.

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).

Bridged network interface.

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.

IPsec interface.

LAGG link aggregation interface.

WireGuard interface.

dummymbuf is a pfil hook for mbuf modification.

Internet Protocol Suite

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

  • ①: 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.

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.

These options are used to enable statically linked accept filters.

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.

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.

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

The NETDUMP option enables netdump(4) client support in the kernel. It can send kernel dumps to a remote host during a kernel panic.

The NETGDB option enables netgdb(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.

At least one of the above options must be selected.

The above options are all optional.

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

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

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.

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.

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

UFS journaling support based on gjournal(8).

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.

Configures the md device as a potential root device, supporting preloaded mfs_root and md_root type images.

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

Allows reading md images from external memory regions.

Enabling this option enables disk quota support.

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.

Several NFS options.

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).

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

Kernel symbol table device: /dev/ksyms.

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.

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

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

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.

BSM auditing.

Mandatory Access Control (MAC).

Capsicum technology.

Clock

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

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.

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

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.

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.

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.

Enable and compile all debugging features.

Specify the debug level to compile into the kernel.

Specify the debug level to enable at system boot.

Restrict debugging to the specified bus.

Restrict debugging to the specified target.

Restrict debugging to the specified LUN.

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

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

Defining this option disables sense description strings.

Defining this option disables opcode description strings.

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.

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

Displays additional CAM device statistics via sysctl.

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.

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.

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.

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

Timeout for space operations, in minutes.

Timeout for rewind operations, in minutes.

Timeout for erase operations, in minutes.

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.

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.

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.

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.

BSD-style compatible pseudo terminals (pty).

Back-to-back tty devices.

Memory-based (allocated via malloc) disk device.

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

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.

firmware(9) support, firmware image loading and management.

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

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.

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.

These options also apply to other keyboard drivers.

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

Framebuffer debugging.

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

vt video console driver.

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

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

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

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

Adaptec 29320/39320 controllers

  • 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

Description of isp-related hint parameters.

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.

Firmware module for Qlogic host adapters.

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

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

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

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

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

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.

Dump the contents of the ahc controller configuration PROM.

Enable the target mode operation unit bitmap for ahc(4).

Compile Aic7xxx debugging code.

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.

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.

Compile aic79xx debugging code.

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.

Print readable register definitions when debugging.

Enable the target mode operation unit bitmap for ahd(4).

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

ISP_TARGET_MODE enables isp(4) target mode operation.

ISP_DEFAULT_ROLES: default roles.

  • none = 0

  • target = 1

  • initiator = 2

  • both = 3 (currently not supported)

Note

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

HVD support for 825A, 875, 885.

Disabled: 0 (default); Enabled: 1.

PCI parity check.

Disabled: 0; Enabled: 1 (default).

Number of supported LUNs.

Default: 8, range: 1-64.

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

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

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.

Serial ATA (SATA) Host Controllers

SATA is an interface standard for connecting storage devices.

Compatible with Advanced Host Controller Interface (AHCI).

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

SiliconImage SiI3124/SiI3132/SiI3531 SATA controllers.

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

The above drivers are all part of the cam(4) subsystem.

They replace the less feature-rich ata(4) subsystem drivers and support the same hardware.


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.

Modular ATA drivers.

PCI ATA chipsets.

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.

uart(4) generic serial interface driver.

uart(4) driver options.

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

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):

  • 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.

Options for serial drivers supporting consoles:

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

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.

Serial communication controller.

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

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

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.

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.

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.

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

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

Supports Atheros AR8131/AR8132 PCIe Ethernet controllers.

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.

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

Broadcom BCM4401 Ethernet adapter.

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.

Sun Cassini/Cassini+ and National Semiconductor DP83065 Saturn.

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.

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

Apple GMAC/Sun ERI/Sun GEM.

JMicron JMC260 Fast Ethernet/JMC250 Gigabit Ethernet adapters.

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.

lio: supports Marvell 23XX series Ethernet adapters.

mlxfw: Mellanox firmware update module.

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

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

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.

Myson Fast Ethernet (MTD80X, MTD89X).

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.

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

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.

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

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

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.

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

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.

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.

DM&P Vortex86 RDC R6040 Fast Ethernet.

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

iflib network interface driver framework.

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

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

PCI Ethernet Cards (Ethernet)

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

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

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.

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

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

AMD Am7900 LANCE and Am79C9xx PCnet NICs.

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

Myricom Myri-10G 10 GbE Ethernet card.

Emulex 10 GbE adapter (OneConnect Ethernet).

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

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)

Atheros series wireless cards.

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 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.

Atheros-related wireless cards.

Broadcom BCM430* and BCM431* series wireless cards.

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

Broadcom BCM43xx series wireless cards.

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

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

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

Ralink Technology IEEE 802.11 wireless adapters.

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

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

Use the sf_buf(9) interface to handle jumbo buffers on ti(4) controllers.

Enable the header splitting option for the ti(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.

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).

Audio Devices

Generic audio driver.

snd_*: Device-Specific Drivers

Avance Logic ALS4000 PCI.

ATI IXP 200/300/400 PCI.

CMedia CMI8338/CMI8738 PCI.

Crystal Semiconductor CS4281 PCI.

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

Creative EMU10K1 PCI and EMU10K2 (Audigy) PCI.

Creative SoundBlaster Live! and Audigy.

VIA Envy24 and compatible devices, depends on snd_spicds.

VIA Envy24HT and compatible devices, depends on snd_spicds.

Ensoniq AudioPCI ES137x PCI.

Forte Media FM801 PCI.

Intel High Definition Audio (controller) and compatible devices.

RME HDSP 9632 and HDSP 9652.

RME HDSPe AIO and RayDAT.

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

ESS Technology Maestro-3/Allegro PCI.

Neomagic 256 AV/ZX PCI.

ESS Solo-1x PCI.

SPI codec driver, required by Envy24/Envy24HT drivers.

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

USB audio.

VIA VT8233x PCI.

VIA VT82C686A PCI.

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).

Debugging/Testing

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