1
1

626 Коммитов

Автор SHA1 Сообщение Дата
Bruce A. Mah
e9e2d6d19c
Add support for tera- prefix [Tt] in input and output.
Also add some more unit tests for this and prune unused code
from unit test program.

Fixes #402.
2017-04-14 13:14:44 -07:00
Bruce A. Mah
d51501ef83
Make explicitly requested usage output (--help) go to stdout.
Also in this case make the process exit code 0.

Fixes #405.
2017-04-14 12:45:24 -07:00
Bruce A. Mah
b07ed14dae
Be more explicit about the direction of data during tests.
Documentation change only, no functional change.
Fixes #384.
2017-04-14 12:36:47 -07:00
Bruce A. Mah
08758a16d2 More gracefully handle the case where a congestion control
algorithm isn't available on the server.  This can happen
if the client and server machines have different sets of
congestion control algorithms loaded in kernel modules, etc.
If the requested algorithm isn't available on the server, then
print a warning on the server side, but otherwise continue to
run the test.

Towards #549.
2017-04-11 15:11:17 -07:00
Bruce A. Mah
6f414a0408
Ignore SIGPIPE signals to simplify error handling.
This is an attempt to avoid server-side crashes/exits when the
client abruptly closes its control connection, as found in some
testing for #549.

