1
1

59 Коммитов

Автор SHA1 Сообщение Дата
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
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
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
Bruce A. Mah
da9f046f19
Update license and copyright text to conform to LBNL standards.
Note that the license remains a 3-clause BSD license; the only
license changes were to add the name of the program and to add
some punctuation.
2014-09-29 14:00:46 -07:00
Kevin Constantine
b7b1b32afe Add support for specifying client-side epemeral port
-e/--cport now allows a user to specify the client-side port
used for data transfer.

Signed-off-by: Kevin Constantine <kevin.constantine@gmail.com>
2014-09-09 16:31:57 -07:00
Bruce A. Mah
eb1cfe5e16 Another iteration on issue #193, fixes -B with some TCP tests.
When we do TCP tests and specify the socket buffer size, MSS, or
TCP no delay option, the iperf3 server destroys the socket it was
using to listen for the control connection and opens up a new
listening socket for the test's data connections.  This is (I think)
to make sure that the data connections all have the correct TCP
parameters.

When we re-create the listening socket, we also need to go through
the binding logic again (with all of the address family selectiion,
etc. goop).  The bug fixes that were a part of issue #193 need to
be ported to this code as well.

This problem only affects TCP tests, because for other protocols,
the listening socket for data cannot be the same listening sock as
for the control connection.

While here, add some comments so anybody trying to understand this
code will have an easier time.

Based on patch by:	@i2aaron
2014-08-01 16:24:14 -07:00
Bruce A. Mah
bef5ef87f5 Don't try to do IPV6_V6ONLY on OpenBSD either.
setsockopt(3) returns an error if passing 0 to this option (which
we do if no address family is specified when we bind to the wildcard
address, say by invoking "iperf3 -s" with no other options).  This
is because OpenBSD explicitly does not support IPv4-mapped addresses,
so even though the IPV6_V6ONLY socket options exists, it only works
with a non-zero argument.

Fixes #196.
2014-06-16 08:32:18 -07:00
Bruce A. Mah
147d3369a0
Only do the IPV6_V6ONLY setsockopt(3) stuff if that option is available.
Should fix #177, in which compilation failed on older Solaris systems
that didn't have it.  This is a different approach than a patch
suggested in that issue.

Weakly regression-tested on other platforms (test this by specifying
-6, -4, or neither to the server when binding to the wildcard address,
and seeing if a client can connect with various of -6, -4, or neither).
2014-07-21 10:34:06 -07:00
Bruce A. Mah
40050b7bee
Fix breakage due to iperf.h depending on the autoconf config.h file but
not including it.

To fix this required us to change config.h to iperf_config.h (to
avoid potential filename collisions with this generic name).  Then
iperf.h could include this.

Adjust the existing header file inclusions to track this, and also
canonicalize their inclusion to be at the top of *.c files.
2014-04-14 13:33:33 -07:00
Bruce A. Mah
cbc17310cd Get a missed HAVE_TCP_CONGESTION change. 2014-04-10 11:24:47 -07:00
Bruce A. Mah
4155c45471 Improve detection of IPv6 flowlabel support (Linux only).
We check at configure-time to see if IPV6_FLOWLABEL_MGR is defined
in <linux/in.6>, if it is we set a HAVE_FLOWLABEL CPP symbol to
turn on conditional compilation of the support for this feature.
2014-04-10 11:20:36 -07:00
Bruce A. Mah
c550ef4605 Non-platform-specific detection of TCP_CONGESTION socket option.
Rather than checking for anything Linux-specific at configure-time,
see if TCP_CONGESTION is defined in <netinet/tcp.h> and if so define
a CPP variable HAVE_TCP_CONGESTION, which we then use to enable
conditional compilation of the code for this feature.
2014-04-10 10:53:18 -07:00
Bruce A. Mah
7af6d5a2f9
In debug mode, print out SO_SNDBUF when setting up each socket
(regardless of whether this was set explicitly or not).
2014-03-06 15:11:25 -08:00
Bruce A. Mah
4addea8502 Fix unfiled bug that could break TCP tests under some circumstances.
The bug and solution are very similar to Issue 126 (fixed in
d7e0c1445c0a).  Basically a setsockopt(IPV6_V6ONLY) call had a bogus
level argument, but we never checked the return value so we never
noticed this.

