Project

General

Profile

DRAFT: Batman-adv 2026.3 released

September 1st, 2026: The B.A.T.M.A.N. team is excited to announce the release of the September 2026 update for batman-adv! batman-adv got rid of the induced overhead of each Ethernet-like interface on the system by only handling interfaces which are attached to a mesh interfaces. The unacked packet queue of throughput meter receivers will now be defragmented to keep it much shorter in many scenarios with packet loss or packet reordering. Support for kernel older than 5.15 was dropped. Several bug fixes and code cleanups are included in this version.

Since the kernel module is always dependent on the specific Linux kernel it’s compiled against, providing precompiled binaries on our website is not feasible. As always, you can find the signed tarballs in the download section:

https://downloads.open-mesh.org/batman/releases/batman-adv-2026.3/

Thanks

Many thanks to everyone who contributed patches:

And a special thanks to those who supported us with valuable advice and thorough testing:

batman-adv

$ git describe origin/main
v2026.2-69-gf3c33e7f
$ range=v2026.2..v2026.2-69-gf3c33e7f
$ git shortlog --email --no-merges "${range}" 
$ git log --no-merges "${range}"|grep -e '\(Reported\|Tested\|Acked\|Reviewed\|Co-authored\)-by'|sed 's/.*:/*/'|sort|uniq

features
========

      batman-adv: create hardif only for netdevs that are part of a mesh
      batman-adv: remove global hardif list
      batman-adv: tp_meter: combine adjacent/overlapping unacked entries
      batman-adv: tp_meter: delay allocation of unacked entry

new kernel version
==================

      batman-adv: compat: disable k*alloc_obj for 6.12.37-6.13
      batman-adv: compat: disable k*alloc_obj only after 6.12.97
      batman-adv: compat: drop support for Linux < 5.15

coding style cleanup/refactoring
================================

      batman-adv: remove BATADV_IF_NOT_IN_USE hardif state
      batman-adv: move hardif generation counter into batadv_priv
      batman-adv: drop unneeded goto and initialization from batadv_hardif_disable_interface()
      batman-adv: handle errors in batadv_init()
      batman-adv: make hard_iface->mesh_iface immutable
      batman-adv: drop NULL check for immutable hardif->mesh_iface
      Revert "batman-adv: v: stop OGMv2 on disabled interface" 
      batman-adv: iv: drop migration check for batadv_hard_iface
      batman-adv: tvlv: extract tvlv header iterator
      batman-adv: tp_meter: keep unacked list for receivers
      batman-adv: tp_meter: adjust name of receiver lock
      batman-adv: tp_meter: simplify unordered ack calculation
      batman-adv: add missing kernel-doc comments
      batman-adv: correct batadv_recv_frag_packet() return kernel-doc
      batman-adv: annotate functions which may reallocate the skbuff
      batman-adv: split multiple declarations per line
      batman-adv: switch var declarations to reverse x-mas tree order
      batman-adv: tt: simplify NEW flag transition code
      batman-adv: fix batadv_bla_claim inline kernel doc order
      batman-adv: dat: drop non-4addr backwards compatibility
      batman-adv: annotate functions which may cow reallocate the skbuff
      batman-adv: fix kernel-doc for functions holding skb ownership
      batman-adv: bla: only update backbone lasttime on changed claim backbone
      batman-adv: Fix minor kernel-doc problems
      batman-adv: clean up reallocation kernel docs
      batman-adv: keep extracted declaration assignments at start
      batman-adv: correct NET_RX_* NET_XMIT_* confusion
      batman-adv: remove negative returns for batadv_send_skb_unicast

various
=======

