Skip to content

Release v2.3

Latest

Choose a tag to compare

@ocochard ocochard released this 20 Sep 08:20
· 4 commits to master since this release

Release 2.3 (2026/09/20)

New features

  • Latest changes from FreeBSD main and ports at 2026/09/20
  • bird2 to bird3 (major version upgrade)
  • pimd 2.3.2b to 3.1.0 (major version upgrade): the daemon rescans the
    kernel interface list while running, so an interface configured after
    pimd started (PPP or L2TP link, tunnel, VLAN added in service) becomes
    a PIM vif on its own, including the phyint lines of a pimd.conf
    naming an interface that did not exist at startup. Daemonizing now
    releases the controlling terminal, so a pimd started from its rc script
    on a console no longer dies on the next INTR typed there. SSM support
    is advertised (PIM-SM/SSM).
  • Add lab-reinstall-test: remote reinstall via RAM-boot + ssh|dd
  • Replace gpartfix rc script with stock growfs
  • Ship additional USB and serial kernel modules
  • jail tenant tool: add -l flag to list configured jails
  • Python 3.11 to 3.12; ExaBGP and related tools rebuilt on Python 3.12
  • New Intel NIC maintenance tools: intel-epct (Ethernet Port
    Configuration Tool) and the NVM update utilities for I210, I225/I226
    and X550 adapters

Fixes

  • config save: validate rc.conf before persisting
  • config save: exclude ssh agent socket directories from saved config
  • config: setlock no longer removes another instance's lock, and reports
    a failure instead of exiting 0
  • autosave: a refused instance no longer tears down the running daemon
  • Add extra delay to reliably detect the UFS label at boot
  • jail tenant tool: don't fight with autosave, and stop failing on an
    existing jail
  • jail tenant tool: harden against edge cases in cleanup and ID derivation
  • jail tenant tool: recover gracefully from orphan configs on delete
  • jail tenant tool: fix broken grep pattern for interface duplicate check
  • jail tenant tool: trap-based cleanup on partial jail creation failure
  • jail tenant tool: derive next jail ID from configs, avoid jail.lastid single point of failure

FreeBSD notable network stack changes introduced

iflib (Intel, Broadcom... drivers)

  • New "simple_tx" transmit path: packets are sent directly while the
    transmit queue mutex is available, and only contending threads defer
    through a bounded buf_ring. It outperforms mp_ring by a wide margin
    when the CPU, not the NIC, is the bottleneck. It is not the default
    yet: set the loader tunable net.iflib.prefer_mpring=0 for all iflib
    interfaces, or dev.<driver>.<unit>.iflib.simple_tx=1 for one of them.
    Related knobs: net.iflib.max_producers,
    net.iflib.simple_drain_quota, net.iflib.simple_txbr_size. Note that
    tx_abdicate is ignored when simple_tx is used, and simple_tx is
    disabled on an interface using ALTQ.
  • Driver-provided transmit queue selection, RSS configuration queries,
    and per-packet RX hardware timestamps plumbed to mbufs
  • led(4) devices created for the NICs that expose one
  • TX watchdog now requires sustained demand before firing, and counts
    its resets in a sysctl
  • Many SR-IOV hardening fixes (ice, ixgbe, igbv): VF requests made
    idempotent, VFs isolated after malicious-driver detection, mailbox
    flood protection, VF status reported through netlink and ifconfig

Packet filtering

  • pf: syncookies are now sent from the receiving thread
  • pf: a crafted reset packet can no longer drop a TCP state
  • pf: fragment reassembly key includes the direction
  • pf: securelevel off-by-one, and several crash fixes (low memory,
    sendfile, outbound NULL dereference, overlapping group and interface
    names)
  • pfsync: works over interfaces with a large MTU
  • libalias: buffer overflow in RTSP aliasing fixed
  • ipfw/nat64 and nat64lsn: type confusion panic when using the wrong
    NAT64 instance type fixed; checksum fixed after NAT
  • ipfilter: PPTP proxy length underflow fixed

Routing

  • fib-aware address selection: ifa_ifwithroute(), rt_getifa_fib(),
    ICMP redirect verification and bind(2) with *.bind_all_fibs all
    look the address up in the right FIB
  • fib_algo: nexthop index collision across address families fixed, and a
    radix_masks leak in radix_lockless
  • Nexthop groups subscribe to interface link events and replace
    unreachable nexthops
  • ICMP redirects only update the FIB the redirect arrived on
  • netlink: RTA_PREFSRC support, if_gif netlink support, FreeBSD-specific
    IFLAF_GROUP, PF command decoding

TCP

  • Host cache is now used for socket buffer sizing, and reports more
    statistics
  • PRR implementation aligned with RFC 9937
  • TCP-MD5 accounting fixes, stricter SEG.SEQ validation for RST segments

Interfaces

  • vlan: the parent is notified when a VLAN ID is replaced
  • if_bridge: only the inspected headers are pulled up, drops on the
    fragmentation path are counted, NULL softc dereference fixed
  • epair: IFCAP_MEXTPG support, receive checksum offloading can be
    disabled
  • New media types: 800GBase-X, 200Gbit/s per lane, 10GBase-BX BiDi

Upgraded packages

  • bird: 2 -> 3.3.2_1
  • cpu-microcode-intel: 20260512 -> 20260812
  • dnsmasq: 2.92rel2,1 -> 2.93,1
  • frr10: 10.6.1 -> 10.7.1
  • frr10-pythontools: 10.6.1 -> 10.7.1
  • fswatch-mon: 1.13.0_3 -> 1.20.1
  • monit: 5.35.2 -> 6.0.0
  • mpd5: 5.9_18 -> 5.9_19
  • mstflint: 4.36.0.1 -> 4.37.0.1
  • open-vm-kmod: 13.0.10.1600018,2 -> 13.1.0.1600026,2
  • open-vm-tools-nox11: 13.0.10,2 -> 13.1.0,2
  • openvpn: 2.7.4 -> 2.7.7
  • pimd: 2.3.2b_1 -> 3.1.0
  • pmacct: 1.7.8_1 -> 1.7.9
  • realtek-re-kmod: 1101.00.1600018 -> 1102.01.1600026_1
  • strongswan: 6.0.6 -> 6.1.0
  • wireguard-tools: 1.0.20250521_1 -> 1.0.20260223

Removed packages

  • intel-nvmupdate-100g: renamed upstream to intel-nvmupdate-e810, which
    is not in the BSDRP package list: the image no longer carries an NVM
    update utility for E810 100G adapters
  • bird2, python311 and py311-* were upgraded/renamed, not dropped