iperf3 Changelog

What's new in iperf3 3.17.1

May 14, 2024
  • Fixes some issues with version numbers in various places. It is otherwise identical to iperf-3.17.

New in iperf3 3.17 (May 12, 2024)

  • iperf 3.17 contains a fix for a minor security vulnerability related to iperf3’s authentication feature and its use of RSA-encrypted credentials. The release notes contain more details on this breaking change, and how to revert to older, less secure behavior if needed for backward compatibility with older versions of iperf3.
  • This version also contains a new streaming JSON output format (enabled with the –json-stream) option, and a number of other bug fixes.

New in iperf3 3.16 (Dec 4, 2023)

  • Notable user-visible changes:
  • Multiple test streams started with -P/--parallel will now be serviced by different threads. This allows iperf3 to take advantage of multiple CPU cores on modern processors, and will generally result in significant throughput increases (PR #1591).
  • OpenSSL 3 is now detected at build time. If OpenSSL 3 is found, various older, deprecated, APIs will not be used. iperf3 will continue to work with OpenSSL 1.1.1. OpenSSL is used as a part of the iperf3 authentication functionality (Issue #1300, PR #1589).
  • The authorized users file used by the authentication functionality is now checked for startup, as opposed to being checked near the start of a test (Issue #1583, PR #1585).
  • Developer-visible changes:
  • BREAKING CHANGE: iperf3 now requires pthreads and C atomic variables to compile and run.

New in iperf3 3.15 (Sep 15, 2023)

  • Several bugs that could allow the iperf3 server to hang waiting for input on the control connection has been fixed. ESnet thanks Jorge Sancho Larraz from Canonical for reporting this issue. For more information, see: https://downloads.es.net/pub/iperf/esnet-secadv-2023-0002.txt.asc
  • A bug that caused garbled output with UDP tests on 32-bit hosts has been fixed (PR #1554, PR #1556). This bug was introduced in iperf-3.14.
  • A bug in counting UDP messages has been fixed (PR #1367, PR #1380).

New in iperf3 3.14 (Jul 9, 2023)

  • Notable user-visible changes:
  • A memory allocation hazard was fixed (Issue #1542/PR #1543). For more information see: https://downloads.es.net/pub/iperf/esnet-secadv-2023-0001.txt.asc
  • JSON output was improved, such as print JSON numbers as signed (PR #1539, Issue #1435), the exit code when doing JSON output was fixed (PR #1523), and client_api was fixed so that it still returns an error code when JSON is enabled (Issue #1405). Also, duplicate fields when using multiple streams was removed from the JSON output (#1492).
  • Prevent UDP packet count and operations overflow (PR #1536/Issue #1534).
  • Statistics are fixed when --omit is used (Issue #1489/PR #1498).
  • Developer-visible changes:
  • CI builds and tests using GitHub actions have been added (PR #1519).
  • A fix for Android "unable to create a new stream error" was added (PR #1506).
  • Support for Voice Admit DSCP code point from RFC 5865 was added (PR #1490).
  • A fix for preventing a crash when RSA public key path doesn't exist was fixed (PR #1488/Issue #1471).

New in iperf3 3.13 (Feb 17, 2023)

  • iperf 3.13 is primarily a bugfix release.

New in iperf3 3.12 (Feb 17, 2023)

  • iperf 3.12 is principally a bugfix release, although it includes an updated version of cJSON and adds a few new features.

New in iperf3 3.11 (Feb 3, 2022)

  • iperf 3.11 is principally a bugfix release. Also GitHub Discussions are now supported.

New in iperf3 3.10.1 (Feb 3, 2022)

  • iperf 3.10.1 fixes a problem with the configure script that made it make not work correctly in some circumstances. It is functionally identical to iperf 3.10.

New in iperf3 3.10 (Feb 3, 2022)

  • iperf 3.10 is principally a bugfix release. A few new features have been added (--time-skew-threshold, --bind-dev, --rcv-timeout, and --dont-fragment)

New in iperf3 3.9 (Aug 18, 2020)

  • iperf 3.9 adds a --timestamps flag, which prepends a timestamp to each output line. A new --server-bitrate-limit flag has been added as a server command-line argument, and allows an iperf3 server to enforce a maximum throughput rate. More information on these new features can be found in the release notes.

New in iperf3 3.8.1 (Jun 11, 2020)

  • perf 3.8.1 fixes a regression with make install in iperf 3.8. It is otherwise identical to iperf 3.8.

New in iperf3 3.8 (Jun 9, 2020)

  • Minor bugfixes and enhancements.

New in iperf3 3.7 (Jun 25, 2019)

  • Adds the --bidir flag for bidirectional tests, includes some minor enhancements, and fixes a number of bugs. More details can be found in the release notes.

New in iperf3 3.6 (Jun 23, 2018)

  • Notable user-visible changes:
  • A new --extra-data option can be used to fill in a user-defined string field that appears in JSON output. (#600 / #729)
  • A new --repeating-payload option makes iperf3 use a payload pattern similar to that used by iperf2, which could help in recreating results that might be affected by payload entropy (for example, compression). (#726)
  • -B now works properly with SCTP tests. (#678 / #715)
  • A compile fix for Solaris 10 was added. (#711)
  • Some minor bug fixes for JSON output. In particular, warnings for debug and/or verbose modes with --json output (#737) and a fix for JSON output on CentOS 6 (#727 / #744).
  • software.es.net and downloads.es.net now support HTTPS, so URLs in documentation that refer to those two hosts now use https:// instead of http:// URLs. (#759)
  • Notable developer-visible changes:
  • Functions related to authenticated iperf3 connections have been exposed via libiperf. (#712 / #713)
  • The ToS byte is now exposed in the libiperf API. (#719)

New in iperf3 3.5 (Mar 4, 2018)

  • Fixes a bug that could over-count data transfers (and hence measured bitrate).

New in iperf3 3.3 (Oct 31, 2017)

  • Notable user-visible changes:
  • iperf3 can now be built --without-openssl on systems where OpenSSL is present (#624, #633).
  • A bug with printing very large numbers has been fixed (#642).
  • A bug where the server would, under certain circumstances, halt a test after exactly fifteen seconds has been fixed (#645).
  • The --tos parameter is no longer "sticky" between tests when doing --reverse tests (#639).
  • The authentication token on the server is properly reset between tests (#650).
  • A bug that could cause iperf3 to overwrite the PID file of an already-existing iperf3 process has been fixed (#623).
  • iperf3 will now ignore nonsensical TCP MSS values (from the TCP control connection) when trying to determine a reasonable block size for UDP tests. This condition primarily affected users on Windows, but potentially improves robustness for all platforms. (#659)

New in iperf3 3.2 (Jun 27, 2017)

  • User-visible changes:
  • Authentication via a username/password mechanism, coupled with a public-key pair, is now an optional way of limiting access to an iperf3 server (#517).
  • Ending statistics are less ambiguous for UDP and also now use correct test durations for all protocols (#560, #238). Many fixes have been made in statistics printing code, generally for human-readable output (#562, #575, #252, #443, #236).
  • Several problems with the -F/--file options have been fixed. Documentation has been improved to note some ways in which this feature might not behave as expected (#588).
  • iperf3 now uses the correct "bitrate" phraseology rather than "bandwidth" when describing measurement results. The --bandwidth option has been renamed --bitrate, although --bandwidth is still accepted for backwards compatibility (#583).
  • Application-level bandwidth pacing (--bitrate option) is now checked every millisecond by default, instead of of every tenth of a second, to provide smoother traffic behavior when using application pacing (#460). The pacing can be tuned via the use of the --pacing-timer option (#563).
  • A new --dscp option allows specifying the DSCP value to be used for outgoing packets (#508). The TOS byte value is now printed in the JSON output (#226).
  • Congestion window data on FreeBSD is now computed correctly (#465, #475, #338).
  • The T/t suffixes for terabytes/terabits are now accepted for quantities where suffixes are supported, such as --bandwidth (#402).
  • Sanity checks for UDP send sizes have been added (#390), and existing checks on the --window option have been improved (#557).
  • The TCP rttvar value is now available in the JSON output (#534), as are the socket buffer sizes (#558).
  • Error handling and documentation have been improved for the -f/--format options (#568).
  • A new --connect-timeout option on the client allows specifying a length of time that the client will attempt to connect to the server, in milliseconds (#216).
  • The hostname and current timestamp are no longer used in the cookie used to associate the client and server. Instead, random data is used. Note that iperf3 now requires the /dev/urandom device (#582).
  • Prior versions of iperf3 doing UDP tests used to overcount packet losses in the presence of packet reordering. This has been (partially) fixed by try to not count the sequence number gaps resulting from out-of-order packets as actual losses (#457).
  • iperf3 no longer prints results from very small intervals (10% of the statistics reporting interval) at the end of the test run if they contain no data. This can happen due to timing difference or network queueing on the path between the client and server. This is primarily a cosmetic change to prevent these fairly meaningless intervals from showing up in the output (#278).
  • Compatiblity note: Users running iperf3 3.2 or newer from the bwctl utility will need to obtain version 1.6.3 or newer of bwctl. Note that bwctl, a component of the perfSONAR toolkit, has been deprecated in favor of pScheduler since the release of perfSONAR 4.0.
  • Developer-visible changes:
  • Various warnings and build fixes (#551, #564, #518, #597).
  • Some improvements have been made for increased compatibility on IRIX (#368) and with C++ (#587).
  • cJSON has been updated to 1.5.2 (#573), bringing in a number of bugfixes.
  • Some dead code has been removed.

New in iperf3 3.2 RC 1 (Jun 20, 2017)

  • User-visible changes:
  • Authentication via a username/password mechanism, coupled with a public-key pair, is now an optional way of limiting access to an iperf3 server (#517).
  • Ending statistics are less ambiguous for UDP and also now use correct test durations for all protocols (#560, #238). Many fixes have been made in statistics printing code, generally for human-readable output (#562, #575, #252, #443, #236).
  • Several problems with the -F/--file options have been fixed. Documentation has been improved to note some ways in which this feature might not behave as expected (#588).
  • iperf3 now uses the correct "bitrate" phraseology rather than "bandwidth" when describing measurement results. The --bandwidth option has been renamed --bitrate, although --bandwidth is still accepted for backwards compatibility (#583).
  • Application-level bandwidth pacing (--bitrate option) is now checked every millisecond by default, instead of of every tenth of a second, to provide smoother traffic behavior when using application pacing (#460). The pacing can be tuned via the use of the --pacing-timer option (#563).
  • A new --dscp option allows specifying the DSCP value to be used for outgoing packets (#508). The TOS byte value is now printed in the JSON output (#226).
  • Congestion window data on FreeBSD is now computed correctly (#465, #475, #338).
  • The T/t suffixes for terabytes/terabits are now accepted for quantities where suffixes are supported, such as --bandwidth (#402).
  • Sanity checks for UDP send sizes have been added (#390), and existing checks on the --window option have been improved (#557).
  • The TCP rttvar value is now available in the JSON output (#534), as are the socket buffer sizes (#558).
  • Error handling and documentation have been improved for the -f/--format options (#568).
  • A new --connect-timeout option on the client allows specifying a length of time that the client will attempt to connect to the server, in milliseconds (#216).
  • The hostname and current timestamp are no longer used in the cookie used to associate the client and server. Instead, random data is used. Note that iperf3 now requires the /dev/urandom device (#582).
  • Prior versions of iperf3 doing UDP tests used to overcount packet losses in the presence of packet reordering. This has been (partially) fixed by try to not count the sequence number gaps resulting from out-of-order packets as actual losses (#457).
  • iperf3 no longer prints results from very small intervals (10% of the statistics reporting interval) at the end of the test run if they contain no data. This can happen due to timing difference or network queueing on the path between the client and server. This is primarily a cosmetic change to prevent these fairly meaningless intervals from showing up in the output (#278).
  • Developer-visible changes:
  • Various warnings and build fixes (#551, #564, #518).
  • Some improvements have been made for increased compatibility on IRIX (#368) and with C++ (#587).
  • cJSON has been updated to 1.5.2 (#573), bringing in a number of bugfixes.
  • Some dead code has been removed.

New in iperf3 3.1.7 (Mar 5, 2017)

  • Functionally identical to iperf 3.1.6. Its only changes consist of updated documentation files and text in the RPM spec file.

New in iperf3 3.1.6 (Feb 2, 2017)

  • User-visible changes:
  • Specifying --fq-rate or --no-fq-socket-pacing on a system where these options are not supported now generate an error instead of a warning. This change makes diagnosing issues related to pacing more apparent.
  • Fixed a bug where two recently-added diagnostic messages spammed the JSON output on UDP tests.

New in iperf3 3.1.5 (Jan 13, 2017)

  • iperf3 now chooses a more sane default UDP send size (#496, #498): The former default (8KB) caused IP packet fragmentation on paths having smaller MTUs (including any Ethernet network not configured for jumbo frames). This could have effects ranging from increased burstiness, to packet loss, to complete failure of the test. iperf3 now attempts to use the MSS of the control connection to determine a default UDP send size if no sending length was explicitly specified with --length.
  • Several checks are now made when setting the socket buffer sizes with the -w option, to verify that the settings have been applied correctly. The results of these checks can been seen when the --debug flag is specified. (#356)
  • A --forceflush flag has been added to flush the output stream after every statistics reporting interval.

New in iperf3 3.1.4 (Nov 1, 2016)

  • User-visible changes:
  • On systems that support setting the congestion control algorithm, iperf3 now keeps track of the congestion control algorithm and print it in the JSON output in the members sender_tcp_congestion and receiver_tcp_congestion (issue #461). A few bugs (probably not user-visible) with setting the congestion control algorithm were also fixed.
  • Developer-visible changes:
  • Fixed a buffer overflow in the cJSON library (issue #466). It is not believed that this bug created any security vulnerabilities in the context of iperf3.
  • Travis CI builds are now enabled on this codeline (pull request #424).
  • Various bug fixes (issue #459, pull request #429, issue #388).

New in iperf3 3.1.3 (Jun 9, 2016)

  • These releases address a security issue that could cause a crash of an iperf3 process (it could theoretically lead to a remote code execution). Although the risk for common use cases is believed to be low, all users are encouraged to update to these versions or newer as soon as possible. More information on the security vulnerability can be found in the following ESnet Software Security Advisory: https://raw.githubusercontent.com/esnet/security/master/cve-2016-4303/esnet-secadv-2016-0001.txt.asc.
  • iperf-3.1.3 also includes support for fair-queueing, per-socket based pacing of tests on platforms that support it (currently recent Linux distributions), as well as several other fixes.

New in iperf3 3.1.2 (Feb 2, 2016)

  • Fixed a bug that caused nan values to be emitted (incorrectly) into JSON, particularly at the end of UDP tests (issue #278).
  • Fixed a bug that caused the wrong value to be printed for out-of-order UDP packets (issue #329).
  • Added a contrib/ directory containing a few submitted graphing scripts.

New in iperf3 3.1.1 (Nov 19, 2015)

  • User-visible changes:
  • Some markup fixes have been made in the manpages for Debian compatibility (issue #291).
  • A bug where the -T title option was not being output correctly in JSON output has been fixed (issue #292).
  • Argument handling for some command-line options has been improved (issue #316).
  • Developer-visible changes:
  • A regression with C++ compatibility in one of the iperf header files has been fixed (issue #323).

New in iperf3 3.1 (Oct 16, 2015)

  • Selected user-visible changes:
  • SCTP support has been added (with the --sctp flag), on Linux, FreeBSD, and Solaris (issue #131).
  • Setting CPU affinity now works on FreeBSD.
  • Selection of TCP congestion now works on FreeBSD, and is now called --congestion (the old --linux-congestion option works but is now deprecated).
  • A new -I option for the server causes it to write a PID file, mostly useful for daemon mode (issue #120).
  • A --logfile argument can now force all output to go to a file, rather than to a file. This is especially useful when running an iperf3 server in daemon mode (issue #119).
  • Various compatibility fixes for Android (issue #184, issue #185), iOS (issue #288), NetBSD (issue #248), Solaris (issue #175, issue #178, issue #180, issue #211), vxWorks (issue #268).
  • A --udp-counters-64bit flag has been added to support very long-running UDP tests, which could cause a counter to overflow (issue #191).
  • A --cport option to specify the client-side port has been added (issue #207, issue #209, issue #239).
  • Some calculation errors with the -O feature have been fixed (issue #236).
  • A potential crash in the iperf3 server has been fixed (issue #257, issue #258).
  • Many miscellaneous bug fixes.
  • Selected developer-visible changes:
  • Consumers of libiperf can now get the JSON output for a just-completed test (issue #147).
  • Detection of various optional features has been improved to check for the presence or absence of platform functionality, not the name of platforms.
  • Out-of-tree builds now work (issue #265).

New in iperf3 3.1.0 Beta 1 (Jun 23, 2015)

  • Selected user-visible changes:
  • SCTP support has been added (with the --sctp flag), on Linux, FreeBSD, and Solaris (issue #131).
  • Setting CPU affinity now works on FreeBSD.
  • Selection of TCP congestion now works on FreeBSD, and is now called --congestion (the old --linux-congestion option works but is now deprecated).
  • A new -I option for the server causes it to write a PID file, mostly useful for daemon mode (issue #120).
  • A --logfile argument can now force all output to go to a file, rather than to a file. This is especially useful when running an iperf3 server in daemon mode (issue #119).
  • Various compatibility fixes for Android (issue #184, issue #185), NetBSD (issue #248), Solaris (issue #175, issue #178, issue #180, issue #211), vxWorks (issue #268).
  • A --udp-counters-64bit flag has been added to support very long-running UDP tests, which could cause a counter to overflow (issue #191).
  • A --cport option to specify the client-side port has been added (issue #207, issue #209, issue #239).
  • Some calculation errors with the -O feature have been fixed (issue #236).
  • A potential crash in the iperf3 server has been fixed (issue #257, issue #258).
  • Many miscellaneous bug fixes.
  • Selected developer-visible changes:
  • Consumers of libiperf can now get the JSON output for a just-completed test (issue #147).
  • Detection of various optional features has been improved to check for the presence or absence of platform functionality, not the name of platforms.
  • Out-of-tree builds now work (issue #265).

New in iperf3 3.0.11 (Feb 4, 2015)

  • User-visible changes:
  • Added -1 / --one-off flag, which causes the iperf3 server to process one client connection and then exit. Intended primarily for bwctl integration (issue #230).
  • Added various minor bug fixes (issues #231, #232, #233).
  • Added 30-second timeout for UDP tests if unable to establish UDP connectivity between sender and receiver (issue #222).

New in iperf3 3.0.3 (Mar 29, 2014)

  • User-visible changes:
  • Due to several oversights, the source code archive for iperf 3.0.2 was distributed as an uncompressed tarball, despite having an extension (".tar.gz") that indicated it was compressed. The release generation procedure has been changed to avoid this problem going forward.
  • Summary structures in the JSON output are now included, even if there is only one stream. This change makes consuming the JSON output easier and more consistent (issue #151).
  • A possible buffer overflow in iperf_error.c has been fixed (issue #155).
  • Developer-visible changes:
  • Example programs now build correctly, after having been broken in the 3.0.2 release (issue #152).

New in iperf3 3.0.2 (Mar 17, 2014)

  • User-visible changes:
  • The iperf3 project has been moved to GitHub, and various URLs in documentation files have been changed to point there.
  • iperf3 now builds on Linux systems that do not support TCP_CONGESTION. Most notably this allows iperf3 to work on CentOS 5.
  • An abort on MacOS 10.9 has been fixed (issue #135).
  • Added -I flag for the server to write a PID file, mostly useful for daemon mode (issue #120).
  • A bug that could break some TCP tests on FreeBSD has been fixed.
  • TCP snd_cwnd output is now printed by default on Linux (issue #99).
  • In JSON output, the --title string no longer has a colon and two spaces appended (issue #139).
  • A buffer for holding formatted numeric values is now properly-sized so that output is not truncated (issue #142).
  • Developer-visible changes:
  • Some memory leaks have been fixed.
  • A -d flag enables debugging output.
  • A .gitignore file has been added.
  • libtoolize is now invoked correctly from the bootstrap.sh script.
  • The test unit format can now be set from the API (issue #144).
  • libiperf is now built as both shared and static libraries.

New in iperf3 3.0.1 (Jan 15, 2014)

  • Added the following new flags:
  • D, --daemon: run server as a daemon
  • k, --blockcount #[KMG: number of blocks (packets) to transmit (instead of -t or -n)

New in iperf3 3.0 Beta 4 (Jul 3, 2012)

  • Added support for binding to a specific interface (-B)
  • Added support for IPv6 mode (-6)
  • Setting TCP window size (-w) is now supported
  • Stream list now managed by queue.h macros
  • Test structures are now kept intact after a test is run (for API users)
  • Many bug fixes
  • Improved interval timer granularity:
  • Support for decimal values
  • Updates to iperf_error:
  • Added new errors
  • Should generate more relavent messages