1
1

115 Коммитов

Автор SHA1 Сообщение Дата
Bruce A. Mah
246c1bcacd Remove some dead code. 2017-05-03 12:25:32 -07:00
Bruce A. Mah
4dfe721b10
Merge branch 'master' of git://github.com/dmdailey/iperf into dmdailey-master 2017-04-20 14:13:33 -07:00
Gabriel Ganne
5ab2132ce3 warning fixes (#551)
* fix Wstrict-prototypes warnings found by clang

also fix usage_long() call

Signed-off-by: Gabriel Ganne <gabriel.ganne@enea.com>

* fix Wunreachable-code-break warnings found by clang

Signed-off-by: Gabriel Ganne <gabriel.ganne@enea.com>

* fix Wshadow warnings found by clang

Signed-off-by: Gabriel Ganne <gabriel.ganne@enea.com>

* fix Wmissing-noreturn warning found by clang

Signed-off-by: Gabriel Ganne <gabriel.ganne@enea.com>

* ix memory leak found by clang

Signed-off-by: Gabriel Ganne <gabriel.ganne@enea.com>

* fix Wmisleading-indentation warnings raised by gcc-6

Signed-off-by: Gabriel Ganne <gabriel.ganne@enea.com>

* fix warning: Value stored to 'ptr' during its initialization is never read found by clang

Signed-off-by: Gabriel Ganne <gabriel.ganne@enea.com>

* fix warning: The left operand of '>' is a garbage value found by clang

Signed-off-by: Gabriel Ganne <gabriel.ganne@enea.com>

* fix memory leak in global cleanup

Signed-off-by: Gabriel Ganne <gabriel.ganne@enea.com>
2017-04-20 13:33:15 -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
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
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
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
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
dmdailey
f7fd67d4a2 Update iperf_server_api.c
When a test in in progress and the client completely disappears, both the control socket and the stream sockets are left around forever.  Patch modified from another patch submitted by mkall to add closing of the data stream sockets.
2016-08-05 16:41:52 -04: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
2210d55277 Merge pull request #258 from manojdelphix/master
Fix segfault in signal handler on the server if a signal arrives at the "wrong" time.

The change causes the signal handler to use a stack context whose lifetime should be valid the entire time the signal handler is active.

Fixes #257, #258.
2015-05-11 13:45:14 -07:00
Bruce A. Mah
5824381111
Make --get-server-output properly include all of the server side output.
Fixes #251, with a bug fix based on diagnosis and analysis from @nomel.
2015-05-11 10:44:06 -07:00
Manoj Joseph
9293ec2c2b 257 Segfault in the signal handler 2015-03-31 11:08:16 -07:00
Havard Eidnes
bf53fb1304 Remove unused local variable. 2015-02-12 15:07:56 +01:00
Bruce A. Mah
8694d1db0d Make UDP packet reception work right with non-blocking sockets and enable.
We need this to permit a UDP receiving iperf3 server to listen on its
control channel.

The fix for non-blocking sockets basically makes sure that if we do a
read on a non-blocking sockets, but there's no data, the UDP processing
code does *not* try to do the normal protocol packet processing on the
non-existent packet.

This is part of an ongoing fix for issue #212 but also should have been
a part of the fix for issue #125.
2014-10-13 04:28:58 -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
Bruce A. Mah
a1861d5f87
Rename locale.{c,h} to iperf_locale.{c,h} to avoid filename collision
with system header <locale.h>.

This apparently fixes problems on an ARM build, but this was generally
broken anyway.  It's slightly amazing this didn't cause problems before;
perhaps we never used <locale.h> before?

Addresses #203.
2014-09-15 10:42:36 -07:00
Bruce A. Mah
40d45dcf34 Fix a problem that could disrupt existing tests.
By design, an iperf3 server only runs one test at a time.  New
connections from other clients (during an existing test) are
rejected.  A problem is that the server code that rejects the test
tries (for some reason) to read the cookie from the client, even
though it's going to reject the connection anyway.

A way to break an existing test is:  With a test running, make a TCP
connection to the server's control port (this can easily be done with
a telnet client).  The server will hang in a blocking read call trying
to read the cookie from a non-existent client, while the test is
essentially frozen.

The fix is to remove the attempted read of the cookie.

Fixes #202.
2014-08-27 14:48:09 -07:00
Bruce A. Mah
426221a327
Check HAVE_STDINT_H before trying to include <stdint.h>.
Partial fix for compilation on some Solaris versions.  Fixes #175.

Submitted by:	@marksolaris
2014-05-19 10:15:36 -07:00
Bruce A. Mah
6b16244baa Make sockets for non-UDP tests non-blocking (rather than all sender
side sockets).  This is reported to fix some oddities after a recent
change in this area.

Somewhat related to Issue #125.

Submitted by:	@i2aaron
2014-04-25 13:23:13 -07:00
Bruce A. Mah
cbacc1d670
Only set sockets to non-blocking mode on the sending side of the
transfer.

Note that the sender can either be the client or the server depending
on whether --reverse is used.

This fixes some problems with UDP transfers getting severely confused
and (wrongly) complaining about packets arriving out of order.