As with the prior issue, the fix is to unbreak the setsockopt() call,
and add some error checking to detect future breakage.

This bug was on a codepath that only got called if non-default values
were set for the socket buffer size, the MSS, or the NODELAY parameter.
It might have affected some FreeBSD tests, but really only got noticed
when debugging some other code that was (probably) cut-and-pasted
from this code.
2014-02-04 15:05:39 -08:00
Bruce A. Mah
0ff7575499 Fix build on Linux distros that don't support TCP_CONGESTION.
Apparently older kernels don't support TCP_CONGESTION, so we can't
just test for defined(linux) to know if we can use this sockopt or not.
This change unbreaks the build on (notably) CentOS 5.
2014-01-16 10:43:08 -08:00
Bruce A. Mah
48e66b9b9a Improve error message for TCP congestion algorithm setting failure.
Also remove a couple of places where we were saving and restoring errno
where we didn't need to.

Submitted by:	Susant Sahani <ssahani@redhat.com>
Issue:		121 (TCP congestion control algorithm support for client)
2014-01-02 13:49:56 -08:00
Jef Poskanzer
62bfa88ceb Added -C / --linux-congestion.
Also a few other bugfixes I ran across.
2013-12-13 19:57:52 -08:00
Bruce A. Mah
d04c7bd0a4 Support setting the IPv6 flow label on Linux systems (only).
This functionality uses some setsockopt(2) calls that unfortunately
don't seem to have an analog on other platforms.

Slightly tweaked version of a patch that was...

Submitted by:	ssahani@redhat.com
Issue:		40 (Option for setting Flow Label field in IPv6
		header)
2013-12-12 09:21:36 -08:00
Jef Poskanzer
32ebd649b3 Fixed some memory & fd leaks in error cases of various network setup
routines.
2013-11-09 14:23:36 -08:00
Jef Poskanzer
4e2ef5070b More sizeof changes.
A couple more sizeof issues found and fixed.  One of them is
actually another protocol change, but due to a fortuitous accident
it should remain compatible with older versions.

Detailed explanation: When a client attempts to connect to a server that
is already busy, the server is supposed to return ACCESS_DENIED as a
state value.  It was doing so, but was writing it as an int, even though
state values are supposed to be signed chars.  The client read the value
correctly as a signed char, getting one byte and throwing away the rest.
So why did this ever work?  Because ACCESS_DENIED is the value -1, and
any byte of an int -1 equals a signed char -1.  If ACCESS_DENIED had been
any other value, this would have been an opvious bug and would have long
since been fixed.  As is, it stuck around working by accident until now.
2013-11-06 11:05:46 -08:00
Jef Poskanzer
019434022c test->state needs to be explicitly signed char to accomodate a couple
of error states which are negative.  On most systems this doesn't
matter because char is signed, but on ARM CPUs char is unsigned.
2013-08-16 13:19:42 -07:00
Jef Poskanzer
c687db9da2 Storing the known-to-not-work Flow Label code, just to save it.
The user-visible parts are commented out or return a "not implemented
yet" error message.  The other parts are harmless.

We'll come back to this once we figure out how exactly one sets
the Flow Label.
2013-06-03 13:12:43 -07:00
Jef Poskanzer
12d474e2b4 A couple other places that used struct sockaddr_in when they should
have used struct sockaddr_storage - fixed now.
2013-05-02 15:28:30 -07:00
Jef Poskanzer
a6b3f26be1 Dual-stack operation - IPv4 and IP46 in the same server.
Also added -4 flag to force IPv4.
2013-03-29 17:49:27 -07:00
Jef Poskanzer
987b432316 A bunch of changes mixed together in this commit, but the significant
one is the new -Z flag.

