esnet / iperf

iperf3: A TCP, UDP, and SCTP network bandwidth measurement tool
Other
6.98k stars 1.28k forks source link

libiperf catchup #595

Open bmah888 opened 7 years ago

bmah888 commented 7 years ago

Context

Enhancement Request

A number of enhancements have been made to iperf3 that caused the iperf_test and iperf_settings to grow some new members corresponding to new configuration parameters. In many cases, the libiperf API was not extended to include getters and setters for these parameters, with the result that programs using libiperf don't have access to all of the test parameters that can be specified from the command-line.

The libiperf API should catch up to the reality of these structure definitions.

FuzzyStatic commented 6 years ago

I would love to see libiperf fully updated.

samhooke commented 6 years ago

Following is a table of all parameters that are available when invoking iperf3 through the command line, and their equivalent API methods (where applicable) as of commit 7f88301:

Key

Table of libiperf functionality

Options libiperf functions Status
-p, --port iperf_set_test_server_port, iperf_get_test_server_port :heavy_check_mark:
-f, --format :x:
-i, --interval iperf_set_test_reporter_interval, iperf_get_test_reporter_interval, iperf_set_test_stats_interval, iperf_get_test_stats_interval :heavy_check_mark:
-F, --file :x:
-A, --affinity iperf_setaffinity, iperf_clearaffinity :heavy_check_mark:
-B, --bind iperf_set_test_bind_address, iperf_get_test_bind_address :heavy_check_mark:
-V, --verbose iperf_set_verbose, iperf_get_verbose :heavy_check_mark:
-J, --json iperf_set_test_json_output, iperf_get_test_json_output :heavy_check_mark:
--logfile :white_check_mark:
--forceflush :white_check_mark:
-d, --debug :white_check_mark:
-v, --version :white_check_mark:
-h, --help :white_check_mark:
-s, --server iperf_set_test_role, iperf_get_test_role, iperf_set_test_server_hostname, iperf_get_test_server_hostname :heavy_check_mark:
-D, --daemon :white_check_mark:
-I, --pidfile :white_check_mark:
-1, --one-off iperf_set_test_one_off, iperf_get_test_one_off :heavy_check_mark:
-c, --client iperf_set_test_role, iperf_get_test_role :heavy_check_mark:
-u, --udp set_protocol, get_protocol :heavy_check_mark::heavy_minus_sign:
--connection-timeout :x:
-b, --bitrate iperf_set_test_rate, iperf_get_test_rate, iperf_set_test_burst, iperf_get_test_burst :heavy_check_mark:
--pacing-timer :x:
--fq-rate :x:
-t, --time iperf_set_test_duration, iperf_get_test_duration :heavy_check_mark:
-n, --bytes :x:
-k, --blockcount :x:
-l, --length iperf_set_test_blksize, iperf_get_test_blksize :heavy_check_mark:
--cport :x:
-P, --parallel iperf_set_test_num_streams, iperf_get_test_num_streams :heavy_check_mark:
-R, --reverse iperf_set_test_reverse, iperf_get_test_reverse :heavy_check_mark:
-w, --window iperf_set_test_socket_bufsize, iperf_get_test_socket_bufsize :heavy_check_mark:
-C, --congestion :x:
-M, --set-mss iperf_set_control_socket, iperf_get_control_socket :heavy_check_mark:
-N, --no-delay :x:
-4, --version4 :x:
-6, --version6 :x:
-S, --tos iperf_set_test_tos, iperf_get_test_tos :heavy_check_mark:
--dscp :x:
-L, --flowlabel :x:
-Z, --zerocopy iperf_set_test_zerocopy, iperf_get_test_zerocopy, iperf_has_zerocopy :heavy_check_mark:
-O, --omit iperf_set_test_omit, iperf_get_test_omit :heavy_check_mark:
-T, --title :x:
--extra-data iperf_set_extra_data, iperf_get_extra_data :heavy_check_mark:
--get-server-output iperf_set_test_get_server_output, iperf_get_test_get_server_output :heavy_check_mark:
--udp-counters-64bit iperf_set_test_udp_counters_64bit, iperf_get_test_udp_counters_64bit :heavy_check_mark:
--repeating-payload :x:

Personally, the most critical missing libiperf functionality is:

However I agree it would be useful for libiperf to catch up completely with all available functionality.

I have had a play around making changes in my local iperf repository and successfully added in the functions I needed, however would ideally like to have this available upstream. If possible I will try and put together a pull request soon for at least some of these changes.

ckleu commented 6 years ago

Is this the reason why the Python wrapper (using libiperf.3 directly) cannot use the CLI --no-delay option?

thiezn commented 5 years ago

@ckleu The python wrapper uses the libiperf.3 for all functionality. Options not available in the libiperf.3 library are not available in the python wrapper.