bugfixes
========

      batman-adv: reject unrepresentable multicast TVLV offsets
      batman-adv: fix stale receive device on merged fragments
      batman-adv: bla: fix freeing of claims on meshif deletion
      batman-adv: ensure minimal ethernet header on TX
      batman-adv: fix VLAN priority offset
      batman-adv: tt: avoid request storms during pending request
      batman-adv: frag: fix primary_if leak on failed linearization
      batman-adv: frag: free unfragmentable packet
      batman-adv: mcast: avoid OOB read of num_dests header
      batman-adv: tt: prevent TVLV OOB check overflow
      batman-adv: clean untagged VLAN on netdev registration failure
      batman-adv: dat: fix tie-break for candidate selection
      batman-adv: bla: avoid CRC corruption due to parallel claim add
      batman-adv: bla: prevent CRC corruptions after claim flush
      batman-adv: dat: avoid unaligned fault in IP extraction
      batman-adv: dat: atomically update mac addresses
      batman-adv: fix TX priority extraction for BATADV_FORW_MCAST
      batman-adv: mcast: ensure unshared skb for multicast packets
      batman-adv: mcast: linearize skbuff for packet generation
      batman-adv: tvlv: handle negative tvlv processing return codes

2026.3 (2026-09-01)
===================

* support latest kernels (5.15 - 7.3)
* coding style cleanups and refactoring
* reduce memory and runtime overhead by only handling attached interfaces
* optimize throughput meters unacked packets handling
* bugs squashed:

  - clean untagged VLAN on netdev registration failure
  - ensure minimal ethernet header on TX
  - fix VLAN priority offset
  - bla: avoid CRC corruption due to parallel claim add
  - bla: fix freeing of claims on meshif deletion
  - bla: prevent CRC corruptions after claim flush
  - dat: atomically update mac addresses
  - dat: avoid unaligned fault in IP extraction
  - dat: fix tie-break for candidate selection
  - frag: fix primary_if leak on failed linearization
  - frag: fix stale receive device on merged fragments
  - frag: free unfragmentable packet
  - mcast: avoid OOB read of num_dests header
  - mcast: fix TX priority extraction for BATADV_FORW_MCAST
  - mcast: ensure unshared skb for multicast packets
  - mcast: linearize skbuff for packet generation
  - mcast: reject unrepresentable TVLV offsets
  - tt: avoid request storms during pending request
  - tt: prevent TVLV OOB check overflow
  - tvlv: handle negative tvlv processing return codes

batctl

$ git describe origin/main
v2026.2-88-gc8782f5
$ range=v2026.2..v2026.2-88-gc8782f5
$ git shortlog --email --no-merges "${range}" 
$ git log --no-merges "${range}"|grep -e '\(Reported\|Tested\|Acked\|Reviewed\|Co-authored\)-by'|sed 's/.*:/*/'|sort|uniq

features
========

coding style cleanup/refactoring
================================

      batctl: add missing packet kernel-doc comments
      batctl: switch to native getrandom
      batctl: tcpdump: drop hardcoded IPv6 buffer sizes
      batctl: debug: don't return negative error codes from handle_debug_table
      batctl: only mark file read successful on read line
      batctl: version: don't strip newline for empty buffer
      batctl: genl_json: drop leftover network coding log level
      batctl: tpmeter: don't use negative errno as exit status
      batctl: genl_json: don't return negative error codes to main
      batctl: tpmeter: report kernel errors via strerror
      batctl: netlink: use kernel-style error codes for nl_recvmsgs
      debug: drop stray debug printf line
      batctl: mark local-only functions static
      batctl: genl: include own header
      batctl: fix "plain 0 used as NULL" warning
      batctl: separate commands from helper functions

