COMPAT_VERSION in packet.h is used to identify an incoming packet and check if it can processed by the current version. The packet structure should be identified by this version. The stuff which appears in a packet jumps a little bit with each version because we change stuff in trunk/main and in next and import those changes to the packet structure out-of-order.

Following changes were identified and documented.

Version Releases Changes
1 (development only) Initial definitions of batman_packet, icmp_packet, unicast_packet, bcast_packet, ethernet type 0x0842
5 (development only) information in batman_packet was reordered, tq, old_orig and hnas were added
6 v0.1 vis_packet type added, version fields added to each packet, ethernet type changed to 0x4305
7 (development only) unused gw flags removed, reordered icmp and batman packet
8 v0.2, v0.2.1, v2010.0.0 source field introduced in vis packets
9 (development only) Gateway flags added to batman_packet, primaries_first_hop flag added for bonding, special icmp messages for route record added
10 (development only) 32 bit sequence numbers added/changed, ttl were added to broadcasts
11 v2010.1.0 gateway flags were removed
12 v2011.0.0, v2011.1.0, v2012.2.0 unicast fragmentation added, gateway flags were readded
13 v2010.2.0 gateway flags were removed
14 v2011.3.0 until (and including) v2013.4.0 3-byte common header, tt queries and related fields added, roam adv packet added
15 v2014.0.0 and later TVLV (backward compatibility), packet alignment (__packed), vlan aware tt, crc32 checksums for tt, fragmentation v2, packet type prefix and BATADV_TT_CLIENT_TEMP

(* means future version with already defined feature set)

There is a special COMPAT_VERSION 200 which is only used by saxnet. This version is v6 with bcast seqno protection added.