tcp_info.snd_wnd is available on FreeBSD and NetBSD since TCP_INFO was
added. It was added to Linux 5.4 in late 2019 and becomes available
in Ubuntu 20.04 and Debian 11.
Tested on:
* Debian 11 running on x86-64 with this field.
* Debian 10 armv7 running on Raspberry Pi 2 without this field.
* NetBSD 9.2 armv7 running on Raspberry Pi 3 with this field.
* FreeBSD 13 aarch64 running on Raspberry Pi 4 with this field.
If the buffer happens to be holding exactly a sending chunk size,
we no longer arbitrarily quit.
While here, use equivalent, easier-to-read tests in a couple places.
Discussed with @hanvari
Follow-up to #1115.
Issue: `diskfile_send()` unconditional call to `sp->snd2`
would result in sending full buffer size everytime,
regardless of the file size.
Fix: The function updated to check for end-of-file (reading 0 bytes)
and,
1. set `sp->pending_size` to appropriate data length available to be sent
2. check for end condition and avoid sending data more than file size.
Note: The fix is only for the maximum cap on the data size sent on the network.
If other parameters (-t, -n, etc.) yield smaller size or shorter time then needed,
the file will still be partially sent to the network.
In theory this check should always succeed, given the relative
buffer sizes as currently coded.
Suggested by @grigorescu
Related to #1134.
(cherry picked from commit c3578291ca4bf5216ec979908b226320be3bdb1d)
Signed-off-by: Bruce A. Mah <bmah@es.net>
Enhancement to PR #1101 - add --rcv-timeout option to allow setting the timeout for receiving packet from the sender in a running test, instead of the constant 120 seconds set in #1101. This is to allow short timeout, so the server will not be "busy" for long time doing nothing. Also, the resolution is set to ms (with minimum of 100ms), as at least in fast networks that may be required.
Since both the server and the client can be a sender, the option is allowed for both. The server setting is for all tests - the client is not sending its --rcv-timeout setting to the server.
While changing the help message, few printf constants from other help lines were changed to parameters.
Adds an --dont-fragment flag that sets the DF flag in the header for UDP/IPv4 tests.
Co-authored-by: root <root@DESKTOP-L81E90U.localdomain>
Co-authored-by: Bruce A. Mah <bmah@es.net>
* fix: Correctly emit JSON for --server --json.
Put extra error diagnostic information behind --verbose, to avoid putting
extra "error" members in JSON output.
Fixes#1118.
In iperf_send() function, the check for termination test
in bytes/blocks mode is at the end of the iteration loop
for multisend (outer loop) and streams (inner loop).
If for any iteration of multisend (outer) loop bytes/blocks
sent reaches the desired limit, it still continues to send
data until the loop is exhausted. (The `break;` command does not
help, since it is already inside the streams (inner) loop).
This is a simple fix which brings the condition check to the
beginning of the inner loop, so it will skip the iteration if
the bytes/blocks count is already reached the target; hence
avoiding to send more data to the network.
This lets iperf work better with multi-homed machines and
VRF.
Fixes#1089.
Based on a patch by Ben Greear <greearb@candelatech.com> via PR #817.
Co-authored-by: Ben Greear <greearb@candelatech.com>
We now only count an attempted send once all of its bytes are sent
(and will perform partial sends if necessary to finish sending all the bytes).
Previously, partial sends were counted as completed, for the purpose
of the -k option.
When the -b option specifies a burst value, throttling the bitrate does not work. This is because iperf_check_throttle() does not perform the check when burst value was defined.
This change removes the dependency of iperf_check_throttle() on the burst value and moves that check to the caller of that function. (Except for the call by send_timer_proc() which does not seem to be related to the change.)
* Issue 1065
* feat: Allow to configure a custom value for time drift between client/server for authentication
The use case is to support scenarios where it's not possible to enforce sync between client and server times.
* enh: drift redefined with skew
Co-authored-by: Francesco Marino <francesco.marino@cybaze.it>
It didn't make anything crash, but API clients wouldn't be able to
access the JSON output.
Bug pointed out, and fix suggested by, @scottmsilver. Fixes#1058.
* fix: Fix memory leaks related to --logfile.
* fix: Fix memory leaks related to loading RSA keys.
* fix: Fix some memory leaks in failure cases in the iperf3 client.
Fixes#1023.
This flag takes an optional argument, which is a format specification to strftime(3)...this allows for custom timestamp formats. Based on a suggested implementation by @davidBar-On. Towards #909.
* doc: Add manpage text for --server-bitrate-limit.
While here, normalize the manpage text for all command-line options
that take [KMGT] scaling suffixes (there were about three different
strings in use).
* doc: Bump manpage date.
* fix: Fix printf format string warnings on macOS.
* fix: Fix compatibility definition of PRIu64 in iperf_udp.c to match iperf.h.
The netinet/sctp.h header file defines HAVE_SCTP, so we have this
warning while building:
In file included from ../../src/iperf.h:30,
from ../../src/iperf_sctp.c:46:
./iperf_config.h:44: warning: "HAVE_SCTP" redefined
44 | #define HAVE_SCTP 1
|
In file included from ../../src/iperf_sctp.c:43:
/usr/include/netinet/sctp.h:56: note: this is the location of the previous definition
56 | #define HAVE_SCTP
|
This patch replaces our HAVE_SCTP definition with HAVE_SCTP_H to avoid
this warning.
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
This condition was only possible when configuration authentication
via the libiperf API.
While here, also fix a few other sundry issues:
* Remove arbitrary length limits on username and password.
* Improved error handling.
* Updated error messages for readability.
* Fixed minor typo in some identifiers.
Fixes#996.
Fix the following warning:
../../src/iperf_api.c: In function ‘iperf_on_connect’:
../../src/iperf_api.c:791:58: warning: format ‘%llu’ expects argument
of type ‘long long unsigned int’, but argument 3 has type ‘uint64_t’
{aka ‘long unsigned int’} [-Wformat=]
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>