Related to issue #125.
2014-04-23 15:01:27 -07:00
Bruce A. Mah
081ba8e4e9
Commit a version of the patch for #125 for testing.
Originally submitted by:	@i2aaron
2014-04-16 16:23:13 -07:00
Bruce A. Mah
3fa8072e9b Fix a call to iprintf(), also fix sequencing of some output flushes.
Related to Issue #119.
2014-03-14 15:48:31 -07:00
Bruce A. Mah
aeb6938d5a
Support --logfile argument to make all output go to a file.
This works for both client and server side (in the case of the server,
either for daemon or non-daemon mode).

Consistifies a few places that were using printf instead of iprintf.

Fixes Issue 119.
2014-03-14 14:23:38 -07:00
Bruce A. Mah
9a829841eb Replace system("uname -a") with call to uname(3).
Slightly reworked version of a patch that was...

Submitted by:	Susant Sahani <ssahani@redhat.com>
2014-01-30 15:15:53 -08:00
Bruce A. Mah
deefb95fea Add FreeBSD support for -A (set CPU affinity).
Mostly this change consists of adding FreeBSD-specific code to handle
this feature.  The concepts and system calls are very similar to what's
already done for Linux.  One difference is that on FreeBSD, the CPU
affinity mask is saved before -A processing and restored afterwards.
This causes a slight change to the function signatures for
iperf_setaffinity() and iperf_clearaffinity() (these functions
however are not documented as a part of the libiperf3 API).

Slightly improve some of the documentation for the -A command line
option, to hopefully stave off some of the questions about this
feature.

Mostly based on a submitted patch.

Issue:          128 (better error message for CPU affinity failure)
Submitted by:   Susant Sahani <ssahani@redhat.com>
2014-01-13 10:58:47 -08:00
Bruce A. Mah
c04bdcb9d0 Second try at printing statistics when processes are interrupted.
When the client process gets interrupted, both the client and server
dump out accumulated interval statistics, as well as a partial set of
summary statistics (basically each side dumps what it has, but without
the exchange of information that usually happens at the end of a
normal run).

If the server process gets interrupted, the server dumps out its
accumulated interval and summary statistics as above.  The client does
this as well in the -R case, but exits with a "Broken pipe" in the non
-R case (this behavior was present all along; it was not introduced in
this change).  More investigation will be needed to understand the
client behavior.

Bump copyright dates in a few places.

Issue:		132 (signal handler for API calls)
Discussed with:	aaron@internet2.edu
2014-01-07 16:06:27 -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
Jef Poskanzer
c06bc78c65 Fixed initialization issue.
It was causing the server side to mess up after the first test.
2013-12-05 12:00:46 -08:00
Jef Poskanzer
a4c1383a77 Fixed bug where -R mode selected on a closed file.
Also added a debugging routine to dump an fd_set.
2013-12-05 08:49:27 -08:00
Jef Poskanzer
ace30a641e Fix server-side timers. 2013-11-26 15:14:07 -08:00
Jef Poskanzer
056361fc5d Show user/system CPU usage as well as total. 2013-11-26 14:47:15 -08:00
Jef Poskanzer
96feeac5a4 Performance improvement - only put socket fd's into the appropriate
fdset, not into both sets.
2013-11-25 11:13:28 -08:00
Jef Poskanzer
7bcbb1f653 Performance improvements. 2013-11-15 09:54:21 -08:00
Jef Poskanzer
558c9b8013 Moved a bunch more output strings to locale.[hc]. 2013-11-11 11:18:46 -08:00
Jef Poskanzer
0e60ef1f9c Get rid of some compiler warnings about iprintf. 2013-11-08 21:19:59 -08:00
Jef Poskanzer
d38ab4c8df Added the -T / --title flag. 2013-11-08 20:31:19 -08:00
Jef Poskanzer
082cbb0ee6 The ctrl_sck does not need to be in the select write_set, and indeed
having it there may cause the select to return immediately every
time. Which is bad, m'kay?

Also, changed the coding idiom used to keep track of the maximum fd
in the fd sets, to be clearer.
2013-11-08 15:59:17 -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
38917b1f3f Run -i interval timers on the server as well as the client. 2013-11-01 13:59:33 -07:00
Jef Poskanzer
afe6222a89 Move termination signal handing from main into iperf_run_client
and iperf_run_server, so that API users get it too.  Also, call
iperf_errexit with an appropriate message, which in -J mode dumps
out any accumulated JSON data.
2013-10-29 15:03:17 -07:00
Jef Poskanzer
69376ec7ed Fix retransmit accounting so it works right with the --omit flag. 2013-10-28 17:13:30 -07:00
Jef Poskanzer
8a7e01eb8f Implement -A flag to set CPU affinity. 2013-10-25 17:00:52 -07:00
Jef Poskanzer
a953f5aa2c Re-do of how --omit works. 2013-10-24 14:08:04 -07:00
Jef Poskanzer
e32a7bcd77 Added the -F / --file flag, to use a specified file instead
of random data for sending, and to save the data in the file
on receiving.
2013-10-19 07:43:38 -07:00
Jef Poskanzer
f8bd11af23 Ran across a little error in some code that is currently
commented out. Worth fixing anyway.
2013-09-12 11:01:48 -07:00
Jef Poskanzer
8bdc8fffcf Fix bug in reverse mode. 2013-08-29 11:38:20 -07:00
Jef Poskanzer
5c01581b32 Detect that the system doesn't support IPv6 and try falling back to IPv4. 2013-08-19 10:02:01 -07: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
d611f13e18 Fix incorrect default bandwidth limit when using the API instead
of the command line.
2013-07-12 19:56:49 -07:00