diff --git a/.gitignore b/.gitignore index 239bb27..8473ce0 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ autom4te.cache config/test-driver config.log config.status +docs/_build libtool src/.deps src/.libs diff --git a/docs/building.rst b/docs/building.rst new file mode 100644 index 0000000..fc9bb93 --- /dev/null +++ b/docs/building.rst @@ -0,0 +1,33 @@ +Building iperf3 +=============== + +Building iperf3, as with most tools of this type, is a fairly +straightforward operation. The instructions in this section assume +that the source distribution has already been unpacked. + +Prerequisites +------------- + +iperf3 requires few (if any) dependencies on common operating +systems. The only known prerequesites are listed here. + +* ``libuuid``: ``libuuid`` is not installed by default on Debian / + Ubuntu Linux systems. To install this, use this command before + building iperf3: + + ``apt-get install uuid-dev`` + +Building +-------- + +In many cases, iperf3 can be built and installed as follows: + +``./configure && make && make install`` + +In some cases, configuration might fail. If this happens, it might +help to run ``./bootstrap.sh`` first from the top-level directory. + +By default, the ``libiperf`` library is built in both shared and +static forms. Either can be suppressed by using the +``--disabled-shared`` or ``--disable-static`` configure-time options. + diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 0000000..fefa411 --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,272 @@ +# -*- coding: utf-8 -*- +# +# iperf documentation build configuration file, created by +# sphinx-quickstart on Fri Mar 28 14:58:40 2014. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys +import os +import sphinx_bootstrap_theme + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +#sys.path.insert(0, os.path.abspath('.')) + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +#needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_esnet/templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'iperf' +copyright = u'2014, ESnet' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '3.0.3' +# The full version, including alpha/beta/rc tags. +release = '3.0.3' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +#language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = ['_build', '_esnet'] + +# The reST default role (used for this markup: `text`) to use for all +# documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + +# If true, keep warnings as "system message" paragraphs in the built documents. +#keep_warnings = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +html_theme = 'bootstrap' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +html_theme_options = { + "navbar_pagenav": False, + "nosidebar": False, + "navbar_class": "navbar", + "navbar_site_name": "Section", + "navbar_links": [ + ("Index", "genindex"), + ("ESnet", "https://www.es.net", True), + ], +} + +# Add any paths that contain custom themes here, relative to this directory. +html_theme_path = sphinx_bootstrap_theme.get_html_theme_path() + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +html_logo = "_esnet/static/logo-esnet-ball-sm.png" + + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +html_favicon = "_esnet/static/favicon.ico" +html_context = { + "github_url": "https://github.com/esnet/iperf", +} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Add any extra paths that contain custom files (such as robots.txt or +# .htaccess) here, relative to this directory. These files are copied +# directly to the root of the documentation. +#html_extra_path = [] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +html_sidebars = {'index': None, 'search': None, '*': ['localtoc.html']} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +#html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +#html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Output file base name for HTML help builder. +htmlhelp_basename = 'iperfdoc' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { +# The paper size ('letterpaper' or 'a4paper'). +#'papersize': 'letterpaper', + +# The font size ('10pt', '11pt' or '12pt'). +#'pointsize': '10pt', + +# Additional stuff for the LaTeX preamble. +#'preamble': '', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + ('index', 'iperf.tex', u'iperf Documentation', + u'ESnet', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_domain_indices = True + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ('index', 'iperf', u'iperf Documentation', + [u'ESnet'], 1) +] + +# If true, show URL addresses after external links. +#man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ('index', 'iperf', u'iperf Documentation', + u'ESnet', 'iperf', 'One line description of project.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +#texinfo_appendices = [] + +# If false, no module index is generated. +#texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#texinfo_show_urls = 'footnote' + +# If true, do not generate a @detailmenu in the "Top" node's menu. +#texinfo_no_detailmenu = False diff --git a/docs/dev.rst b/docs/dev.rst new file mode 100644 index 0000000..a82e8d4 --- /dev/null +++ b/docs/dev.rst @@ -0,0 +1,182 @@ +iperf3 Development +================== + +The iperf3 project is hosted on GitHub at: + +http://github.com/esnet/iperf + +This site includes the source code repository, issue tracker, and +wiki. + +Mailing Lists +------------- + +The developer list for iperf3 is: iperf3-dev@googlegroups.com. +Information on joining the mailing list can be found at: + +http://groups.google.com/group/iperf-dev + +There is, at the moment, no mailing list for user questions, although +a low volume of inquiries on the developer list is probably +acceptable. If necessary, a user-oriented mailing list might be +created in the future. + +Bug Reports +----------- + +Before submitting a bug report, try checking out the latest version of +the code, and confirm that it's not already fixed. Then submit to the +iperf3 issue tracker on GitHub: + +https://github.com/esnet/iperf/issues + +**Note:** Issues submitted to the old iperf3 issue tracker on Google +Code will be ignored. + +Changes from iperf 2.x +---------------------- + +New options (not necessarily complete, please refer to the manual page +for a complete list of iperf3 options):: + + -V, --verbose more detailed output than before + -J, --json output in JSON format + -Z, --zerocopy use a 'zero copy' sendfile() method of sending data + -O, --omit N omit the first n seconds (to ignore slowstart) + -T, --title str prefix every output line with this string + -F, --file name xmit/recv the specified file + -A, --affinity n/n,m set CPU affinity (Linux and FreeBSD only) + -k, --blockcount #[KMG] number of blocks (packets) to transmit (instead + of -t or -n) + -L, --flowlabel set IPv6 flow label (Linux only) + +Changed flags:: + + -C, --linux-congestion set congestion control algorithm (Linux only) + (-Z in iperf2) + + +Deprecated flags (currently no plans to support):: + + -d, --dualtest Do a bidirectional test simultaneously + -r, --tradeoff Do a bidirectional test individually + -T, --ttl time-to-live, for multicast (default 1) + -x, --reportexclude [CDMSV] exclude C(connection) D(data) M(multicast) + S(settings) V(server) reports + -y, --reportstyle C report as a Comma-Separated Values + +Also deprecated is the ability to set the options via environment +variables. + +Known Issues +------------ + +The following problems are notable known issues, which are probably of +interest to a large fraction of users or have high impact for some +users, and for which issues have already been filed in the issue +tracker. These issues are either open (indicating no solution +currently exists) or closed with the notation that no further attempts +to solve the problem are currently being made: + +* UDP performance: iperf2/iperf3 both only are only about 50% as fast + as nuttcp in UDP mode. We are looking into this, but in the + meantime, if you want to get UDP above 5Gbps, we recommend using + nuttcp instead (http://www.nuttcp.net/). (Issue #55) + +* Interval reports on high-loss networks: The way iperf3 is currently + implemented, the sender write command will block until the entire + block has been written. This means that it might take several + seconds to send a full block if the network has high loss, and the + interval reports will have widely varying interval times. We are + trying to determine the best solution to this, but in the meantime, + try using a smaller block size if you get strange interval reports. + For example, try ``-l 4K``. (Issue #125) + +* The ``-Z`` flag sometimes hangs on OSX. (Issue #129) + +* On OpenBSD, the server seems to require a ``-4`` argument, implying + that it can only be used with IPv4. (Issue #108) + +* When specifying the TCP buffer size using the ``-w`` flag on Linux, + Linux doubles the value you pass in. (You can see this using + iperf3's debug flag.) But then the CWND does not actually ramp up + to the doubled value, but only to about 75% of the doubled + value. This appears to be by design. (Issue #145) + +There are, of course, many other open and closed issues in the issue +tracker. + +Versioning +---------- + +iperf version numbers use three-part release numbers: *MAJOR.MINOR.PATCH* + +The developers increment the: + +* *MAJOR* version when making incompatible API changes, + +* *MINOR* version when adding functionality in a backwards-compatible manner, and + +* *PATCH* version when making backwards-compatible bug fixes. + +This is roughly along the line of `Semantic Versioning `_. + +Release Engineering Checklist +----------------------------- + +1. Update the ``README`` and ``RELEASE_NOTES`` files to be accurate. Make sure + that the "Known Issues" section of the ``README`` file is up to date. + +2. Compose a release announcement. Most of the release announcement + can be written before tagging. + +3. Starting from a clean source tree (be sure that ``git status`` emits + no output):: + + vi src/version.h # update the strings IPERF_VERSION and IPERF_VERSION_DATE + vi configure.ac # update version parameter in AC_INIT + vi src/iperf3.1 # update manpage revision date if needed + vi src/libiperf.3 # update manpage revision date if needed + git commit -a + ./bootstrap.sh # regenerate configure script, etc. + git commit -a + git push + + ./make_release tag # this creates a tag in the local repo that matches the version.h version + git push --tags # Push the new tag to the GitHub repo + ./make_release tar # create tarball and compute SHA256 hash + + Doing the above steps on CentOS 6 (with its somewhat older + autotools / libtools suite) is preferred; newer systems generate + ``configure`` and ``Makefile`` scripts that tend to rebuild + themselves rather frequently. We might be able to address this + problem (and graduate to newer autotools) by using + ``AC_MAINTAINER_MODE`` but there's a fair amount of religion + associated with this. + +4. Stage the tarball (and a file containing the SHA256 hash) to the + download site. Currently this is located on ``stats.es.net``. + +5. From another host, test the link in the release announcement by + downloading a fresh copy of the file and verifying the SHA256 + checksum. + +6. Also verify (with file(1)) that the tarball is actually a gzipped + tarball. + +7. For extra points, actually try downloading, compiling, and + smoke-testing the results of the tarball on all supported + platforms. + +8. Plug the SHA256 checksum into the release announcement. + +9. Send the release announcement (PGP-signed) to these addresses: + + * iperf-dev@googlegroups.com + + * iperf-users@lists.sourceforge.net + + * perfsonar-user@internet2.edu + + * perfsonar-dev@internet2.edu + diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 0000000..aaa4b4a --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,62 @@ +.. iperf documentation master file, created by + sphinx-quickstart on Fri Mar 28 14:58:40 2014. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +iperf3 +====== + +iperf is a tool for active measurements of the maximum achievable +bandwidth on IP networks. It supports tuning of various parameters +related to timing, protocols, and buffers. For each test it reports +the bandwidth, loss, and other parameters. + +This version, sometimes referred to as iperf3, is a redesign of an +original version developed at NLANR/DAST. iperf3 is a new +implementation from scratch, with the goal of a smaller, simpler code +base, and a library version of the functionality that can be used in +other programs. iperf3 also incorporates a number of features found in +other tools such as nuttcp and netperf, but were missing from the +original iperf. These include, for example, a zero-copy mode and +optional JSON output. Note that iperf3 is *not* backwards compatible +with the original iperf. + +Primary development for iperf3 takes place on CentOS Linux, FreeBSD, +and MacOS X. At this time, these are the only officially supported +platforms, however there have been some reports of success with +OpenBSD, Android, and other Linux distributions. + +iperf3 is principally developed by ESnet / Lawrence Berkleley National +Laboratory. It is released under a three-clause BSD license. + +The iperf3 project is hosted on GitHub at: + +https://github.com/esnet/iperf + +The GitHub project site includes the source code repository, issue +tracker. + +This documention tree is hosted on GitHub pages at: + +https://esnet.github.io/iperf/ + +For more information on obtaining iperf3, see :ref:`obtaining`. + +Contents: + +.. toctree:: + :maxdepth: 2 + + news + obtaining + building + invoking + dev + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + diff --git a/docs/invoking.rst b/docs/invoking.rst new file mode 100644 index 0000000..6048303 --- /dev/null +++ b/docs/invoking.rst @@ -0,0 +1,199 @@ +Invoking iperf3 +=============== + +iperf3 includes a manual page listing all of the command-line options. +The manual page is the most up-to-date reference to the various flags and parameters. + +For sample command line usage, see: + +http://fasterdata.es.net/performance-testing/network-troubleshooting-tools/iperf-and-iperf3/ + +Using the default options, iperf3 is meant to show typical well +designed application performance. "Typical well designed application" +means avoiding artificial enhancements that work only for testing +(such as ``splice()``-ing the data to ``/dev/null``). iperf3 does +also have flags for "extreme best case" optimizations but they must be +explicitly activated. These flags include the ``-Z`` (``--zerocopy``) +and ``-A`` (``--affinity``) options. + +iperf3 Manual Page +------------------ + +This section contains a plaintext rendering of the iperf3 manual page. +It is presented here only for convenience; the authoritative iperf3 +manual page is included in the source tree and installed along with +the executable. + +:: + + IPERF(1) User Manuals IPERF(1) + + + + NAME + iperf3 − perform network throughput tests + + SYNOPSIS + iperf3 ‐s [ options ] + iperf3 ‐c server [ options ] + + + DESCRIPTION + iperf3 is a tool for performing network throughput measurements. It + can test either TCP or UDP throughput. To perform an iperf3 test the + user must establish both a server and a client. + + + GENERAL OPTIONS + ‐p, ‐‐port n + set server port to listen on/connect to to n (default 5201) + + ‐f, ‐‐format + [kmKM] format to report: Kbits, Mbits, KBytes, MBytes + + ‐i, ‐‐interval n + pause n seconds between periodic bandwidth reports; default is + 1, use 0 to disable + + ‐F, ‐‐file name + client‐side: read from the file and write to the network, + instead of using random data; server‐side: read from the network + and write to the file, instead of throwing the data away + + ‐A, ‐‐affinity n/n,m + Set the CPU affinity, if possible (Linux and FreeBSD only). On + both the client and server you can set the local affinity by + using the n form of this argument (where n is a CPU number). In + addition, on the client side you can override the server’s + affinity for just that one test, using the n,m form of argument. + Note that when using this feature, a process will only be bound + to a single CPU (as opposed to a set containing potentialy mul‐ + tiple CPUs). + + ‐B, ‐‐bind host + bind to a specific interface + + ‐V, ‐‐verbose + give more detailed output + + ‐J, ‐‐json + output in JSON format + + ‐‐logfile file + send output to a log file. + + ‐d, ‐‐debug + emit debugging output. Primarily (perhaps exclusively) of use + to developers. + + ‐v, ‐‐version + show version information and quit + + ‐h, ‐‐help + show a help synopsis + + + SERVER SPECIFIC OPTIONS + ‐s, ‐‐server + run in server mode + + ‐D, ‐‐daemon + run the server in background as a daemon + + ‐I, ‐‐pidfile file + write a file with the process ID, most useful when running as a + daemon. + + + CLIENT SPECIFIC OPTIONS + ‐c, ‐‐client host + run in client mode, connecting to the specified server + + ‐‐sctp use SCTP rather than TCP (FreeBSD and Linux) + + ‐u, ‐‐udp + use UDP rather than TCP + + ‐b, ‐‐bandwidth n[KM] + set target bandwidth to n bits/sec (default 1 Mbit/sec for UDP, + unlimited for TCP). If there are multiple streams (‐P flag), + the bandwidth limit is applied separately to each stream. You + can also add a ’/’ and a number to the bandwidth specifier. + This is called "burst mode". It will send the given number of + packets without pausing, even if that temporarily exceeds the + specified bandwidth limit. + + ‐t, ‐‐time n + time in seconds to transmit for (default 10 secs) + + ‐n, ‐‐bytes n[KM] + number of bytes to transmit (instead of ‐t) + + ‐k, ‐‐blockcount n[KM] + number of blocks (packets) to transmit (instead of ‐t or ‐n) + + ‐l, ‐‐length n[KM] + length of buffer to read or write (default 128 KB for TCP, 8KB + for UDP) + + ‐P, ‐‐parallel n + number of parallel client streams to run + + ‐R, ‐‐reverse + run in reverse mode (server sends, client receives) + + ‐w, ‐‐window n[KM] + TCP window size / socket buffer size (this gets sent to the + server and used on that side too) + + ‐M, ‐‐set‐mss n + set TCP maximum segment size (MTU ‐ 40 bytes) + + ‐N, ‐‐no‐delay + set TCP no delay, disabling Nagle’s Algorithm + + ‐4, ‐‐version4 + only use IPv4 + + ‐6, ‐‐version6 + only use IPv6 + + ‐S, ‐‐tos n + set the IP ’type of service’ + + ‐L, ‐‐flowlabel n + set the IPv6 flow label (currently only supported on Linux) + + ‐Z, ‐‐zerocopy + Use a "zero copy" method of sending data, such as sendfile(2), + instead of the usual write(2). + + ‐O, ‐‐omit n + Omit the first n seconds of the test, to skip past the TCP slow‐ + start period. + + ‐T, ‐‐title str + Prefix every output line with this string. + + ‐C, ‐‐linux‐congestion algo + Set the congestion control algorithm (linux only). + + + AUTHORS + Iperf was originally written by Mark Gates and Alex Warshavsky. Man + page and maintence by Jon Dugan . Other con‐ + tributions from Ajay Tirumala, Jim Ferguson, Feng Qin, Kevin Gibbs, + John Estabrook , Andrew Gallatin , Stephen Hemminger + + + SEE ALSO + libiperf(3), https://github.com/esnet/iperf + + + + ESnet February 2014 IPERF(1) + +The iperf3 manual page will typically be installed in manual +section 1. + diff --git a/docs/news.rst b/docs/news.rst new file mode 100644 index 0000000..e29c20e --- /dev/null +++ b/docs/news.rst @@ -0,0 +1,63 @@ +iperf3 Project News +=================== + +2014-03-26: iperf-3.0.3 released +--------------------------------- + +| http://stats.es.net/software/iperf-3.0.3.tar.gz +| ``79daf3e5e5c933b2fc4843d6d21c98d741fe39b33ac05bd7a11c50d321a2f59d iperf-3.0.3.tar.gz`` + +This is the second maintenance release of iperf 3.0, containing a few bug fixes and enhancements, notably: + +* The structure of the JSON output is more consistent between the + cases of one stream and multiple streams. + +* The example programs once again build correctly. + +* A possible buffer overflow related to error output has been fixed. + (This is not believed to be exploitable.) + +More information on changes can be found in the RELEASE_NOTES +file in the source distribution. + +2014-03-10: iperf-3.0.2 released +--------------------------------- + +| http://stats.es.net/software/iperf-3.0.2.tar.gz +| ``3c379360bf40e6ac91dfc508cb43fefafb4739c651d9a8d905a30ec99095b282 iperf-3.0.2.tar.gz`` + +**Note:** Due to a mistake in the release process, the distribution tarball referred to above is actually not compressed, despite its ``.tar.gz`` extension. Instead it is an uncompressed tar archive. The file checksum is correct, as are the file contents. + +This version is a maintenance release that +fixes a number of bugs, many reported by users, adds a few minor +enhancements, and tracks the migration of the iperf3 project to +GitHub. Of particular interest: + +* Build / runtime fixes for CentOS 5, MacOS 10.9, and FreeBSD. + +* TCP snd_cwnd output on Linux in the default output format. + +* libiperf is now built as both a shared and static library; by + default, the iperf3 binary links to the shared library. + +More information on changes can be found in the RELEASE_NOTES +file in the source distribution. + +2014-02-28: iperf migrated to GitHub +------------------------------------- + +The new project page can be found at: + +https://github.com/esnet/iperf + +2014-01-10: iperf-3.0.1 released +--------------------------------- + +| http://stats.es.net/software/iperf-3.0.1.tar.gz +| ``32b419ef634dd7670328c3cecc158babf7d706bd4b3d248cf95965528a20e614 iperf-3.0.1.tar.gz`` + +During development, there were various distributions of the source +code unofficially released carrying a 3.0.0 version number. Because +of the possiblity for confusion, this first public release of iperf3 +was numbered 3.0.1. + diff --git a/docs/obtaining.rst b/docs/obtaining.rst new file mode 100644 index 0000000..d6d6634 --- /dev/null +++ b/docs/obtaining.rst @@ -0,0 +1,41 @@ +.. _obtaining: + +Obtaining iperf3 +================ + +Binary Distributions +-------------------- + +Binary packages are available for several supported operating systems: + +* FreeBSD: `Ports Collection `_ +* Fedora / CentOS: + +Source Distributions +-------------------- + +Source distributions of iperf are available as compressed (gzip) +tarballs at: + +http://stats.es.net/software/ + +**Note:** Due to a software packaging error, the 3.0.2 release +tarball was not compressed, even though its filename had a ``.tar.gz`` +suffix. + +Source Code Repository +---------------------- + +The iperf3 project is hosted on GitHub at: + +https://github.com/esnet/iperf + +The iperf3 source code repository can be checked out directly from +GitHub using: + +``git clone https://github.com/esnet/iperf.git`` + +Primary development for iperf3 takes place on CentOS 6 Linux, FreeBSD, +and MacOS X. At this time, these are the only officially supported +platforms, however there have been some reports of success with +OpenBSD, Android, and other Linux distributions.