bugfixes
========

      batctl: fix parsing of parameters with arguments
      batctl: originators: fix throughput lines with bat_hosts
      batctl: free header lines after error
      batctl: traceroute: handle fast replies
      batctl: return only initialized icmp destination unreached bytes
      batctl: tcpdump: fix coded packet mac dest mac addresses
      batctl: tcpdump: fix endianness of fragmentation sequence number
      batctl: tcpdump: correct output of VLAN IDs
      batctl: tcpdump: fix reported length for ICMP6_TIME_EXCEEDED
      batctl: tcpdump: handle TCP packet with bogus data offset
      batctl: tpmeter: fix Gbps output
      batctl: tpmeter: label sub-kByte/s rate in bits per second
      batctl: netlink: check for BATADV_ATTR_MESH_ADDRESS before accessing it
      batctl: netlink: always 0-terminate hardif name
      batctl: bat-hosts: compare full path for deduplication
      batctl: improve number parsing error handling
      batctl: bat-hosts: free bat_host when hash_add fails
      batctl: dat_cache: fix multicast/unicast filter for MAC address
      batctl: isolation_mark: fix error message for invalid mark/mask values
      batctl: event: don't print timestamp prefix for skipped events
      batctl: debug: avoid endless getopt loop for attached '-w' argument
      batctl: debug: use strict interval/timeout parsing
      batctl: debug: reject trailing garbage for intervals
      batctl: debug: reject non-finite/negative interval/timeout values
      batctl: version: avoid use of uninitialized read buffer
      batctl: interface: report rtnl query failures
      batctl: interface: return fail for non-existing interface
      batctl: translate: don't overwrite the search key
      batctl: genl_json: avoid negative chars in sanitize_string
      batctl: genl_json: reject unknown options in handle_json_query
      batctl: genl_json: escape non-printable characters as valid JSON
      batctl: tcpdump: fix "subtybe" typo in 4ADDR output
      batctl: tcpdump: return EXIT_SUCCESS on normal termination
      batctl: tcpdump: check frame length before reading the ethernet header
      batctl: tcpdump: resolve bat-host name for ROAMv1 client
      batctl: tcpdump: print the unreachable host for ICMP port unreachable
      batctl: tcpdump: skip partial line for oversized ICMPv6 errors
      batctl: tcpdump: don't label unknown ICMPv6 types as unreachable
      batctl: tcpdump: reject invalid packet type arguments
      batctl: tcpdump: fix source address selection for 802.11 data frames
      batctl: traceroute: return EXIT_NOSUCCESS when destination not reached
      batctl: icmp_helper: return proper errno on syscall failures
      batctl: ping: count sent and not received pings
      batctl: ping/traceroute: don't restart RTT timer on stray replies
      batctl: traceroute: probe the advertised maximum number of hops
      batctl: ping: keep huge '-i' intervals from turning into a flood ping
      batctl: ping: reject invalid packet count argument
      batctl: ping: reject invalid timeout argument
      batctl: ping: fix rtt minimum tracking when a sample is 0.0
      batctl: icmp_helper: fail send when the primary mac is unknown
      batctl: icmp_helper: attach socket filter before packets can arrive
      batctl: tpmeter: abort result wait on receive errors
      batctl: tpmeter: reject invalid test duration argument
      batctl: tpmeter: don't cancel test from the signal handler
      batctl: handle netlink callback object on error
      batctl: netlink: abort netlink_print_common when message allocation fails
      batctl: netlink: don't format NULL extra_info in info_callback
      batctl: netlink: report dump errors signalled in the NLMSG_DONE message
      batctl: netlink: detect receive errors in netlink_print_common
      batctl: netlink: report kernel errors when writing settings
      batctl: netlink: report send errors in netlink_simple_request
      batctl: netlink: detect receive errors in query_rtnl_link
      batctl: netlink: detect receive errors in netlink_simple_request
      batctl: netlink: detect receive errors in query_rtnl_link_single
      batctl: netlink: report error on query_rtnl_link send failure

features
========

coding style cleanup/refactoring
================================

bugfixes
========

2026.3 (2026-09-01)
===================

