07/22/2026 Version 4.5.4
    - SECURITY: fix heap buffer overflow in the tcprewrite fragroute tcp_opt module
      (GHSA-pfqg-243f-8q25, CWE-787, CVSS 8.4). tcp_opt_apply() (src/fragroute/mod_tcp_opt.c)
      passed sizeof(pkt->pkt_data) - ETH_HDR_LEN as the buffer-capacity bound to
      inet_add_option(); pkt_data is a pointer, so sizeof() was 8 on 64-bit builds and the
      subtraction underflowed size_t to near SIZE_MAX, disabling the bounds check and letting
      libdnet's option-insertion memmove() write past the packet's heap allocation. The bound is
      now computed from the real buffer extent (pkt->pkt_buf + pkt->pkt_buf_size - pkt->pkt_ip).
      Reported by tinyb0y.
    - SECURITY: fix heap buffer overflow in the tcprewrite fragroute ip6_opt module
      (GHSA-2wmf-4p77-784q, CWE-787). ip6_opt_apply() (src/fragroute/mod_ip6_opt.c) inserted IPv6
      routing/extension headers with memmove()/memcpy() without checking that the inserted bytes
      fit the packet's remaining buffer headroom. Both the route and raw paths now verify
      pkt_end + offset stays within the allocation and skip the packet otherwise. Reported by
      tinyb0y.
    - SECURITY: fix the same class of unchecked option-insertion overflow in the fragroute ip_opt
      module (src/fragroute/mod_ip_opt.c), which used a fixed PKT_BUF_LEN - ETH_HDR_LEN bound that
      overcounts capacity by the buffer's lead-alignment pad on small packets; it now uses the same
      real buffer-extent bound as tcp_opt.
    - SECURITY: fix SEGV in the tcpedit DLT_JUNIPER_ETHER plugin when used as a decoder
      (GHSA-ww62-mxv7-pg55, CWE-704, CWE-843). dlt_jnpr_ether_post_init()/_cleanup()/_decode()/
      _proto()/_get_mac()/_l2len() (src/tcpedit/plugins/dlt_jnpr_ether/jnpr_ether.c) read
      ctx->encoder->config to get the plugin's own config, but this plugin only ever operates as a
      decoder (packet encoding is unsupported) - ctx->encoder pointed at an unrelated plugin's
      config struct, a type confusion that crashed tcpedit_dlt_getplugin() when processing
      DLT_JUNIPER_ETHER input, e.g. via tcprewrite --dlt=enet. Fixed by reading ctx->decoder->config
      in all six sites. Reported and originally patched by jiezhuzzz.
    - SECURITY: fix crash in remove_settings() on failed text_mmap (GHSA-5cjx-62pj-pmgq, CWE-476).
      remove_settings() (libopts/save.c), reachable from the AutoOpts option-file save/rewrite path
      (e.g. via --load-opts), dereferenced the pointer returned by text_mmap() without checking for
      MAP_FAILED, unlike the other two callers in configfile.c. A missing/inaccessible/wrong-type/
      empty settings file crashed the program. Fixed with the same TEXT_MMAP_FAILED_ADDR() guard
      already used elsewhere in the codebase. Reported by jiezhuzzz.
    - SECURITY: fix buffer overflow in the KHIAL sendpacket() path (GHSA-pjh6-6hrw-vcwr, CWE-787,
      CVSS 6.6). buffer_payload_size (src/common/sendpacket.c) was computed as sizeof(buffer) +
      sizeof(struct pcap_pkthdr) instead of sizeof(buffer) - sizeof(struct pcap_pkthdr), overstating
      the KHIAL send buffer's available space by 48 bytes (64-bit) and letting memcpy() overflow the
      static buffer for packets >= 10024 bytes sent via tcpreplay --intf1=<khial-device>; the
      following write() had the same problem in reverse, reading past the buffer into the character
      device. Fixed the calculation and added an explicit length check that rejects oversized
      packets before either memcpy or write() touch the buffer. Reported by 360AlphaLab.