- Fixed potential bug in net.c's Nread and Nwrite routines.  If they
had ever needed to loop they would have read/written the wrong address,
due to incorrect pointer arithmetic - sizeof(void) is not 1.  Fix
was to change the type of the buffer pointer to char*, which also
meant adding casts to some callers.

- Better checking for conflicts between command-line flags - now they
should no longer be order-dependent.

- Added a new -Z / --zerocopy flag, to use a "zero copy" method of
sending data, such as sendfile(2) instead of the usual write(2).

- Renumbered error enum to make inserting new ones easier.
2013-03-04 15:55:16 -08:00
Jef Poskanzer
43929b3698 Added "burst mode" to send a bunch of packets in a row without
intervening select() calls.  This increases performance quite a bit.
2013-02-22 15:54:05 -08:00
Jef Poskanzer
d7613a8e9f Allow API client to provide an fd for the client-side control socket. 2012-12-13 09:37:55 -08:00
Jef Poskanzer
ec2d0670b8 Switched to using a new timer package, adapted from thttpd and http_load. 2012-12-11 22:29:26 -08:00
jef
98ce496b1b Some changes to the iperf3 API to work with bwctl, mostly having to
do with what defs are in which include file.  End result is we now have
only one public include file, iperf_api.h.
2012-09-28 16:00:14 -07:00
Jon Dugan
7d375156aa update license info for all source files 2011-04-20 20:33:09 +00:00
sethdelliott
02a35f07e3 Merged print mss (-m) into verbose mode (-V) 2010-08-04 19:19:08 +00:00
sethdelliott
0bd8d9da6e Added ability to set TCP window size (-w). Modified code to keep test structures intact after a test is complete. Improved interval timer granularity. Fixed a bug with timeval_diff. 2010-08-02 22:45:53 +00:00
sethdelliott
f99bd3b2c6 Added support for IPv6 mode (-6) 2010-07-27 20:27:34 +00:00
sethdelliott
5e0e1e974e Exchanged gethostbyname for getaddrinfo 2010-07-27 17:32:21 +00:00
sethdelliott
a1344ede16 Added support for binding (-B) to a specific interface 2010-07-26 21:30:34 +00:00
sethdelliott
112a907cc3 More code restructuring 2010-07-23 18:39:14 +00:00
sethdelliott
66ce7ad49d Made the protocol implementation better. Lots of code clean up 2010-07-22 23:26:38 +00:00
sethdelliott
8a0b5a5d18 Added support for adding new protocols. Slightly modified iperf_error() 2010-07-22 18:57:08 +00:00
sethdelliott
b60a49dd37 All error handling is now handled by iperf_error. Also cleaned up some code 2010-07-20 22:27:50 +00:00
sethdelliott
8556db5d08 Added support for UDP mode (-b mode not yet supported). Added htonll/ntohll functions. Cleaned up code. 2010-07-14 23:24:58 +00:00
Jon Dugan
b0b16b86cc rename uuid.[ch] to iperf_util.[ch] to avoid confusion on some platforms 2010-07-09 00:29:51 +00:00
sethdelliott
f1b3bd81f9 Quite a bit of code restructuring. 2010-07-07 21:54:24 +00:00
sethdelliott
181d61afab Iperf results are now exchanged between client and server. The server also now prints results. 2010-06-29 22:02:30 +00:00
sethdelliott
fd10304cbd Updates to Nread/Nwrite in net.c 2010-06-28 22:25:03 +00:00
sethdelliott
465b565c50 New control socket design now works. Now working on finishing up the reporting. 2010-06-23 19:13:37 +00:00
sethdelliott
ba2672a209 Note: The redesign is almost working. Should be finished shortly. 2010-06-21 15:08:47 +00:00
sethdelliott
982c704a8a NOTE: This is not a working revision. I'm in the process of redesigning how the client and server communicate. It will be fixed soon 2010-06-18 21:08:50 +00:00
Brian Tierney
6146bde494 fixed stats computation 2009-11-17 18:44:01 +00:00
Brian Tierney
1882b9cb65 turned off some debug code, and fixed a bug in interval times 2009-11-15 04:47:19 +00:00