* coding style cleanups and refactoring
* bugs squashed:

  - bat-hosts: compare full path for deduplication
  - bat-hosts: free bat_host when hash_add fails
  - dat_cache: fix multicast/unicast filter for MAC address
  - debug: avoid endless getopt loop for attached '-w' argument
  - debug: reject non-finite/negative interval/timeout values
  - debug: reject trailing garbage for intervals
  - debug: use strict interval/timeout parsing
  - event: don't print timestamp prefix for skipped events
  - fix parsing of parameters with arguments
  - genl_json: avoid negative chars in sanitize_string
  - genl_json: escape non-printable characters as valid JSON
  - genl_json: reject unknown options in handle_json_query
  - handle netlink callback object on error
  - icmp_helper: attach socket filter before packets can arrive
  - icmp_helper: fail send when the primary mac is unknown
  - icmp_helper: return only initialized icmp destination unreached bytes
  - icmp_helper: return proper errno on syscall failures
  - improve number parsing error handling
  - interface: report rtnl query failures
  - interface: return fail for non-existing interface
  - isolation_mark: fix error message for invalid mark/mask values
  - netlink: abort netlink_print_common when message allocation fails
  - netlink: always 0-terminate hardif name
  - netlink: check for BATADV_ATTR_MESH_ADDRESS before accessing it
  - netlink: detect receive errors in netlink_print_common
  - netlink: detect receive errors in netlink_simple_request
  - netlink: detect receive errors in query_rtnl_link
  - netlink: detect receive errors in query_rtnl_link_single
  - netlink: don't format NULL extra_info in info_callback
  - netlink: free header lines after error
  - netlink: report dump errors signalled in the NLMSG_DONE message
  - netlink: report error on query_rtnl_link send failure
  - netlink: report kernel errors when writing settings
  - netlink: report send errors in netlink_simple_request
  - originators: fix throughput lines with bat_hosts
  - ping/traceroute: don't restart RTT timer on stray replies
  - ping: count sent and not received pings
  - ping: fix rtt minimum tracking when a sample is 0.0
  - ping: keep huge '-i' intervals from turning into a flood ping
  - ping: reject invalid packet count argument
  - ping: reject invalid timeout argument
  - tcpdump: check frame length before reading the ethernet header
  - tcpdump: correct output of VLAN IDs
  - tcpdump: don't label unknown ICMPv6 types as unreachable
  - tcpdump: fix "subtybe" typo in 4ADDR output
  - tcpdump: fix coded packet mac dest mac addresses
  - tcpdump: fix endianness of fragmentation sequence number
  - tcpdump: fix reported length for ICMP6_TIME_EXCEEDED
  - tcpdump: fix source address selection for 802.11 data frames
  - tcpdump: handle TCP packet with bogus data offset
  - tcpdump: print the unreachable host for ICMP port unreachable
  - tcpdump: reject invalid packet type arguments
  - tcpdump: resolve bat-host name for ROAMv1 client
  - tcpdump: return EXIT_SUCCESS on normal termination
  - tcpdump: skip partial line for oversized ICMPv6 errors
  - tpmeter: abort result wait on receive errors
  - tpmeter: don't cancel test from the signal handler
  - tpmeter: fix Gbps output
  - tpmeter: label sub-kByte/s rate in bits per second
  - tpmeter: reject invalid test duration argument
  - traceroute: handle fast replies
  - traceroute: probe the advertised maximum number of hops
  - traceroute: return EXIT_NOSUCCESS when destination not reached
  - translate: don't overwrite the search key
  - version: avoid use of uninitialized read buffer

alfred

$ git describe origin/main
v2026.2-2-gb175725
$ range=v2026.2..v2026.2-2-gb175725
$ git shortlog --email --no-merges "${range}" 
$ git log --no-merges "${range}"|grep -e '\(Reported\|Tested\|Acked\|Reviewed\|Co-authored\)-by'|sed 's/.*:/*/'|sort|uniq

features
========

coding style cleanup/refactoring
================================

bugfixes
========

      alfred: seed the random() generator for transaction IDs

2026.3 (2026-09-01)
===================

* bugs squashed:

  - seed the random() generator for transaction IDs

Happy routing,

The B.A.T.M.A.N. team