07/18/2026 Version 4.5.3
    - configure: fix --with-netmap=DIR permanently leaking -I<DIR>/sys onto CFLAGS for the rest of
      the script, with no restore (unlike the equivalent, correctly-scoped CPPFLAGS addition a few
      lines later) - a netmap checkout's sys/ tree mirrors a BSD kernel source layout including
      its own sys/net/bpf.h, so later unrelated checks (e.g. the net/bpf.h feature check) could
      pick up netmap's vendored header instead of a real system one, wrongly setting HAVE_BPF=1 on
      Linux and causing a struct bpf_insn redefinition conflict against the system libpcap headers
      at build time; the netmap include path is now only applied to CFLAGS once, right before
      AC_OUTPUT, after all other detection has finished
    - configure: drop the bare -DND passed alongside --with-netmap=DIR's CFLAGS/CPPFLAGS - netmap's
      own netmap_user.h defines a function-like ND(...) debug-print macro guarded by #ifndef ND, but
      a valueless -DND makes the compiler predefine ND as the literal 1, so that guard sees ND as
      already defined and every real ND(...) call site in netmap's headers expands to 1(...),
      "called object is not a function or function pointer" (found while verifying the fix above,
      #1015)
    - tcpedit: fix --tcp-sequence and --portmap/-r silently having zero effect on some platforms
      (confirmed on macOS arm64) - rewrite_ipv4_tcp_sequence()/rewrite_ipv6_tcp_sequence()
      (rewrite_sequence.c) and rewrite_ipv4_ports()/rewrite_ipv6_ports() (portmap.c) computed the
      L4 "end of buffer" bounds pointer from the address of their own ipv4_hdr_t**/ipv6_hdr_t**
      parameter instead of the packet buffer address it pointed to ((u_char *)ip_hdr instead of
      (u_char *)(*ip_hdr)); get_layer4_v4()/v6()'s bounds check against that garbage pointer then
      either always passed (silently correct by luck) or always failed (silently rewriting
      nothing), depending on platform-specific stack layout (#1011)
    - tcpr_random: fix signed left-shift undefined behavior in this "consistent across all
      platforms" PRNG - left-shifting a signed int such that a set bit crosses the sign bit is
      undefined behavior in C, which different compiler backends are free to resolve differently;
      switched the accumulator to unsigned so the shift is well-defined everywhere
    - tcpliveplay: fix catch_alarm() not calling pcap_breakloop(), which left pcap_dispatch()
      blocked for the full buffer timeout (or indefinitely, on libpcap implementations where the
      timeout only starts once a packet arrives) instead of returning promptly when the alarm
      fires - the visible symptom was a spurious "remote host is not responding" timeout up to 10s
      after a response had actually arrived (#540)
    - tcprewrite: rewrite IPv6 addresses embedded in ICMPv6 error messages (Destination
      Unreachable, Packet Too Big, Time Exceeded, Parameter Problem) - RFC4443 has these embed the
      original ("invoking") packet's IP header, which tcprewrite left untouched, leaking the
      original addresses through capture sanitization/anonymization; also fixed a related
      pre-existing bug where the ICMPv6 checksum was never fixed up when an outer IPv6 address
      changed, unless --fixcsum was also passed (#818)
    - sendpacket: fix "zc:<ifname>"-style PF_RING ZC device names failing with "ioctl: No such
      device" - the default PF_PACKET path did a plain SIOCGIFINDEX lookup on the literal "zc:"
      string, which the kernel doesn't recognize; route zc: devices through libpcap instead, which
      is PF_RING-aware when built against PF_RING's patched libpcap (#913)
    - netmap: fix --netmap failing to switch the driver to bypass mode with a bogus "nm_do_ioctl:
      No such file or directory" error on real NICs (not VALE ports); a stray switch default case
      made nm_do_ioctl() report failure - and leak the ioctl socket fd - for SIOCSIFFLAGS/ethtool
      SET requests even when the underlying ioctl succeeded, regressed since 4.4.3 (#810)
    - tcpreplay: bound and make abortable the netmap TX-ring drain wait at the end of --loop
      replays; some netmap/driver combinations never report the ring empty, which used to hang
      tcpreplay at 100% CPU with no way to Ctrl+C out (#560)
    - tcpreplay: fix cumulative timing drift with --multiplier - each packet's sleep was computed
      from the previous packet's actual send time instead of a fixed start-of-replay anchor, so
      per-packet scheduling/syscall overhead accumulated over a long replay (100k packets sent in
      10.37s instead of the targeted 10.00s). Also fixes the same drift in dual-interface (-I)
      replay, which the original patch didn't cover. (#724, #915)
    - sendpacket (Linux): warn when sending on an interface with no carrier (cable unplugged /
      link down); sendto() on a down interface can report local success even though nothing
      reaches the wire, making "successful packets" stats meaningless (#109)
    - sendpacket: fix --xdp AF_XDP zero-copy TX failing with EINVAL on drivers (i40e, ixgbe)
      that require a native XDP program attached before ndo_xdp_xmit works; let libbpf
      auto-load its default program instead of inhibiting it (#956, #1002)
    - configure: fix LIBXDP feature probe rejecting every real libxdp install due to a
      pointer-indirection mismatch in the xsk_socket__create() compile check (#1002)
    - fragroute: fix build failure on macOS 13/14 from TAILQ_FOREACH_REVERSE argument-order
      collision between bundled lib/queue.h and system <sys/queue.h> (#981, #1001)
    - tcpprep: fix buffer overflow in check_dst_port() reading TCP/UDP dest port on truncated
      packets with incomplete L4 headers (#985, #995)
    - tcprewrite: fix --enet-vlan=add silently truncating output packets by 4 bytes when
      --enet-vlan-pri and/or --enet-vlan-cfi were omitted on untagged input (#990, #994)
    - fragroute: fix heap-buffer-overflow in fragroute_process() when a crafted packet's MPLS label
      stack produces an L2 header longer than the fixed 50-byte buffer (#992, #993)
    - send_packets: fix miscalibrated overflow guards in calc_sleep_time() causing tcpreplay to stop
      pacing (-M/-p) and blast remaining packets at full speed on long/high-count replays (#974, #989)
    - sendpacket: bounded retry on EAGAIN/ENOBUFS to prevent endless retry loop / 100% CPU hang (#984, #986)

08/26/2025 Version 4.5.2
    - C23 standard support (#977)
    - --fixlen use-after-free (#970)
    - gcc 15 out-of-tree build failure (#967)
    - better error handling for XDP send errors (#956)
    - stdbool.h not detected correctly (#947)
    - AF_XDP memory leaks (#935)
    - GitHub Actions CI failure (#933)
    - heap address leak in xX.c (#928)
    - TX_RING compile errors (#924)
    - continue on get_l2len_protcol() is zero (#911)
    - --infile and --outfile cannot be the same file (#914)
    - fix building on OpenBSD (#907)
    - fixup the libpcap search loops (#905)
    - tcprewrite crash on Juniper crafted packet (#902 #926)
    - support for IPv6 fragment checksums (#897)
    - AF_XDP sends at near full speed (#896)
    - TX_RING link errors on some platforms (#731 #904)
    - IPv6 header version check incorrect for flow stats (#899)
    - tcprewrite --portmap syntax error causes crash (#894)
    - gcc 4.4.4 fails build on FreeBSD (#809)
    - MAC address sometimes corruptly altered on tcprewrite --seed option (#794 #901)

07/12/2024 Version 4.5.1
    - NULL Pointer Dereference in parse_endpoints (#888)
    - tcpreplay --include / --exclude to control which packets are replayed (#884)
    - add -W (--suppress-warnings) option to suppress warning messages (#878)
    - AF_XDP compile issue due to merge issue (#876)
    - memory leak in tcpprep when using include/exclude (#869)
    - memory leak in tcpprep when using RegEx (#867)
    - fix nanosecond timestamp regression bug (#863)
    - autotools - AC_HELP_STRING is obsolete in 2.70 (#856)
    - add -w output.pcap command line option to direct the output to a pcap (#853)
    - configure.ac: do not run conftest in case of cross compilation (#849)
    - Haiku support (#847)
    - --fixhdrlen option added to control action on packet length changes (#846)
    - incorrect checksum for certain IPv4 packets - fixed by #846 (#844)
    - add check for IPv6 extension header length (#827 #842)
    - GitHub template for pull requests (#839)
    - improved 802.3 (Ethernet I) handling and warning messages (#835)
    - handle IPv6 fragment extension header (#832 #837)
    - Linux tap interfaces fail intermittently (#828)
    - CVE-2024-22654 CVE-2024-3024Infinite loop in tcprewrite at get.c (#827 #842)
    - SLL incorrect size and protocol when converted to Ethernet (#826)
    - CVE-2023-43279 add check for empty CIDR (#824 #843)
    - AF_XDP socket extension (#822 #823)
    - configure.ac: unify search dirs for pcap and add lib32 (#819)
    - tcpreplay-edit recomputes IPv4 checksums unnecessarily (#815 #846)
    - CVE-2023-4256 double free in tcprewrite DLT_JUNIPER_ETHER (#813 #851)
    - dlt_jnpr_ether_cleanup: check config before cleanup (#812 #851)
    - SEGV on invalid Juniper Ethernet header length (#811)
    - nanosecond timestamps support (#796)
    - Linux cooked packet fatal error (#792)
    - low PPS values run at full speed after several days (#779)
    - create DLT_LINUX_SLL2 plugin (#727)

06/04/2023 Version 4.4.4
    - overflow check fix for parse_mpls (#795)
    - tcpreplay-edit: prevent L2 flooding of ipv6 unicast packets (#793)
    - CVE-2023-27784 CVE-2023-27785 CVE-2023-27786 CVE-2023-27787 CVE-2023-27788 CVE-2023-27789
      bugs caused by strtok_r (#782 #784 #785 #786 #787 #788)
    - CVE-2023-27783 reachable assert in tcpedit_dlt_cleanup (#780)
    - add CI and C/C++ Linter and CodeQL (#773)
    - reachable assert in fast_edit_packet (#772)

01/01/2023 Version 4.4.3
    - upgrade autogen/libopts to version 5.18.16 (#759)
    - avoid implicit int in configure.ac (#757)
    - remove invalid assert in tree (#756)
    - program exit after send error (#751)
    - make libpcap version test more robust (#750)
    - looping inflates some packet counters (#749)

08/28/2022 Version 4.4.2
    - fix tests when building in a directory outside source tree (#767)
    - remove autogen.sh from distribution tarballs (#745)
    - CVE-2022-37048 heap-overflow in get_l2len_protocol (#735)
    - replaying on a loopback interface is broken (#732)
    - replay edit with both --loop and --preload_pcap options (#729)
    - test suite bus error on armhf (#725)
    - CVE-2022-28487 format string vulnerability in fix_ipv6_checksums (#723)
    - CVE-2022-27942 heap-overflow in parse_mpls (#719)
    - CVE-2022-27940 CVE-2022-37047 CVE-2022-37049 heap-overflow in get_ipv6_next (#718)
    - CVE-2022-27939 reachable assertion in get_layer4_v6 (#717)
    - CVE-2022-25484 CVE-2022-27941 heap buffer overflow in get_l2len_protocol (#716)
    - remove bash-only test in configure script (#714)

02/12/2022 Version 4.4.1
    - fix support for piping PCAP files from STDIN (#708)
    - build failures Debian/kfreebsd (#706)
    - bus error when building on armhf (#705)
    - typo fixes (#704)
    - CVE-2022-27418 heap buffer overflow in tcpreplay (#703)
    - CVE-2022-27416 double free in Juniper DLT (#702)

01/31/2022 Version 4.4.0
    - remove obsolete FORCE_ALIGN support to fix macOS 11 compile (#695)
    - add a security policy document (#689)
    - CVE-2021-45386 CVE-2021-45387 two reachable assertions in add_tree_ipv4() and add_tree_ipv6() (#687 #678)
    - ability to specify directory of pcap files (#682)
    - incorrect PPS rate for long-running sessions (#679)
    - option --skipbroadcast not working (#677 #678)
    - revert #630 to fix --multiplier issues (#674)
    - gcc 9.3 compiler warnings (#670)
    - installed netmap not automatically detected (#669)
    - latest macOS SDK selected by default (#668)
    - heap-buffer-overflow with flow_decode() (#665)
    - add feature VLAN Q-in-Q (#625)
    - add feature update Ethernet MAC on multicast IP (#563)

04/01/2021 Version 4.3.4
    - ASAN reports memory leaks while running tests (#662)
    - local libopts compiler warnings (#658)
    - DLT name for DLT_C_JNPR_ETHER in documentation (#649)
    - clean up new_cidr_map() string manipulation on error exit (#648)
    - fix gcc 8.3.0 build warnings (#634)
    - invalid --pps value protection (#632)
    - packets slowly drift further and further behind when they should be sent (#630)
    - 64 bit rollover can cause pps replay issues after several hours (#629)
    - typo fixes (#626) (#627)
    - DLT_NULL/DLT_LOOP support for cross-platform PF_INET6 (#624)
    - armv5 Freescale compile (#623)
    - heap buffer overflow in tcpreplay fast_edit_packet (#620)
    - heap buffer overflow in tcpreplay get_next_packet (#619)
    - CVE-2020-24266 heap buffer overflow in tcpprep get_l2len (#617)
    - CVE-2020-24265 heap buffer overflow in tcpprep (#616)
    - fix UNUSED macro declaration (#614)
    - handle malformed and unsupported packets as soft errors (#613)
    - compile failure on aarch64-linux-android (#612)
    - tcprewrite --fixlen not working on DLT conversion (#582)
    - fix configure --without-libdnet (#567)
    - ensure automake version is at least 1.15 (#553)
    - with multiplier option only first file can be sent and hang (#472)
    - do not create tap0 if device already exists (#411) (#651)

05/20/2020 Version 4.3.3
    - Increase cache buffers size to accomodate VLAN edits (#594)
    - CVE-2018-20553 Correct L2 header length calculations so that IP header offset is correct (#584)
    - Correct L2 header length to correct IP header offset (#583)
    - Fix warnings from gcc version 10 (#580)
    -  CVE-2020-23273 Heap Buffer Overflow in randomize_iparp (#579)
    - Use after free in get_ipv6_next (#578)
    - CVE-2020-12740 Heap Buffer Overflow in git_ipv6_next (#576)
    - Call pcap_freecode() on pcap_compile() (#572)
    - Increase max snaplen to 262144 (#571)
    - Fix divide by zero in fuzzing (#570)
    - Unique IP repeats at very high iteration counts (#566)
    - Fails to compile on FreeBSD amd64 13.0 (#558)
    - CVE-2020-18976 Heap Buffer Overflow in do_checksum (#556) (#577)
    - Attempt to correct corrupt pcap files, if possible (#557)
    - Fix GCC v10 warnings (#555)
    - Remove some duplicated SOURCES entries (#551)
    - Expand /dev/bpfX hard limit to fix macOS Mojave (#550)
    - Implement --loopdelay-ms when using --loop=0 (#546)
    - CVE-2018-20552 Heap overflow packet2tree and get_l2len (#530)

03/12/2019 Version 4.3.2
    - CVE-2019-8381 memory access in do_checksum() (#538)
    - CVE-2019-8376 NULL pointer dereference get_layer4_v6() (#537)
    - CVE-2019-8377 NULL pointer dereference get_ipv6_l4proto() (#536)
    - Rename Ethereal to Wireshark (#545)

12/27/2018 Version 4.3.1
    - Fix checkspell detected typos (#531)

11/10/2018 Version 4.3.0
    - Fix maxOS TOS checksum failure (#524)
    - TCP sequence edits seeding (#514)
    - Fix issues identifed by Codacy (#493)
    - CVE-2018-18408 use-after-free in post_args (#489)
    - CVE-2018-18407 heap-buffer-overflow csum_replace4 (#488)
    - CVE-2018-17974 heap-buffer-overflow dlt_en10mb_encode (#486)
    - CVE-2018-17580 heap-buffer-overflow fast_edit_packet (#485)
    - CVE-2018-17582 heap-buffer-overflow in get_next_packet (#484)
    - Out-of-tree build (#482)
    - CVE-2018-13112 heap-buffer-overflow in get_l2len (#477 dup #408)
    - Closing stdin on pipe (#479)
    - Second pcap file hangs on multiplier option (#472)
    - Jumbo frame support for fragroute option (#466)
    - TCP sequence edit ACK corruption (#451)
    - TCP sequence number edit initial SYN packet should have zero ACK (#450)
    - Travis CI build fails due to new build images (#432)
    - Upgrade libopts to 5.18.12 to address version build issues (#430)
    - Add ability to change tcp SEQ/ACK numbers (#425)
    - Hang using loop and netmap options (#424)
    - tcpprep -S not working for large cache files (#423)
    - Unable to tcprewrite range of ports with --portmap (#422)
    - --maxsleep broken for values less than 1000 (#421)
    - -T flag breaks traffic replay timing (#419)
    - Respect 2nd packet timing (#418)
    - Avoid non-blocking behaviour when using STDIN (#416)
    - pcap containing >1020 packets produces invalid cache file (#415)
    - manpage typos (#413)
    - Fails to open tap0 on Zephyr (#411)
    - Heap-buffer-overflow in get_l2protocol (#410)
    - Heap-buffer-overflow in packet2tree (#409)
    - Heap-buffer-overflow in get_l2len (#408)
    - Heap-buffer-overflow in flow_decode (#407)
    - Rewrite zero IP total length field to match the actual packet length (#406)
    - Stack-buffer-overflow in tcpcapinfo (#405)
    - tcpprep --include option does not exclude (#404)
    - Negative-size-param memset in dlt_radiotap_get_80211 (#402)
    - tcpeplay --verbose option not working (#398)
    - Fix replay when using --with-testnic (#178)

05/10/2017 Version 4.2.6
    - Test fails on sparc64 (#393)

05/02/2017 Version 4.2.5
    - Fix issues found by scan-build (#384)
    - Improve --portmap help message (#381)
    - AFL detected security crash in fuzz feature (#380)
    - Coverity static scan detected issues (#374)
    - Fuzz should not be overwritting Layer 3 (#372)
    - Add --fuzz-factor option to specify fuzz ratio (#371)
    - Warnings when building on old distributions (#368)
    - Fix more Lintian detected spelling errors (#365)
    - Fuzz test failure on ARM and MIPS (#364)

04/26/2017 Version 4.2.4
    - Fix Lintian detected spelling errors (#362)

04/12/2017 Version 4.2.3
    - Archive (remove) QuickTX until maintainer found (#357)
    - Ubuntu precise 32bit_build (#356)

03/08/2017 Version 4.2.2
    - Archive (remove) QuickTX (#357)
    - Missing symbol pcap_version on macOS 10.12.4 (#356)

03/23/2017 Version 4.2.1
    - Fix reporting of rates < 1Mbps (#348)
    - Option --unique-ip not working properly (#346)

02/26/2017 Version 4.2.0
    - MAC rewriting capabilities (#313)
    - Fix several issues identified by Coverity (#305)
    - Packet destortion --fuzz-seed option by Gabriel Ganne (#302)
    - Add --unique-ip-loops option to modify IPs every few loops (#296)
    - Netmap startup delay increase (#290)
    - CVE-2017-6429 tcpcapinfo buffer overflow vulnerablily (#278)
    - Update git-clone instructions by Kyle McDonald (#277)
    - Allow fractions for --pps option (#270)
    - Print per-loop stats with --stats=0 (#269)
    - Add protection against packet drift by Guillaume Scott (#268)
    - Print flow stats periodically with --stats output (#262)
    - Include Travis-CI build support by Ilya Shipitsin (#264) (#285)
    - tcpreplay won't replay all packets in a pcap file with --netmap  (#255)
    - First and last packet times in --stats output (#239)
    - Switch to wire speed after 30 minutes at 6 Gbps (#210)
    - tcprewrite fix checksum properly for fragmented packets (#190)

11/19/2016 Version 4.1.2
    - Fix compilation with musl C library (#260)
    - Support parallel builds (#259)
    - Give user CFLAGS precedence (#256)
    - Properly detect Brew install when Xcode is not available (#254)
    - CVE-2016-6160 Increase max packet size to 65549 (#251)
    - Handle IP headers with zero length (#247)

01/11/2016 Version 4.1.1
    - Improve --pps accuracy and performance (#236)
    - Option --unique-ip accepts --duration (#227)
    - RFC1624 incremental checksums (#225)
    - Option --duration performance optimizations (#223)
    - Correct company name in license (#217)
    - Compile and mult-arch cross-compile on ARM (#211)
    - Tap device support for Linux and FreeBSD from Murat Demirten (#207)
    - Handle loopback for linux cooked capture files from corentin-p1(Linux SLL) (#204)
    - Master doesn't compile on OS X 10.11 (#203)
    - Recognise tbd stubs from Dominyk Tiller (#202)
    - Support for tcprewrite multiple IP CIDR (#199)
    - Fix incorrect checksums after editing fragmented packets (#190)
    - Option --loop=0 full wire wire speed after 1st pass (#172 #191)
    - Big-endian tcpliveplay work-around from Brian Micek (#194)
    - Build OS X using existing XCode SDK (#185)
    - Update to autogen version 5.18.6 and libopts 46.0.16 (#182)
    - netmap reports impossibly high capacity (#176)
    - Duration feature from dexteradeus (#175)
    - Stop sending and exit when limit is reached (#174)
    - Extra packets sent with -L option (#173)
    - Buffer overflow bug in tcpprep (#167)
    - netmap optimizations (#93)

12/17/2014 Version 4.1.0
    - Do not build Quick TX modules on OS X (#164)
    - Add a flag to customize netmap delay (#160)
    - Fix some compile wwarnings (#159)
    - Disabled QuickTX build by default (#157)
    - Less verbose build (#154)
    - Add a loop delay option (#125)
    - CentOS 6.5 kernel panic on Quick TX init (#146)
    - Fix libpcap not found on CentOS 7 (#145)
    - Segfault in tcpliveplay on x86_64 (#132)
    - Sometimes unable to interrupt with Ctrl-C (#129)

10/08/2014 Version 4.1.0beta1
    - Fix cross compiling (#140)
    - Add Quick TX module for Linux (#136)
	- Better recovery for missing static libpcap libs (#128)

09/05/2014 Version 4.0.5
    - Fix build failure with latest netmap 11 (#123)
    - Fix unable to use Zero Copy interfaces on PF_RING (#118)
    - Corrected build for latest version of PF_RING (#81)
    - Proper error message when vale is unconfigured (#113)
    - Avoid a netmap module debug message (#110)
    - Add missing header to distribution (#108)
    - Make --netmap version agnostic (#106)
    - Fix netmap hang in FreeBSD 11 (#103)
    - Fix netmap hang if network cables unplugged (#96)
    - Support for Vale Switch (#91)
    - Prevent file retransmissions when selecting multiple files (#86)
    - Fix max replay rate for all loops except first when omitting --mbps (#85)
    - Add missing sanity check in libopt (#84)
    - Seg fault on some IPv6 files when using -C option with tcprewrite (#83)
    - Support for PF_RING DNA version of libpcap (#81)
    - Fix segfault when using '-F pad' (#80)
    - Disallow netmap on multiple interfaces (#79)
    - Fix build for FreeBSD version 8.4 (#78)

03/22/2014 Version 4.0.4
    - Number of packets inaccurate when using --netmap method (#76)
    - Unexpected packet counts with --loop and --cachefile enabled (#75)
    - Improved error messages when interface is a file (#74)
    - Missing interfaces with --listnics option (#67)
    - Compile issue with netmap v10 and debugging (#66)
    - Bad values with --stats and -t options (#65)

02/04/2014 Version 4.0.3
    - Fix build errors when ENABLE_VERBOSE is not set (#60)
    - Build error on host without tcpdump (#59)

01/17/2014 Version 4.0.2
    - Fix hangs with --mbps command (#54)

01/16/2014 Version 4.0.1
    - Support for netmap version 10 API (#53)
    - Remove deprecated "absolute time" for OS X (#52)
    - Make dosleep() rentrant to support API concurrency (#51)
    - Remove compiler warnings (#50)
    - Fix slow netmap in Intel GigE "igb" server NICS (#49)

01/05/2014 Version 4.0.0
    - Implemented wiki page for 4.X - http://tcpreplay.appneta.com
    - Support for ARM aarch64 (appneta #43)
    - Add Juniper Encapsulated Ethernet DLT (appneta #42)
    - Fixed seg fault on -K and --dualfile options (appneta #41)

12/22/2013 Version 4.0.0beta2
    - Restored -K option which somehow disappeared (appneta #35)
    - Improve printing with small pcaps at high rates (appneta #34)
    - Fixed build errors on BSD and Fedora 20 (appneta #32 #33)

12/20/2013 Version 4.0.0beta1
    - Compile and cross compile on ARM (appneta #26)
    - Add flow statistics (appneta #23)
    - Merge code cleanups from old 4.0alpha1 project (appneta #18)
    - Deprecated file-cache option - use preload-pcap instead (appneta #17)
    - Removed obsolete sleep-mode and sleep-accel options (appneta #16)
    - Remove unreliable RDTSC option (appneta #16)
    - Switch from BSD to GPLv3 license (appneta #5)
    - Add --unique-ip option to tcpreplay (appneta #4)
    - Removed sleep-accel option (appneta #2)
    - Enhance accuracy and performance of --mbps option (appneta #2)
    - Add netmap injector (appneta #1)
    - Properly process IPv6 extension headers (#396)
    - Update URL's to point to new tcpreplay website (#430)
    - Improve & fix bugs in tcpcapinfo (#437)
    - Fix statistics to be more industry standard (#443)
    - Add --nofixcsum (#449)
    - Fix compile failure under FreeBSD 9.0 (#450)
    - Don't checksum packets before going through fragroute engine (#452)
    - Add support for --maxsleep option to tcpreplay (#453)
    - Fix segfault when rewriting multiple ports (#459)
    - Fix bug with printing stats after CTRL-C (#482)
    - Update autotools (#483)
    - Don't recalculate UDP checksums if it's value is 0 (#490)
    - Fix documentation of --efcs option to be 4, not 2 bytes (#495)
    - Fix libdnet header detection under Debian distros (#499)
    - Update GNU Autogen to 5.11.5 (#501)
    - Fix --stats option for tcpreplay (#503)
    - Add support for injecting directly via custom Linux kernel module (#505)
    - Fix cidr code debugging (#506)
    - Standardize on primary/secondary meaning of interfaces/tcpprep split (#507)

08/15/2010 Version 3.4.5beta1
    - First pass at fixing 'make test' on many little-endian systems (#429)
    - Warn users when processing LINUX_SLL frames w/o an Ethernet source MAC (#434)
    - Don't try to fragroute non-IPv4/v6 packets so we don't error out (#432)
    - Initial Linux TX_RING sending support (#435)
    - Update to GNU Autoconf 2.67 (#436)
    - Add tcpcapinfo which dumps information about the pcap header/packets (#437)
    - Add --dualfile support for replaying two files at the same time (#439)
    - Fix bug where --tos=0 didn't do anything (#440)
    - Fix crash when processing CIDR data (#441)

04/04/2010 Version 3.4.4
    - Set default timing method to either gtod or abstime (#404)
    - Fix IPv6 parsing of CIDR's (#405)
    - Add support for preloading the memory cache (#410)
    - Generate more useful error when packets are too small (#411)
    - Update to libopts/Autogen 5.9.9 (#412)
    - Ship Win32Readme.txt file (#413)
    - Update copyright notice to 2010 (#416)
    - Dramatically enhance --portmap option (#417)
    - Update autotools (#423)
    - Add support for printing statistics periodically during the run (#424)
    - Warn user when pcap snaplen < 65535 (#425)
    - Add 802.1q processing support tcpprep (#428)

06/25/2009: Version 3.4.3
    - Link libnl when newer versions of libpcap require it (#397)
    - Ship m4 directory (#398)
    - Upgrade to latest autotools scripts (#400)
    - Fix error message when running autogen.sh (#401)

05/20/2009: Version 3.4.2
    - Added extensive IPv6 support to tcprewrite & tcpreplay-edit (#11)
    - Add IPv6 fragroute support (#388)
    - Add IPv6 decoding support to tcpprep (#11)
    - Fix compile time error in err.h (#390)
    - Add --endpoints support in tcpreplay-edit (#393)

02/18/2009: Version 3.4.1
    - Sendpacket method did not match documentation (#361)
    - Fix compile issue on systems without err.h (#363)
    - Fix tcpprep --mac not processing non-IPv4 packets (#369)
    - Always build tcpreplay w/ editing features as tcpreplay-edit (#372)
    - Fix potential tcpbridge issues under OS X & *BSD (#373)
    - Fix crash on 4 byte strictly aligned systems (#377)
    - Add MTU truncation to tcprewrite/tcpreplay-edit (#379)

01/15/2009: Version 3.4.0
    - Add libdnet and remove libnet support for sending packets (#302)
    - Fix numerous 802.11 decoder bugs (#325)
    - Fix compile issue under Linux (#326)
    - Fix Mbps/sec nonsense (#327)
    - Fix tcprewrite crash when packets have no L3+ data (#328)
    - Clean up err.c/err.h code and improve performance for non-debug builds (#331)
    - Fix timesdiv() timer code (#332)
    - Improve high-performance packet sending via multiple packets/interval (#334)
    - Fix statistics report errors (#335)
    - Fix BPF filters not being used in tcpbridge (#336)
    - Improve tcpbridge performance (#337)
    - Only use two libpcap handles for tcpbridge (#338)
    - Fix autotools usage errors (#340)
    - Clean up 'make test' results (#341)
    - Update to AutoGen/AutoOpts 5.9.7 (#342)
    - Fix compiler warnings from GCC 4.2 (#344)
    - Fix numerous memory corruption bugs in libtcpedit DLT plugin code (#345)
    - Add support for editing IPv4 TOS/DiffServ/ECN (#348)
    - Update autotools to more recent versions (#349)
    - Report injection method via -V (#352)
    - Fix DLT_USER l2len check bug (#353)
    - Replace man2html w/ groff (#354)
    - Fix false pcap_inject() detection under Windows/Winpcap (#355)
    - tcpbridge now builds under Win32/Cygwin
    - libdnet is no longer an option for Win32/Cygwin (#57)
    - tcpbridge now supports --listnics (#357)

06/20/2008: Version 3.3.2
    - Fix (again) tcpbridge --unidir assert error (#308)
    - Fix tcpbridge bug where all packets that were sent were all zeros
    - Fix tcpbridge not honoring --include/exclude flags (#311)
    - Fix ip_in_cidr() debug messages (#312)
    - Report packets which have timestamps which go backwards in time (#315)
    - Clean up --sleep-accel code to use options struct (#316)
    - Remove really old and out of date RPM .spec file (#317)
    - Warn when sending on non-Ethernet interface (#318)
    - Re-enable tcpreplay --listnics (#319)
    - Fix sendpacket always reporting using PF_PACKET, even when it doesn't (#322)
    - Fix major packet timing issue under old versions of glibc (#324)

05/17/2008: Version 3.3.1
    - Fix limitation of PF_PACKET only supporting Ethernet (#123)
    - Fix (again) /dev/bpf detection in FreeBSD 8.0 (#292)
    - Document building code from Subversion under Cygwin (#304)
    - Fix --enable-force-* under Linux (#305)
    - Fix tcpbridge --unidir assert error (#308)

05/04/2008: Version 3.3.0
    - Improve tcpreplay timing accuracy between packets (#41)
    - Add tcprewrite fragroute support (#42)
    - Fix tcprewrite --efcs option (#277)
    - Updated Win32/Cygwin documentation (#280)
    - Add dmalloc support (#282)
    - Fix tcpprep broken handling of VLAN tagged frames (#290)
    - Fix tcprewrite crash when cache file has NO_SEND packets (#291)
    - Fix /dev/bpf detection in FreeBSD 8.0 (#292)
    - Add tcprewrite --ttl editing option (#294)
    - Fix autoconf AM_PROG_CC_C_O warning (#295)
    - Add tcpprep --reverse option to split by matching client addresses (#297)
    - Update version of autoconf to 1.10.1 (#298)
    - Improved GNU Autogen detection and warnings (#299)
    - Track EAGAIN errors separately from ENOBUFS (#301)
    - Automatically detect Winpcap on Cygwin (#303)

01/23/2008: Version 3.2.5
    - Fix linker error with --enable-tcpreplay-edit and --enable-dynamic-link (#288)
    - Fix compile errors with Sun Studio compiler (#286)

01/16/2008: Version 3.2.4
    - Fix crash in tcpreplay when --enable-tcpreplay-edit (#281)
    - Display if --enable-tcpreplay-edit in -V (#283)

11/01/2007: Version 3.2.3
    - Fix compile issue under Linux and other OS's (#275)

10/31/2007: Version 3.2.2
    - Enable source MAC spoofing for OS X (#142, #151)
        * Tcpreplay now requires OS X 10.5 (Leopard)
    - Fix crash/memory access error with tcpreplay -N (#273)

10/25/2007: Version 3.2.1
    - Fix tcprewrite segfault in 'make test' under Linux (#200)
    - Major performance improvement in tcpprep for large pcaps (#261)
    - Fix strsignal already defined error under Cygwin/Windows (#199)
    - Fix compile errors for older versions of GCC (#201)
    - Remove flowreplay code (#262)
    - Fix DLT rewrite code causing corrupted ethernet protocol type (#268)
    - Try to fix inet_aton() issue under Solaris (#260)

08/26/2007: Version 3.2
    - Return a more useful error message when tcpprep fails (#187)
    - Add Tomahawk test tool client/server detection algorithm (#186)
    - Improved AutoGen support (#191)
    - Improved documentation (#164, #198)
    - Added Doxygen markup (#176)
    - configure now honors --with-tcpdump flag (#192)
    - configure now defaults to --enable-64bits which breaks backwards
        compatibility in certain situations.  Use --disable-64bits if this
        concerns you (#195)
    - Use safe_free() to detect bugs earlier in development (#197)

07/19/2007: Version 3.1.1
    - Upgrade libopts tearoff to 29:0:4 so that everyone else in the world can
      compile tcpreplay (#189)

07/18/2007: Version 3.1.0
    - Add tcprewrite --srcmap & --dstmap for rewriting only source or destination IP's (#185)
    - ./configure now reports configuration at end (#155)
    - Fix svn:keywords (#160)
    - Optimize performance of dlt_en10mb plugin (#161)
    - Performance improvements on strictly aligned systems (#162)
    - Improve tcpprep error messages and handling (#163)
    - Add support for warnings in libtcpedit (#165)
    - Only use __attribute__((unused)) w/ GCC (#168)
    - Fix compile issues under Solaris (#178)
    - Gracefully handle systems w/o static libraries (#179)
    - Fix segfault when using BPF filters (#182)
    - Add additional DLT Plugins:
        - 802.11 (#103)
        - 802.11 w/ Radiotap (#177)

05/01/2007: Version 3.0.1
    - Stop tcpreplay causing OS X WiFi from disassociating (#167)
    - --pnat incorrectly matched all IP addresses (#170)
    - Fix serious memory leak in core common library (#175)
    - Fix tcprewrite --enet-vlan on little endian systems (#174)
    - Bad pcap timestamps were causing excessive delays (#169)
    - Code cleanup (#173)

04/20/2007: Version 3.0
    - By default, no longer try to use libnet.  You must now specify --enable-libnet (#148)
    - Improve documentation (#30)
    - General code cleanup (#47)
    - Warn when GNU Autogen version < 5.9 (#153)
    - Remove support for pcap_snapshot_override which was never added to libpcap (#140)
    - Fix support for C99/GCC 4.3 "inline".  Rely on -O3 for better performance. (#149)
    - Prioritize 64 bit libraries over 32 bit counterparts (#150)

04/14/2007: Version 3.0.RC1
    - Fix tcpbridge and make it compile by default (#15)
    - Fix tcprewrite crash on little-endian systems (#127)
    - Gracefully handle broken pcap files where the snaplen < caplen (#130)
        - Note: Fix was made in libpcap and will be part of 0.9.6
    - Fix numerous bugs with the sendpacket code (#137)
    - Add optional support for editing packets with tcpreplay (#61)
    - Fix 'make test' on little endian systems (#64)
    - tcprewrite -s is no longer endian dependent (#65)
    - /docs cleaned up (#66)
    - Fix detection/compile of libpcap.  Now support versions >= 0.7.2 (#80, #144)
    - Add official support Cygwin/Win32 support (#110)
    - Clean up libpcap version code (#111)
    - Add support for interface alias names for Win32 (#113)
    - Warn user on DLT miss-match (#125)
    - Fix tcprewrite segfault with --fixlen=pad (#134)
    - Add loop/cache support for better performance (#136)
    - inline debugging code for better performance (#138)
    - configure now supports selecting injection method (#139)
    - Fix configure/compile errors under OpenBSD (#146)
    - Add tcpbridge --verbose mode (#28)
    - Fix compile issues under HP-UX & strictly aligned systems (#141)
    - --enable-dynamic-link supports 64bit libraries (#143)


03/22/2007: Version 3.0.beta13
    - Fixed detection of IPv4 packets in libtcpedit on little-endian boxes (#115, #116)
    - Fixed TCP/UDP checksum calculation on little-endian boxes (#126)
    - Added --quiet flag to tcpreplay for Lothar (#109)
    - The --seed flag should now generate the same IPs on both little-endian & big-endian boxes (#65)
    - The --skipl2broadcast flag now works as documented (#112)
    - Adding L2 header for DLT_RAW encapsulated packets now works (#16)
    - Clean up documentation (#66, #75)
    - Start initial support for Win32 port (#110, #111)
    - Finish DLT plugin rewrite (#82)
    - Fix compile on systems without tcpdump installed

02/22/2007: Version 3.0.beta12
    - Fix compile under RH ES 3.x (gcc 3.2.2) (#79)
    - Fix compile on MIPS, ARM, HPPA, etc (#81, #88)
    - Rewrite L2/DLT code in tcpedit/tcprewrite to be plugin based (#82)
        - Create Ethernet Plugin (#99)
        - Create User Plugin (#100)
        - Create Cisco HDLC Plugin (#101)
        - Create DLT_LINUX_SLL Plugin (#102)
        - Create DLT_RAW Plugin (#104)
        - Create DLT_NULL Plugin (#105)
        - Create DLT_LOOP Plugin (#106)
    - Properly decode ethernet frames when they are VLAN tagged (#84)
    - Do not install man2html (#85)
    - Add configure --disable-libopts-install option (#86)
    - Enhance tcpreplay --oneatatime (#90)
    - libtcpedit can now return warnings & errors (#92)
    - Fix tcpprep --include/exclude (#96)
    - Upgrade AutoGen tearoff (libopts) to latest version (5.9.0) (#97)
    - Don't do L4 checksums for non-fragment offset == 0 (#107)

08/07/2006: Version 3.0.beta11
    - Fix distribution to ship missing src/tcpr.h (#73)
    - Add support to tcprewrite to alter output file DLT (#74)
    - Fix errors in 'make test' (little endian still broken) (#77)
    - Tweak Autogen .def files documentation (#78)

08/05/2006: Version 3.0.beta10
    - tcpprep & tcprewrite no longer require root access (#3)
    - Develop wrapper API for libnet, libpcap, BPF and PF_PACKET (#4, #24)
    - Enhance do_sleep() to support looping for better accuracy (#6)
    - Prefer inet_pton over older, deprecated routines (#26)
    - Remove libnet as a requirement (#29)
    - Optionally don't rewrite broadcast/multicast IP/MAC addresses (#38)
    - Remove libnids dependancy for flowreplay  (#55)
    - Fix build issues when libpcapnav is installed (#56)
    - Fix truncate feature not putting correct packet length in IP header (#59)
    - Internal error reporting fixes in libtcpedit (#60)
    - Support --enable-debug when building under gcc 3.x (#62)
    - tcpedit_stub.h wasn't being generated automatically from SVN (#63)
    - Fix 'make doxygen' (#67)
    - Fix some Makefile issues (#68)
    - tcprewrite --endpoints should require a cache file (#70)
    - Improve IP randomizer code to be more random (#71)

07/17/2006: Version 3.0.beta9
    - Fix compile issue for users not having AutoOpts installed (#54)
    - Fix compile issue for users w/ AutoOpts 5.8.4 (upgrade to 5.8.4)

07/16/2006: Version 3.0.beta8
    - Fix -M running in MBps rather then Mbps
    - Fix tcpbridge segfault/bus error reported by Steven Z. (Gerry)
    - Improve tcpbridge man page
    - Massive tcprewrite fixes & cleanup (#50)
    - Much improved README document
    - Reorganize packet editing code into a standalone module (tcpedit)
          which has been librarized. (#5)
    - Strict code cleanup (#27)
    - Fix tcpprep from generating bad cache files (#48)
    - Add MAC split mode for tcpprep (#1)
    - Improve dbg() to list file/line (#32)
    - Add tcpprep statistical reports (#2)
    - Reorganize flowreplay code (#46)
    - Fix conflicting speed_t for Debian (#33)
    - Too many other things to document

08/07/2005: Version 3.0.beta7
    - New 'make doxygen' target builds pretty source code docs in
          docs/web/doxygen/html
    - Fix tcpprep auto/router mode which was sending all packets out the
          secondary interface
    - Fix endian issue on little-endian systems which made tcpprep think all
          packets were not IP
    - Improve debugability of tcpprep
    - Fix UDP header offset bug in flowreplay

06/28/2005: Version 3.0.beta6
    - Fix rpm .spec file which was still based on tcpreplay 2.x (untested)
    - Detect and manually include pcap-bpf.h which fixes compile problem
    - Fix tcprewrite -S crash with only one MAC
    - Fix tcpreplay using 2nd NIC split mode
    - Fix tcpreplay packet counter initialization
    - Fix tcpprep to properly handle missing -i and -c with -I and -P

06/14/2005: Version 3.0.beta5
    - Fix --decode flag
    - Fix compile under AMD64/RHEL4 where libraries are in /usr/lib64
    - tarball now ships with a full test subdir
    - Fix compile of src/common/get.c under strictly aligned architectures
    - Fix ./configure --enable-64bits flag
    - Fix bug on little endian systems which prevented tcprewrite from
      editing packets
    - Fix tcprewrite linktype checks
    - Add --pktlen for when the pcap snaplen lies to us
    - Add --enable-dynamic-link for those who want to dynamically link their
      libs

06/05/2005: Version 3.0.beta4
    - Really fix compile problems with dlt2desc with old versions of libpcap
    - All libraries are now statically linked and full-path #includes.  This
      should fix problems with people who have different versions of
      libraries installed in different locations.
    - Fix problems compiling on systems with libpcapnav
    - Add support for libpcap 0.5 such as on OpenBSD
    - Fix tcpprep --verbose
    - Close STDIN prior to re-opening it for certain OS's

05/04/2005: Version 3.0.beta3
    - Fix autoconf problems with --with-libnet
    - Fix compile problems with dlt2desc with old versions of libpcap
    - Fix compile problem due to not shipping flowreplay_opts.h and
      tcpbridge_opts.h

04/19/2005: Version 3.0.beta2
    - Significant improvements to FAQ and manual
    - Use autoopts for flowreplay
    - Be more cautious about memcpy's
    - Fix numerous warnings during compile
    - Allow overriding L2 protocol field for DLT_RAW
    - tcpprep -I & -P now take the cache filename
    - Lots of cleanup
    - Added tcpbridge utility
    - Fix tcpreplay --mbps which was being interpreted as bps
    - Add --no-arg-comment feature for tcpprep
    - Improve auto-tests and fix old broken ones
    - Fix Makefile errors in the docs directory
    - Upgrade libopts tear off to v5.7pre12 which fixes problems with
      loading config files
    - Add support for forcing the use of the local libopts tearoff code

02/27/2005: Version 3.0.beta1
    - Major code cleanups and rewriting
      - Rip out all edit functions from tcpreplay and put into tcprewrite
      - Improve tcpreplay performance by about 5% for raw sending
      - Move around utility functions for greater code-reuse
      - Move MAC Address funcs into mac.c
      - Move global defines into defines.h
      - Standardize use of structs and typedefs
      - Start passing const's when we don't need to modify
    - Start using GNU AutoOpts for arg/config file processing
    - Start using automake and autoheader
    - Major rewrite of configure.in
    - Add support for printing which interface packets go out
    - 64bit counters are optional via --enable-64bits
    - Can now rewrite L2 data per outbound interface
    - Add support for additional DLT types

    - Non-Code changes
      - I now own the full copyright for tcpreplay
      - Removed the evil 4th clause from the BSD license
      - Start updating the FAQ and split some content to make a manual
      - Automatically generate man pages based via autogen

    - New Applications:
      - tcprewrite

    - Removed Applications: (Ethereal has better utilities)
      - capinfo
      - pcapmerge

    - Merge fixes from 2.x/stable branch:
      - portmap.c endian bugs
      - edit_packet.c handle corrupted pcap's where caplen < len
      - configure now properly uses --with-libnet and --with-libpcap

*** Fork 3.x Branch from v2.3.1 ***