Fixes #550.
2017-04-11 15:06:01 -07:00
Bruce A. Mah
03224c9f56 Prevent specifying a UDP send size that's too small.
We need at least 16 bytes to hold counters and timestamps.
Avoids a problem noted in issue #390.
2017-04-11 09:43:41 -07:00
Tran Viet Hoang
5d14d10697 add tcp rttvar to stream info (#534)
Fixes #525.
2017-03-30 16:29:16 -07:00
Bruce A. Mah
8066a1d222
Fix divide-by-zero / weird output with -F and a zero-length file.
Fixes #361.
2017-03-30 15:33:20 -07:00
f1rebird
a8ee9c650b Fix header includes and build failures on musl (#518)
* Include stdint.h in files where its types are used

Signed-off-by: Moritz Kick <f1rebird@users.noreply.github.com>

* Fix type of len parameter passed to getsockopt

getsockopt expects socklen_t instead of int as its fifth argument

Signed-off-by: Moritz Kick <f1rebird@users.noreply.github.com>

* Remove unnecassary includes of netinet/tcp.h

also cleanup the second include of stdint.h in main.c

This commit fixes #331 and is a replacement for #344.

Signed-off-by: Moritz Kick <f1rebird@users.noreply.github.com>
2017-03-22 12:00:08 -07:00
Bruce A. Mah
b3828fed23
Change "iperf" to "iperf3" in usage strings. Fixes #529. 2017-03-17 07:59:15 -07:00
ShaunCurrier
9f28b247ba Remove unused hstrerror(), bad nanosleep() message in configure.ac (#503) (#523)
* Remove unused hstrerror(), bad nanosleep() message in configure.ac (#503)

* Remove dead code involving h_errno and hstrerror()

h_errno was formerly set as a side effect of a failed
gethostbyname(3) call, but this function has been
deprecated.
2017-03-13 09:36:45 -07:00
Bruce A. Mah
f46e2e3edc Prevent two recently added messages from spamming JSON output on UDP tests.
Stumbled on by:	@daldoyle
2017-02-02 09:23:29 -08:00
Bruce A. Mah
7c79294b5b
Fix a bug where specifying --title leaked into server JSON in future runs.
Fixes #500, based on pull request in #501 submitted by @slankes.
2017-01-25 14:42:15 -08:00
Bruce A. Mah
de3e9d49b6 Revert "Fail gracefully if --fq-rate or --no-fq-socket-pacing are specified on"
This reverts commit 9c83a707eb0454994a7d42356981ff3ccd93c7a9.

Fixes #504.
2017-01-25 13:53:49 -08:00
Bruce A. Mah
1ff12f4c3e Add 1KB to default UDP socket buffer sizes under certain circumstances.
This fixes a problem observed on FreeBSD and macOS where the MTU on
the loopback interface is larger than the default socket buffer size.
We adjusted the socket buffer size upwards to match the UDP payload
size, but that's apparently not enough and we ended up dropping packets.
This is bad.  Add a 1KB fudge factor, which seesm to avoid this problem.
Affects UDP tests only, not TCP or SCTP.

Part of #496.

(cherry picked from commit d76198944d210e8a575747d3ddbee41a886a10c9)
Signed-off-by: Bruce A. Mah <bmah@es.net>
2017-01-11 11:52:18 -08:00
Bruce A. Mah
0fd60a3686 Issue 496 (#498)
* Dynamically determine an appropriate default UDP send size.

We use the TCP MSS for the control connection as the default UDP
sending length, if the --length parameter is not specified for a
UDP test.  This computation replaces the former hard-coded 8K
default, which was way too large for non-jumbo-frame Ethernet
networks.

The concept for this solution was adapted from nuttcp.  The
iperf3 implementation is pretty easy since we already were
getting the MSS for the control connection anyway (although we
needed to get it slightly earlier in the setup process to be
useful).

Towards issue #496.

While here, s/int/socklen_t/ in one place to fix a compile warning,
and bump a few copyright dates.

* Warn if doing a UDP test and the socket buffer isn't big enough.

This is surprisingly an issue on FreeBSD and macOS, where the MTU
over the loopback interface is actually larger than the default
UDP socket buffer size.  In these cases, doing a UDP test over the
loopback interface (with the new UDP defaults) will fail unless a
smaller --length or a larger --window size is set explicitly.

Linux has larger UDP socket buffers by default (much larger than the
largest possible MTU), but even in the case that the socket buffers
are too small to hold an MTU-sized send, the kernel seems to do the
send correctly anyway.

Still working towards a good solution for issue #496.

* Further refinement on UDP buffer size settings.

If the default buffer size on a UDP test can't hold a packet,
then increase the buffer size to be large enough to hold one
packet payload.  (If the buffer size was explicitly set, but too
small to hold a packet payload, then warn but don't change the
buffer size.)

Minor code refactoring to...factor out some common code into
a new iperf_udp_buffercheck() function.

Still working towards issue #496.
2017-01-10 09:13:57 -08:00
Bruce A. Mah
9c83a707eb
Fail gracefully if --fq-rate or --no-fq-socket-pacing are specified on
platforms where they aren't supported.

Requested by:	@bltierney
2016-12-14 09:32:46 -08:00
Bruce A. Mah
a094d9feef Separate out application-level and fair-queueing-based pacing (#488)
* First try to fix pacing issues.  Code compiles, lightly run-tested.

Make --bandwidth only control application-level pacing, refecting
behavior of iperf 3.1.2 and earlier.

Add a new --fq-rate that controls only FQ-based per-socket pacing.
A given test can use application-level pacing, FQ pacing, both,
or neither.

Deprecate the --no-fq-socket-pacing option; specifying this generates
a warning and is equivalent to --fq-rate=0.

Towards issue #467 and related to issue #325.

* Move --fq-rate in the help text to be just below --b, tweak wording.

* Sigh.  One more tweak on help text.

Some day I probably need to review and rewrite the whole thing.

Still working towards #467.
2016-12-12 13:47:53 -08:00
Bruce A. Mah
7d2d5c41dd
Revert "Fix a bug in FQ pacing, where application pacing wasn't completely disabled."
This reverts commit 1fa41308fe0da6bd6e00902d587dc7ffb1fc2a30.

This doesn't really do what we want.  Start over.
2016-12-08 15:25:06 -08:00
Bruce A. Mah
5307eae461
Revert "Reduce the default UDP send size to 1452 to avoid IP fragmentation"
This reverts commit f1e62c8d484a57cefb5ecbfcf8d1887b6f4fb220.

Right idea, but it turns out to be a pretty high-impact change.
Need to rethink this, maybe with a more intelligent implementation
that checks the interface (or path?) MTU.
2016-12-08 15:23:51 -08:00
Bruce A. Mah
f1e62c8d48
Reduce the default UDP send size to 1452 to avoid IP fragmentation
with default parameters.

A UDP payload of 1452, plus an 8-byte UDP header, plus a 40-byte IPv6
header, results in a 1500 byte IP packet.  The IPv4 header is smaller
at 20 bytes.
2016-12-05 14:00:15 -08:00
Bruce A. Mah
1fa41308fe
Fix a bug in FQ pacing, where application pacing wasn't completely disabled.
It was therefore possible to have multiple levels of pacing happening,
which resulted in very nicely smoothed traffic, but wasn't really
the original design.

Do pacing correctly in iperf_check_throttle() and remove a hack in
iperf_send() where we were explicitly checking for the type of
pacing, but didn't really need to.

It turns out that with UDP and only-FQ pacing, iperf3 sends and throws
packets on the floor as fast as it can.  This isn't really desirable,
and probably not what was wanted in a test anyway, so if we're not
doing TCP tests, force the use of application-level pacing.
2016-12-05 10:37:56 -08:00
Bruce A. Mah
55598a072f
Fix socket buffer size checks. Clearly this wasn't tested well.
On Linux it's possible to set the socket buffer to one size but
(correctly it seems) get back some larger size up to 2x what you
asked for (see tcp(7)).

While here, make related debugging output more useful.

Fixes (again) #356.
2016-12-01 11:53:37 -08:00
Bruce A. Mah
a621cc263f
Improve debug output for application and fair-queue-based pacing. 2016-11-30 07:13:28 -08:00
Bruce A. Mah
d2202ee3be
After setting socket buffer sizes, verify they were set correctly.
Do this for both TCP and UDP, but not SCTP (which strangely doesn't
support --window, that's probably a bug).  Fixes #356.
2016-11-23 11:05:47 -08:00
Bruce A. Mah
6aff679e96
Fix executable name and date in the manpage heading. 2016-11-10 13:49:44 -08:00
Nevo Hed
ad2a706fd1 Replace iprintf w/ iperf_printf (cygwin conflict) (#468)
This does not seek to address all cygwin portability issues
just this specific compile-time conflict

See also #280 and #295.
See https://github.com/esnet/iperf/issues/280
2016-10-17 13:25:07 -07:00
Bruce A. Mah
d99a69f92b
Fix a buffer overflow in upstream cJSON.
This is DaveGamble/cJSON#30, and fixes issue #466.
2016-10-05 13:59:40 -07:00
Bruce A. Mah
1a756a949e Only print congestion control algorithm for a TCP test.
Properly (I think) label the two TCP instsances as "sender"
and "receiver".
2016-09-22 15:27:24 -07:00
Bruce A. Mah
7d413a5015 Fix build on FreeBSD. 2016-09-22 14:52:57 -07:00
Bruce A. Mah
7eeaa1cb07 First try at issue #461.
First, realize that we've been setting the congestion control (CC)
algorithm unnecessarily; rather than doing it for all listening or
connecting sockets, do it just for those sockets that are being used
for TCP test streams.

Record the CC algorithm in use (this handles the case where a CC algorithm
hasn't been specified), and have the client and server exchange this
information.

Report the CC algorithms that were used (note that it's theoretically
possible for the two ends of the test to be using different algorithms,
if no algorithm was explicitly specified and the two end hosts have
different defaults, or if one side allows setting the CC algorithm and
the other doesn't).

Committing to a branch to make it easier to test this code on a
wider combination of systems.
2016-09-22 13:34:52 -07:00
Bruce A. Mah
353615b772
Fix divide-by-zero problem that can occur with a zero-length interval
(this can happen at the end of a test under certain circumstances).
Fixes #388, alternate solution from pull request in #389.
2016-09-21 13:22:54 -07:00
Bruce A. Mah
03340fe595
Prevent a double-close on the server side in some cases.
Alternate solution to a problem pointed out by @g-coder in pull request #429.
2016-09-21 11:25:18 -07:00
woody77
93c498d417 Change pacing timer from 100ms to 1ms to smoothen out microbusts as much as possible (#460) 2016-09-21 10:31:48 -07:00
woody77
14caac895c Properly setting the no_fq_socket_pacing option when support for it is not compiled in. (#459) 2016-09-21 10:21:59 -07:00
Bruce A. Mah
b7ab2b4b25
Make the server more tolerant of most types of errors encountered
during tests.

We used to exit if 5 consecutive errors were encountered.  Instead,
only exit if certain types of fatal errors happen.
2016-06-03 09:26:05 -07:00
Bruce A. Mah
4dcb275b5b
Make error handling on the control channel more robust. 2016-06-03 09:25:14 -07:00
Bruce A. Mah
ed94082be2
Fix a buffer overflow / heap corruption issue that could occur if a
malformed JSON string was passed on the control channel.  This issue,
present in the cJSON library, was already fixed upstream, so was
addressed here in iperf3 by importing a newer version of cJSON (plus
local ESnet modifications).

Discovered and reported by Dave McDaniel, Cisco Talos.

Based on a patch by @dopheide-esnet, with input from @DaveGamble.

Cross-references:  TALOS-CAN-0164, ESNET-SECADV-2016-0001,
CVE-2016-4303
2016-06-03 09:23:59 -07:00
Bruce A. Mah
a5f5765c8c
Regen. 2016-05-26 09:49:16 -07:00
Bruce A. Mah
9915746a8b
Squashed commit of the following:
commit 2dc03630a736be2ae9f64823aabb5776e7074c2a
Merge: 61e325c 0da552c
Author: Bruce A. Mah <bmah@es.net>
Date:   Thu May 26 09:40:58 2016 -0700

    Merge branch 'master' into issue-325

commit 61e325c5d0a4e7a9823221ce507db0f478fc98b5
Merge: 227992f ccbcee6
Author: Bruce A. Mah <bmah@es.net>
Date:   Thu May 26 11:09:54 2016 -0400

    Merge branch 'issue-325' of github.com:esnet/iperf into issue-325

    Conflicts:
    	src/iperf3.1

commit 227992f366e7f4895b6762011576ba22a42a752e
Author: Bruce A. Mah <bmah@es.net>
Date:   Thu May 26 11:07:01 2016 -0400

    Don't set SO_MAX_PACING_RATE if the rate is 0.  Also tweak some help text.

    Towards #325, in response to feedback from @bltierney.

commit ccbcee6366d50ec632fc00eb11fde8a886f8febe
Author: Bruce A. Mah <bmah@es.net>
Date:   Tue May 24 09:19:41 2016 -0700

    Fix manpage formatting for consistency.

commit 90ac5a9ce09bd746ca5f943a8226ab864da3ebf8
Author: Bruce A. Mah <bmah@es.net>
Date:   Tue May 24 12:14:16 2016 -0400

    Add some documentation for fair-queueing per-socket pacing.

    For #325.

commit 5571059870f7aefefb574816de70b6406848888f
Author: Bruce A. Mah <bmah@es.net>
Date:   Tue May 24 11:55:44 2016 -0400

    Change the fair-queueing socket pacing logic in response to feedback.

    By default, on platforms where per-socket pacing is available, it
    will be used.  If not available, iperf3 will fall back to application-
    level pacing.

    The --no-fq-socket-pacing option can be used to forcibly disable
    fair-queueing per-socket pacing.  (The earlier --socket-pacing option
    has been removed.)

    Tested on CentOS 7, more testing on other platforms is required to
    be sure it didn't break the old application-level pacing behavior.

    For #325.

commit 3e3f506fe9f375a5771c9e3ddfe8677c1a7146e7
Merge: 50a379e 3b23112
Author: Bruce A. Mah <bmah@es.net>
Date:   Tue May 24 09:54:39 2016 -0400

    Merge branch 'master' into issue-325

commit 50a379eddfa89d1313d2aeeb62a6fbc82f00ea17
Author: Bruce A. Mah <bmah@es.net>
Date:   Sat Apr 16 02:55:42 2016 -0400

    Regen.

commit 200d3fe3917b3d298bdf52a0bde32c47cf2727b0
Author: Bruce A. Mah <bmah@es.net>
Date:   Sat Apr 16 02:41:32 2016 -0400

    Checkpoint for initial work on #325 to add socket pacing.

    This works only on Linux and depends on the availability of
    the SO_MAX_PACING_RATE socket option and the fq queue discipline.
    Use --socket-pacing to use SO_MAX_PACING_RATE instead of the
    default iperf3 user-level rate limiting; in either case, the
    --bandwidth parameter controls the desired rate.

    Lightly tested with both --tcp and --udp, normal and --reverse.
    Real testing requires analysis of packet timestamps between
    multiple hosts.
2016-05-26 09:47:48 -07:00
g-coder
0da552c390 Safe programming practice. Added va_end. (#425)
In file iperf_util.c:
Function 'va_start' is called at line:327. But, 'va_end' is not called before returning from function 'iperf_json_printf()' at line:352 and line:355. 
The va_end performs cleanup for the argp object initialized by a call to va_start. If va_end is not called before a function that calls va_start returns, the behavior is undefined.

Applied Fix: added va_end before returning from the function.
2016-05-26 09:06:16 -07:00
g-coder
8fcfc2479f DEREF_AFTER_NULL in src/iperf_error.c (#423)
DEREF_AFTER_NULL: pointer ‘test’ at line:77 is passed as an argument to function iperf_delete_pidfile(), in which it is dereferenced at iperf_api.c:2832.
Pointer ‘test’ can be NULL and dereferencing a NULL pointer causes seg-fault.

Applied Fix: pointer ‘test’ is checked for NULL before passing it to function iperf_delete_pidfile().
2016-05-26 08:47:29 -07:00
Joe McEachern
3b2311263a Add fix for #412 (#414)
* Add fix for #412
This prevents negative loss counters with UDP when omit is used

* Track the original start time and bytes omitted. This allows the
throttle function to work after the omit timer fires. This is
a fix for issue #419.

* Remove changes to switch the bandwidth to received instead of sent bandwidth

* Roll back bandwidth sent vs received changes
2016-05-20 11:40:18 -07:00
Bruce A. Mah
f88486443c
Fix build on FreeBSD 11-CURRENT, as described in issue #413.
This caused by a combination of the iperf3 build somehow using
the system queue.h on FreeBSD 11 (possibly only on this platform)
and TAILQ_END not being defined in the system queue.h.

Expanding the TAILQ_END macro to NULL seems to solve the problem.

Submitted by:	@rbgarga
2016-05-20 10:05:24 -07:00
QuaSoft
08a2de459b Add command line option --forceflush to allow user to request flushing of output at the end of each interval.
Fixes #299
2016-03-06 16:47:02 +02:00
Bruce A. Mah
670c18584b
Get rid of nan values when there were no packets in a UDP interval.
This was causing some headaches for code trying to parse JSON.
Also revise a prior partial fix that hard-coded 100% loss for the
case of zero packets.

Partially fixes #278.

Merge candidate for 3.0 and 3.1 bugfix branches.
2016-01-28 16:04:33 -08:00
Bruce A. Mah
224ae8c764
Fix a bug where we printed the incorrect value for out-of-order UDP packets.
Fixes #329, submitted by @bhegardt.

While here, add this value to the JSON output.
2015-11-20 08:31:09 -08:00
Bruce A. Mah
956d115851 Improve command error handling.
Exit with non-zero exit code if server mode has too many errors.

Properly detect complain about non-numeric arguments to -A, -L, and -S.

Implement range checks for argument to -S.

Fixes #316.
2015-11-18 09:40:24 -08:00
Bruce A. Mah
44485b5b88
Fix a bug where the -T title option was not being output correctly
in JSON output.

Fixes #292.

Patch from:	@SLX-WI
2015-11-17 10:47:47 -08:00
Bruce A. Mah
6e48bb2a5d
Markup fixes in manpages for Debian compatibility.
Fixes #291.

Merge candidate for 3.1 stable release if applicable.
2015-11-16 12:00:36 -08:00