Showing preview only (2,618K chars total). Download the full file or copy to clipboard to get everything.
Repository: esnet/iperf
Branch: master
Commit: a5549203c979
Files: 108
Total size: 2.5 MB
Directory structure:
gitextract_cn_k7htu/
├── .github/
│ ├── CONTRIBUTING.md
│ ├── ISSUE_TEMPLATE.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ └── workflows/
│ └── build.yml
├── .gitignore
├── .gitlab-ci.yml
├── INSTALL
├── LICENSE
├── Makefile.am
├── Makefile.in
├── README.md
├── RELNOTES.md
├── aclocal.m4
├── auth_test.sh
├── bootstrap.sh
├── config/
│ ├── ax_check_openssl.m4
│ ├── ax_pthread.m4
│ ├── compile
│ ├── config.guess
│ ├── config.sub
│ ├── depcomp
│ ├── install-sh
│ ├── iperf_config_static_bin.m4
│ ├── ltmain.sh
│ ├── missing
│ ├── mkinstalldirs
│ └── test-driver
├── configure
├── configure.ac
├── contrib/
│ ├── Dockerfile
│ ├── README.txt
│ ├── iperf3.gp
│ ├── iperf3.service
│ └── iperf3_to_gnuplot.py
├── docs/
│ ├── 2017-04-27.txt
│ ├── 2017-06-06.txt
│ ├── Makefile
│ ├── _esnet/
│ │ ├── LICENSE
│ │ ├── README.rst
│ │ ├── deploy.sh
│ │ ├── static/
│ │ │ └── esnet.css
│ │ └── templates/
│ │ ├── layout.html
│ │ ├── navbar.html
│ │ └── relations.html
│ ├── building.rst
│ ├── conf.py
│ ├── dev.rst
│ ├── faq.rst
│ ├── index.rst
│ ├── invoking.rst
│ ├── news.rst
│ └── obtaining.rst
├── examples/
│ ├── Makefile.am
│ ├── Makefile.in
│ ├── mic.c
│ └── mis.c
├── iperf3.spec.in
├── make_release
├── src/
│ ├── Makefile.am
│ ├── Makefile.in
│ ├── cjson.c
│ ├── cjson.h
│ ├── dscp.c
│ ├── flowlabel.h
│ ├── iperf.h
│ ├── iperf3.1
│ ├── iperf_api.c
│ ├── iperf_api.h
│ ├── iperf_auth.c
│ ├── iperf_auth.h
│ ├── iperf_client_api.c
│ ├── iperf_config.h.in
│ ├── iperf_error.c
│ ├── iperf_locale.c
│ ├── iperf_locale.h
│ ├── iperf_pthread.c
│ ├── iperf_pthread.h
│ ├── iperf_sctp.c
│ ├── iperf_sctp.h
│ ├── iperf_server_api.c
│ ├── iperf_tcp.c
│ ├── iperf_tcp.h
│ ├── iperf_time.c
│ ├── iperf_time.h
│ ├── iperf_udp.c
│ ├── iperf_udp.h
│ ├── iperf_util.c
│ ├── iperf_util.h
│ ├── libiperf.3
│ ├── main.c
│ ├── net.c
│ ├── net.h
│ ├── portable_endian.h
│ ├── private.pem
│ ├── public.pem
│ ├── queue.h
│ ├── t_api.c
│ ├── t_auth.c
│ ├── t_timer.c
│ ├── t_units.c
│ ├── t_uuid.c
│ ├── tcp_info.c
│ ├── timer.c
│ ├── timer.h
│ ├── units.c
│ ├── units.h
│ └── version.h.in
└── test_commands.sh
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/CONTRIBUTING.md
================================================
# iperf3 Contribution Guidelines
Thanks for contributing to iperf3!
This page contains some guidelines for filing issues, pull requests,
and other sorts of interactions with the iperf3 project. These are
guidelines and not hard rules, and it is intended that common sense
and good judgement will prevail.
## Support
iperf3 is officially supported on Linux (various distributions),
FreeBSD, and macOS. Support may be provided on a best-effort basis to
other UNIX-like platforms. We cannot provide support for building
and/or running iperf3 on Windows, iOS, or Android.
Before asking for help, please check with your favorite search engine
or the
[iperf3 Discussions site on GitHub](http://github.com/esnet/iperf/discussions)
to see if your question might have been asked (and maybe even
answered) before. https://fasterdata.es.net/ has some information on
the use of various bandwidth measurement tools, including iperf3. The
iperf3 documentation Web site at http://software.es.net/iperf/
contains various bits of helpful information, including a list of
[frequently-asked questions](http://software.es.net/iperf/faq.html).
We specifically discourage the use of the issue tracker on the iperf3
GitHub project page for asking questions. Questions posted in the
form of issues may go unanswered. Please use the
[iperf3 Discussions site on GitHub](http://github.com/esnet/iperf/discussions)
to ask questions of the community or
alternatively use the iperf3 mailing list at
iperf-dev@googlegroups.com (posting requires joining the list).
## Code
If you have improvements or bugfixes to make to iperf3, we'd love to
hear from you. We prefer changes to be submitted in the form of pull
requests on GitHub, although we can (probably) accept simple patches
as well. If in doubt, ask.
Before making any submission to the iperf3 project (whether it be code
or documentation), we urge you to consult the iperf3 license, in
particular the section quoted below:
```
You are under no obligation whatsoever to provide any bug fixes, patches, or
upgrades to the features, functionality or performance of the source code
("Enhancements") to anyone; however, if you choose to make your Enhancements
available either publicly, or directly to Lawrence Berkeley National
Laboratory, without imposing a separate written license agreement for such
Enhancements, then you hereby grant the following license: a non-exclusive,
royalty-free perpetual license to install, use, modify, prepare derivative
works, incorporate into other computer software, distribute, and sublicense
such enhancements or derivative works thereof, in binary and source code form.
```
If you're considering changes that will have an architectural impact,
we strongly encourage discussing them with the iperf3 maintainers
before doing a significant amount of work on the code. We might be
able to provide some guidance. Also, we're more likely to accept a
submission if if it doesn't involve rewriting large sections of the
code. Even if you're going to fork the code and maintain your own
changes privately (which you're perfectly welcome to do) we might able
to give you guidance so that future iperf3 changes won't conflict with
your work.
## Conduct
We expect that iperf3 interactions via the issue tracker, mailing
lists, and so forth will be conducted civilly. Language that is
deemed appropriate or abusive may be removed, and we reserve the right
to ban users from accessing the project for repeated offense.
================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
_NOTE: The iperf3 issue tracker is for registering bugs, enhancement
requests, or submissions of code. It is not a means for asking
questions about building or using iperf3. Those are best directed
towards the Discussions section for this project at
https://github.com/esnet/iperf/discussions
or to the iperf3 mailing list at iperf-dev@googlegroups.com.
A list of frequently-asked questions
regarding iperf3 can be found at http://software.es.net/iperf/faq.html._
# Context
* Version of iperf3:
* Hardware:
* Operating system (and distribution, if any):
_Please note: iperf3 is supported on Linux, FreeBSD, and macOS.
Support may be provided on a best-effort basis to other UNIX-like
platforms. We cannot provide support for building and/or running
iperf3 on Windows, iOS, or Android._
* Other relevant information (for example, non-default compilers,
libraries, cross-compiling, etc.):
_Please fill out one of the "Bug Report" or "Enhancement Request"
sections, as appropriate. Note that submissions of bug fixes, new
features, etc. should be done as a pull request at
https://github.com/esnet/iperf/pulls_
# Bug Report
* Expected Behavior
* Actual Behavior
* Steps to Reproduce
* Possible Solution
# Enhancement Request
* Current behavior
* Desired behavior
* Implementation notes
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
_PLEASE NOTE the following text from the iperf3 license. Submitting a
pull request to the iperf3 repository constitutes "[making]
Enhancements available...publicly":_
```
You are under no obligation whatsoever to provide any bug fixes, patches, or
upgrades to the features, functionality or performance of the source code
("Enhancements") to anyone; however, if you choose to make your Enhancements
available either publicly, or directly to Lawrence Berkeley National
Laboratory, without imposing a separate written license agreement for such
Enhancements, then you hereby grant the following license: a non-exclusive,
royalty-free perpetual license to install, use, modify, prepare derivative
works, incorporate into other computer software, distribute, and sublicense
such enhancements or derivative works thereof, in binary and source code form.
```
_The complete iperf3 license is available in the `LICENSE` file in the
top directory of the iperf3 source tree._
* Version of iperf3 (or development branch, such as `master` or
`3.1-STABLE`) to which this pull request applies:
* Issues fixed (if any):
* Brief description of code changes (suitable for use as a commit message):
================================================
FILE: .github/workflows/build.yml
================================================
name: GitHub Actions Build Test
permissions:
contents: read
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
cppcheck-test:
runs-on: ubuntu-latest
steps:
- run: echo "This job was triggered by a ${{ github.event_name }} event."
- name: Checkout Repo
uses: actions/checkout@v5
- name: install dependencies
run: |
sudo apt-get -y update && sudo apt-get install -y cppcheck && \
cppcheck . --force --inline-suppr
build-test-ubuntu-ish:
strategy:
matrix:
os: [ubuntu-latest, ubuntu-22.04, ubuntu-22.04-arm]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v5
- name: install dependencies
run: |
sudo apt-get -y update && sudo apt-get install -y build-essential
- name: build
run: |
./configure && make && make check
timeout 300 src/iperf3 -s &
./test_commands.sh localhost
build-test-macos-ish:
strategy:
matrix:
os: [macos-15, macos-14]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v5
- name: install dependencies
run: |
brew install coreutils
- name: build
run: |
./configure && make && make check
timeout 300 src/iperf3 -s &
./test_commands.sh localhost
build-test-sanitizer-address:
runs-on: ubuntu-latest
steps:
- run: echo "Running address sanitzer"
- name: Checkout Repo
uses: actions/checkout@v5
- name: install dependencies
run: |
sudo apt-get -y update && sudo apt-get install -y build-essential
- name: build
run: |
./configure CFLAGS="-g -O0 -fsanitize=address" LDFLAGS="-fsanitize=address" && make && make check
timeout 300 src/iperf3 -s &
./test_commands.sh localhost
================================================
FILE: .gitignore
================================================
*~
*.a
*.la
*.lo
*.o
*.orig
*.Po
/Makefile
/autom4te.cache
/config.log
/config.status
/iperf3.spec
docs/_build
docs/_static
/libtool
src/.deps
src/.libs
src/Makefile
src/iperf_config.h
src/version.h
src/stamp-h1
src/iperf3
src/iperf3_profile
src/t_timer
src/t_units
src/t_uuid
src/t_api
src/t_auth
examples/.libs
examples/Makefile
examples/mic
examples/mis
.vscode/
================================================
FILE: .gitlab-ci.yml
================================================
# To contribute improvements to CI/CD templates, please follow the Development guide at:
# https://docs.gitlab.com/development/cicd/templates/
# This specific template is located at:
# https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/C++.gitlab-ci.yml
# use the official gcc image, based on debian
# can use versions as well, like gcc:5.2
# see https://hub.docker.com/_/gcc/
# To contribute improvements to CI/CD templates, please follow the Development guide at:
# https://docs.gitlab.com/development/cicd/templates/
# This specific template is located at:
# https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/C++.gitlab-ci.yml
# use the official gcc image, based on debian
# can use versions as well, like gcc:5.2
# see https://hub.docker.com/_/gcc/
image: gcc
build:
stage: build
before_script:
- apt update && apt -y install make autoconf libssl-dev
script:
- ./configure CFLAGS="-g -O0 -fsanitize=address" LDFLAGS="-fsanitize=address"
- make
- timeout 300 ./src/iperf3 -s &
- ./test_commands.sh localhost
artifacts:
paths:
- src/iperf3
- src/.libs/*
# run tests using the binary built before
test:
stage: test
script:
- ls
deploy:
stage: deploy
script: echo "Define your deployment script!"
environment: production
================================================
FILE: INSTALL
================================================
Installation Instructions
*************************
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
Software Foundation, Inc.
This file is free documentation; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it.
Basic Installation
==================
These are generic installation instructions.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, and a
file `config.log' containing compiler output (useful mainly for
debugging `configure').
It can also use an optional file (typically called `config.cache'
and enabled with `--cache-file=config.cache' or simply `-C') that saves
the results of its tests to speed up reconfiguring. (Caching is
disabled by default to prevent problems with accidental use of stale
cache files.)
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release. If you are using the cache, and at
some point `config.cache' contains results you don't want to keep, you
may remove or edit it.
The file `configure.ac' (or `configure.in') is used to create
`configure' by a program called `autoconf'. You only need
`configure.ac' if you want to change it or regenerate `configure' using
a newer version of `autoconf'.
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system. If you're
using `csh' on an old version of System V, you might need to type
`sh ./configure' instead to prevent `csh' from trying to execute
`configure' itself.
Running `configure' takes awhile. While running, it prints some
messages telling which features it is checking for.
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
the package.
4. Type `make install' to install the programs and any data files and
documentation.
5. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came
with the distribution.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that the
`configure' script does not know about. Run `./configure --help' for
details on some of the pertinent environment variables.
You can give `configure' initial values for configuration parameters
by setting variables in the command line or in the environment. Here
is an example:
./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
*Note Defining Variables::, for more details.
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you must use a version of `make' that
supports the `VPATH' variable, such as GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.
If you have to use a `make' that does not support the `VPATH'
variable, you have to compile the package for one architecture at a
time in the source code directory. After you have installed the
package for one architecture, use `make distclean' before reconfiguring
for another architecture.
Installation Names
==================
By default, `make install' installs the package's commands under
`/usr/local/bin', include files under `/usr/local/include', etc. You
can specify an installation prefix other than `/usr/local' by giving
`configure' the option `--prefix=PREFIX'.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
pass the option `--exec-prefix=PREFIX' to `configure', the package uses
PREFIX as the prefix for installing programs and libraries.
Documentation and other data files still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=DIR' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them.
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Optional Features
=================
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.
For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
Specifying the System Type
==========================
There may be some features `configure' cannot figure out automatically,
but needs to determine by the type of machine the package will run on.
Usually, assuming the package is built to be run on the _same_
architectures, `configure' can figure that out, but if it prints a
message saying it cannot guess the machine type, give it the
`--build=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name which has the form:
CPU-COMPANY-SYSTEM
where SYSTEM can have one of these forms:
OS KERNEL-OS
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
need to know the machine type.
If you are _building_ compiler tools for cross-compiling, you should
use the option `--target=TYPE' to select the type of system they will
produce code for.
If you want to _use_ a cross compiler, that generates code for a
platform different from the build platform, you should specify the
"host" platform (i.e., that on which the generated programs will
eventually be run) with `--host=TYPE'.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share, you
can create a site shell script called `config.site' that gives default
values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
Defining Variables
==================
Variables not defined in a site shell script can be set in the
environment passed to `configure'. However, some packages may run
configure again during the build, and the customized values of these
variables may be lost. In order to avoid this problem, you should set
them in the `configure' command line, using `VAR=value'. For example:
./configure CC=/usr/local2/bin/gcc
causes the specified `gcc' to be used as the C compiler (unless it is
overridden in the site shell script). Here is a another example:
/bin/bash ./configure CONFIG_SHELL=/bin/bash
Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
configuration-related scripts to be executed by `/bin/bash'.
`configure' Invocation
======================
`configure' recognizes the following options to control how it operates.
`--help'
`-h'
Print a summary of the options to `configure', and exit.
`--version'
`-V'
Print the version of Autoconf used to generate the `configure'
script, and exit.
`--cache-file=FILE'
Enable the cache: use and save the results of the tests in FILE,
traditionally `config.cache'. FILE defaults to `/dev/null' to
disable caching.
`--config-cache'
`-C'
Alias for `--cache-file=config.cache'.
`--quiet'
`--silent'
`-q'
Do not print messages saying which checks are being made. To
suppress all normal output, redirect it to `/dev/null' (any error
messages will still be shown).
`--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`configure' also accepts some other, not widely useful, options. Run
`configure --help' for more details.
================================================
FILE: LICENSE
================================================
"iperf, Copyright (c) 2014-2026, The Regents of the University of California,
through Lawrence Berkeley National Laboratory (subject to receipt of any
required approvals from the U.S. Dept. of Energy). All rights reserved."
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
(1) Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
(2) Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/
or other materials provided with the distribution.
(3) Neither the name of the University of California, Lawrence Berkeley
National Laboratory, U.S. Dept. of Energy nor the names of its contributors may
be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
You are under no obligation whatsoever to provide any bug fixes, patches, or
upgrades to the features, functionality or performance of the source code
("Enhancements") to anyone; however, if you choose to make your Enhancements
available either publicly, or directly to Lawrence Berkeley National
Laboratory, without imposing a separate written license agreement for such
Enhancements, then you hereby grant the following license: a non-exclusive,
royalty-free perpetual license to install, use, modify, prepare derivative
works, incorporate into other computer software, distribute, and sublicense
such enhancements or derivative works thereof, in binary and source code form.
=====
This software contains source code (src/cjson.{c,h}) that is:
Copyright (c) 2009-2017 Dave Gamble and cJSON contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
=====
This software contains source code (src/net.{c,h}) that is:
This software was developed as part of a project at MIT.
Copyright (c) 2005-2007 Russ Cox,
Massachusetts Institute of Technology
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
===
Contains parts of an earlier library that has:
/*
* The authors of this software are Rob Pike, Sape Mullender, and Russ Cox
* Copyright (c) 2003 by Lucent Technologies.
* Permission to use, copy, modify, and distribute this software for any
* purpose without fee is hereby granted, provided that this entire notice
* is included in all copies of any software which is or includes a copy
* or modification of this software and in all copies of the supporting
* documentation for such software.
* THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
* WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE ANY
* REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
* OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
*/
=====
This software contains source code (src/net.c) that is:
/*
* Copyright (c) 2001 Eric Jackson <ericj@monkey.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
=====
This software contains source code (src/queue.h) that is:
/*
* Copyright (c) 1991, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#)queue.h 8.5 (Berkeley) 8/20/94
*/
=====
This software contains source code (src/units.{c.h}) that is:
/*---------------------------------------------------------------
* Copyright (c) 1999,2000,2001,2002,2003
* The Board of Trustees of the University of Illinois
* All Rights Reserved.
*---------------------------------------------------------------
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software (Iperf) and associated
* documentation files (the "Software"), to deal in the Software
* without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute,
* sublicense, and/or sell copies of the Software, and to permit
* persons to whom the Software is furnished to do
* so, subject to the following conditions:
*
*
* Redistributions of source code must retain the above
* copyright notice, this list of conditions and
* the following disclaimers.
*
*
* Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimers in the documentation and/or other materials
* provided with the distribution.
*
*
* Neither the names of the University of Illinois, NCSA,
* nor the names of its contributors may be used to endorse
* or promote products derived from this Software without
* specific prior written permission.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
* ________________________________________________________________
* National Laboratory for Applied Network Research
* National Center for Supercomputing Applications
* University of Illinois at Urbana-Champaign
* http://www.ncsa.uiuc.edu
* ________________________________________________________________
*
* stdio.c
* by Mark Gates <mgates@nlanr.net>
* and Ajay Tirumalla <tirumala@ncsa.uiuc.edu>
* -------------------------------------------------------------------
* input and output numbers, converting with kilo, mega, giga
* ------------------------------------------------------------------- */
=====
This software contains source code (src/portable_endian.h) that is:
// "License": Public Domain
// I, Mathias Panzenböck, place this file hereby into the public domain. Use it at your own risk for whatever you like.
=====
================================================
FILE: Makefile.am
================================================
SUBDIRS = src examples
================================================
FILE: Makefile.in
================================================
# Makefile.in generated by automake 1.18.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2025 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
false; \
elif test -n '$(MAKE_HOST)'; then \
true; \
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
true; \
else \
false; \
fi; \
}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
am__rm_f = rm -f $(am__rm_f_notfound)
am__rm_rf = rm -rf $(am__rm_f_notfound)
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/config/ax_check_openssl.m4 \
$(top_srcdir)/config/ax_pthread.m4 \
$(top_srcdir)/config/iperf_config_static_bin.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
$(am__configure_deps) $(am__DIST_COMMON)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno config.status.lineno
mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/src/iperf_config.h
CONFIG_CLEAN_FILES = iperf3.spec
CONFIG_CLEAN_VPATH_FILES =
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
ctags-recursive dvi-recursive html-recursive info-recursive \
install-data-recursive install-dvi-recursive \
install-exec-recursive install-html-recursive \
install-info-recursive install-pdf-recursive \
install-ps-recursive install-recursive installcheck-recursive \
installdirs-recursive pdf-recursive ps-recursive \
tags-recursive uninstall-recursive
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
am__recursive_targets = \
$(RECURSIVE_TARGETS) \
$(RECURSIVE_CLEAN_TARGETS) \
$(am__extra_recursive_targets)
AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
cscope distdir distdir-am dist dist-all distcheck
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
# *not* preserved.
am__uniquify_input = $(AWK) '\
BEGIN { nonempty = 0; } \
{ items[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in items) print i; }; } \
'
# Make sure the list of sources is unique. This is necessary because,
# e.g., the same source file might be shared among _SOURCES variables
# for different programs/libraries.
am__define_uniq_tagged_files = \
list='$(am__tagged_files)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
DIST_SUBDIRS = $(SUBDIRS)
am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/iperf3.spec.in \
$(top_srcdir)/config/compile $(top_srcdir)/config/config.guess \
$(top_srcdir)/config/config.sub \
$(top_srcdir)/config/install-sh $(top_srcdir)/config/ltmain.sh \
$(top_srcdir)/config/missing \
$(top_srcdir)/config/mkinstalldirs INSTALL README.md \
config/compile config/config.guess config/config.sub \
config/install-sh config/ltmain.sh config/missing \
config/mkinstalldirs
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
am__remove_distdir = \
if test -d "$(distdir)"; then \
find "$(distdir)" -type d ! -perm -700 -exec chmod u+rwx {} ';' \
; rm -rf "$(distdir)" \
|| { sleep 5 && rm -rf "$(distdir)"; }; \
else :; fi
am__post_remove_distdir = $(am__remove_distdir)
am__relativize = \
dir0=`pwd`; \
sed_first='s,^\([^/]*\)/.*$$,\1,'; \
sed_rest='s,^[^/]*/*,,'; \
sed_last='s,^.*/\([^/]*\)$$,\1,'; \
sed_butlast='s,/*[^/]*$$,,'; \
while test -n "$$dir1"; do \
first=`echo "$$dir1" | sed -e "$$sed_first"`; \
if test "$$first" != "."; then \
if test "$$first" = ".."; then \
dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
else \
first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
if test "$$first2" = "$$first"; then \
dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
else \
dir2="../$$dir2"; \
fi; \
dir0="$$dir0"/"$$first"; \
fi; \
fi; \
dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
done; \
reldir="$$dir2"
DIST_ARCHIVES = $(distdir).tar.gz
GZIP_ENV = -9
DIST_TARGETS = dist-gzip
# Exists only to be overridden by the user if desired.
AM_DISTCHECK_DVI_TARGET = dvi
distuninstallcheck_listfiles = find . -type f -print
am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
| sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
distcleancheck_listfiles = \
find . \( -type f -a \! \
\( -name .nfs* -o -name .smb* -o -name .__afs* \) \) -print
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CSCOPE = @CSCOPE@
CTAGS = @CTAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
FILECMD = @FILECMD@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDCONFIG = @LDCONFIG@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OPENSSL_INCLUDES = @OPENSSL_INCLUDES@
OPENSSL_LDFLAGS = @OPENSSL_LDFLAGS@
OPENSSL_LIBS = @OPENSSL_LIBS@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
PTHREAD_CC = @PTHREAD_CC@
PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
PTHREAD_CXX = @PTHREAD_CXX@
PTHREAD_LIBS = @PTHREAD_LIBS@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__rm_f_notfound = @am__rm_f_notfound@
am__tar = @am__tar@
am__untar = @am__untar@
am__xargs_n = @am__xargs_n@
ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
SUBDIRS = src examples
all: all-recursive
.SUFFIXES:
am--refresh: Makefile
@:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
$(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
echo ' $(SHELL) ./config.status'; \
$(SHELL) ./config.status;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(am__cd) $(srcdir) && $(AUTOCONF)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
$(am__aclocal_m4_deps):
iperf3.spec: $(top_builddir)/config.status $(srcdir)/iperf3.spec.in
cd $(top_builddir) && $(SHELL) ./config.status $@
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool config.lt
# This directory's subdirectories are mostly independent; you can cd
# into them and run 'make' without going through this Makefile.
# To change the values of 'make' variables: instead of editing Makefiles,
# (1) if the variable is set in 'config.status', edit 'config.status'
# (which will cause the Makefiles to be regenerated when you run 'make');
# (2) otherwise, pass the desired values on the 'make' command line.
$(am__recursive_targets):
@fail=; \
if $(am__make_keepgoing); then \
failcom='fail=yes'; \
else \
failcom='exit 1'; \
fi; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
tags: tags-recursive
TAGS: tags
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
include_option=--etags-include; \
empty_fix=.; \
else \
include_option=--include; \
empty_fix=; \
fi; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test ! -f $$subdir/TAGS || \
set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: ctags-recursive
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$(am__define_uniq_tagged_files); \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscope: cscope.files
test ! -s cscope.files \
|| $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
clean-cscope:
-rm -f cscope.files
cscope.files: clean-cscope cscopelist
cscopelist: cscopelist-recursive
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
distdir: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) distdir-am
distdir-am: $(DISTFILES)
$(am__remove_distdir)
$(AM_V_at)$(MKDIR_P) "$(distdir)"
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
$(am__make_dryrun) \
|| test -d "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
$(am__relativize); \
new_distdir=$$reldir; \
dir1=$$subdir; dir2="$(top_distdir)"; \
$(am__relativize); \
new_top_distdir=$$reldir; \
echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
($(am__cd) $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$$new_top_distdir" \
distdir="$$new_distdir" \
am__remove_distdir=: \
am__skip_length_check=: \
am__skip_mode_fix=: \
distdir) \
|| exit 1; \
fi; \
done
-test -n "$(am__skip_mode_fix)" \
|| find "$(distdir)" -type d ! -perm -755 \
-exec chmod u+rwx,go+rx {} \; -o \
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|| chmod -R a+r "$(distdir)"
dist-gzip: distdir
tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
$(am__post_remove_distdir)
dist-bzip2: distdir
tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
$(am__post_remove_distdir)
dist-bzip3: distdir
tardir=$(distdir) && $(am__tar) | bzip3 -c >$(distdir).tar.bz3
$(am__post_remove_distdir)
dist-lzip: distdir
tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
$(am__post_remove_distdir)
dist-xz: distdir
tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
$(am__post_remove_distdir)
dist-zstd: distdir
tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst
$(am__post_remove_distdir)
dist-tarZ: distdir
@echo WARNING: "Support for distribution archives compressed with" \
"legacy program 'compress' is deprecated." >&2
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
$(am__post_remove_distdir)
dist-shar: distdir
@echo WARNING: "Support for shar distribution archives is" \
"deprecated." >&2
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
$(am__post_remove_distdir)
dist-zip: distdir
-rm -f $(distdir).zip
zip -rq $(distdir).zip $(distdir)
$(am__post_remove_distdir)
dist dist-all:
$(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
$(am__post_remove_distdir)
# This target untars the dist file and tries a VPATH configuration. Then
# it guarantees that the distribution is self-contained by making another
# tarfile.
distcheck: dist
case '$(DIST_ARCHIVES)' in \
*.tar.gz*) \
eval GZIP= gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
*.tar.bz2*) \
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
*.tar.bz3*) \
bzip3 -dc $(distdir).tar.bz3 | $(am__untar) ;;\
*.tar.lz*) \
lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
*.tar.xz*) \
xz -dc $(distdir).tar.xz | $(am__untar) ;;\
*.tar.Z*) \
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
*.shar.gz*) \
eval GZIP= gzip -dc $(distdir).shar.gz | unshar ;;\
*.zip*) \
unzip $(distdir).zip ;;\
*.tar.zst*) \
zstd -dc $(distdir).tar.zst | $(am__untar) ;;\
esac
chmod -R a-w $(distdir)
chmod u+w $(distdir)
mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
chmod a-w $(distdir)
test -d $(distdir)/_build || exit 0; \
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
&& am__cwd=`pwd` \
&& $(am__cd) $(distdir)/_build/sub \
&& ../../configure \
$(AM_DISTCHECK_CONFIGURE_FLAGS) \
$(DISTCHECK_CONFIGURE_FLAGS) \
--srcdir=../.. --prefix="$$dc_install_base" \
&& $(MAKE) $(AM_MAKEFLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \
&& $(MAKE) $(AM_MAKEFLAGS) check \
&& $(MAKE) $(AM_MAKEFLAGS) install \
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
distuninstallcheck \
&& chmod -R a-w "$$dc_install_base" \
&& ({ \
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
} || { rm -rf "$$dc_destdir"; exit 1; }) \
&& rm -rf "$$dc_destdir" \
&& $(MAKE) $(AM_MAKEFLAGS) dist \
&& rm -rf $(DIST_ARCHIVES) \
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
&& cd "$$am__cwd" \
|| exit 1
$(am__post_remove_distdir)
@(echo "$(distdir) archives ready for distribution: "; \
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
distuninstallcheck:
@test -n '$(distuninstallcheck_dir)' || { \
echo 'ERROR: trying to run $@ with an empty' \
'$$(distuninstallcheck_dir)' >&2; \
exit 1; \
}; \
$(am__cd) '$(distuninstallcheck_dir)' || { \
echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
exit 1; \
}; \
test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
|| { echo "ERROR: files left after uninstall:" ; \
if test -n "$(DESTDIR)"; then \
echo " (check DESTDIR support)"; \
fi ; \
$(distuninstallcheck_listfiles) ; \
exit 1; } >&2
distcleancheck: distclean
@if test '$(srcdir)' = . ; then \
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
exit 1 ; \
fi
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|| { echo "ERROR: files left in build directory after distclean:" ; \
$(distcleancheck_listfiles) ; \
exit 1; } >&2
check-am: all-am
check: check-recursive
all-am: Makefile
installdirs: installdirs-recursive
installdirs-am:
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-recursive
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-$(am__rm_f) $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive
clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-libtool \
distclean-tags
dvi: dvi-recursive
dvi-am:
html: html-recursive
html-am:
info: info-recursive
info-am:
install-data-am:
install-dvi: install-dvi-recursive
install-dvi-am:
install-exec-am:
install-html: install-html-recursive
install-html-am:
install-info: install-info-recursive
install-info-am:
install-man:
install-pdf: install-pdf-recursive
install-pdf-am:
install-ps: install-ps-recursive
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf $(top_srcdir)/autom4te.cache
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
pdf: pdf-recursive
pdf-am:
ps: ps-recursive
ps-am:
uninstall-am:
.MAKE: $(am__recursive_targets) install-am install-strip
.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
am--refresh check check-am clean clean-cscope clean-generic \
clean-libtool cscope cscopelist-am ctags ctags-am dist \
dist-all dist-bzip2 dist-bzip3 dist-gzip dist-lzip dist-shar \
dist-tarZ dist-xz dist-zip dist-zstd distcheck distclean \
distclean-generic distclean-libtool distclean-tags \
distcleancheck distdir distuninstallcheck dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs installdirs-am maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic \
mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
uninstall-am
.PRECIOUS: Makefile
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
# Tell GNU make to disable its built-in pattern rules.
%:: %,v
%:: RCS/%,v
%:: RCS/%
%:: s.%
%:: SCCS/s.%
================================================
FILE: README.md
================================================
iperf3: A TCP, UDP, and SCTP network bandwidth measurement tool
================================================================
Summary
-------
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 measured throughput / bitrate, 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 has 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 Ubuntu Linux, FreeBSD,
and macOS. At this time, these are the only officially supported
platforms, however there have been some reports of success with
OpenBSD, NetBSD, Android, Solaris, and other Linux distributions.
iperf3 is principally developed by ESnet / Lawrence Berkeley National
Laboratory. It is released under a three-clause BSD license.
For more information see: https://software.es.net/iperf
Source code and issue tracker: https://github.com/esnet/iperf
Discussion forums: https://github.com/esnet/iperf/discussions
Reporting security vulnerabilities: iperf@es.net
Frequently Asked Questions: https://software.es.net/iperf/faq.html
Obtaining iperf3
----------------
Downloads of iperf3 are available at:
https://downloads.es.net/pub/iperf/
To check out the most recent code, clone the git repository at:
https://github.com/esnet/iperf.git
Building iperf3
---------------
### Prerequisites: ###
None.
### Building ###
./configure; make; make install
(Note: If configure fails, try running `./bootstrap.sh` first)
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:
https://fasterdata.es.net/performance-testing/network-troubleshooting-tools/iperf/
Using the default options, iperf 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). iperf does also have
flags for "extreme best case" optimizations, but they must be
explicitly activated.
These flags include:
-Z, --zerocopy use a 'zero copy' sendfile() method of sending data
-A, --affinity n/n,m set CPU affinity
Bug and Security Reports
------------------------
Before submitting a bug report, please make sure you're running the
latest version of the code, and confirm that your issue has not
already been fixed. Then submit to the iperf3 issue tracker on
GitHub:
https://github.com/esnet/iperf/issues
In your issue submission, please indicate the version of iperf3 and
what platform you're trying to run on (provide the platform
information even if you're not using a supported platform, we
*might* be able to help anyway). Exact command-line arguments will
help us recreate your problem. If you're getting error messages,
please include them verbatim if possible, but remember to sanitize any
sensitive information.
If you have a question about usage or about the code, please do *not*
submit an issue. Please use one of the mailing lists for that.
If you suspect there is a potential security issue, please contact the
developers at:
iperf@es.net
Relation to iperf 2.x
---------------------
Although iperf2 and iperf3 both measure network performance,
they are not compatible with each other.
The projects (as of mid-2021) are in active, but separate, development.
The continuing iperf2 development
project can be found at https://sourceforge.net/projects/iperf2/.
Known Issues
------------
A set of known issues is maintained on the iperf3 Web pages:
https://software.es.net/iperf/dev.html#known-issues
Links
-----
This section lists links to user-contributed Web pages regarding
iperf3. ESnet and Lawrence Berkeley National Laboratory bear no
responsibility for the content of these pages.
* Installation instructions for Debian Linux (by Cameron Camp
<cameron@ivdatacenter.com>):
http://cheatsheet.logicalwebhost.com/iperf-network-testing/
Copyright
---------
iperf, Copyright (c) 2014-2026, The Regents of the University of
California, through Lawrence Berkeley National Laboratory (subject
to receipt of any required approvals from the U.S. Dept. of
Energy). All rights reserved.
If you have questions about your rights to use or distribute this
software, please contact Berkeley Lab's Technology Transfer
Department at TTD@lbl.gov.
NOTICE. This software is owned by the U.S. Department of Energy.
As such, the U.S. Government has been granted for itself and others
acting on its behalf a paid-up, nonexclusive, irrevocable,
worldwide license in the Software to reproduce, prepare derivative
works, and perform publicly and display publicly. Beginning five
(5) years after the date permission to assert copyright is obtained
from the U.S. Department of Energy, and subject to any subsequent
five (5) year renewals, the U.S. Government is granted for itself
and others acting on its behalf a paid-up, nonexclusive,
irrevocable, worldwide license in the Software to reproduce,
prepare derivative works, distribute copies to the public, perform
publicly and display publicly, and to permit others to do so.
This code is distributed under a BSD style license, see the LICENSE
file for complete information.
================================================
FILE: RELNOTES.md
================================================
iperf3 Release Notes
====================
iperf-3.20 2025-11-14
---------------------
NOTE: iperf-3.20 incorporates all of the changes in prior iperf3
releases, including iperf-3.19.1.
* Notable user-visible changes
* Millisecond-resolution representations have been added to JSON
timestamps. (PR #1846)
* The reorder_seen metric, where available, is now available in
the JSON output. (PR #1278)
* A division by zero error has been fixed. (PR #1906)
* Some command-line options were not properly restricted to the
client or server; this problem has been fixed. (#1892 / PR #1894)
* The combination of `--udp` and `--file` is now explicitly
disallowed. (PR #1909)
* It is now possible to get both the full JSON result object as
well as streaming intermediate JSON result objects. This
functionality is enabled by using the new `--json-stream-full`
command-line flag, in addition to the existing `--json-stream`
flag (PR #1903)
* Sends with `--zerocopy` are now properly seeded with data
instead of being all-zeroes. (PR #1949)
* The `--server-max-duration` flag is now allowed on the iperf3 server to impose
a maximum duration on timed tests. (PR #1684)
* The `--rcv-timeout` flag is now ignored for `--bidir`
tests. This change prevents premature termination of
bidirectional tests. (#1766 / PR #1946)
* Several errors in the authentication code were uncovered when
building with OpenSSL 3.5.3 and later versions. These were
fixed. (#1951 / PR #1956)
* Various issues in the iperf3 manual page were fixed up. (PR
#1887, PR #1927, PR #1936, PR #1941, #1891 / PR #1952)
* Notable developer-visible changes
* A build failure with uClibc has been fixed. (#1888 / PR #1890)
* It is now possible to use the API to load RSA keys from a file.
(PR #1889)
* Some calls to sprintf() were replaced with calls to
snprintf(). There were no hazards in the code as written, but
this change might help silence some compiler warnings and
potentially prevent future vulnerabilities. (PR #1929)
* Proper error handling has been added to the `unit_atoX()`
functions. (PR #1394)
* Some memory handling errors in `t_auth` were fixed. (PR #1953)
* Minor enhancements and fixes to GitHub Actions workflows (PR
#1919, PR #1928, PR #1942).
iperf-3.19.1 2025-07-25
-----------------------
* Notable user-visible changes
* SECURITY NOTE: Thanks to Han Lee with Apple Information Security
for finding and reporting several memory errors
including a buffer overflow within the
`--skip-rx-copy` option, and two memory errors
within authentication, including a heap overflow
in the plaintext password and an assert.
* An off-by-one heap overflow has been fixed in authentication.
(CVE-2025-54349, ESNET-SECADV-2025-0003)
* An assert in authentication has been removed. (CVE-2025-54350,
ESNET-SECADV-2025-0002)
* A buffer overflow in the `--skip-rx-copy` option for zerocopy
has been fixed. (CVE-2025-54351, ESNET-SECADV-2025-0001)
iperf-3.19 2025-05-16
---------------------
* Notable user-visible changes
* iperf3 now supports the use of Multi-Path TCP (MPTCPv1) on Linux
with the use of the `-m` or `--mptcp` flag. (PR #1661)
* iperf3 now supports a `--cntl-ka` option to enable TCP keepalives
on the control connection. (#812, #835, PR #1423)
* iperf3 now supports the `MSG_TRUNC` receive option, specified by
the `--skip-rx-copy`. This theoretically improves the rated
throughput of tests at high bitrates by not delivering network
payload data to userspace. (#1678, PR #1717)
* A bug that caused the bitrate setting to be ignored when bursts
are set, has been fixed. (#1773, #1820, PR #1821, PR #1848)
* The congestion control protocol setting, if used, is now
properly reset between tests. (PR #1812)
* iperf3 now exits with a non-error 0 exit code if exiting via a
`SIGTERM`, `SIGHUP`, or `SIGINT`. (#1009, PR# 1829)
* The current behavior of iperf3 with respect to the `-n` and `-k`
options is now documented as correct. (#1768, #1775, #596, PR #1800)
* Notable developer-visible changes
* iperf3 now supports a callback function to get the JSON output
strings. (#1711, PR #1798)
* iperf3 now builds correctly with gcc-15 (#1838, PR #1805)
* Various memory leaks were fixed (#1881, PR#1823, #1814, PR#1822)
* A potential segfault crash was fixed (#1807)
* Improved warning messages when reading malformed JSON messages
(PR #1817)
* The Github CI configuration was changed to use a more up-to-date
set of runners (PR #1864)
iperf-3.18 2024-12-13
---------------------
* Notable user-visible changes
* SECURITY NOTE: Thanks to Leonid Krolle Bi.Zone for discovering a
JSON type security vulnerability that caused a
segmentation fault in the
server. (CVE-2024-53580) This has now been
fixed. (PR#1810)
* UDP packets per second now reports the correct number of
packets, by reporting NET_SOFTERROR if there's a EAGAIN/EINTR
errno if no data was sent (#1367/PR#1379).
* Several segmentation faults related to threading were fixed. One
where `pthread_cancel` was called on an improperly initialized
thread (#1801), another where threads were being recycled
(#1760/PR#1761), and another where threads were improperly
handling signals (#1750/PR#1752).
* A segmentation fault from calling `freeaddrinfo` with `NULL` was
fixed (PR#1755).
* Some JSON options were fixed, including checking the size for
`json_read` (PR#1709), but the size limit was removed for
received server output (PR#1779).
* A rcv-timeout error has been fixed. The Nread timeout was
hardcoded and timed out before the `--rcv-timeout` option
(PR#1744).
* There is no longer a limit on the omit time period
(#1770/PR#1774).
* Fixed an output crash under 32-bit big-endian systems (PR#1713).
* An issue was fixed where CPU utilization was unexpectedly high
during limited baud rate tests. The `--pacing-timer` option was
removed, but it is still available in the library
(#1741/PR#1743).
* Add SCTP information to `--json` output and fixed compile error
when SCTP is not supported (#1731).
* `--fq-rate` was changed from a uint to a uint64 to allow pacing above
32G. Not yet tested on big-endian systems (PR#1728).
* Notable developer-visible changes
* Clang compilation failure on Android were fixed (PR#1687).
* `iperf_time_add()` was optimized to improve performance
(PR#1742).
* Debug messages were added when the state changes (PR#1734).
* To increase performance, the old UDP `prot_listener` is cleared
and removed after each test (PR#1708).
* A file descriptor leak was closed (PR#1619).
iperf-3.17.1 2024-05-13
-----------------------
* Notable user-visible changes
* Version number has been corrected. (#1699)
* Notable developer-visible changes
* No longer signing tags
iperf-3.17 2024-05-10
---------------------
* Notable user-visible changes
* BREAKING CHANGE: iperf3's authentication features, when used with
OpenSSL prior to 3.2.0, contain a vulnerability to a side-channel
timing attack. To address this flaw, a change has been made to the
padding applied to encrypted strings. This change is not backwards
compatible with older versions of iperf3 (before 3.17). To restore
the older (vulnerable) behavior, and hence
backwards-compatibility, use the --use-pkcs1-padding flag. The
iperf3 team thanks Hubert Kario from RedHat for reporting this
issue and providing feedback on the fix. (CVE-2024-26306)(PR#1695)
* iperf3 no longer changes its current working directory in --daemon
mode. This results in more predictable behavior with relative
paths, in particular finding key and credential files for
authentication. (PR#1672)
* A new --json-stream option has been added to enable a streaming
output format, consisting of a series of JSON objects (for the
start of the test, each measurement interval, and the end of the
test) separated by newlines (#444, #923, #1098).
* UDP tests now work correctly between different endian hosts
(#1415).
* The --fq-rate parameter now works for --reverse tests (#1632, PR#1667).
* The statistics reporting interval is now available in the --json
start test object (#1663).
* A negative time test duration is now properly flagged as an error
(IS#1662 / PR#1666).
* Notable developer-visible changes
* Fixes have been made to better (unofficially) support builds on
Android (#1641 / #1651) and VxWorks (#1595).
* iperf3 now builds correctly on architectures without native
support for 64-bit atomic types, by linking with the libatomic
library (#1611).
iperf-3.16 2023-11-30
---------------------
* Notable user-visible changes
* Multiple test streams started with -P/--parallel will now be
serviced by different threads. This allows iperf3 to take
advantage of multiple CPU cores on modern processors, and will
generally result in significant throughput increases (PR #1591).
* OpenSSL 3 is now detected at build time. If OpenSSL 3 is found,
various older, deprecated, APIs will not be used. iperf3 will
continue to work with OpenSSL 1.1.1. OpenSSL is used as a part
of the iperf3 authentication functionality (Issue #1300, PR
#1589).
* The authorized users file used by the authentication functionality
is now checked for accessibility much earlier during the program
startup, as opposed to being checked near the start of a
test (Issue #1583, PR #1585).
* Developer-visible changes
* BREAKING CHANGE: iperf3 now requires pthreads and C atomic
variables to compile and run.
iperf-3.15 2023-09-14
---------------------
* Notable user-visible changes
* Several bugs that could allow the iperf3 server to hang waiting
for input on the control connection has been fixed. ESnet thanks
Jorge Sancho Larraz from Canonical for reporting this issue. For
more information, see:
https://downloads.es.net/pub/iperf/esnet-secadv-2023-0002.txt.asc
* A bug that caused garbled output with UDP tests on 32-bit hosts
has been fixed (PR #1554, PR #1556). This bug was introduced in
iperf-3.14.
* A bug in counting UDP messages has been fixed (PR #1367, PR
#1380).
iperf-3.14 2023-07-07
---------------------
* Notable user-visible changes
* A memory allocation hazard was fixed (Issue #1542/PR #1543). For
more information see:
https://downloads.es.net/pub/iperf/esnet-secadv-2023-0001.txt.asc
* JSON output was improved, such as print JSON numbers as signed (PR
#1539, Issue #1435), the exit code when doing JSON output was
fixed (PR #1523), and client_api was fixed so that it still
returns an error code when JSON is enabled (Issue #1405). Also,
duplicate fields when using multiple streams was removed from the
JSON output (#1492).
* Prevent UDP packet count and operations overflow (PR #1536/Issue
#1534).
* Statistics are fixed when --omit is used (Issue #1489/PR #1498).
* Developer-visible changes
* CI builds and tests using GitHub actions have been added (PR
#1519).
* A fix for Android "unable to create a new stream error" was added
(PR #1506).
* Support for Voice Admit DSCP code point from RFC 5865 was added
(PR #1490).
* A fix for preventing a crash when RSA public key path doesn't
exist was fixed (PR #1488/Issue #1471).
iperf-3.13 2023-02-16
---------------------
* Notable user-visible changes
* fq-rate (PR #1461, Issue #1366), and bidirectional flag (Issue #1428,
PR #1429) were added to the JSON output.
* Added support for OpenBSD including cleaning up endian handling (PR #1396)
and support for TCP_INFO on systems where it was implemented (PR #1397).
* Fixed bug in how TOS is set in mapped v4 (PR #1427).
* Corrected documentation, such as updating binary download links and text
(Issue #1459), updating version on iperf3 websites, and fixing an
incorrect error message (Issue #1441).
* Fixed crash on rcv-timeout with JSON logfile (#1463, #1460, issue #1360,
PR #1369).
* Fixed a bug that prevented TOS/DSCP from getting set correctly for reverse
tests (PR #1427, Issue #638).
* Developer-visible changes
* Getter and setter are now available for bind_dev (PR #1419).
* Added missing getter for bidirectional tests (PR #1453).
* Added minor changes to clean up .gitignore and error messages (#1408).
* Made sure configure scripts are runnable with /bin/sh (PR #1398).
* Cleaned up RPM spec, such as adding missing RPM build dependencies, dropping
EL5 and removing outdated %changelog (PR #1401) to make.
* Added a fix for a resource leak bug in function iperf_create_pidfile(#1443).
iperf-3.12 2022-09-30
---------------------
* Notable user-visible changes
* cJSON has been updated to version 1.7.15 (#1383).
* The --bind <host>%<dev> option syntax now works properly (#1360 /
#1371).
* A server-side file descriptor leak with the --logfile option has
been fixed (#1369 / #1360 / #1369 / #1389 / #1393).
* A bug that caused some large values from TCP_INFO to be misprinted
as negative numbers has been fixed (#1372).
* Using the -k or -n flags with --reverse no longer leak into future
tests (#1363 / #1364).
* There are now various debug level options available with the
--debug option. These can be used to adjust the amount of
debugging output (#1327).
* A new --snd-timeout option has been added to set a termination
timeout for idle TCP connections (#1215 / #1282).
* iperf3 is slightly more robust to out-of-order packets during UDP
connection setup in --reverse mode (#914 / #1123 / #1182 / #1212 /
#1260).
* iperf3 will now use different ports for each direction when the
--cport and --bdir options are set (#1249 / #1259).
* The iperf3 server will now exit if it can't open its log file
(#1225 / #1251).
* Various help message and output fixes have been made (#1299 /
#1330 / #1345 / #1350).
* Various compiler warnings have been fixed (#1211 / #1316).
* Developer-visible changes
* Operation of bootstrap.sh has been fixed and simplified (#1335 /
#1325).
* Flow label support / compatibility under Linux has been improved
(#1310).
* Various minor memory leaks have been fixed (#1332 / #1333).
* A getter/setter has been added for the bind_port parameter
(--cport option). (#1303, #1305)
* Various internal documentation improvements (#1265 / #1285 / #1304).
iperf-3.11 2022-01-31
---------------------
* Notable user-visible changes
* Update links to Discussions in documentation
* Fix DSCP so that TOS = DSCP * 4 (#1162)
* Fix --bind-dev for TCP streams (#1153)
* Fix interface specification so doesn't overlap with IPv6 link-local addresses for -c and -B (#1157, #1180)
* Add get/set test_unit_format function declaration to iperf_api.h
* Auto adjustment of test-end condition for file transfers (-F), if no end condition is set, it will automatically adjust it to file size in bytes
* Exit if idle time expires waiting for a connection in one-off mode (#1187, #1197)
* Support zerocopy by reverse mode (#1204)
* Update help and manpage text for #1157, support bind device
* Consistently print target_bandwidth in JSON start section (#1177)
* Test bitrate added to JSON output (#1168)
* Remove fsync call after every write to receiving --file (#1176, #1159)
* Update documentation for -w (#1175)
* Fix for #952, different JSON object names for bidir reverse channel
iperf-3.10.1 2021-06-03
-----------------------
* Notable user-visible changes
* Fixed a problem with autoconf scripts that made builds fail in
some environments (#1154 / #1155).
* Developer-visible changes
* GNU autoconf 2.71 or newer is now required to regenerate iperf3's
configure scripts.
iperf 3.10 2021-05-26
---------------------
* Notable user-visible changes
* Fix a bug where some --reverse tests didn't terminate (#982 /
#1054).
* Responsiveness of control connections is slightly improved (#1045
/ #1046 / #1063).
* The allowable clock skew when doing authentication between client
and server is now configurable with the new --time-skew-threshold
(#1065 / #1070).
* Bitrate throttling using the -b option now works when a burst size
is specified (#1090).
* A bug with calculating CPU utilization has been fixed (#1076 /
#1077).
* A --bind-dev option to support binding sockets to a given network
interface has been added to make iperf3 work better with
multi-homed machines and/or VRFs (#817 / #1089 / #1097).
* --pidfile now works with --client mode (#1110).
* The server is now less likely to get stuck due to network errors
(#1101, #1125), controlled by the new --rcv-timeout option.
* Fixed a few bugs in termination conditions for byte or
block-limited tests (#1113, #1114, #1115).
* Added tcp_info.snd_wnd to JSON output (#1148).
* Some bugs with garbled JSON output have been fixed (#1086, #1118,
#1143 / #1146).
* Support for setting the IPv4 don't-fragment (DF) bit has been
added with the new --dont-fragment option (#1119).
* A failure with not being able to read the congestion control
algorithm under WSL1 has been fixed (#1061 / #1126).
* Error handling and error messages now make more sense in cases
where sockets were not successfully opened (#1129 / #1132 /
#1136, #1135 / #1138, #1128 / #1139).
* Some buffer overflow hazards were fixed (#1134).
* Notable developer-visible changes
* It is now possible to use the API to set/get the congestion
control algorithm (#1036 / #1112).
iperf 3.9 2020-08-17
--------------------
* Notable user-visible changes
* A --timestamps flag has been added, which prepends a timestamp to
each output line. An optional argument to this flag, which is a
format specification to strftime(3), allows for custom timestamp
formats (#909, #1028).
* A --server-bitrate-limit flag has been added as a server-side
command-line argument. It allows a server to enforce a maximum
throughput rate; client connections that specify a higher bitrate
or exceed this bitrate during a test will be terminated. The
bitrate is expressed in bits per second, with an optional trailing
slash and integer count that specifies an averaging interval over
which to enforce the limit (#999).
* A bug that caused increased CPU usage with the --bidir option has
been fixed (#1011).
* Notable developer-visible changes
* Fixed various minor memory leaks (#1023).
iperf 3.8.1 2020-06-10
----------------------
* Notable user-visible changes
* A regression with "make install", where the libiperf shared
library files were not getting installed, has been fixed (#1013 /
#1014).
iperf 3.8 2020-06-08
--------------------
* Notable user-visible changes
* Profiled libraries and binaries are no longer built by default
(#950).
* A minimal Dockerfile has been added (#824).
* A bug with burst mode and unlimited rate has been fixed (#898).
* Configuring with the --enable-static-bin flag will now cause
a statically-linked iperf3 binary to be built (#989).
* Configuring with the --without-sctp flag will now prevent SCTP
from being auto-detected (#1008). This flag allows building a
static binary (see above item) on a CentOS system with SCTP
installed, because no static SCTP libraries are available.
* Clock skew between the iperf3 client and server will no longer
skew the computation of jitter during UDP tests (#842 / #990).
* A possible buffer overflow in the authentication feature has been
fixed. This was only relevant when configuration authentication
using the libiperf3 API, and did not affect command-line usage.
Various other improvements and fixes in this area were also made
(#996).
* Notable developer-visible changes
* The embedded version of cJSON has been updated to 1.7.13 (#978).
* Some server authentication functions have been added to the API
(#911).
* API access has been added to the connection timeout parameter
(#1001).
* Tests for some authentication functions have been added.
* Various compiler errors and warnings have been fixed.
iperf 3.7 2019-06-21
--------------------
* Notable user-visible changes
* Support for simultaneous bidirectional tests with the --bidir flag
(#201/#780).
* Use POSIX standard clock_gettime(3) interface for timekeeping where
available (#253/#738).
* Passwords for authentication can be provided via environment
variable (#815).
* Specifying --repeating-payload and --reverse now works (#867).
* Failed authentication doesn't count for --one-off (#864/#877).
* Several memory leaks related to authenticated use were fixed
(#881/#888).
* The delay for tearing down the control connection for the default
timed tests has been increased, to more gracefully handle
high-delay paths (#751/#859).
* Notable developer-visible changes
* Various improvements to the libiperf APIs (#767, #775, #869, #870,
#871)
* Fixed build behavior when OpenSSL is absent (#854).
* Portability fixes (#821/#874).
iperf 3.6 2018-06-25
--------------------
* Notable user-visible changes
* A new --extra-data option can be used to fill in a user-defined
string field that appears in JSON output. (#600 / #729)
* A new --repeating-payload option makes iperf3 use a payload pattern
similar to that used by iperf2, which could help in recreating
results that might be affected by payload entropy (for example,
compression). (#726)
* -B now works properly with SCTP tests. (#678 / #715)
* A compile fix for Solaris 10 was added. (#711)
* Some minor bug fixes for JSON output. In particular, warnings for
debug and/or verbose modes with --json output (#737) and a fix for
JSON output on CentOS 6 (#727 / #744).
* software.es.net and downloads.es.net now support HTTPS, so URLs in
documentation that refer to those two hosts now use https://
instead of http:// URLs. (#759)
* Notable developer-visible changes
* Functions related to authenticated iperf3 connections have been
exposed via libiperf. (#712 / #713)
* The ToS byte is now exposed in the libiperf API. (#719)
iperf 3.5 2018-03-02
--------------------
* Notable user-visible changes
* iperf3 no longer counts data received after the end of a test in
the bytecounts. This fixes a bug that could, under some
conditions, artificially inflate the transfer size and measured
bitrate. This bug was most noticeable on reverse direction
transfers on short tests over high-latency or buffer-bloated
paths. Many thanks to @FuzzyStatic for providing access to a test
environment for diagnosing this issue (#692).
iperf 3.4 2018-02-14
--------------------
* Notable user-visible changes
* The -A (set processor affinity) command-line flag is now supported
on Windows (#665).
* iperf3 now builds on systems lacking a daemon(3) library call
(#369).
* A bug in time skew checking under authentication was fixed (#674).
* IPv6 flow labels now work correctly with multiple parallel streams
(#694).
* The client no longer closes its control connection before sending
end-of-test statistics to the server (#677). This fixes a
regression introduced in iperf-3.2.
* Sending output to stdout now makes errors go to stderr, as per
UNIX convention (#695).
* A server side crash in verbose output with a client running
multiple parallel connections has been fixed (#686).
* The --cport option can now be specified without the --bind option.
Using the --cport option on Linux can eliminate a problem with
ephemeral port number allocation that can make multi-stream iperf3
tests perform very poorly on LAGG links. Also, the --cport option
now works on SCTP tests (#697).
* Notable developer-visible changes
* iperf3 now builds on (some) macOS systems older than 10.7 (#607).
* Some unused code and header inclusions were eliminated (#667,
#668). Also some code was cleaned up to eliminate (or at least
reduce) compiler warnings (#664, #671).
iperf 3.3 2017-10-31
--------------------
* Notable user-visible changes
* iperf3 can now be built --without-openssl on systems where OpenSSL
is present (#624, #633).
* A bug with printing very large numbers has been fixed (#642).
* A bug where the server would, under certain circumstances, halt a
test after exactly fifteen seconds has been fixed (#645).
* The --tos parameter is no longer "sticky" between tests when doing
--reverse tests (#639).
* The authentication token on the server is properly reset between
tests (#650).
* A bug that could cause iperf3 to overwrite the PID file of an
already-existing iperf3 process has been fixed (#623).
* iperf3 will now ignore nonsensical TCP MSS values (from the TCP
control connection) when trying to determine a reasonable block
size for UDP tests. This condition primarily affected users on
Windows, but potentially improves robustness for all
platforms. (#659)
* Notable developer-visible changes
iperf 3.2 2017-06-26
--------------------
* User-visible changes
* Authentication via a username/password mechanism, coupled with a
public-key pair, is now an optional way of limiting access to an
iperf3 server (#517).
* Ending statistics are less ambiguous for UDP and also now use
correct test durations for all protocols (#560, #238). Many fixes
have been made in statistics printing code, generally for
human-readable output (#562, #575, #252, #443, #236).
* Several problems with the -F/--file options have been fixed.
Documentation has been improved to note some ways in which this
feature might not behave as expected (#588).
* iperf3 now uses the correct "bitrate" phraseology rather than
"bandwidth" when describing measurement results. The --bandwidth
option has been renamed --bitrate, although --bandwidth is still
accepted for backwards compatibility (#583).
* Application-level bandwidth pacing (--bitrate option) is now
checked every millisecond by default, instead of every tenth of
a second, to provide smoother traffic behavior when using
application pacing (#460). The pacing can be tuned via the use of
the --pacing-timer option (#563).
* A new --dscp option allows specifying the DSCP value to be used
for outgoing packets (#508). The TOS byte value is now printed in
the JSON output (#226).
* Congestion window data on FreeBSD is now computed correctly (#465,
#475, #338).
* The T/t suffixes for terabytes/terabits are now accepted for
quantities where suffixes are supported, such as --bandwidth
(#402).
* Sanity checks for UDP send sizes have been added (#390), and
existing checks on the --window option have been improved (#557).
* The TCP rttvar value is now available in the JSON output (#534), as are
the socket buffer sizes (#558).
* Error handling and documentation have been improved for the
-f/--format options (#568).
* A new --connect-timeout option on the client allows specifying a
length of time that the client will attempt to connect to the
server, in milliseconds (#216).
* The hostname and current timestamp are no longer used in the
cookie used to associate the client and server. Instead, random
data is used. Note that iperf3 now requires the /dev/urandom
device (#582).
* Prior versions of iperf3 doing UDP tests used to overcount packet
losses in the presence of packet reordering. This has been
(partially) fixed by try to not count the sequence number gaps
resulting from out-of-order packets as actual losses (#457).
* iperf3 no longer prints results from very small intervals (10% of
the statistics reporting interval) at the end of the test run if
they contain no data. This can happen due to timing difference or
network queueing on the path between the client and server. This
is primarily a cosmetic change to prevent these fairly meaningless
intervals from showing up in the output (#278).
* Compatibility note: Users running iperf3 3.2 or newer from the
bwctl utility will need to obtain version 1.6.3 or newer of bwctl.
Note that bwctl, a component of the perfSONAR toolkit, has been
deprecated in favor of pScheduler since the release of perfSONAR
4.0.
* Developer-visible changes
* Various warnings and build fixes (#551, #564, #518, #597).
* Some improvements have been made for increased compatibility on
IRIX (#368) and with C++ (#587).
* cJSON has been updated to 1.5.2 (#573), bringing in a number of
bugfixes.
* Some dead code has been removed.
iperf 3.1.7 2017-03-06
----------------------
iperf 3.1.7 is functionally identical to iperf 3.1.6. Its only
changes consist of updated documentation files and text in the RPM
spec file.
iperf 3.1.6 2017-02-02
----------------------
The release notes for iperf 3.1.6 describe changes, including bug
fixes and new functionality, made since iperf 3.1.5.
* User-visible changes
* Specifying --fq-rate or --no-fq-socket-pacing on a system where
these options are not supported now generate an error instead of a
warning. This change makes diagnosing issues related to pacing
more apparent.
* Fixed a bug where two recently-added diagnostic messages spammed
the JSON output on UDP tests.
iperf 3.1.5 2017-01-12
----------------------
The release notes for iperf 3.1.5 describe changes, including bug
fixes and new functionality, made since iperf 3.1.4.
Compatibility note: Fair-queueing is now specified differently in
iperf 3.1.5 than in prior versions (which include 3.1.3 and 3.1.4).
Compatibility note: UDP tests may yield different results from all
prior versions of iperf3 (through 3.1.4) due to the new default UDP
sending size.
* User-visible changes
* The fair-queueing per-socket based pacing available on recent
Linux systems has been reimplemented with a different user
interface (#325, #467, #488). The --bandwidth command-line flag
now controls only the application-level pacing, as was the case in
iperf 3.1.2 and all earlier versions. Fair-queueing per-socket
based pacing is now controlled via a new --fq-rate command-line
flag. Note that TCP and UDP tests may use --bandwidth, --fq-rate,
both flags, or neither flag. SCTP tests currently support
--bandwidth only. The --no-fq-socket-pacing flag, which was
introduced in iperf 3.1.3, has now been deprecated, and is
equivalent to --fq-rate=0. iperf3 now reacts more gracefully if
--no-fq-socket-pacing or --fq-rate are specified on platforms that
don't support these options.
For UDP tests, note that the default --bandwidth is 1 Mbps. Using
the fair-queueing-based pacing will probably require explicitly
setting both --bandwidth and --fq-rate, preferably to the same
value. (While setting different values for --bandwidth and
--fq-rate can certainly be done, the results can range from
entertaining to perplexing.)
* iperf3 now chooses a more sane default UDP send size (#496, #498).
The former default (8KB) caused IP packet fragmentation on paths
having smaller MTUs (including any Ethernet network not configured
for jumbo frames). This could have effects ranging from increased
burstiness, to packet loss, to complete failure of the test.
iperf3 now attempts to use the MSS of the control connection to
determine a default UDP send size if no sending length was
explicitly specified with --length.
* Several checks are now made when setting the socket buffer sizes
with the -w option, to verify that the settings have been applied
correctly. The results of these checks can been seen when the
--debug flag is specified. (#356)
* A --forceflush flag has been added to flush the output stream
after every statistics reporting interval.
* Developer-visible changes
* A systemd service file has been added (#340, #430).
iperf 3.1.4 2016-10-31
----------------------
The release notes for iperf 3.1.4 describe changes, including bug
fixes and new functionality, made since iperf 3.1.3.
* User-visible changes
* On systems that support setting the congestion control algorithm,
iperf3 now keeps track of the congestion control algorithm and
print it in the JSON output in the members sender_tcp_congestion
and receiver_tcp_congestion (issue #461). A few bugs (probably
not user-visible) with setting the congestion control algorithm
were also fixed.
* Developer-visible changes
* Fixed a buffer overflow in the cJSON library (issue #466). It is
not believed that this bug created any security vulnerabilities in
the context of iperf3.
* Travis CI builds are now enabled on this codeline (pull request #424).
* Various bug fixes (issue #459, pull request #429, issue #388).
iperf 3.1.3 2016-06-08
----------------------
The release notes for iperf 3.1.3 describe changes, including bug
fixes and new functionality, made since iperf 3.1.2.
* Security
* Fixed a buffer overflow / heap corruption issue that could occur
if a malformed JSON string was passed on the control channel. In
theory, this vulnerability could be leveraged to create a heap
exploit. This issue, present in the cJSON library, was already
fixed upstream, so was addressed in iperf3 by importing a newer
version of cJSON (plus local ESnet modifications). Discovered and
reported by Dave McDaniel, Cisco Talos. Cross-references:
TALOS-CAN-0164, ESNET-SECADV-2016-0001, CVE-2016-4303.
* User-visible changes
* On supported platforms (recent Linux), iperf3 can use
fair-queueing-based per-socket pacing instead of its own
application-level pacing for the --bandwidth option.
Application-level pacing can be forced with the
-no-fq-socket-pacing flag.
* A bug that could show negative loss counters with --udp and --omit
has been fixed (issue #412, pull request #414).
* Error handling has been made slightly more robust. Also, the
iperf3 server will no longer exit after five consecutive errors,
but will only exit for certain types of errors that prevent it
from participating in any tests at all.
* Developer-visible changes
* Fixed the build on FreeBSD 11-CURRENT (issue #413).
* Fixed various coding errors (issue #423, issue #425).
iperf 3.1.2 2016-02-01
----------------------
The release notes for iperf 3.1.2 describe changes, including bug
fixes and new functionality, made since iperf 3.1.1.
* User-visible changes
* Fixed a bug that caused nan values to be emitted (incorrectly)
into JSON, particularly at the end of UDP tests (issue #278).
* Fixed a bug that caused the wrong value to be printed for
out-of-order UDP packets (issue #329).
* Added a contrib/ directory containing a few submitted graphing
scripts.
* Developer-visible changes
iperf 3.1.1 2015-11-19
----------------------
The release notes for iperf 3.1.1 describe changes and new
functionality in iperf 3.1.1, but not present in 3.1.
* User-visible changes
* Some markup fixes have been made in the manpages for Debian
compatibility (issue #291).
* A bug where the -T title option was not being output correctly
in JSON output has been fixed (issue #292).
* Argument handling for some command-line options has been improved
(issue #316).
* Developer-visible changes
* A regression with C++ compatibility in one of the iperf header
files has been fixed (issue #323).
iperf 3.1 2015-10-16
--------------------
The release notes for iperf 3.1 describe changes and new
functionality in iperf 3.1, but not present in 3.0.11 or any earlier
3.0.x release.
* Selected user-visible changes
* SCTP support has been added (with the --sctp flag), on Linux,
FreeBSD, and Solaris (issue #131).
* Setting CPU affinity now works on FreeBSD.
* Selection of TCP congestion now works on FreeBSD, and is now
called --congestion (the old --linux-congestion option works
but is now deprecated).
* A new -I option for the server causes it to write a PID file,
mostly useful for daemon mode (issue #120).
* A --logfile argument can now force all output to go to a file,
rather than to a file. This is especially useful when running an
iperf3 server in daemon mode (issue #119).
* Various compatibility fixes for Android (issue #184, issue #185),
iOS (issue #288), NetBSD (issue #248), Solaris (issue #175, issue
#178, issue #180, issue #211), vxWorks (issue #268).
* A --udp-counters-64bit flag has been added to support very
long-running UDP tests, which could cause a counter to overflow
(issue #191).
* A --cport option to specify the client-side port has been added
(issue #207, issue #209, issue #239).
* Some calculation errors with the -O feature have been fixed (issue
#236).
* A potential crash in the iperf3 server has been fixed (issue #257,
issue #258).
* Many miscellaneous bug fixes.
* Selected developer-visible changes
* Consumers of libiperf can now get the JSON output for a
just-completed test (issue #147).
* Detection of various optional features has been improved to check
for the presence or absence of platform functionality, not the name
of platforms.
* Out-of-tree builds now work (issue #265).
iperf 3.0.11 2015-01-09
-----------------------
* User-visible changes
* Added -1 / --one-off flag, which causes the iperf3 server to
process one client connection and then exit. Intended primarily
for bwctl integration (issue #230).
* Added various minor bug fixes (issues #231, #232, #233).
* Added 30-second timeout for UDP tests if unable to establish UDP
connectivity between sender and receiver (issue #222).
iperf 3.0.10 2014-12-16
-----------------------
* User-visible changes
* Fixed the build on MacOS X Yosemite (issue #213).
* UDP tests now honor the -w option for setting the socket buffer
sizes (issue #219).
* Developer-visible changes
* Added an RPM spec file plus functionality to fill in the version
number.
* Fixed potential filename collision with a system header (issue
#203).
iperf 3.0.9 2014-10-14
----------------------
* User-visible changes
* Fixed a series of problems that came from attempting a UDP test
with a pathologically large block size. This put the server into
an odd state where it could not accept new client connections.
This in turn caused subsequent client connections to crash when
interrupted (issue #212).
* Developer-visible changes
* None.
iperf 3.0.8 2014-09-30
----------------------
* User-visible changes
* Updated license and copyright verbiage to confirm to LBNL Tech
Transfer requirements. No substantive changes; license remains
the 3-clause BSD license.
* Developer-visible changes
* None.
iperf 3.0.7 2014-08-28
----------------------
* User-visible changes
* A server bug where new connections from clients could disrupt
running tests has been fixed (issue #202).
* Rates now consistently use 1000-based prefixes (K, M, G), where
sizes of objects now consistently use 1024-based prefixes (issue #173).
* UDP tests with unlimited bandwidth are now supported (issue #170).
* An interaction between the -w and -B options, which kept them from
working when used together, has been fixed (issue #193).
* Developer-visible changes
iperf 3.0.6 2014-07-28
----------------------
* User-visible changes
* Several bugs that kept the -B option from working in various
circumstances have been fixed (issue #193).
* Various compatibility fixes for OpenBSD (issue #196) and
Solaris (issue #177).
* Developer-visible changes
* The {get,set}_test_bind_address API calls have been added to
expose the -B functionality to API consumers (issue #197).
iperf 3.0.5 2014-06-16
----------------------
* User-visible changes
* Erroneous output when doing --json output has been fixed (this
problem was caused by an attempt to fix issue #158).
* The maximum test running time has been increased from one hour to
one day (issue #166).
* Project documentation has been moved to GitHub Pages at this URL:
http://software.es.net/iperf/.
* A bug that caused CPU time to be computed incorrectly on FreeBSD
has been fixed.
* A timing issue which caused measurement intervals to be wrong
with TCP tests on lossy networks has been fixed (issue #125).
* Newer versions of autoconf / automake / libtool are now used by
default (issue #161).
* JSON output now indicates whether the test was run in --reverse
mode (issue #167).
* It is now possible to get (most of) the server-side output at
the client by using the --get-server-output flag (issue #160).
* Developer-visible changes
* automake/autoconf/libtool have been updated to more recent
versions. AM_MAINTAINER_MODE is now used to avoid requiring these
tools at build-time.
iperf 3.0.4 was not released
----------------------------
iperf 3.0.3 2014-03-26
----------------------
* User-visible changes
* Due to several oversights, the source code archive for iperf 3.0.2
was distributed as an uncompressed tarball, despite having an
extension (".tar.gz") that indicated it was compressed. The
release generation procedure has been changed to avoid this
problem going forward.
* Summary structures in the JSON output are now included, even if
there is only one stream. This change makes consuming the JSON
output easier and more consistent (issue #151).
* A possible buffer overflow in iperf_error.c has been fixed (issue
#155).
* Developer-visible changes
* Example programs now build correctly, after having been broken in
the 3.0.2 release (issue #152).
iperf 3.0.2 2014-03-10
----------------------
* User-visible changes
* The iperf3 project has been moved to GitHub, and various URLs in
documentation files have been changed to point there.
* iperf3 now builds on Linux systems that do not support
TCP_CONGESTION. Most notably this allows iperf3 to work on CentOS
5.
* An abort on MacOS 10.9 has been fixed (issue #135).
* Added -I flag for the server to write a PID file, mostly useful for
daemon mode (issue #120).
* A bug that could break some TCP tests on FreeBSD has been fixed.
* TCP snd_cwnd output is now printed by default on Linux (issue #99).
* In JSON output, the --title string no longer has a colon and two
spaces appended (issue #139).
* A buffer for holding formatted numeric values is now
properly-sized so that output is not truncated (issue #142).
* Developer-visible changes
* Some memory leaks have been fixed.
* A -d flag enables debugging output.
* A .gitignore file has been added.
* libtoolize is now invoked correctly from the bootstrap.sh script.
* The test unit format can now be set from the API (issue #144).
* libiperf is now built as both shared and static libraries.
* In the JSON output, the "connection" structures are now stored as
an array in the "start" block, instead of overwriting each other.
While technically an incompatible API change, the former behavior
generated unusable JSON.
iperf 3.0.1 2014-01-10
----------------------
* Added the following new flags
-D, --daemon run server as a daemon
-L, --flowlabel set IPv6 flow label (Linux only)
-C, --linux-congestion set congestion control algorithm (Linux only)
-k, --blockcount #[KMG] number of blocks (packets) to transmit
(instead of -t or -n)
* Bug fixes
iperf 3.0-RC5 2013-11-15
------------------------
* Added the following new flags
-F, --file name xmit/recv the specified file
-A, --affinity n/n,m set CPU affinity (Linux only)
-J, --json output in JSON format
-Z, --zerocopy use a 'zero copy' method of sending data
-O, --omit N omit the first n seconds
-T, --title str prefix every output line with this string
* more useful information in 'verbose' mode
* Many bug fixes
iperf 3.0b4 2010-08-02
----------------------
* Added support for binding to a specific interface (-B)
* Added support for IPv6 mode (-6)
* Setting TCP window size (-w) is now supported
* Updates to iperf_error
* Added new errors
* Should generate more relevant messages
* Stream list now managed by queue.h macros
* Test structures are now kept intact after a test is run (for API users)
* Improved interval timer granularity
* Support for decimal values
* Many bug fixes
iperf 3.0b3 2010-07-23
----------------------
* Better error handling
* All errors now handled with iperf_error()
* All functions that can return errors return NULL or -1 on error and set i_errno appropriately
* Iperf API introduced
* Support for adding new protocols
* Added support for callback functions
* on_connect - executes after a connection is made to the server
* on_new_stream - executes after a new stream is created
* on_test_start - executes right before the test begins
* on_test_finish - executes after the test is finished
* Added early support for verbose mode (-V)
iperf 3.0b2 2010-07-15
----------------------
* UDP mode now supported
* Support for setting bandwidth (-b)
* Parallel UDP stream support
* Reverse mode UDP support
* Support for setting TCP_NODELAY (-N), disabling Nagle's Algorithm
* Support for setting TCP MSS (-M)
* Note: This feature is still in development. It is still very buggy.
iperf 3.0b1 2010-07-08
----------------------
* TCP control socket now manages messages between client and server
* Dynamic server (gets test parameters from client)
* Server can now set test options dynamically without having to restart.
* Currently supported options: -l, -t, -n, -P, -R
* Future options: -u, -b, -w, -M, -N, -I, -T, -Z, -6
* Results exchange
* Client can now see server results (and vice versa)
* Reverse mode (-R)
* Server sends, client receives
================================================
FILE: aclocal.m4
================================================
# generated automatically by aclocal 1.18.1 -*- Autoconf -*-
# Copyright (C) 1996-2025 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
m4_ifndef([AC_AUTOCONF_VERSION],
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.72],,
[m4_warning([this file was generated for autoconf 2.72.
You have another version of autoconf. It may work, but is not guaranteed to.
If you have problems, you may need to regenerate the build system entirely.
To do so, use the procedure documented by the package, typically 'autoreconf'.])])
# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
#
# Copyright (C) 1996-2001, 2003-2019, 2021-2024 Free Software
# Foundation, Inc.
# Written by Gordon Matzigkeit, 1996
#
# This file is free software; the Free Software Foundation gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
m4_define([_LT_COPYING], [dnl
# Copyright (C) 2024 Free Software Foundation, Inc.
# This is free software; see the source for copying conditions. There is NO
# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# GNU Libtool is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program or library that is built
# using GNU Libtool, you may include this file under the same
# distribution terms that you use for the rest of that program.
#
# GNU Libtool is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
])
# serial 63 LT_INIT
# LT_PREREQ(VERSION)
# ------------------
# Complain and exit if this libtool version is less that VERSION.
m4_defun([LT_PREREQ],
[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
[m4_default([$3],
[m4_fatal([Libtool version $1 or higher is required],
63)])],
[$2])])
# _LT_CHECK_BUILDDIR
# ------------------
# Complain if the absolute build directory name contains unusual characters
m4_defun([_LT_CHECK_BUILDDIR],
[case `pwd` in
*\ * | *\ *)
AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
esac
])
# LT_INIT([OPTIONS])
# ------------------
AC_DEFUN([LT_INIT],
[AC_PREREQ([2.64])dnl We use AC_PATH_PROGS_FEATURE_CHECK
AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
AC_BEFORE([$0], [LT_LANG])dnl
AC_BEFORE([$0], [LT_OUTPUT])dnl
AC_BEFORE([$0], [LTDL_INIT])dnl
m4_require([_LT_CHECK_BUILDDIR])dnl
dnl Autoconf doesn't catch unexpanded LT_ macros by default:
m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
dnl unless we require an AC_DEFUNed macro:
AC_REQUIRE([LTOPTIONS_VERSION])dnl
AC_REQUIRE([LTSUGAR_VERSION])dnl
AC_REQUIRE([LTVERSION_VERSION])dnl
AC_REQUIRE([LTOBSOLETE_VERSION])dnl
m4_require([_LT_PROG_LTMAIN])dnl
_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}])
dnl Parse OPTIONS
_LT_SET_OPTIONS([$0], [$1])
# This can be used to rebuild libtool when needed
LIBTOOL_DEPS=$ltmain
# Always use our own libtool.
LIBTOOL='$(SHELL) $(top_builddir)/libtool'
AC_SUBST(LIBTOOL)dnl
_LT_SETUP
# Only expand once:
m4_define([LT_INIT])
])# LT_INIT
# Old names:
AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
# _LT_PREPARE_CC_BASENAME
# -----------------------
m4_defun([_LT_PREPARE_CC_BASENAME], [
# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
func_cc_basename ()
{
for cc_temp in @S|@*""; do
case $cc_temp in
compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
\-*) ;;
*) break;;
esac
done
func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
}
])# _LT_PREPARE_CC_BASENAME
# _LT_CC_BASENAME(CC)
# -------------------
# It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME,
# but that macro is also expanded into generated libtool script, which
# arranges for $SED and $ECHO to be set by different means.
m4_defun([_LT_CC_BASENAME],
[m4_require([_LT_PREPARE_CC_BASENAME])dnl
AC_REQUIRE([_LT_DECL_SED])dnl
AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
func_cc_basename $1
cc_basename=$func_cc_basename_result
])
# _LT_FILEUTILS_DEFAULTS
# ----------------------
# It is okay to use these file commands and assume they have been set
# sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'.
m4_defun([_LT_FILEUTILS_DEFAULTS],
[: ${CP="cp -f"}
: ${MV="mv -f"}
: ${RM="rm -f"}
])# _LT_FILEUTILS_DEFAULTS
# _LT_SETUP
# ---------
m4_defun([_LT_SETUP],
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
AC_REQUIRE([AC_CANONICAL_BUILD])dnl
AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl
AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl
dnl
_LT_DECL([], [host_alias], [0], [The host system])dnl
_LT_DECL([], [host], [0])dnl
_LT_DECL([], [host_os], [0])dnl
dnl
_LT_DECL([], [build_alias], [0], [The build system])dnl
_LT_DECL([], [build], [0])dnl
_LT_DECL([], [build_os], [0])dnl
dnl
AC_REQUIRE([AC_PROG_CC])dnl
AC_REQUIRE([LT_PATH_LD])dnl
AC_REQUIRE([LT_PATH_NM])dnl
dnl
AC_REQUIRE([AC_PROG_LN_S])dnl
test -z "$LN_S" && LN_S="ln -s"
_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
dnl
AC_REQUIRE([LT_CMD_MAX_LEN])dnl
_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
dnl
m4_require([_LT_FILEUTILS_DEFAULTS])dnl
m4_require([_LT_CHECK_SHELL_FEATURES])dnl
m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
m4_require([_LT_CMD_RELOAD])dnl
m4_require([_LT_DECL_FILECMD])dnl
m4_require([_LT_CHECK_MAGIC_METHOD])dnl
m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
m4_require([_LT_CMD_OLD_ARCHIVE])dnl
m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
m4_require([_LT_WITH_SYSROOT])dnl
m4_require([_LT_CMD_TRUNCATE])dnl
_LT_CONFIG_LIBTOOL_INIT([
# See if we are running on zsh, and set the options that allow our
# commands through without removal of \ escapes INIT.
if test -n "\${ZSH_VERSION+set}"; then
setopt NO_GLOB_SUBST
fi
])
if test -n "${ZSH_VERSION+set}"; then
setopt NO_GLOB_SUBST
fi
_LT_CHECK_OBJDIR
m4_require([_LT_TAG_COMPILER])dnl
case $host_os in
aix3*)
# AIX sometimes has problems with the GCC collect2 program. For some
# reason, if we set the COLLECT_NAMES environment variable, the problems
# vanish in a puff of smoke.
if test set != "${COLLECT_NAMES+set}"; then
COLLECT_NAMES=
export COLLECT_NAMES
fi
;;
esac
# Global variables:
ofile=libtool
can_build_shared=yes
# All known linkers require a '.a' archive for static linking (except MSVC and
# ICC, which need '.lib').
libext=a
with_gnu_ld=$lt_cv_prog_gnu_ld
old_CC=$CC
old_CFLAGS=$CFLAGS
# Set sane defaults for various variables
test -z "$CC" && CC=cc
test -z "$LTCC" && LTCC=$CC
test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
test -z "$LD" && LD=ld
test -z "$ac_objext" && ac_objext=o
_LT_CC_BASENAME([$compiler])
# Only perform the check for file, if the check method requires it
test -z "$MAGIC_CMD" && MAGIC_CMD=file
case $deplibs_check_method in
file_magic*)
if test "$file_magic_cmd" = '$MAGIC_CMD'; then
_LT_PATH_MAGIC
fi
;;
esac
# Use C for the default configuration in the libtool script
LT_SUPPORTED_TAG([CC])
_LT_LANG_C_CONFIG
_LT_LANG_DEFAULT_CONFIG
_LT_CONFIG_COMMANDS
])# _LT_SETUP
# _LT_PREPARE_SED_QUOTE_VARS
# --------------------------
# Define a few sed substitution that help us do robust quoting.
m4_defun([_LT_PREPARE_SED_QUOTE_VARS],
[# Backslashify metacharacters that are still active within
# double-quoted strings.
sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
# Same as above, but do not quote variable references.
double_quote_subst='s/\([["`\\]]\)/\\\1/g'
# Sed substitution to delay expansion of an escaped shell variable in a
# double_quote_subst'ed string.
delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
# Sed substitution to delay expansion of an escaped single quote.
delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
# Sed substitution to avoid accidental globbing in evaled expressions
no_glob_subst='s/\*/\\\*/g'
])
# _LT_PROG_LTMAIN
# ---------------
# Note that this code is called both from 'configure', and 'config.status'
# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably,
# 'config.status' has no value for ac_aux_dir unless we are using Automake,
# so we pass a copy along to make sure it has a sensible value anyway.
m4_defun([_LT_PROG_LTMAIN],
[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
ltmain=$ac_aux_dir/ltmain.sh
])# _LT_PROG_LTMAIN
# So that we can recreate a full libtool script including additional
# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
# in macros and then make a single call at the end using the 'libtool'
# label.
# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
# ----------------------------------------
# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
m4_define([_LT_CONFIG_LIBTOOL_INIT],
[m4_ifval([$1],
[m4_append([_LT_OUTPUT_LIBTOOL_INIT],
[$1
])])])
# Initialize.
m4_define([_LT_OUTPUT_LIBTOOL_INIT])
# _LT_CONFIG_LIBTOOL([COMMANDS])
# ------------------------------
# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
m4_define([_LT_CONFIG_LIBTOOL],
[m4_ifval([$1],
[m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
[$1
])])])
# Initialize.
m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
# -----------------------------------------------------
m4_defun([_LT_CONFIG_SAVE_COMMANDS],
[_LT_CONFIG_LIBTOOL([$1])
_LT_CONFIG_LIBTOOL_INIT([$2])
])
# _LT_FORMAT_COMMENT([COMMENT])
# -----------------------------
# Add leading comment marks to the start of each line, and a trailing
# full-stop to the whole comment if one is not present already.
m4_define([_LT_FORMAT_COMMENT],
[m4_ifval([$1], [
m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
[['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
)])
# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
# -------------------------------------------------------------------
# CONFIGNAME is the name given to the value in the libtool script.
# VARNAME is the (base) name used in the configure script.
# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
# VARNAME. Any other value will be used directly.
m4_define([_LT_DECL],
[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
[lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
[m4_ifval([$1], [$1], [$2])])
lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
m4_ifval([$4],
[lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
lt_dict_add_subkey([lt_decl_dict], [$2],
[tagged?], [m4_ifval([$5], [yes], [no])])])
])
# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
# --------------------------------------------------------
m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
# ------------------------------------------------
m4_define([lt_decl_tag_varnames],
[_lt_decl_filter([tagged?], [yes], $@)])
# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
# ---------------------------------------------------------
m4_define([_lt_decl_filter],
[m4_case([$#],
[0], [m4_fatal([$0: too few arguments: $#])],
[1], [m4_fatal([$0: too few arguments: $#: $1])],
[2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
[3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
[lt_dict_filter([lt_decl_dict], $@)])[]dnl
])
# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
# --------------------------------------------------
m4_define([lt_decl_quote_varnames],
[_lt_decl_filter([value], [1], $@)])
# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
# ---------------------------------------------------
m4_define([lt_decl_dquote_varnames],
[_lt_decl_filter([value], [2], $@)])
# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
# ---------------------------------------------------
m4_define([lt_decl_varnames_tagged],
[m4_assert([$# <= 2])dnl
_$0(m4_quote(m4_default([$1], [[, ]])),
m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
m4_define([_lt_decl_varnames_tagged],
[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
# ------------------------------------------------
m4_define([lt_decl_all_varnames],
[_$0(m4_quote(m4_default([$1], [[, ]])),
m4_if([$2], [],
m4_quote(lt_decl_varnames),
m4_quote(m4_shift($@))))[]dnl
])
m4_define([_lt_decl_all_varnames],
[lt_join($@, lt_decl_varnames_tagged([$1],
lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
])
# _LT_CONFIG_STATUS_DECLARE([VARNAME])
# ------------------------------------
# Quote a variable value, and forward it to 'config.status' so that its
# declaration there will have the same value as in 'configure'. VARNAME
# must have a single quote delimited value for this to work.
m4_define([_LT_CONFIG_STATUS_DECLARE],
[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`'])
# _LT_CONFIG_STATUS_DECLARATIONS
# ------------------------------
# We delimit libtool config variables with single quotes, so when
# we write them to config.status, we have to be sure to quote all
# embedded single quotes properly. In configure, this macro expands
# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
#
# <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`'
m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
[m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
# _LT_LIBTOOL_TAGS
# ----------------
# Output comment and list of tags supported by the script
m4_defun([_LT_LIBTOOL_TAGS],
[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
available_tags='_LT_TAGS'dnl
])
# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
# -----------------------------------
# Extract the dictionary values for VARNAME (optionally with TAG) and
# expand to a commented shell variable setting:
#
# # Some comment about what VAR is for.
# visible_name=$lt_internal_name
m4_define([_LT_LIBTOOL_DECLARE],
[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
[description])))[]dnl
m4_pushdef([_libtool_name],
m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
[0], [_libtool_name=[$]$1],
[1], [_libtool_name=$lt_[]$1],
[2], [_libtool_name=$lt_[]$1],
[_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
])
# _LT_LIBTOOL_CONFIG_VARS
# -----------------------
# Produce commented declarations of non-tagged libtool config variables
# suitable for insertion in the LIBTOOL CONFIG section of the 'libtool'
# script. Tagged libtool config variables (even for the LIBTOOL CONFIG
# section) are produced by _LT_LIBTOOL_TAG_VARS.
m4_defun([_LT_LIBTOOL_CONFIG_VARS],
[m4_foreach([_lt_var],
m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
[m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
# _LT_LIBTOOL_TAG_VARS(TAG)
# -------------------------
m4_define([_LT_LIBTOOL_TAG_VARS],
[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
[m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
# _LT_TAGVAR(VARNAME, [TAGNAME])
# ------------------------------
m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
# _LT_CONFIG_COMMANDS
# -------------------
# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of
# variables for single and double quote escaping we saved from calls
# to _LT_DECL, we can put quote escaped variables declarations
# into 'config.status', and then the shell code to quote escape them in
# for loops in 'config.status'. Finally, any additional code accumulated
# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
m4_defun([_LT_CONFIG_COMMANDS],
[AC_PROVIDE_IFELSE([LT_OUTPUT],
dnl If the libtool generation code has been placed in $CONFIG_LT,
dnl instead of duplicating it all over again into config.status,
dnl then we will have config.status run $CONFIG_LT later, so it
dnl needs to know what name is stored there:
[AC_CONFIG_COMMANDS([libtool],
[$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
dnl If the libtool generation code is destined for config.status,
dnl expand the accumulated commands and init code now:
[AC_CONFIG_COMMANDS([libtool],
[_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
])#_LT_CONFIG_COMMANDS
# Initialize.
m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
[
# The HP-UX ksh and POSIX shell print the target directory to stdout
# if CDPATH is set.
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
sed_quote_subst='$sed_quote_subst'
double_quote_subst='$double_quote_subst'
delay_variable_subst='$delay_variable_subst'
_LT_CONFIG_STATUS_DECLARATIONS
LTCC='$LTCC'
LTCFLAGS='$LTCFLAGS'
compiler='$compiler_DEFAULT'
# A function that is used when there is no print builtin or printf.
func_fallback_echo ()
{
eval 'cat <<_LTECHO_EOF
\$[]1
_LTECHO_EOF'
}
# Quote evaled strings.
for var in lt_decl_all_varnames([[ \
]], lt_decl_quote_varnames); do
case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
*[[\\\\\\\`\\"\\\$]]*)
eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
;;
*)
eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
;;
esac
done
# Double-quote double-evaled strings.
for var in lt_decl_all_varnames([[ \
]], lt_decl_dquote_varnames); do
case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
*[[\\\\\\\`\\"\\\$]]*)
eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
;;
*)
eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
;;
esac
done
_LT_OUTPUT_LIBTOOL_INIT
])
# _LT_GENERATED_FILE_INIT(FILE, [COMMENT])
# ------------------------------------
# Generate a child script FILE with all initialization necessary to
# reuse the environment learned by the parent script, and make the
# file executable. If COMMENT is supplied, it is inserted after the
# '#!' sequence but before initialization text begins. After this
# macro, additional text can be appended to FILE to form the body of
# the child script. The macro ends with non-zero status if the
# file could not be fully written (such as if the disk is full).
m4_ifdef([AS_INIT_GENERATED],
[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])],
[m4_defun([_LT_GENERATED_FILE_INIT],
[m4_require([AS_PREPARE])]dnl
[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl
[lt_write_fail=0
cat >$1 <<_ASEOF || lt_write_fail=1
#! $SHELL
# Generated by $as_me.
$2
SHELL=\${CONFIG_SHELL-$SHELL}
export SHELL
_ASEOF
cat >>$1 <<\_ASEOF || lt_write_fail=1
AS_SHELL_SANITIZE
_AS_PREPARE
exec AS_MESSAGE_FD>&1
_ASEOF
test 0 = "$lt_write_fail" && chmod +x $1[]dnl
m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT
# LT_OUTPUT
# ---------
# This macro allows early generation of the libtool script (before
# AC_OUTPUT is called), in case it is used in configure for compilation
# tests.
AC_DEFUN([LT_OUTPUT],
[: ${CONFIG_LT=./config.lt}
AC_MSG_NOTICE([creating $CONFIG_LT])
_LT_GENERATED_FILE_INIT(["$CONFIG_LT"],
[# Run this file to recreate a libtool stub with the current configuration.])
cat >>"$CONFIG_LT" <<\_LTEOF
lt_cl_silent=false
exec AS_MESSAGE_LOG_FD>>config.log
{
echo
AS_BOX([Running $as_me.])
} >&AS_MESSAGE_LOG_FD
lt_cl_help="\
'$as_me' creates a local libtool stub from the current configuration,
for use in further configure time tests before the real libtool is
generated.
Usage: $[0] [[OPTIONS]]
-h, --help print this help, then exit
-V, --version print version number, then exit
-q, --quiet do not print progress messages
-d, --debug don't remove temporary files
Report bugs to <bug-libtool@gnu.org>."
lt_cl_version="\
m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
configured by $[0], generated by m4_PACKAGE_STRING.
Copyright (C) 2024 Free Software Foundation, Inc.
This config.lt script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
while test 0 != $[#]
do
case $[1] in
--version | --v* | -V )
echo "$lt_cl_version"; exit 0 ;;
--help | --h* | -h )
echo "$lt_cl_help"; exit 0 ;;
--debug | --d* | -d )
debug=: ;;
--quiet | --q* | --silent | --s* | -q )
lt_cl_silent=: ;;
-*) AC_MSG_ERROR([unrecognized option: $[1]
Try '$[0] --help' for more information.]) ;;
*) AC_MSG_ERROR([unrecognized argument: $[1]
Try '$[0] --help' for more information.]) ;;
esac
shift
done
if $lt_cl_silent; then
exec AS_MESSAGE_FD>/dev/null
fi
_LTEOF
cat >>"$CONFIG_LT" <<_LTEOF
_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
_LTEOF
cat >>"$CONFIG_LT" <<\_LTEOF
AC_MSG_NOTICE([creating $ofile])
_LT_OUTPUT_LIBTOOL_COMMANDS
AS_EXIT(0)
_LTEOF
chmod +x "$CONFIG_LT"
# configure is writing to config.log, but config.lt does its own redirection,
# appending to config.log, which fails on DOS, as config.log is still kept
# open by configure. Here we exec the FD to /dev/null, effectively closing
# config.log, so it can be properly (re)opened and appended to by config.lt.
lt_cl_success=:
test yes = "$silent" &&
lt_config_lt_args="$lt_config_lt_args --quiet"
exec AS_MESSAGE_LOG_FD>/dev/null
$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
exec AS_MESSAGE_LOG_FD>>config.log
$lt_cl_success || AS_EXIT(1)
])# LT_OUTPUT
# _LT_CONFIG(TAG)
# ---------------
# If TAG is the built-in tag, create an initial libtool script with a
# default configuration from the untagged config vars. Otherwise add code
# to config.status for appending the configuration named by TAG from the
# matching tagged config vars.
m4_defun([_LT_CONFIG],
[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
_LT_CONFIG_SAVE_COMMANDS([
m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
m4_if(_LT_TAG, [C], [
# See if we are running on zsh, and set the options that allow our
# commands through without removal of \ escapes.
if test -n "${ZSH_VERSION+set}"; then
setopt NO_GLOB_SUBST
fi
cfgfile=${ofile}T
trap "$RM \"$cfgfile\"; exit 1" 1 2 15
$RM "$cfgfile"
cat <<_LT_EOF >> "$cfgfile"
#! $SHELL
# Generated automatically by $as_me ($PACKAGE) $VERSION
# NOTE: Changes made to this file will be lost: look at ltmain.sh.
# Provide generalized library-building support services.
# Written by Gordon Matzigkeit, 1996
_LT_COPYING
_LT_LIBTOOL_TAGS
# Configured defaults for sys_lib_dlsearch_path munging.
: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"}
# ### BEGIN LIBTOOL CONFIG
_LT_LIBTOOL_CONFIG_VARS
_LT_LIBTOOL_TAG_VARS
# ### END LIBTOOL CONFIG
_LT_EOF
cat <<'_LT_EOF' >> "$cfgfile"
# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE
_LT_PREPARE_MUNGE_PATH_LIST
_LT_PREPARE_CC_BASENAME
# ### END FUNCTIONS SHARED WITH CONFIGURE
_LT_EOF
case $host_os in
aix3*)
cat <<\_LT_EOF >> "$cfgfile"
# AIX sometimes has problems with the GCC collect2 program. For some
# reason, if we set the COLLECT_NAMES environment variable, the problems
# vanish in a puff of smoke.
if test set != "${COLLECT_NAMES+set}"; then
COLLECT_NAMES=
export COLLECT_NAMES
fi
_LT_EOF
;;
esac
_LT_PROG_LTMAIN
# We use sed instead of cat because bash on DJGPP gets confused if
# if finds mixed CR/LF and LF-only lines. Since sed operates in
# text mode, it properly converts lines to CR/LF. This bash problem
# is reportedly fixed, but why not run on old versions too?
$SED '$q' "$ltmain" >> "$cfgfile" \
|| (rm -f "$cfgfile"; exit 1)
mv -f "$cfgfile" "$ofile" ||
(rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
chmod +x "$ofile"
],
[cat <<_LT_EOF >> "$ofile"
dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
dnl in a comment (ie after a #).
# ### BEGIN LIBTOOL TAG CONFIG: $1
_LT_LIBTOOL_TAG_VARS(_LT_TAG)
# ### END LIBTOOL TAG CONFIG: $1
_LT_EOF
])dnl /m4_if
],
[m4_if([$1], [], [
PACKAGE='$PACKAGE'
VERSION='$VERSION'
RM='$RM'
ofile='$ofile'], [])
])dnl /_LT_CONFIG_SAVE_COMMANDS
])# _LT_CONFIG
# LT_SUPPORTED_TAG(TAG)
# ---------------------
# Trace this macro to discover what tags are supported by the libtool
# --tag option, using:
# autoconf --trace 'LT_SUPPORTED_TAG:$1'
AC_DEFUN([LT_SUPPORTED_TAG], [])
# C support is built-in for now
m4_define([_LT_LANG_C_enabled], [])
m4_define([_LT_TAGS], [])
# LT_LANG(LANG)
# -------------
# Enable libtool support for the given language if not already enabled.
AC_DEFUN([LT_LANG],
[AC_BEFORE([$0], [LT_OUTPUT])dnl
m4_case([$1],
[C], [_LT_LANG(C)],
[C++], [_LT_LANG(CXX)],
[Go], [_LT_LANG(GO)],
[Java], [_LT_LANG(GCJ)],
[Fortran 77], [_LT_LANG(F77)],
[Fortran], [_LT_LANG(FC)],
[Windows Resource], [_LT_LANG(RC)],
[m4_ifdef([_LT_LANG_]$1[_CONFIG],
[_LT_LANG($1)],
[m4_fatal([$0: unsupported language: "$1"])])])dnl
])# LT_LANG
# _LT_LANG(LANGNAME)
# ------------------
m4_defun([_LT_LANG],
[m4_ifdef([_LT_LANG_]$1[_enabled], [],
[LT_SUPPORTED_TAG([$1])dnl
m4_append([_LT_TAGS], [$1 ])dnl
m4_define([_LT_LANG_]$1[_enabled], [])dnl
_LT_LANG_$1_CONFIG($1)])dnl
])# _LT_LANG
m4_ifndef([AC_PROG_GO], [
# NOTE: This macro has been submitted for inclusion into #
# GNU Autoconf as AC_PROG_GO. When it is available in #
# a released version of Autoconf we should remove this #
# macro and use it instead. #
m4_defun([AC_PROG_GO],
[AC_LANG_PUSH(Go)dnl
AC_ARG_VAR([GOC], [Go compiler command])dnl
AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl
_AC_ARG_VAR_LDFLAGS()dnl
AC_CHECK_TOOL(GOC, gccgo)
if test -z "$GOC"; then
if test -n "$ac_tool_prefix"; then
AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo])
fi
fi
if test -z "$GOC"; then
AC_CHECK_PROG(GOC, gccgo, gccgo, false)
fi
])#m4_defun
])#m4_ifndef
# _LT_LANG_DEFAULT_CONFIG
# -----------------------
m4_defun([_LT_LANG_DEFAULT_CONFIG],
[AC_PROVIDE_IFELSE([AC_PROG_CXX],
[LT_LANG(CXX)],
[m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
AC_PROVIDE_IFELSE([AC_PROG_F77],
[LT_LANG(F77)],
[m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
AC_PROVIDE_IFELSE([AC_PROG_FC],
[LT_LANG(FC)],
[m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
dnl pulling things in needlessly.
AC_PROVIDE_IFELSE([AC_PROG_GCJ],
[LT_LANG(GCJ)],
[AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
[LT_LANG(GCJ)],
[AC_PROVIDE_IFELSE([LT_PROG_GCJ],
[LT_LANG(GCJ)],
[m4_ifdef([AC_PROG_GCJ],
[m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
m4_ifdef([A][M_PROG_GCJ],
[m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
m4_ifdef([LT_PROG_GCJ],
[m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
AC_PROVIDE_IFELSE([AC_PROG_GO],
[LT_LANG(GO)],
[m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])])
AC_PROVIDE_IFELSE([LT_PROG_RC],
[LT_LANG(RC)],
[m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
])# _LT_LANG_DEFAULT_CONFIG
# Obsolete macros:
AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
dnl AC_DEFUN([AC_LIBTOOL_F77], [])
dnl AC_DEFUN([AC_LIBTOOL_FC], [])
dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
dnl AC_DEFUN([AC_LIBTOOL_RC], [])
# _LT_TAG_COMPILER
# ----------------
m4_defun([_LT_TAG_COMPILER],
[AC_REQUIRE([AC_PROG_CC])dnl
_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
# If no C compiler was specified, use CC.
LTCC=${LTCC-"$CC"}
# If no C compiler flags were specified, use CFLAGS.
LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
# Allow CC to be a program name with arguments.
compiler=$CC
])# _LT_TAG_COMPILER
# _LT_COMPILER_BOILERPLATE
# ------------------------
# Check for compiler boilerplate output or warnings with
# the simple compiler test code.
m4_defun([_LT_COMPILER_BOILERPLATE],
[m4_require([_LT_DECL_SED])dnl
ac_outfile=conftest.$ac_objext
echo "$lt_simple_compile_test_code" >conftest.$ac_ext
eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
_lt_compiler_boilerplate=`cat conftest.err`
$RM conftest*
])# _LT_COMPILER_BOILERPLATE
# _LT_LINKER_BOILERPLATE
# ----------------------
# Check for linker boilerplate output or warnings with
# the simple link test code.
m4_defun([_LT_LINKER_BOILERPLATE],
[m4_require([_LT_DECL_SED])dnl
ac_outfile=conftest.$ac_objext
echo "$lt_simple_link_test_code" >conftest.$ac_ext
eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
_lt_linker_boilerplate=`cat conftest.err`
$RM -r conftest*
])# _LT_LINKER_BOILERPLATE
# _LT_REQUIRED_DARWIN_CHECKS
# -------------------------
m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
case $host_os in
rhapsody* | darwin*)
AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
AC_CHECK_TOOL([LIPO], [lipo], [:])
AC_CHECK_TOOL([OTOOL], [otool], [:])
AC_CHECK_TOOL([OTOOL64], [otool64], [:])
_LT_DECL([], [DSYMUTIL], [1],
[Tool to manipulate archived DWARF debug symbol files on Mac OS X])
_LT_DECL([], [NMEDIT], [1],
[Tool to change global to local symbols on Mac OS X])
_LT_DECL([], [LIPO], [1],
[Tool to manipulate fat objects and archives on Mac OS X])
_LT_DECL([], [OTOOL], [1],
[ldd/readelf like tool for Mach-O binaries on Mac OS X])
_LT_DECL([], [OTOOL64], [1],
[ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
[lt_cv_apple_cc_single_mod=no
if test -z "$LT_MULTI_MODULE"; then
# By default we will add the -single_module flag. You can override
# by either setting the environment variable LT_MULTI_MODULE
# non-empty at configure time, or by adding -multi_module to the
# link flags.
rm -rf libconftest.dylib*
echo "int foo(void){return 1;}" > conftest.c
echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
-dynamiclib -Wl,-single_module conftest.c 2>conftest.err
_lt_result=$?
# If there is a non-empty error log, and "single_module"
# appears in it, assume the flag caused a linker warning
if test -s conftest.err && $GREP single_module conftest.err; then
cat conftest.err >&AS_MESSAGE_LOG_FD
# Otherwise, if the output was created with a 0 exit code from
# the compiler, it worked.
elif test -f libconftest.dylib && test 0 = "$_lt_result"; then
lt_cv_apple_cc_single_mod=yes
else
cat conftest.err >&AS_MESSAGE_LOG_FD
fi
rm -rf libconftest.dylib*
rm -f conftest.*
fi])
# Feature test to disable chained fixups since it is not
# compatible with '-undefined dynamic_lookup'
AC_CACHE_CHECK([for -no_fixup_chains linker flag],
[lt_cv_support_no_fixup_chains],
[ save_LDFLAGS=$LDFLAGS
LDFLAGS="$LDFLAGS -Wl,-no_fixup_chains"
AC_LINK_IFELSE(
[AC_LANG_PROGRAM([],[])],
lt_cv_support_no_fixup_chains=yes,
lt_cv_support_no_fixup_chains=no
)
LDFLAGS=$save_LDFLAGS
]
)
AC_CACHE_CHECK([for -exported_symbols_list linker flag],
[lt_cv_ld_exported_symbols_list],
[lt_cv_ld_exported_symbols_list=no
save_LDFLAGS=$LDFLAGS
echo "_main" > conftest.sym
LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
[lt_cv_ld_exported_symbols_list=yes],
[lt_cv_ld_exported_symbols_list=no])
LDFLAGS=$save_LDFLAGS
])
AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
[lt_cv_ld_force_load=no
cat > conftest.c << _LT_EOF
int forced_loaded() { return 2;}
_LT_EOF
echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD
$LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
echo "$AR $AR_FLAGS libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
$AR $AR_FLAGS libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
$RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
cat > conftest.c << _LT_EOF
int main(void) { return 0;}
_LT_EOF
echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD
$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
_lt_result=$?
if test -s conftest.err && $GREP force_load conftest.err; then
cat conftest.err >&AS_MESSAGE_LOG_FD
elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then
lt_cv_ld_force_load=yes
else
cat conftest.err >&AS_MESSAGE_LOG_FD
fi
rm -f conftest.err libconftest.a conftest conftest.c
rm -rf conftest.dSYM
])
case $host_os in
rhapsody* | darwin1.[[012]])
_lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
darwin1.*)
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
darwin*)
case $MACOSX_DEPLOYMENT_TARGET,$host in
10.[[012]],*|,*powerpc*-darwin[[5-8]]*)
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
*)
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup'
if test yes = "$lt_cv_support_no_fixup_chains"; then
AS_VAR_APPEND([_lt_dar_allow_undefined], [' $wl-no_fixup_chains'])
fi
;;
esac
;;
esac
if test yes = "$lt_cv_apple_cc_single_mod"; then
_lt_dar_single_mod='$single_module'
fi
_lt_dar_needs_single_mod=no
case $host_os in
rhapsody* | darwin1.*)
_lt_dar_needs_single_mod=yes ;;
darwin*)
# When targeting Mac OS X 10.4 (darwin 8) or later,
# -single_module is the default and -multi_module is unsupported.
# The toolchain on macOS 10.14 (darwin 18) and later cannot
# target any OS version that needs -single_module.
case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
10.0,*-darwin[[567]].*|10.[[0-3]],*-darwin[[5-9]].*|10.[[0-3]],*-darwin1[[0-7]].*)
_lt_dar_needs_single_mod=yes ;;
esac
;;
esac
if test yes = "$lt_cv_ld_exported_symbols_list"; then
_lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym'
else
_lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib'
fi
if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then
_lt_dsymutil='~$DSYMUTIL $lib || :'
else
_lt_dsymutil=
fi
;;
esac
])
# _LT_DARWIN_LINKER_FEATURES([TAG])
# ---------------------------------
# Checks for linker and compiler features on darwin
m4_defun([_LT_DARWIN_LINKER_FEATURES],
[
m4_require([_LT_REQUIRED_DARWIN_CHECKS])
_LT_TAGVAR(archive_cmds_need_lc, $1)=no
_LT_TAGVAR(hardcode_direct, $1)=no
_LT_TAGVAR(hardcode_automatic, $1)=yes
_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
if test yes = "$lt_cv_ld_force_load"; then
_LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes],
[FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes])
else
_LT_TAGVAR(whole_archive_flag_spec, $1)=''
fi
_LT_TAGVAR(link_all_deplibs, $1)=yes
_LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined
case $cc_basename in
ifort*|nagfor*) _lt_dar_can_shared=yes ;;
*) _lt_dar_can_shared=$GCC ;;
esac
if test yes = "$_lt_dar_can_shared"; then
output_verbose_link_cmd=func_echo_all
_LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
_LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
_LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
_LT_TAGVAR(module_expsym_cmds, $1)="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
m4_if([$1], [CXX],
[ if test yes = "$_lt_dar_needs_single_mod" -a yes != "$lt_cv_apple_cc_single_mod"; then
_LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil"
_LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
fi
],[])
else
_LT_TAGVAR(ld_shlibs, $1)=no
fi
])
# _LT_SYS_MODULE_PATH_AIX([TAGNAME])
# ----------------------------------
# Links a minimal program and checks the executable
# for the system default hardcoded library path. In most cases,
# this is /usr/lib:/lib, but when the MPI compilers are used
# the location of the communication and MPI libs are included too.
# If we don't find anything, use the default library path according
# to the aix ld manual.
# Store the results from the different compilers for each TAGNAME.
# Allow to override them for all tags through lt_cv_aix_libpath.
m4_defun([_LT_SYS_MODULE_PATH_AIX],
[m4_require([_LT_DECL_SED])dnl
if test set = "${lt_cv_aix_libpath+set}"; then
aix_libpath=$lt_cv_aix_libpath
else
AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
[AC_LINK_IFELSE([AC_LANG_PROGRAM],[
lt_aix_libpath_sed='[
/Import File Strings/,/^$/ {
/^0/ {
s/^0 *\([^ ]*\) *$/\1/
p
}
}]'
_LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
# Check for a 64-bit object if we didn't find anything.
if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
_LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
fi],[])
if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
_LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib
fi
])
aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
fi
])# _LT_SYS_MODULE_PATH_AIX
# _LT_SHELL_INIT(ARG)
# -------------------
m4_define([_LT_SHELL_INIT],
[m4_divert_text([M4SH-INIT], [$1
])])# _LT_SHELL_INIT
# _LT_PROG_ECHO_BACKSLASH
# -----------------------
# Find how we can fake an echo command that does not interpret backslash.
# In particular, with Autoconf 2.60 or later we add some code to the start
# of the generated configure script that will find a shell with a builtin
# printf (that we can use as an echo command).
m4_defun([_LT_PROG_ECHO_BACKSLASH],
[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
AC_MSG_CHECKING([how to print strings])
# Test print first, because it will be a builtin if present.
if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
ECHO='print -r --'
elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
ECHO='printf %s\n'
else
# Use this function as a fallback that always works.
func_fallback_echo ()
{
eval 'cat <<_LTECHO_EOF
$[]1
_LTECHO_EOF'
}
ECHO='func_fallback_echo'
fi
# func_echo_all arg...
# Invoke $ECHO with all args, space-separated.
func_echo_all ()
{
$ECHO "$*"
}
case $ECHO in
printf*) AC_MSG_RESULT([printf]) ;;
print*) AC_MSG_RESULT([print -r]) ;;
*) AC_MSG_RESULT([cat]) ;;
esac
m4_ifdef([_AS_DETECT_SUGGESTED],
[_AS_DETECT_SUGGESTED([
test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || (
ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
PATH=/empty FPATH=/empty; export PATH FPATH
test "X`printf %s $ECHO`" = "X$ECHO" \
|| test "X`print -r -- $ECHO`" = "X$ECHO" )])])
_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
])# _LT_PROG_ECHO_BACKSLASH
# _LT_WITH_SYSROOT
# ----------------
AC_DEFUN([_LT_WITH_SYSROOT],
[m4_require([_LT_DECL_SED])dnl
AC_MSG_CHECKING([for sysroot])
AC_ARG_WITH([sysroot],
[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@],
[Search for dependent libraries within DIR (or the compiler's sysroot
if not specified).])],
[], [with_sysroot=no])
dnl lt_sysroot will always be passed unquoted. We quote it here
dnl in case the user passed a directory name.
lt_sysroot=
case $with_sysroot in #(
yes)
if test yes = "$GCC"; then
# Trim trailing / since we'll always append absolute paths and we want
# to avoid //, if only for less confusing output for the user.
lt_sysroot=`$CC --print-sysroot 2>/dev/null | $SED 's:/\+$::'`
fi
;; #(
/*)
lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"`
;; #(
no|'')
;; #(
*)
AC_MSG_RESULT([$with_sysroot])
AC_MSG_ERROR([The sysroot must be an absolute path.])
;;
esac
AC_MSG_RESULT([${lt_sysroot:-no}])
_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
[dependent libraries, and where our libraries should be installed.])])
# _LT_ENABLE_LOCK
# ---------------
m4_defun([_LT_ENABLE_LOCK],
[AC_ARG_ENABLE([libtool-lock],
[AS_HELP_STRING([--disable-libtool-lock],
[avoid locking (might break parallel builds)])])
test no = "$enable_libtool_lock" || enable_libtool_lock=yes
# Some flags need to be propagated to the compiler or linker for good
# libtool support.
case $host in
ia64-*-hpux*)
# Find out what ABI is being produced by ac_compile, and set mode
# options accordingly.
echo 'int i;' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
case `$FILECMD conftest.$ac_objext` in
*ELF-32*)
HPUX_IA64_MODE=32
;;
*ELF-64*)
HPUX_IA64_MODE=64
;;
esac
fi
rm -rf conftest*
;;
*-*-irix6*)
# Find out what ABI is being produced by ac_compile, and set linker
# options accordingly.
echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
if test yes = "$lt_cv_prog_gnu_ld"; then
case `$FILECMD conftest.$ac_objext` in
*32-bit*)
LD="${LD-ld} -melf32bsmip"
;;
*N32*)
LD="${LD-ld} -melf32bmipn32"
;;
*64-bit*)
LD="${LD-ld} -melf64bmip"
;;
esac
else
case `$FILECMD conftest.$ac_objext` in
*32-bit*)
LD="${LD-ld} -32"
;;
*N32*)
LD="${LD-ld} -n32"
;;
*64-bit*)
LD="${LD-ld} -64"
;;
esac
fi
fi
rm -rf conftest*
;;
mips64*-*linux*)
# Find out what ABI is being produced by ac_compile, and set linker
# options accordingly.
echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
emul=elf
case `$FILECMD conftest.$ac_objext` in
*32-bit*)
emul="${emul}32"
;;
*64-bit*)
emul="${emul}64"
;;
esac
case `$FILECMD conftest.$ac_objext` in
*MSB*)
emul="${emul}btsmip"
;;
*LSB*)
emul="${emul}ltsmip"
;;
esac
case `$FILECMD conftest.$ac_objext` in
*N32*)
emul="${emul}n32"
;;
esac
LD="${LD-ld} -m $emul"
fi
rm -rf conftest*
;;
x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
s390*-*linux*|s390*-*tpf*|sparc*-*linux*|x86_64-gnu*)
# Find out what ABI is being produced by ac_compile, and set linker
# options accordingly. Note that the listed cases only cover the
# situations where additional linker options are needed (such as when
# doing 32-bit compilation for a host where ld defaults to 64-bit, or
# vice versa); the common cases where no linker options are needed do
# not appear in the list.
echo 'int i;' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
case `$FILECMD conftest.o` in
*32-bit*)
case $host in
x86_64-*kfreebsd*-gnu)
LD="${LD-ld} -m elf_i386_fbsd"
;;
x86_64-*linux*|x86_64-gnu*)
case `$FILECMD conftest.o` in
*x86-64*)
LD="${LD-ld} -m elf32_x86_64"
;;
*)
LD="${LD-ld} -m elf_i386"
;;
esac
;;
powerpc64le-*linux*)
LD="${LD-ld} -m elf32lppclinux"
;;
powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
;;
s390x-*linux*)
LD="${LD-ld} -m elf_s390"
;;
sparc64-*linux*)
LD="${LD-ld} -m elf32_sparc"
;;
esac
;;
*64-bit*)
case $host in
x86_64-*kfreebsd*-gnu)
LD="${LD-ld} -m elf_x86_64_fbsd"
;;
x86_64-*linux*|x86_64-gnu*)
LD="${LD-ld} -m elf_x86_64"
;;
powerpcle-*linux*)
LD="${LD-ld} -m elf64lppc"
;;
powerpc-*linux*)
LD="${LD-ld} -m elf64ppc"
;;
s390*-*linux*|s390*-*tpf*)
LD="${LD-ld} -m elf64_s390"
;;
sparc*-*linux*)
LD="${LD-ld} -m elf64_sparc"
;;
esac
;;
esac
fi
rm -rf conftest*
;;
*-*-sco3.2v5*)
# On SCO OpenServer 5, we need -belf to get full-featured binaries.
SAVE_CFLAGS=$CFLAGS
CFLAGS="$CFLAGS -belf"
AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
[AC_LANG_PUSH(C)
AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
AC_LANG_POP])
if test yes != "$lt_cv_cc_needs_belf"; then
# this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
CFLAGS=$SAVE_CFLAGS
fi
;;
*-*solaris*)
# Find out what ABI is being produced by ac_compile, and set linker
# options accordingly.
echo 'int i;' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
case `$FILECMD conftest.o` in
*64-bit*)
case $lt_cv_prog_gnu_ld in
yes*)
case $host in
i?86-*-solaris*|x86_64-*-solaris*)
LD="${LD-ld} -m elf_x86_64"
;;
sparc*-*-solaris*)
LD="${LD-ld} -m elf64_sparc"
;;
esac
# GNU ld 2.21 introduced _sol2 emulations. Use them if available.
if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
LD=${LD-ld}_sol2
fi
;;
*)
if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
LD="${LD-ld} -64"
fi
;;
esac
;;
esac
fi
rm -rf conftest*
;;
esac
need_locks=$enable_libtool_lock
])# _LT_ENABLE_LOCK
# _LT_PROG_AR
# -----------
m4_defun([_LT_PROG_AR],
[AC_CHECK_TOOLS(AR, [ar], false)
: ${AR=ar}
_LT_DECL([], [AR], [1], [The archiver])
# Use ARFLAGS variable as AR's operation code to sync the variable naming with
# Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have
# higher priority because that's what people were doing historically (setting
# ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS
# variable obsoleted/removed.
test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr}
lt_ar_flags=$AR_FLAGS
_LT_DECL([], [lt_ar_flags], [0], [Flags to create an archive (by configure)])
# Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override
# by AR_FLAGS because that was never working and AR_FLAGS is about to die.
_LT_DECL([], [AR_FLAGS], [\@S|@{ARFLAGS-"\@S|@lt_ar_flags"}],
[Flags to create an archive])
AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
[lt_cv_ar_at_file=no
AC_COMPILE_IFELSE([AC_LANG_PROGRAM],
[echo conftest.$ac_objext > conftest.lst
lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'
AC_TRY_EVAL([lt_ar_try])
if test 0 -eq "$ac_status"; then
# Ensure the archiver fails upon bogus file names.
rm -f conftest.$ac_objext libconftest.a
AC_TRY_EVAL([lt_ar_try])
if test 0 -ne "$ac_status"; then
lt_cv_ar_at_file=@
fi
fi
rm -f conftest.* libconftest.a
])
])
if test no = "$lt_cv_ar_at_file"; then
archiver_list_spec=
else
archiver_list_spec=$lt_cv_ar_at_file
fi
_LT_DECL([], [archiver_list_spec], [1],
[How to feed a file listing to the archiver])
])# _LT_PROG_AR
# _LT_CMD_OLD_ARCHIVE
# -------------------
m4_defun([_LT_CMD_OLD_ARCHIVE],
[_LT_PROG_AR
AC_CHECK_TOOL(STRIP, strip, :)
test -z "$STRIP" && STRIP=:
_LT_DECL([], [STRIP], [1], [A symbol stripping program])
AC_REQUIRE([AC_PROG_RANLIB])
test -z "$RANLIB" && RANLIB=:
_LT_DECL([], [RANLIB], [1],
[Commands used to install an old-style archive])
# Determine commands to create old-style static archives.
old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
old_postinstall_cmds='chmod 644 $oldlib'
old_postuninstall_cmds=
if test -n "$RANLIB"; then
old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
fi
case $host_os in
darwin*)
lock_old_archive_extraction=yes ;;
*)
lock_old_archive_extraction=no ;;
esac
_LT_DECL([], [old_postinstall_cmds], [2])
_LT_DECL([], [old_postuninstall_cmds], [2])
_LT_TAGDECL([], [old_archive_cmds], [2],
[Commands used to build an old-style archive])
_LT_DECL([], [lock_old_archive_extraction], [0],
[Whether to use a lock for old archive extraction])
])# _LT_CMD_OLD_ARCHIVE
# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
# ----------------------------------------------------------------
# Check whether the given compiler option works
AC_DEFUN([_LT_COMPILER_OPTION],
[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
m4_require([_LT_DECL_SED])dnl
AC_CACHE_CHECK([$1], [$2],
[$2=no
m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
echo "$lt_simple_compile_test_code" > conftest.$ac_ext
lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment
# Insert the option either (1) after the last *FLAGS variable, or
# (2) before a word containing "conftest.", or (3) at the end.
# Note that $ac_compile itself does not contain backslashes and begins
# with a dollar sign (not a hyphen), so the echo should work correctly.
# The option is referenced via a variable to avoid confusing sed.
lt_compile=`echo "$ac_compile" | $SED \
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
(eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&AS_MESSAGE_LOG_FD
echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
$ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
$SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
$2=yes
fi
fi
$RM conftest*
])
if test yes = "[$]$2"; then
m4_if([$5], , :, [$5])
else
m4_if([$6], , :, [$6])
fi
])# _LT_COMPILER_OPTION
# Old name:
AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
# [ACTION-SUCCESS], [ACTION-FAILURE])
# ----------------------------------------------------
# Check whether the given linker option works
AC_DEFUN([_LT_LINKER_OPTION],
[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
m4_require([_LT_DECL_SED])dnl
AC_CACHE_CHECK([$1], [$2],
[$2=no
save_LDFLAGS=$LDFLAGS
LDFLAGS="$LDFLAGS $3"
echo "$lt_simple_link_test_code" > conftest.$ac_ext
if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
# The linker can only warn and ignore the option if not recognized
# So say no if there are warnings
if test -s conftest.err; then
# Append any errors to the config.log.
cat conftest.err 1>&AS_MESSAGE_LOG_FD
$ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
$SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
if diff conftest.exp conftest.er2 >/dev/null; then
$2=yes
fi
else
$2=yes
fi
fi
$RM -r conftest*
LDFLAGS=$save_LDFLAGS
])
if test yes = "[$]$2"; then
m4_if([$4], , :, [$4])
else
m4_if([$5], , :, [$5])
fi
])# _LT_LINKER_OPTION
# Old name:
AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
# LT_CMD_MAX_LEN
#---------------
AC_DEFUN([LT_CMD_MAX_LEN],
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
# find the maximum length of command line arguments
AC_MSG_CHECKING([the maximum length of command line arguments])
AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
i=0
teststring=ABCD
case $build_os in
msdosdjgpp*)
# On DJGPP, this test can blow up pretty badly due to problems in libc
# (any single argument exceeding 2000 bytes causes a buffer overrun
# during glob expansion). Even if it were fixed, the result of this
# check would be larger than it should be.
lt_cv_sys_max_cmd_len=12288; # 12K is about right
;;
gnu* | ironclad*)
# Under GNU Hurd and Ironclad, this test is not required because there
# is no limit to the length of command line arguments.
# Libtool will interpret -1 as no limit whatsoever
lt_cv_sys_max_cmd_len=-1;
;;
cygwin* | mingw* | windows* | cegcc*)
# On Win9x/ME, this test blows up -- it succeeds, but takes
# about 5 minutes as the teststring grows exponentially.
# Worse, since 9x/ME are not pre-emptively multitasking,
# you end up with a "frozen" computer, even though with patience
# the test eventually succeeds (with a max line length of 256k).
# Instead, let's just punt: use the minimum linelength reported by
# all of the supported platforms: 8192 (on NT/2K/XP).
lt_cv_sys_max_cmd_len=8192;
;;
mint*)
# On MiNT this can take a long time and run out of memory.
lt_cv_sys_max_cmd_len=8192;
;;
amigaos*)
# On AmigaOS with pdksh, this test takes hours, literally.
# So we just punt and use a minimum line length of 8192.
lt_cv_sys_max_cmd_len=8192;
;;
darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*)
# This has been around since 386BSD, at least. Likely further.
if test -x /sbin/sysctl; then
lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
elif test -x /usr/sbin/sysctl; then
lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
else
lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
fi
# And add a safety zone
lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
;;
interix*)
# We know the value 262144 and hardcode it with a safety zone (like BSD)
lt_cv_sys_max_cmd_len=196608
;;
os2*)
# The test takes a long time on OS/2.
lt_cv_sys_max_cmd_len=8192
;;
osf*)
# Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
# due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
# nice to cause kernel panics so lets avoid the loop below.
# First set a reasonable default.
lt_cv_sys_max_cmd_len=16384
#
if test -x /sbin/sysconfig; then
case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
*1*) lt_cv_sys_max_cmd_len=-1 ;;
esac
fi
;;
sco3.2v5*)
lt_cv_sys_max_cmd_len=102400
;;
sysv5* | sco5v6* | sysv4.2uw2*)
kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
if test -n "$kargmax"; then
lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[[ ]]//'`
else
lt_cv_sys_max_cmd_len=32768
fi
;;
*)
lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
if test -n "$lt_cv_sys_max_cmd_len" && \
test undefined != "$lt_cv_sys_max_cmd_len"; then
lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
else
# Make teststring a little bigger before we do anything with it.
# a 1K string should be a reasonable start.
for i in 1 2 3 4 5 6 7 8; do
teststring=$teststring$teststring
done
SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
# If test is not a shell built-in, we'll probably end up computing a
# maximum length that is only half of the actual maximum length, but
# we can't tell.
while { test X`env echo "$teststring$teststring" 2>/dev/null` \
= "X$teststring$teststring"; } >/dev/null 2>&1 &&
test 17 != "$i" # 1/2 MB should be enough
do
i=`expr $i + 1`
teststring=$teststring$teststring
done
# Only check the string length outside the loop.
lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
teststring=
# Add a significant safety factor because C++ compilers can tack on
# massive amounts of additional arguments before passing them to the
# linker. It appears as though 1/2 is a usable value.
lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
fi
;;
esac
])
if test -n "$lt_cv_sys_max_cmd_len"; then
AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
else
AC_MSG_RESULT(none)
fi
max_cmd_len=$lt_cv_sys_max_cmd_len
_LT_DECL([], [max_cmd_len], [0],
[What is the maximum length of a command?])
])# LT_CMD_MAX_LEN
# Old name:
AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
# _LT_HEADER_DLFCN
# ----------------
m4_defun([_LT_HEADER_DLFCN],
[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
])# _LT_HEADER_DLFCN
# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
# ----------------------------------------------------------------
m4_defun([_LT_TRY_DLOPEN_SELF],
[m4_require([_LT_HEADER_DLFCN])dnl
if test yes = "$cross_compiling"; then :
[$4]
else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
[#line $LINENO "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
#include <dlfcn.h>
#endif
#include <stdio.h>
#ifdef RTLD_GLOBAL
# define LT_DLGLOBAL RTLD_GLOBAL
#else
# ifdef DL_GLOBAL
# define LT_DLGLOBAL DL_GLOBAL
# else
# define LT_DLGLOBAL 0
# endif
#endif
/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
find out it does not work in some platform. */
#ifndef LT_DLLAZY_OR_NOW
# ifdef RTLD_LAZY
# define LT_DLLAZY_OR_NOW RTLD_LAZY
# else
# ifdef DL_LAZY
# define LT_DLLAZY_OR_NOW DL_LAZY
# else
# ifdef RTLD_NOW
# define LT_DLLAZY_OR_NOW RTLD_NOW
# else
# ifdef DL_NOW
# define LT_DLLAZY_OR_NOW DL_NOW
# else
# define LT_DLLAZY_OR_NOW 0
# endif
# endif
# endif
# endif
#endif
/* When -fvisibility=hidden is used, assume the code has been annotated
correspondingly for the symbols needed. */
#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
int fnord (void) __attribute__((visibility("default")));
#endif
int fnord (void) { return 42; }
int main (void)
{
void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
int status = $lt_dlunknown;
if (self)
{
if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
else
{
if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
else puts (dlerror ());
}
/* dlclose (self); */
}
else
puts (dlerror ());
return status;
}]
_LT_EOF
if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then
(./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
lt_status=$?
case x$lt_status in
x$lt_dlno_uscore) $1 ;;
x$lt_dlneed_uscore) $2 ;;
x$lt_dlunknown|x*) $3 ;;
esac
else :
# compilation failed
$3
fi
fi
rm -fr conftest*
])# _LT_TRY_DLOPEN_SELF
# LT_SYS_DLOPEN_SELF
# ------------------
AC_DEFUN([LT_SYS_DLOPEN_SELF],
[m4_require([_LT_HEADER_DLFCN])dnl
if test yes != "$enable_dlopen"; then
enable_dlopen=unknown
enable_dlopen_self=unknown
enable_dlopen_self_static=unknown
else
lt_cv_dlopen=no
lt_cv_dlopen_libs=
case $host_os in
beos*)
lt_cv_dlopen=load_add_on
lt_cv_dlopen_libs=
lt_cv_dlopen_self=yes
;;
mingw* | windows* | pw32* | cegcc*)
lt_cv_dlopen=LoadLibrary
lt_cv_dlopen_libs=
;;
cygwin*)
lt_cv_dlopen=dlopen
lt_cv_dlopen_libs=
;;
darwin*)
# if libdl is installed we need to link against it
AC_CHECK_LIB([dl], [dlopen],
[lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[
lt_cv_dlopen=dyld
lt_cv_dlopen_libs=
lt_cv_dlopen_self=yes
])
;;
tpf*)
# Don't try to run any link tests for TPF. We know it's impossible
# because TPF is a cross-compiler, and we know how we open DSOs.
lt_cv_dlopen=dlopen
lt_cv_dlopen_libs=
lt_cv_dlopen_self=no
;;
*)
AC_CHECK_FUNC([shl_load],
[lt_cv_dlopen=shl_load],
[AC_CHECK_LIB([dld], [shl_load],
[lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld],
[AC_CHECK_FUNC([dlopen],
[lt_cv_dlopen=dlopen],
[AC_CHECK_LIB([dl], [dlopen],
[lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],
[AC_CHECK_LIB([svld], [dlopen],
[lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld],
[AC_CHECK_LIB([dld], [dld_link],
[lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld])
])
])
])
])
])
;;
esac
if test no = "$lt_cv_dlopen"; then
enable_dlopen=no
else
enable_dlopen=yes
fi
case $lt_cv_dlopen in
dlopen)
save_CPPFLAGS=$CPPFLAGS
test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
save_LDFLAGS=$LDFLAGS
wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
save_LIBS=$LIBS
LIBS="$lt_cv_dlopen_libs $LIBS"
AC_CACHE_CHECK([whether a program can dlopen itself],
lt_cv_dlopen_self, [dnl
_LT_TRY_DLOPEN_SELF(
lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
])
if test yes = "$lt_cv_dlopen_self"; then
wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
lt_cv_dlopen_self_static, [dnl
_LT_TRY_DLOPEN_SELF(
lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross)
])
fi
CPPFLAGS=$save_CPPFLAGS
LDFLAGS=$save_LDFLAGS
LIBS=$save_LIBS
;;
esac
case $lt_cv_dlopen_self in
yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
*) enable_dlopen_self=unknown ;;
esac
case $lt_cv_dlopen_self_static in
yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
*) enable_dlopen_self_static=unknown ;;
esac
fi
_LT_DECL([dlopen_support], [enable_dlopen], [0],
[Whether dlopen is supported])
_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
[Whether dlopen of programs is supported])
_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
[Whether dlopen of statically linked programs is supported])
])# LT_SYS_DLOPEN_SELF
# Old name:
AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
# _LT_COMPILER_C_O([TAGNAME])
# ---------------------------
# Check to see if options -c and -o are simultaneously supported by compiler.
# This macro does not hard code the compiler like AC_PROG_CC_C_O.
m4_defun([_LT_COMPILER_C_O],
[m4_require([_LT_DECL_SED])dnl
m4_require([_LT_FILEUTILS_DEFAULTS])dnl
m4_require([_LT_TAG_COMPILER])dnl
AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
[_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
[_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
$RM -r conftest 2>/dev/null
mkdir conftest
cd conftest
mkdir out
echo "$lt_simple_compile_test_code" > conftest.$ac_ext
lt_compiler_flag="-o out/conftest2.$ac_objext"
# Insert the option either (1) after the last *FLAGS variable, or
# (2) before a word containing "conftest.", or (3) at the end.
# Note that $ac_compile itself does not contain backslashes and begins
# with a dollar sign (not a hyphen), so the echo should work correctly.
lt_compile=`echo "$ac_compile" | $SED \
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
(eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&AS_MESSAGE_LOG_FD
echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings
$ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
$SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
fi
fi
chmod u+w . 2>&AS_MESSAGE_LOG_FD
$RM conftest*
# SGI C++ compiler will create directory out/ii_files/ for
# template instantiation
test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
$RM out/* && rmdir out
cd ..
$RM -r conftest
$RM conftest*
])
_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
[Does compiler simultaneously support -c and -o options?])
])# _LT_COMPILER_C_O
# _LT_COMPILER_FILE_LOCKS([TAGNAME])
# ----------------------------------
# Check to see if we can do hard links to lock some files if needed
m4_defun([_LT_COMPILER_FILE_LOCKS],
[m4_require([_LT_ENABLE_LOCK])dnl
m4_require([_LT_FILEUTILS_DEFAULTS])dnl
_LT_COMPILER_C_O([$1])
hard_links=nottested
if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then
# do not overwrite the value of need_locks provided by the user
AC_MSG_CHECKING([if we can lock with hard links])
hard_links=yes
$RM conftest*
ln conftest.a conftest.b 2>/dev/null && hard_links=no
touch conftest.a
ln conftest.a conftest.b 2>&5 || hard_links=no
ln conftest.a conftest.b 2>/dev/null && hard_links=no
AC_MSG_RESULT([$hard_links])
if test no = "$hard_links"; then
AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe])
need_locks=warn
fi
else
need_locks=no
fi
_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
])# _LT_COMPILER_FILE_LOCKS
# _LT_CHECK_OBJDIR
# ----------------
m4_defun([_LT_CHECK_OBJDIR],
[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
[rm -f .libs 2>/dev/null
mkdir .libs 2>/dev/null
if test -d .libs; then
lt_cv_objdir=.libs
else
# MS-DOS does not allow filenames that begin with a dot.
lt_cv_objdir=_libs
fi
rmdir .libs 2>/dev/null])
objdir=$lt_cv_objdir
_LT_DECL([], [objdir], [0],
[The name of the directory that contains temporary libtool files])dnl
m4_pattern_allow([LT_OBJDIR])dnl
AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/",
[Define to the sub-directory where libtool stores uninstalled libraries.])
])# _LT_CHECK_OBJDIR
# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
# --------------------------------------
# Check hardcoding attributes.
m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
[AC_MSG_CHECKING([how to hardcode library paths into programs])
_LT_TAGVAR(hardcode_action, $1)=
if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
test -n "$_LT_TAGVAR(runpath_var, $1)" ||
test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then
# We can hardcode non-existent directories.
if test no != "$_LT_TAGVAR(hardcode_direct, $1)" &&
# If the only mechanism to avoid hardcoding is shlibpath_var, we
# have to relink, otherwise we might link with an installed library
# when we should be linking with a yet-to-be-installed one
## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" &&
test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then
# Linking always hardcodes the temporary library directory.
_LT_TAGVAR(hardcode_action, $1)=relink
else
# We can link without hardcoding, and we can hardcode nonexisting dirs.
_LT_TAGVAR(hardcode_action, $1)=immediate
fi
else
# We cannot hardcode anything, or else we can only hardcode existing
# directories.
_LT_TAGVAR(hardcode_action, $1)=unsupported
fi
AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
if test relink = "$_LT_TAGVAR(hardcode_action, $1)" ||
test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then
# Fast installation is not supported
enable_fast_install=no
elif test yes = "$shlibpath_overrides_runpath" ||
test no = "$enable_shared"; then
# Fast installation is not necessary
enable_fast_install=needless
fi
_LT_TAGDECL([], [hardcode_action], [0],
[How to hardcode a shared library path into an executable])
])# _LT_LINKER_HARDCODE_LIBPATH
# _LT_CMD_STRIPLIB
# ----------------
m4_defun([_LT_CMD_STRIPLIB],
[m4_require([_LT_DECL_EGREP])
striplib=
old_striplib=
AC_MSG_CHECKING([whether stripping libraries is possible])
if test -z "$STRIP"; then
AC_MSG_RESULT([no])
else
if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
old_striplib="$STRIP --strip-debug"
striplib="$STRIP --strip-unneeded"
AC_MSG_RESULT([yes])
else
case $host_os in
darwin*)
# FIXME - insert some real tests, host_os isn't really good enough
striplib="$STRIP -x"
old_striplib="$STRIP -S"
AC_MSG_RESULT([yes])
;;
freebsd*)
if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then
old_striplib="$STRIP --strip-debug"
striplib="$STRIP --strip-unneeded"
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
fi
;;
*)
AC_MSG_RESULT([no])
;;
esac
fi
fi
_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
_LT_DECL([], [striplib], [1])
])# _LT_CMD_STRIPLIB
# _LT_PREPARE_MUNGE_PATH_LIST
# ---------------------------
# Make sure func_munge_path_list() is defined correctly.
m4_defun([_LT_PREPARE_MUNGE_PATH_LIST],
[[# func_munge_path_list VARIABLE PATH
# -----------------------------------
# VARIABLE is name of variable containing _space_ separated list of
# directories to be munged by the contents of PATH, which is string
# having a format:
# "DIR[:DIR]:"
# string "DIR[ DIR]" will be prepended to VARIABLE
# ":DIR[:DIR]"
# string "DIR[ DIR]" will be appended to VARIABLE
# "DIRP[:DIRP]::[DIRA:]DIRA"
# string "DIRP[ DIRP]" will be prepended to VARIABLE and string
# "DIRA[ DIRA]" will be appended to VARIABLE
# "DIR[:DIR]"
# VARIABLE will be replaced by "DIR[ DIR]"
func_munge_path_list ()
{
case x@S|@2 in
x)
;;
*:)
eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\"
;;
x:*)
eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\"
;;
*::*)
eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\"
;;
*)
eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\"
;;
esac
}
]])# _LT_PREPARE_PATH_LIST
# _LT_SYS_DYNAMIC_LINKER([TAG])
# -----------------------------
# PORTME Fill in your ld.so characteristics
m4_defun([_LT_SYS_DYNAMIC_LINKER],
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
m4_require([_LT_DECL_EGREP])dnl
m4_require([_LT_FILEUTILS_DEFAULTS])dnl
m4_require([_LT_DECL_OBJDUMP])dnl
m4_require([_LT_DECL_SED])dnl
m4_require([_LT_CHECK_SHELL_FEATURES])dnl
m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl
AC_MSG_CHECKING([dynamic linker characteristics])
m4_if([$1],
[], [
if test yes = "$GCC"; then
case $host_os in
darwin*) lt_awk_arg='/^libraries:/,/LR/' ;;
*) lt_awk_arg='/^libraries:/' ;;
esac
case $host_os in
mingw* | windows* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;;
*) lt_sed_strip_eq='s|=/|/|g' ;;
esac
lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
case $lt_search_path_spec in
*\;*)
# if the path contains ";" then we assume it to be the separator
# otherwise default to the standard path separator (i.e. ":") - it is
# assumed that no part of a normal pathname contains ";" but that should
# okay in the real world where ";" in dirpaths is itself problematic.
lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
;;
*)
lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
;;
esac
# Ok, now we have the path, separated by spaces, we can step through it
# and add multilib dir if necessary...
lt_tmp_lt_search_path_spec=
lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
# ...but if some path component already ends with the multilib dir we assume
# that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer).
case "$lt_multi_os_dir; $lt_search_path_spec " in
"/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*)
lt_multi_os_dir=
;;
esac
for lt_sys_path in $lt_search_path_spec; do
if test -d "$lt_sys_path$lt_multi_os_dir"; then
lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir"
elif test -n "$lt_multi_os_dir"; then
test -d "$lt_sys_path" && \
lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
fi
done
lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
BEGIN {RS = " "; FS = "/|\n";} {
lt_foo = "";
lt_count = 0;
for (lt_i = NF; lt_i > 0; lt_i--) {
if ($lt_i != "" && $lt_i != ".") {
if ($lt_i == "..") {
lt_count++;
} else {
if (lt_count == 0) {
lt_foo = "/" $lt_i lt_foo;
} else {
lt_count--;
}
}
}
}
if (lt_foo != "") { lt_freq[[lt_foo]]++; }
if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
}'`
# AWK program above erroneously prepends '/' to C:/dos/paths
# for these hosts.
case $host_os in
mingw* | windows* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
$SED 's|/\([[A-Za-z]]:\)|\1|g'` ;;
esac
sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
else
sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
fi])
library_names_spec=
libname_spec='lib$name'
soname_spec=
shrext_cmds=.so
postinstall_cmds=
postuninstall_cmds=
finish_cmds=
finish_eval=
shlibpath_var=
shlibpath_overrides_runpath=unknown
version_type=none
dynamic_linker="$host_os ld.so"
sys_lib_dlsearch_path_spec="/lib /usr/lib"
need_lib_prefix=unknown
hardcode_into_libs=no
# when you set need_version to no, make sure it does not cause -set_version
# flags to be left without arguments
need_version=unknown
AC_ARG_VAR([LT_SYS_LIBRARY_PATH],
[User-defined run-time library search path.])
case $host_os in
aix3*)
version_type=linux # correct to gnu/linux during the next big refactor
library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
shlibpath_var=LIBPATH
# AIX 3 has no versioning support, so we append a major version to the name.
soname_spec='$libname$release$shared_ext$major'
;;
aix[[4-9]]*)
version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
hardcode_into_libs=yes
if test ia64 = "$host_cpu"; then
# AIX 5 supports IA64
library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
shlibpath_var=LD_LIBRARY_PATH
else
# With GCC up to 2.95.x, collect2 would create an import file
# for dependence libraries. The import file would start with
# the line '#! .'. This would cause the generated library to
# depend on '.', always an invalid library. This was fixed in
# development snapshots of GCC prior to 3.0.
case $host_os in
aix4 | aix4.[[01]] | aix4.[[01]].*)
if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
echo ' yes '
echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
:
else
can_build_shared=no
fi
;;
esac
# Using Import Files as archive members, it is possible to support
# filename-based versioning of shared library archives on AIX. While
# this would work for both with and without runtime linking, it will
# prevent static linking of such archives. So we do filename-based
# shared library versioning with .so extension only, which is used
# when both runtime linking and shared linking is enabled.
# Unfortunately, runtime linking may impact performance, so we do
# not want this to be the default eventually. Also, we use the
# versioned .so libs for executables only if there is the -brtl
# linker flag in LDFLAGS as well, or --enable-aix-soname=svr4 only.
# To allow for filename-based versioning support, we need to create
# libNAME.so.V as an archive file, containing:
# *) an Import File, referring to the versioned filename of the
# archive as well as the shared archive member, telling the
# bitwidth (32 or 64) of that shared object, and providing the
# list of exported symbols of that shared object, eventually
# decorated with the 'weak' keyword
# *) the shared object with the F_LOADONLY flag set, to really avoid
# it being seen by the linker.
# At run time we better use the real file rather than another symlink,
# but for link time we create the symlink libNAME.so -> libNAME.so.V
case $with_aix_soname,$aix_use_runtimelinking in
# AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
# soname into executable. Probably we can add versioning support to
# collect2, so additional links can be useful in future.
aix,yes) # traditional libtool
dynamic_linker='AIX unversionable lib.so'
# If using run time linking (on AIX 4.2 or later) use lib<name>.so
# instead of lib<name>.a to let people know that these are not
# typical AIX shared libraries.
library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
;;
aix,no) # traditional AIX only
dynamic_linker='AIX lib.a[(]lib.so.V[)]'
# We preserve .a as extension for shared libraries through AIX4.2
# and later when we are not doing run time linking.
library_names_spec='$libname$release.a $libname.a'
soname_spec='$libname$release$shared_ext$major'
;;
svr4,*) # full svr4 only
dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]"
library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
# We do not specify a path in Import Files, so LIBPATH fires.
shlibpath_overrides_runpath=yes
;;
*,yes) # both, prefer svr4
dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]"
library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
# unpreferred sharedlib libNAME.a needs extra handling
postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
# We do not specify a path in Import Files, so LIBPATH fires.
shlibpath_overrides_runpath=yes
;;
*,no) # both, prefer aix
dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]"
library_names_spec='$libname$release.a $libname.a'
soname_spec='$libname$release$shared_ext$major'
# unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
;;
esac
shlibpath_var=LIBPATH
fi
;;
amigaos*)
case $host_cpu in
powerpc)
# Since July 2007 AmigaOS4 officially supports .so libraries.
# When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
;;
m68k)
library_names_spec='$libname.ixlibrary $libname.a'
# Create ${libname}_ixlibrary.a entries in /sys/libs.
finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
;;
esac
;;
beos*)
library_names_spec='$libname$shared_ext'
dynamic_linker="$host_os ld.so"
shlibpath_var=LIBRARY_PATH
;;
bsdi[[45]]*)
version_type=linux # correct to gnu/linux during the next big refactor
need_version=no
library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
soname_spec='$libname$release$shared_ext$major'
finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
shlibpath_var=LD_LIBRARY_PATH
sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
# the default ld.so.conf also contains /usr/contrib/lib and
# /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
# libtool to hard-code these into programs
;;
cygwin* | mingw* | windows* | pw32* | cegcc*)
version_type=windows
shrext_cmds=.dll
need_version=no
need_lib_prefix=no
case $GCC,$cc_basename in
yes,*)
# gcc
library_names_spec='$libname.dll.a'
# DLL is installed to $(libdir)/../bin by postinstall_cmds
# If user builds GCC with multilib enabled,
# it should just install on $(libdir)
# not on $(libdir)/../bin or 32 bits dlls would override 64 bit ones.
if test xyes = x"$multilib"; then
postinstall_cmds='base_file=`basename \$file`~
dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
dldir=$destdir/`dirname \$dlpath`~
$install_prog $dir/$dlname $destdir/$dlname~
chmod a+x $destdir/$dlname~
if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
eval '\''$striplib $destdir/$dlname'\'' || exit \$?;
fi'
else
postinstall_cmds='base_file=`basename \$file`~
dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
dldir=$destdir/`dirname \$dlpath`~
test -d \$dldir || mkdir -p \$dldir~
$install_prog $dir/$dlname \$dldir/$dlname~
chmod a+x \$dldir/$dlname~
if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
fi'
fi
postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
dlpath=$dir/\$dldll~
$RM \$dlpath'
shlibpath_overrides_runpath=yes
case $host_os in
cygwin*)
# Cygwin DLLs use 'cyg' prefix rather than 'lib'
soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
m4_if([$1], [],[
sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
;;
mingw* | windows* | cegcc*)
# MinGW DLLs use traditional 'lib' prefix
soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
;;
pw32*)
# pw32 DLLs use 'pw' prefix rather than 'lib'
gitextract_cn_k7htu/ ├── .github/ │ ├── CONTRIBUTING.md │ ├── ISSUE_TEMPLATE.md │ ├── PULL_REQUEST_TEMPLATE.md │ └── workflows/ │ └── build.yml ├── .gitignore ├── .gitlab-ci.yml ├── INSTALL ├── LICENSE ├── Makefile.am ├── Makefile.in ├── README.md ├── RELNOTES.md ├── aclocal.m4 ├── auth_test.sh ├── bootstrap.sh ├── config/ │ ├── ax_check_openssl.m4 │ ├── ax_pthread.m4 │ ├── compile │ ├── config.guess │ ├── config.sub │ ├── depcomp │ ├── install-sh │ ├── iperf_config_static_bin.m4 │ ├── ltmain.sh │ ├── missing │ ├── mkinstalldirs │ └── test-driver ├── configure ├── configure.ac ├── contrib/ │ ├── Dockerfile │ ├── README.txt │ ├── iperf3.gp │ ├── iperf3.service │ └── iperf3_to_gnuplot.py ├── docs/ │ ├── 2017-04-27.txt │ ├── 2017-06-06.txt │ ├── Makefile │ ├── _esnet/ │ │ ├── LICENSE │ │ ├── README.rst │ │ ├── deploy.sh │ │ ├── static/ │ │ │ └── esnet.css │ │ └── templates/ │ │ ├── layout.html │ │ ├── navbar.html │ │ └── relations.html │ ├── building.rst │ ├── conf.py │ ├── dev.rst │ ├── faq.rst │ ├── index.rst │ ├── invoking.rst │ ├── news.rst │ └── obtaining.rst ├── examples/ │ ├── Makefile.am │ ├── Makefile.in │ ├── mic.c │ └── mis.c ├── iperf3.spec.in ├── make_release ├── src/ │ ├── Makefile.am │ ├── Makefile.in │ ├── cjson.c │ ├── cjson.h │ ├── dscp.c │ ├── flowlabel.h │ ├── iperf.h │ ├── iperf3.1 │ ├── iperf_api.c │ ├── iperf_api.h │ ├── iperf_auth.c │ ├── iperf_auth.h │ ├── iperf_client_api.c │ ├── iperf_config.h.in │ ├── iperf_error.c │ ├── iperf_locale.c │ ├── iperf_locale.h │ ├── iperf_pthread.c │ ├── iperf_pthread.h │ ├── iperf_sctp.c │ ├── iperf_sctp.h │ ├── iperf_server_api.c │ ├── iperf_tcp.c │ ├── iperf_tcp.h │ ├── iperf_time.c │ ├── iperf_time.h │ ├── iperf_udp.c │ ├── iperf_udp.h │ ├── iperf_util.c │ ├── iperf_util.h │ ├── libiperf.3 │ ├── main.c │ ├── net.c │ ├── net.h │ ├── portable_endian.h │ ├── private.pem │ ├── public.pem │ ├── queue.h │ ├── t_api.c │ ├── t_auth.c │ ├── t_timer.c │ ├── t_units.c │ ├── t_uuid.c │ ├── tcp_info.c │ ├── timer.c │ ├── timer.h │ ├── units.c │ ├── units.h │ └── version.h.in └── test_commands.sh
SYMBOL INDEX (754 symbols across 38 files)
FILE: contrib/iperf3_to_gnuplot.py
function generate_output (line 19) | def generate_output(iperf, options):
function summed_output (line 36) | def summed_output(iperf, options):
function main (line 71) | def main():
FILE: examples/mic.c
function main (line 11) | int
FILE: examples/mis.c
function main (line 11) | int
FILE: src/cjson.c
type error (line 92) | typedef struct {
function cJSON_GetErrorPtr (line 105) | CJSON_PUBLIC(const char *) cJSON_GetErrorPtr(void)
function cJSON_GetStringValue (line 110) | CJSON_PUBLIC(char *) cJSON_GetStringValue(const cJSON * const item)
function cJSON_GetNumberValue (line 120) | CJSON_PUBLIC(double) cJSON_GetNumberValue(const cJSON * const item)
function cJSON_Version (line 135) | CJSON_PUBLIC(const char*) cJSON_Version(void)
function case_insensitive_strcmp (line 144) | static int case_insensitive_strcmp(const unsigned char *string1, const u...
type internal_hooks (line 167) | typedef struct internal_hooks
function internal_free (line 180) | static void CJSON_CDECL internal_free(void *pointer)
function cJSON_InitHooks (line 220) | CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks* hooks)
function cJSON (line 252) | static cJSON *cJSON_New_Item(const internal_hooks * const hooks)
function cJSON_Delete (line 264) | CJSON_PUBLIC(void) cJSON_Delete(cJSON *item)
function get_decimal_point (line 288) | static unsigned char get_decimal_point(void)
type parse_buffer (line 298) | typedef struct
function cJSON_bool (line 316) | static cJSON_bool parse_number(cJSON * const item, parse_buffer * const ...
function cJSON_SetNumberHelper (line 393) | CJSON_PUBLIC(double) cJSON_SetNumberHelper(cJSON *object, double number)
function cJSON_SetValuestring (line 411) | CJSON_PUBLIC(char*) cJSON_SetValuestring(cJSON *object, const char *valu...
type printbuffer (line 438) | typedef struct
function update_offset (line 536) | static void update_offset(printbuffer * const buffer)
function cJSON_bool (line 549) | static cJSON_bool compare_double(double a, double b)
function cJSON_bool (line 556) | static cJSON_bool print_number(const cJSON * const item, printbuffer * c...
function parse_hex4 (line 626) | static unsigned parse_hex4(const unsigned char * const input)
function utf16_literal_to_utf8 (line 663) | static unsigned char utf16_literal_to_utf8(const unsigned char * const i...
function cJSON_bool (line 784) | static cJSON_bool parse_string(cJSON * const item, parse_buffer * const ...
function cJSON_bool (line 913) | static cJSON_bool print_string_ptr(const unsigned char * const input, pr...
function cJSON_bool (line 1035) | static cJSON_bool print_string(const cJSON * const item, printbuffer * c...
function parse_buffer (line 1049) | static parse_buffer *buffer_skip_whitespace(parse_buffer * const buffer)
function parse_buffer (line 1075) | static parse_buffer *skip_utf8_bom(parse_buffer * const buffer)
function cJSON_ParseWithOpts (line 1090) | CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char ...
function cJSON_ParseWithLengthOpts (line 1106) | CJSON_PUBLIC(cJSON *) cJSON_ParseWithLengthOpts(const char *value, size_...
function cJSON_Parse (line 1186) | CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value)
function cJSON_ParseWithLength (line 1191) | CJSON_PUBLIC(cJSON *) cJSON_ParseWithLength(const char *value, size_t bu...
function cJSON_Print (line 1263) | CJSON_PUBLIC(char *) cJSON_Print(const cJSON *item)
function cJSON_PrintUnformatted (line 1268) | CJSON_PUBLIC(char *) cJSON_PrintUnformatted(const cJSON *item)
function cJSON_PrintBuffered (line 1273) | CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffe...
function cJSON_PrintPreallocated (line 1303) | CJSON_PUBLIC(cJSON_bool) cJSON_PrintPreallocated(cJSON *item, char *buff...
function cJSON_bool (line 1323) | static cJSON_bool parse_value(cJSON * const item, parse_buffer * const i...
function cJSON_bool (line 1378) | static cJSON_bool print_value(const cJSON * const item, printbuffer * co...
function cJSON_bool (line 1452) | static cJSON_bool parse_array(cJSON * const item, parse_buffer * const i...
function cJSON_bool (line 1550) | static cJSON_bool print_array(const cJSON * const item, printbuffer * co...
function cJSON_bool (line 1612) | static cJSON_bool parse_object(cJSON * const item, parse_buffer * const ...
function cJSON_bool (line 1725) | static cJSON_bool print_object(const cJSON * const item, printbuffer * c...
function cJSON_GetArraySize (line 1839) | CJSON_PUBLIC(int) cJSON_GetArraySize(const cJSON *array)
function cJSON (line 1862) | static cJSON* get_array_item(const cJSON *array, size_t index)
function cJSON_GetArrayItem (line 1881) | CJSON_PUBLIC(cJSON *) cJSON_GetArrayItem(const cJSON *array, int index)
function cJSON (line 1891) | static cJSON *get_object_item(const cJSON * const object, const char * c...
function cJSON_GetObjectItem (line 1923) | CJSON_PUBLIC(cJSON *) cJSON_GetObjectItem(const cJSON * const object, co...
function cJSON_GetObjectItemCaseSensitive (line 1928) | CJSON_PUBLIC(cJSON *) cJSON_GetObjectItemCaseSensitive(const cJSON * con...
function cJSON_HasObjectItem (line 1933) | CJSON_PUBLIC(cJSON_bool) cJSON_HasObjectItem(const cJSON *object, const ...
function suffix_object (line 1939) | static void suffix_object(cJSON *prev, cJSON *item)
function cJSON (line 1946) | static cJSON *create_reference(const cJSON *item, const internal_hooks *...
function cJSON_bool (line 1967) | static cJSON_bool add_item_to_array(cJSON *array, cJSON *item)
function cJSON_AddItemToArray (line 2001) | CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToArray(cJSON *array, cJSON *item)
function cJSON_bool (line 2022) | static cJSON_bool add_item_to_object(cJSON * const object, const char * ...
function cJSON_AddItemToObject (line 2059) | CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToObject(cJSON *object, const char...
function cJSON_AddItemToObjectCS (line 2065) | CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToObjectCS(cJSON *object, const ch...
function cJSON_AddItemReferenceToArray (line 2070) | CJSON_PUBLIC(cJSON_bool) cJSON_AddItemReferenceToArray(cJSON *array, cJS...
function cJSON_AddItemReferenceToObject (line 2080) | CJSON_PUBLIC(cJSON_bool) cJSON_AddItemReferenceToObject(cJSON *object, c...
function cJSON_AddNullToObject (line 2090) | CJSON_PUBLIC(cJSON*) cJSON_AddNullToObject(cJSON * const object, const c...
function cJSON_AddTrueToObject (line 2102) | CJSON_PUBLIC(cJSON*) cJSON_AddTrueToObject(cJSON * const object, const c...
function cJSON_AddFalseToObject (line 2114) | CJSON_PUBLIC(cJSON*) cJSON_AddFalseToObject(cJSON * const object, const ...
function cJSON_AddBoolToObject (line 2126) | CJSON_PUBLIC(cJSON*) cJSON_AddBoolToObject(cJSON * const object, const c...
function cJSON_AddNumberToObject (line 2138) | CJSON_PUBLIC(cJSON*) cJSON_AddNumberToObject(cJSON * const object, const...
function cJSON_AddStringToObject (line 2150) | CJSON_PUBLIC(cJSON*) cJSON_AddStringToObject(cJSON * const object, const...
function cJSON_AddRawToObject (line 2162) | CJSON_PUBLIC(cJSON*) cJSON_AddRawToObject(cJSON * const object, const ch...
function cJSON_AddObjectToObject (line 2174) | CJSON_PUBLIC(cJSON*) cJSON_AddObjectToObject(cJSON * const object, const...
function cJSON_AddArrayToObject (line 2186) | CJSON_PUBLIC(cJSON*) cJSON_AddArrayToObject(cJSON * const object, const ...
function cJSON_DetachItemViaPointer (line 2198) | CJSON_PUBLIC(cJSON *) cJSON_DetachItemViaPointer(cJSON *parent, cJSON * ...
function cJSON_DetachItemFromArray (line 2234) | CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromArray(cJSON *array, int which)
function cJSON_DeleteItemFromArray (line 2244) | CJSON_PUBLIC(void) cJSON_DeleteItemFromArray(cJSON *array, int which)
function cJSON_DetachItemFromObject (line 2249) | CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObject(cJSON *object, const ch...
function cJSON_DetachItemFromObjectCaseSensitive (line 2256) | CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObjectCaseSensitive(cJSON *obj...
function cJSON_DeleteItemFromObject (line 2263) | CJSON_PUBLIC(void) cJSON_DeleteItemFromObject(cJSON *object, const char ...
function cJSON_DeleteItemFromObjectCaseSensitive (line 2268) | CJSON_PUBLIC(void) cJSON_DeleteItemFromObjectCaseSensitive(cJSON *object...
function cJSON_InsertItemInArray (line 2274) | CJSON_PUBLIC(cJSON_bool) cJSON_InsertItemInArray(cJSON *array, int which...
function cJSON_ReplaceItemViaPointer (line 2303) | CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemViaPointer(cJSON * const paren...
function cJSON_ReplaceItemInArray (line 2352) | CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemInArray(cJSON *array, int whic...
function cJSON_bool (line 2362) | static cJSON_bool replace_item_in_object(cJSON *object, const char *stri...
function cJSON_ReplaceItemInObject (line 2385) | CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemInObject(cJSON *object, const ...
function cJSON_ReplaceItemInObjectCaseSensitive (line 2390) | CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemInObjectCaseSensitive(cJSON *o...
function cJSON_CreateNull (line 2396) | CJSON_PUBLIC(cJSON *) cJSON_CreateNull(void)
function cJSON_CreateTrue (line 2407) | CJSON_PUBLIC(cJSON *) cJSON_CreateTrue(void)
function cJSON_CreateFalse (line 2418) | CJSON_PUBLIC(cJSON *) cJSON_CreateFalse(void)
function cJSON_CreateBool (line 2429) | CJSON_PUBLIC(cJSON *) cJSON_CreateBool(cJSON_bool boolean)
function cJSON_CreateNumber (line 2440) | CJSON_PUBLIC(cJSON *) cJSON_CreateNumber(double num)
function cJSON_CreateString (line 2466) | CJSON_PUBLIC(cJSON *) cJSON_CreateString(const char *string)
function cJSON_CreateStringReference (line 2483) | CJSON_PUBLIC(cJSON *) cJSON_CreateStringReference(const char *string)
function cJSON_CreateObjectReference (line 2495) | CJSON_PUBLIC(cJSON *) cJSON_CreateObjectReference(const cJSON *child)
function cJSON_CreateArrayReference (line 2506) | CJSON_PUBLIC(cJSON *) cJSON_CreateArrayReference(const cJSON *child) {
function cJSON_CreateRaw (line 2516) | CJSON_PUBLIC(cJSON *) cJSON_CreateRaw(const char *raw)
function cJSON_CreateArray (line 2533) | CJSON_PUBLIC(cJSON *) cJSON_CreateArray(void)
function cJSON_CreateObject (line 2544) | CJSON_PUBLIC(cJSON *) cJSON_CreateObject(void)
function cJSON_CreateIntArray (line 2556) | CJSON_PUBLIC(cJSON *) cJSON_CreateIntArray(const int *numbers, int count)
function cJSON_CreateFloatArray (line 2596) | CJSON_PUBLIC(cJSON *) cJSON_CreateFloatArray(const float *numbers, int c...
function cJSON_CreateDoubleArray (line 2636) | CJSON_PUBLIC(cJSON *) cJSON_CreateDoubleArray(const double *numbers, int...
function cJSON_CreateStringArray (line 2676) | CJSON_PUBLIC(cJSON *) cJSON_CreateStringArray(const char *const *strings...
function cJSON_Duplicate (line 2717) | CJSON_PUBLIC(cJSON *) cJSON_Duplicate(const cJSON *item, cJSON_bool recu...
function skip_oneline_comment (line 2800) | static void skip_oneline_comment(char **input)
function skip_multiline_comment (line 2813) | static void skip_multiline_comment(char **input)
function minify_string (line 2827) | static void minify_string(char **input, char **output) {
function cJSON_Minify (line 2849) | CJSON_PUBLIC(void) cJSON_Minify(char *json)
function cJSON_IsInvalid (line 2897) | CJSON_PUBLIC(cJSON_bool) cJSON_IsInvalid(const cJSON * const item)
function cJSON_IsFalse (line 2907) | CJSON_PUBLIC(cJSON_bool) cJSON_IsFalse(const cJSON * const item)
function cJSON_IsTrue (line 2917) | CJSON_PUBLIC(cJSON_bool) cJSON_IsTrue(const cJSON * const item)
function cJSON_IsBool (line 2928) | CJSON_PUBLIC(cJSON_bool) cJSON_IsBool(const cJSON * const item)
function cJSON_IsNull (line 2937) | CJSON_PUBLIC(cJSON_bool) cJSON_IsNull(const cJSON * const item)
function cJSON_IsNumber (line 2947) | CJSON_PUBLIC(cJSON_bool) cJSON_IsNumber(const cJSON * const item)
function cJSON_IsString (line 2957) | CJSON_PUBLIC(cJSON_bool) cJSON_IsString(const cJSON * const item)
function cJSON_IsArray (line 2967) | CJSON_PUBLIC(cJSON_bool) cJSON_IsArray(const cJSON * const item)
function cJSON_IsObject (line 2977) | CJSON_PUBLIC(cJSON_bool) cJSON_IsObject(const cJSON * const item)
function cJSON_IsRaw (line 2987) | CJSON_PUBLIC(cJSON_bool) cJSON_IsRaw(const cJSON * const item)
function cJSON_Compare (line 2997) | CJSON_PUBLIC(cJSON_bool) cJSON_Compare(const cJSON * const a, const cJSO...
function cJSON_malloc (line 3122) | CJSON_PUBLIC(void *) cJSON_malloc(size_t size)
function cJSON_free (line 3127) | CJSON_PUBLIC(void) cJSON_free(void *object)
FILE: src/cjson.h
type cJSON (line 105) | typedef struct cJSON
type cJSON_Hooks (line 127) | typedef struct cJSON_Hooks
type cJSON_bool (line 134) | typedef int cJSON_bool;
FILE: src/dscp.c
function parse_qos (line 129) | int
FILE: src/flowlabel.h
type in6_flowlabel_req (line 44) | struct in6_flowlabel_req
FILE: src/iperf.h
type atomic_uint_fast64_t (line 74) | typedef uint64_t atomic_uint_fast64_t;
type uint_fast64_t (line 78) | typedef uint_fast64_t iperf_size_t;
type atomic_uint_fast64_t (line 79) | typedef atomic_uint_fast64_t atomic_iperf_size_t;
type uint (line 83) | typedef unsigned int uint
type iperf_sctp_info (line 86) | struct iperf_sctp_info
type iperf_interval_results (line 94) | struct iperf_interval_results
type iperf_stream_result (line 134) | struct iperf_stream_result
type iperf_settings (line 160) | struct iperf_settings
type iperf_test (line 204) | struct iperf_test
type iperf_stream (line 206) | struct iperf_stream
type protocol (line 266) | struct protocol {
type iperf_textline (line 278) | struct iperf_textline {
type xbind_entry (line 283) | struct xbind_entry {
type iperf_mode (line 289) | enum iperf_mode {
type debug_level (line 295) | enum debug_level {
type iperf_test (line 304) | struct iperf_test
FILE: src/iperf_api.c
type iperf_test (line 98) | struct iperf_test
type iperf_test (line 99) | struct iperf_test
type iperf_test (line 100) | struct iperf_test
type iperf_test (line 101) | struct iperf_test
type iperf_stream (line 102) | struct iperf_stream
type iperf_stream (line 103) | struct iperf_stream
type iperf_test (line 105) | struct iperf_test
type iperf_stream (line 105) | struct iperf_stream
type iperf_test (line 107) | struct iperf_test
function usage (line 112) | void
function usage_long (line 119) | void
function warning (line 126) | void warning(const char *str)
function iperf_get_verbose (line 134) | int
function iperf_get_control_socket (line 140) | int
function iperf_get_control_socket_mss (line 146) | int
function iperf_get_test_omit (line 152) | int
function iperf_get_test_duration (line 158) | int
function iperf_get_test_rate (line 164) | uint64_t
function iperf_get_test_bitrate_limit (line 170) | uint64_t
function iperf_get_test_bitrate_limit_interval (line 176) | double
function iperf_get_test_bitrate_limit_stats_per_interval (line 182) | int
function iperf_get_test_fqrate (line 188) | uint64_t
function iperf_get_test_pacing_timer (line 194) | int
function iperf_get_test_bytes (line 200) | uint64_t
function iperf_get_test_blocks (line 206) | uint64_t
function iperf_get_test_burst (line 212) | int
function iperf_get_test_role (line 218) | char
function iperf_get_test_reverse (line 224) | int
function iperf_get_test_bidirectional (line 230) | int
function iperf_get_test_blksize (line 236) | int
function FILE (line 242) | FILE *
function iperf_get_test_socket_bufsize (line 248) | int
function iperf_get_test_reporter_interval (line 254) | double
function iperf_get_test_stats_interval (line 260) | double
function iperf_get_test_num_streams (line 266) | int
function iperf_get_test_timestamps (line 272) | int
type iperf_test (line 279) | struct iperf_test
function iperf_get_test_repeating_payload (line 284) | int
function iperf_get_test_bind_port (line 290) | int
function iperf_get_test_server_port (line 296) | int
type iperf_test (line 303) | struct iperf_test
type iperf_test (line 309) | struct iperf_test
function iperf_get_test_protocol_id (line 314) | int
function iperf_get_test_json_output (line 320) | int
type iperf_test (line 327) | struct iperf_test
function iperf_get_test_json_stream (line 332) | int
function iperf_get_test_zerocopy (line 338) | int
function iperf_get_test_get_server_output (line 344) | int
function iperf_get_test_unit_format (line 350) | char
type iperf_test (line 357) | struct iperf_test
type iperf_test (line 363) | struct iperf_test
function iperf_get_test_udp_counters_64bit (line 368) | int
function iperf_get_test_one_off (line 374) | int
function iperf_get_test_tos (line 380) | int
type iperf_test (line 387) | struct iperf_test
function iperf_get_test_no_delay (line 399) | int
function iperf_get_test_connect_timeout (line 405) | int
function iperf_get_test_idle_timeout (line 411) | int
function iperf_get_dont_fragment (line 417) | int
type iperf_time (line 423) | struct iperf_time
type iperf_test (line 424) | struct iperf_test
type iperf_test (line 430) | struct iperf_test
function iperf_get_test_mss (line 435) | int
function iperf_get_mapped_v4 (line 441) | int
function iperf_set_verbose (line 449) | void
function iperf_set_control_socket (line 455) | void
function iperf_set_test_omit (line 461) | void
function iperf_set_test_duration (line 467) | void
function iperf_set_test_reporter_interval (line 473) | void
function iperf_set_test_stats_interval (line 479) | void
function iperf_set_test_state (line 485) | void
function iperf_set_test_blksize (line 495) | void
function iperf_set_test_logfile (line 501) | void
function iperf_set_test_rate (line 507) | void
function iperf_set_test_bitrate_limit_maximum (line 513) | void
function iperf_set_test_bitrate_limit_interval (line 519) | void
function iperf_set_test_bitrate_limit_stats_per_interval (line 525) | void
function iperf_set_test_fqrate (line 531) | void
function iperf_set_test_pacing_timer (line 537) | void
function iperf_set_test_bytes (line 543) | void
function iperf_set_test_blocks (line 549) | void
function iperf_set_test_burst (line 555) | void
function iperf_set_test_bind_port (line 561) | void
function iperf_set_test_server_port (line 567) | void
function iperf_set_test_socket_bufsize (line 573) | void
function iperf_set_test_num_streams (line 579) | void
function iperf_set_test_repeating_payload (line 585) | void
function iperf_set_test_timestamps (line 591) | void
function iperf_set_test_timestamp_format (line 597) | void
function iperf_set_mapped_v4 (line 603) | void
function iperf_set_on_new_stream_callback (line 609) | void
function iperf_set_on_test_start_callback (line 615) | void
function iperf_set_on_test_connect_callback (line 621) | void
function iperf_set_on_test_finish_callback (line 627) | void
function check_sender_has_retransmits (line 633) | static void
function iperf_set_test_role (line 642) | void
function iperf_set_test_server_hostname (line 662) | void
function iperf_set_test_template (line 668) | void
function iperf_set_test_reverse (line 674) | void
function iperf_set_test_json_output (line 692) | void
function iperf_set_test_json_stream (line 698) | void
function iperf_set_test_json_stream_full_output (line 704) | void
function iperf_set_test_json_callback (line 710) | void
function iperf_has_zerocopy (line 716) | int
function iperf_set_test_zerocopy (line 722) | void
function iperf_set_test_get_server_output (line 728) | void
function iperf_set_test_unit_format (line 734) | void
function iperf_set_test_client_username (line 741) | void
function iperf_set_test_client_password (line 747) | void
function iperf_set_test_client_rsa_pubkey (line 753) | void
function iperf_set_test_client_rsa_pubkey_from_file (line 759) | void
function iperf_set_test_server_authorized_users (line 765) | void
function iperf_set_test_server_skew_threshold (line 771) | void
function iperf_set_test_server_rsa_privkey (line 777) | void
function iperf_set_test_server_rsa_privkey_from_file (line 783) | void
function iperf_set_test_bind_address (line 790) | void
function iperf_set_test_bind_dev (line 796) | void
function iperf_set_test_udp_counters_64bit (line 802) | void
function iperf_set_test_one_off (line 808) | void
function iperf_set_test_tos (line 814) | void
function iperf_set_test_extra_data (line 820) | void
function iperf_set_test_bidirectional (line 826) | void
function iperf_set_test_no_delay (line 836) | void
function iperf_set_test_connect_timeout (line 842) | void
function iperf_set_test_idle_timeout (line 848) | void
function iperf_set_dont_fragment (line 854) | void
function iperf_set_test_rcv_timeout (line 860) | void
function iperf_set_test_congestion_control (line 867) | void
function iperf_set_test_mss (line 873) | void
type protocol (line 881) | struct protocol
type iperf_test (line 882) | struct iperf_test
type protocol (line 884) | struct protocol
function set_protocol (line 897) | int
function iperf_on_new_stream (line 917) | void
function iperf_on_test_start (line 923) | void
function mapped_v4_to_regular_v4 (line 951) | static int
function iperf_on_connect (line 966) | void
function iperf_on_test_finish (line 1045) | void
function iperf_parse_hostname (line 1063) | int
function iperf_parse_arguments (line 1101) | int
function iperf_open_logfile (line 2034) | int iperf_open_logfile(struct iperf_test *test)
function iperf_close_logfile (line 2045) | void iperf_close_logfile(struct iperf_test *test)
function iperf_set_send_state (line 2053) | int
function iperf_check_throttle (line 2066) | void
function iperf_check_total_rate (line 2142) | void
type iperf_stream (line 2182) | struct iperf_stream
type iperf_test (line 2185) | struct iperf_test
type iperf_time (line 2186) | struct iperf_time
function iperf_recv_mt (line 2251) | int
function iperf_init_test (line 2273) | int
function iperf_create_send_timers (line 2300) | int
function test_is_authorized (line 2313) | int test_is_authorized(struct iperf_test *test){
function iperf_exchange_parameters (line 2351) | int
function iperf_exchange_results (line 2392) | int
function send_parameters (line 2415) | static int
function get_parameters (line 2532) | static int
function send_results (line 2691) | static int
function get_results (line 2800) | static int
function JSON_write (line 2994) | static int
function cJSON (line 3020) | static cJSON *
function JSONStream_Output (line 3085) | static int
function add_to_interval_list (line 3118) | void
function connect_msg (line 3145) | void
type iperf_test (line 3176) | struct iperf_test
type iperf_test (line 3179) | struct iperf_test
type iperf_test (line 3182) | struct iperf_test
type iperf_test (line 3182) | struct iperf_test
type iperf_test (line 3188) | struct iperf_test
type iperf_settings (line 3205) | struct iperf_settings
type iperf_settings (line 3205) | struct iperf_settings
type iperf_settings (line 3211) | struct iperf_settings
type protocol (line 3230) | struct protocol
type protocol (line 3233) | struct protocol
type protocol (line 3235) | struct protocol
type protocol (line 3239) | struct protocol
function protocol_free (line 3244) | void
function iperf_defaults (line 3251) | int
function iperf_free_test (line 3390) | void
function iperf_reset_test (line 3529) | void
function iperf_reset_stats (line 3668) | void
function iperf_stats_callback (line 3704) | void
function iperf_print_intermediate (line 3835) | static void
function iperf_print_results (line 4068) | static void
function iperf_reporter_callback (line 4621) | void
function print_interval_results (line 4644) | static void
function iperf_free_stream (line 4761) | void
type iperf_stream (line 4782) | struct iperf_stream
type iperf_test (line 4783) | struct iperf_test
type iperf_stream (line 4785) | struct iperf_stream
type iperf_stream (line 4811) | struct iperf_stream
type iperf_stream (line 4811) | struct iperf_stream
type iperf_stream (line 4817) | struct iperf_stream
type iperf_stream_result (line 4822) | struct iperf_stream_result
type iperf_stream_result (line 4822) | struct iperf_stream_result
type iperf_stream_result (line 4829) | struct iperf_stream_result
function iperf_common_sockopts (line 4909) | int
function iperf_init_stream (line 4945) | int
function iperf_add_stream (line 5006) | void
function diskfile_send (line 5042) | static int
function diskfile_recv (line 5109) | static int
function iperf_catch_sigend (line 5123) | void
function iperf_got_sigend (line 5143) | void
type iperf_test (line 5192) | struct iperf_test
function iperf_delete_pidfile (line 5253) | int
function iperf_json_start (line 5264) | int
function iperf_json_finish (line 5289) | int
function iperf_setaffinity (line 5366) | int
function iperf_clearaffinity (line 5412) | int
function iperf_printf (line 5454) | int
function iflush (line 5550) | int
function iperf_set_control_keepalive (line 5575) | int
FILE: src/iperf_api.h
type u_int64_t (line 48) | typedef u_int64_t atomic_uint_fast64_t;
type iperf_test (line 51) | struct iperf_test
type iperf_stream_result (line 52) | struct iperf_stream_result
type iperf_interval_results (line 53) | struct iperf_interval_results
type iperf_stream (line 54) | struct iperf_stream
type iperf_time (line 55) | struct iperf_time
type uint_fast64_t (line 58) | typedef uint_fast64_t iperf_size_t;
type atomic_uint_fast64_t (line 59) | typedef atomic_uint_fast64_t atomic_iperf_size_t;
type iperf_test (line 132) | struct iperf_test
type iperf_test (line 133) | struct iperf_test
type iperf_test (line 134) | struct iperf_test
type iperf_test (line 135) | struct iperf_test
type iperf_test (line 136) | struct iperf_test
type iperf_test (line 137) | struct iperf_test
type iperf_test (line 138) | struct iperf_test
type iperf_test (line 139) | struct iperf_test
type iperf_test (line 140) | struct iperf_test
type iperf_test (line 141) | struct iperf_test
type iperf_test (line 142) | struct iperf_test
type iperf_test (line 143) | struct iperf_test
type iperf_test (line 144) | struct iperf_test
type iperf_test (line 145) | struct iperf_test
type iperf_test (line 146) | struct iperf_test
type iperf_test (line 147) | struct iperf_test
type iperf_test (line 148) | struct iperf_test
type iperf_test (line 149) | struct iperf_test
type iperf_test (line 150) | struct iperf_test
type iperf_test (line 151) | struct iperf_test
type iperf_test (line 152) | struct iperf_test
type iperf_test (line 153) | struct iperf_test
type iperf_test (line 154) | struct iperf_test
type iperf_test (line 155) | struct iperf_test
type iperf_test (line 156) | struct iperf_test
type iperf_test (line 157) | struct iperf_test
type iperf_test (line 158) | struct iperf_test
type iperf_test (line 159) | struct iperf_test
type iperf_test (line 160) | struct iperf_test
type iperf_test (line 161) | struct iperf_test
type iperf_test (line 162) | struct iperf_test
type iperf_test (line 163) | struct iperf_test
type iperf_test (line 164) | struct iperf_test
type iperf_test (line 165) | struct iperf_test
type iperf_test (line 166) | struct iperf_test
type iperf_test (line 167) | struct iperf_test
type iperf_test (line 168) | struct iperf_test
type iperf_test (line 169) | struct iperf_test
type iperf_test (line 170) | struct iperf_test
type iperf_test (line 172) | struct iperf_test
type iperf_test (line 173) | struct iperf_test
type iperf_test (line 174) | struct iperf_test
type iperf_test (line 175) | struct iperf_test
type iperf_test (line 176) | struct iperf_test
type iperf_test (line 177) | struct iperf_test
type iperf_test (line 180) | struct iperf_test
type iperf_test (line 181) | struct iperf_test
type iperf_test (line 182) | struct iperf_test
type iperf_test (line 183) | struct iperf_test
type iperf_test (line 184) | struct iperf_test
type iperf_test (line 185) | struct iperf_test
type iperf_test (line 186) | struct iperf_test
type iperf_test (line 187) | struct iperf_test
type iperf_test (line 188) | struct iperf_test
type iperf_test (line 189) | struct iperf_test
type iperf_test (line 190) | struct iperf_test
type iperf_test (line 191) | struct iperf_test
type iperf_test (line 192) | struct iperf_test
type iperf_test (line 193) | struct iperf_test
type iperf_test (line 194) | struct iperf_test
type iperf_test (line 195) | struct iperf_test
type iperf_test (line 196) | struct iperf_test
type iperf_test (line 197) | struct iperf_test
type iperf_test (line 198) | struct iperf_test
type iperf_test (line 199) | struct iperf_test
type iperf_test (line 200) | struct iperf_test
type iperf_test (line 201) | struct iperf_test
type iperf_test (line 202) | struct iperf_test
type iperf_test (line 203) | struct iperf_test
type iperf_test (line 204) | struct iperf_test
type iperf_test (line 205) | struct iperf_test
type iperf_test (line 206) | struct iperf_test
type iperf_test (line 207) | struct iperf_test
type iperf_test (line 208) | struct iperf_test
type iperf_test (line 208) | struct iperf_test
type iperf_test (line 210) | struct iperf_test
type iperf_test (line 211) | struct iperf_test
type iperf_test (line 212) | struct iperf_test
type iperf_test (line 213) | struct iperf_test
type iperf_test (line 214) | struct iperf_test
type iperf_test (line 215) | struct iperf_test
type iperf_test (line 216) | struct iperf_test
type iperf_test (line 217) | struct iperf_test
type iperf_test (line 218) | struct iperf_test
type iperf_test (line 219) | struct iperf_test
type iperf_test (line 220) | struct iperf_test
type iperf_test (line 221) | struct iperf_test
type iperf_test (line 222) | struct iperf_test
type iperf_test (line 223) | struct iperf_test
type iperf_test (line 224) | struct iperf_test
type iperf_test (line 225) | struct iperf_test
type iperf_stream (line 225) | struct iperf_stream
type iperf_test (line 226) | struct iperf_test
type iperf_test (line 226) | struct iperf_test
type iperf_test (line 227) | struct iperf_test
type iperf_test (line 227) | struct iperf_test
type iperf_test (line 228) | struct iperf_test
type iperf_test (line 228) | struct iperf_test
type iperf_test (line 231) | struct iperf_test
type iperf_test (line 232) | struct iperf_test
type iperf_test (line 233) | struct iperf_test
type iperf_test (line 234) | struct iperf_test
type iperf_test (line 235) | struct iperf_test
type iperf_test (line 236) | struct iperf_test
type iperf_test (line 237) | struct iperf_test
type iperf_test (line 238) | struct iperf_test
type iperf_test (line 241) | struct iperf_test
type iperf_test (line 247) | struct iperf_test
type iperf_stream_result (line 253) | struct iperf_stream_result
type iperf_interval_results (line 253) | struct iperf_interval_results
type iperf_stream (line 260) | struct iperf_stream
type iperf_test (line 266) | struct iperf_test
type iperf_test (line 272) | struct iperf_test
type iperf_test (line 280) | struct iperf_test
type iperf_test (line 282) | struct iperf_test
type iperf_test (line 289) | struct iperf_test
type iperf_stream (line 297) | struct iperf_stream
type iperf_test (line 297) | struct iperf_test
type iperf_test (line 303) | struct iperf_test
type iperf_stream (line 303) | struct iperf_stream
type iperf_stream (line 309) | struct iperf_stream
type iperf_test (line 309) | struct iperf_test
type iperf_stream (line 315) | struct iperf_stream
type iperf_test (line 321) | struct iperf_test
type iperf_test (line 328) | struct iperf_test
type iperf_stream (line 333) | struct iperf_stream
type iperf_interval_results (line 333) | struct iperf_interval_results
type iperf_interval_results (line 334) | struct iperf_interval_results
type iperf_interval_results (line 335) | struct iperf_interval_results
type iperf_interval_results (line 336) | struct iperf_interval_results
type iperf_interval_results (line 337) | struct iperf_interval_results
type iperf_interval_results (line 338) | struct iperf_interval_results
type iperf_interval_results (line 339) | struct iperf_interval_results
type iperf_interval_results (line 340) | struct iperf_interval_results
type iperf_test (line 341) | struct iperf_test
type iperf_test (line 343) | struct iperf_test
type iperf_stream (line 344) | struct iperf_stream
type iperf_time (line 344) | struct iperf_time
type iperf_stream (line 345) | struct iperf_stream
type iperf_stream (line 346) | struct iperf_stream
type iperf_test (line 348) | struct iperf_test
type iperf_test (line 352) | struct iperf_test
type iperf_test (line 353) | struct iperf_test
type iperf_test (line 354) | struct iperf_test
type iperf_test (line 355) | struct iperf_test
type iperf_test (line 356) | struct iperf_test
type iperf_test (line 357) | struct iperf_test
type iperf_test (line 358) | struct iperf_test
type iperf_test (line 359) | struct iperf_test
type protocol (line 361) | struct protocol
type iperf_test (line 361) | struct iperf_test
type iperf_test (line 362) | struct iperf_test
type iperf_stream (line 364) | struct iperf_stream
type iperf_test (line 365) | struct iperf_test
type iperf_test (line 366) | struct iperf_test
type iperf_test (line 367) | struct iperf_test
type iperf_test (line 372) | struct iperf_test
type iperf_test (line 373) | struct iperf_test
type iperf_test (line 374) | struct iperf_test
type iperf_test (line 375) | struct iperf_test
type iperf_test (line 376) | struct iperf_test
type iperf_test (line 379) | struct iperf_test
type iperf_test (line 380) | struct iperf_test
type iperf_test (line 381) | struct iperf_test
type iperf_test (line 382) | struct iperf_test
type iperf_test (line 383) | struct iperf_test
type iperf_test (line 384) | struct iperf_test
type iperf_test (line 385) | struct iperf_test
type iperf_test (line 388) | struct iperf_test
type iperf_test (line 389) | struct iperf_test
type iperf_test (line 392) | struct iperf_test
type iperf_test (line 393) | struct iperf_test
type iperf_test (line 396) | struct iperf_test
type iperf_test (line 397) | struct iperf_test
type iperf_test (line 400) | struct iperf_test
type iperf_test (line 401) | struct iperf_test
type iperf_test (line 402) | struct iperf_test
type iperf_test (line 403) | struct iperf_test
FILE: src/iperf_auth.c
function sha256 (line 55) | void sha256(const char *string, char outputBuffer[65])
function check_authentication (line 68) | int check_authentication(const char *username, const char *password, con...
function Base64Encode (line 113) | int Base64Encode(const unsigned char* buffer, const size_t length, char*...
function calcDecodeLength (line 131) | size_t calcDecodeLength(const char* b64input) { //Calculates the length ...
function Base64Decode (line 141) | int Base64Decode(const char* b64message, unsigned char** buffer, size_t*...
function EVP_PKEY (line 159) | EVP_PKEY *load_pubkey_from_file(const char *file) {
function EVP_PKEY (line 173) | EVP_PKEY *load_pubkey_from_base64(const char *buffer) {
function EVP_PKEY (line 186) | EVP_PKEY *load_privkey_from_file(const char *file) {
function EVP_PKEY (line 200) | EVP_PKEY *load_privkey_from_base64(const char *buffer) {
function test_load_pubkey_from_file (line 213) | int test_load_pubkey_from_file(const char *file){
function test_load_private_key_from_file (line 222) | int test_load_private_key_from_file(const char *file){
function encrypt_rsa_message (line 231) | int encrypt_rsa_message(const char *plaintext, EVP_PKEY *public_key, uns...
function decrypt_rsa_message (line 293) | int decrypt_rsa_message(const unsigned char *encryptedtext, const int en...
function encode_auth_setting (line 362) | int encode_auth_setting(const char *username, const char *password, EVP_...
function decode_auth_setting (line 390) | int decode_auth_setting(int enable_debug, const char *authtoken, EVP_PKE...
function iperf_getpass (line 440) | ssize_t iperf_getpass (char **lineptr, size_t *n, FILE *stream) {
FILE: src/iperf_client_api.c
type iperf_stream (line 57) | struct iperf_stream
type iperf_stream (line 57) | struct iperf_stream
type iperf_test (line 58) | struct iperf_test
function iperf_create_streams (line 99) | int
function test_timer_proc (line 180) | static void
function client_stats_timer_proc (line 189) | static void
function client_reporter_timer_proc (line 200) | static void
function create_client_timers (line 211) | static int
function client_omit_timer_proc (line 254) | static void
function create_client_omit_timer (line 272) | static int
function iperf_handle_message_client (line 302) | int
function iperf_connect (line 420) | int
function iperf_client_end (line 553) | int
function iperf_run_client (line 587) | int
FILE: src/iperf_error.c
function iperf_err (line 41) | void
function iperf_signormalexit (line 89) | void
function iperf_errexit (line 99) | void
function iperf_exit (line 109) | void
FILE: src/iperf_pthread.c
function iperf_thread_exit_handler (line 13) | void iperf_thread_exit_handler(int sig)
function iperf_set_thread_exit_handler (line 18) | int iperf_set_thread_exit_handler() {
function pthread_setcanceltype (line 31) | int pthread_setcanceltype(int type, int *oldtype) { return 0; }
function pthread_setcancelstate (line 32) | int pthread_setcancelstate(int state, int *oldstate) { return 0; }
function pthread_cancel (line 33) | int pthread_cancel(pthread_t thread_id) {
FILE: src/iperf_sctp.c
function iperf_sctp_recv (line 53) | int
function iperf_sctp_send (line 85) | int
function iperf_sctp_accept (line 111) | int
function iperf_sctp_listen (line 155) | int
function iperf_sctp_connect (line 289) | int
function iperf_sctp_init (line 554) | int
function iperf_sctp_bindx (line 571) | int
function iperf_sctp_get_info (line 736) | int
FILE: src/iperf_sctp.h
type iperf_test (line 41) | struct iperf_test
type iperf_stream (line 49) | struct iperf_stream
type iperf_stream (line 58) | struct iperf_stream
type iperf_test (line 61) | struct iperf_test
type iperf_test (line 63) | struct iperf_test
type iperf_test (line 65) | struct iperf_test
type iperf_test (line 70) | struct iperf_test
type iperf_stream (line 72) | struct iperf_stream
type iperf_sctp_info (line 72) | struct iperf_sctp_info
FILE: src/iperf_server_api.c
type iperf_stream (line 70) | struct iperf_stream
type iperf_stream (line 70) | struct iperf_stream
type iperf_test (line 71) | struct iperf_test
function iperf_server_listen (line 112) | int
function iperf_accept (line 152) | int
function iperf_handle_message_server (line 238) | int
function server_timer_proc (line 317) | static void
function server_stats_timer_proc (line 330) | static void
function server_reporter_timer_proc (line 341) | static void
function create_server_timers (line 352) | static int
function server_omit_timer_proc (line 394) | static void
function create_server_omit_timer (line 412) | static int
function cleanup_server (line 438) | static void
function iperf_run_server (line 534) | int
FILE: src/iperf_tcp.c
function iperf_tcp_recv (line 56) | int
function iperf_tcp_send (line 92) | int
function iperf_tcp_accept (line 124) | int
function iperf_tcp_listen (line 176) | int
function iperf_tcp_connect (line 389) | int
FILE: src/iperf_tcp.h
type iperf_test (line 38) | struct iperf_test
type iperf_stream (line 46) | struct iperf_stream
type iperf_stream (line 55) | struct iperf_stream
type iperf_test (line 58) | struct iperf_test
type iperf_test (line 60) | struct iperf_test
FILE: src/iperf_time.c
function clock_gettime_helper (line 38) | int
function iperf_time_now (line 51) | int
function iperf_time_now_wallclock (line 57) | int
function iperf_time_now_wallclock (line 67) | int
function iperf_time_now (line 79) | int
function iperf_time_add_usecs (line 91) | void
function iperf_time_in_usecs (line 101) | uint64_t
function iperf_time_in_secs (line 107) | double
function iperf_time_compare (line 120) | int
function iperf_time_diff (line 142) | int
FILE: src/iperf_time.h
type iperf_time (line 32) | struct iperf_time {
type iperf_time (line 43) | struct iperf_time
type iperf_time (line 55) | struct iperf_time
type iperf_time (line 57) | struct iperf_time
type iperf_time (line 59) | struct iperf_time
type iperf_time (line 59) | struct iperf_time
type iperf_time (line 61) | struct iperf_time
type iperf_time (line 61) | struct iperf_time
type iperf_time (line 61) | struct iperf_time
type iperf_time (line 63) | struct iperf_time
type iperf_time (line 68) | struct iperf_time
FILE: src/iperf_udp.c
function iperf_udp_recv (line 59) | int
function iperf_udp_send (line 247) | int
function iperf_udp_buffercheck (line 371) | int
function iperf_udp_gso (line 460) | int
function iperf_udp_gso (line 479) | int
function iperf_udp_gro (line 489) | int
function iperf_udp_gro (line 508) | int
function iperf_udp_accept (line 522) | int
function iperf_udp_listen (line 636) | int
function iperf_udp_connect (line 658) | int
function iperf_udp_init (line 783) | int
FILE: src/iperf_udp.h
type iperf_stream (line 37) | struct iperf_stream
type iperf_stream (line 45) | struct iperf_stream
type iperf_test (line 54) | struct iperf_test
type iperf_test (line 57) | struct iperf_test
type iperf_test (line 59) | struct iperf_test
type iperf_test (line 61) | struct iperf_test
FILE: src/iperf_util.c
function readentropy (line 58) | int readentropy(void *out, size_t outsize)
function fill_with_repeating_pattern (line 85) | void fill_with_repeating_pattern(void *out, size_t outsize)
function make_cookie (line 113) | void
function is_closed (line 137) | int
function timeval_to_double (line 156) | double
function timeval_equals (line 166) | int
function timeval_diff (line 175) | double
function cpu_util (line 189) | void
type utsname (line 230) | struct utsname
function cJSON (line 386) | cJSON*
function cJSON (line 444) | cJSON * iperf_cJSON_GetObjectItemType(cJSON * j, char * item_string, int...
function iperf_dump_fdset (line 480) | void
function daemon (line 504) | int daemon(int nochdir, int noclose)
function getdelim (line 594) | ssize_t
function getline (line 637) | ssize_t
FILE: src/iperf_util.h
type timeval (line 43) | struct timeval
type timeval (line 45) | struct timeval
type timeval (line 45) | struct timeval
type timeval (line 47) | struct timeval
type timeval (line 47) | struct timeval
FILE: src/main.c
type iperf_test (line 51) | struct iperf_test
type iperf_test (line 58) | struct iperf_test
function sigend_handler (line 136) | static void __attribute__ ((noreturn))
function run (line 144) | static int
FILE: src/net.c
function timeout_connect (line 89) | int
function bind_to_device (line 132) | int
function create_socket (line 162) | int
function netdial (line 267) | int
function netannounce (line 292) | int
function Nread (line 404) | int
function Nrecv (line 414) | int
function Nread_no_select (line 510) | int
function Nrecv_no_select (line 519) | int
function recv_msg_gro (line 556) | static int recv_msg_gro(int fd, char *buf, int len, int *gso_size)
function Nread_gro (line 602) | int
function Nread_gro (line 636) | int
function Nwrite (line 648) | int
function udp_msg_gso (line 683) | static void udp_msg_gso(struct cmsghdr *cm, uint16_t gso_size)
function udp_sendmsg_gso (line 694) | static int udp_sendmsg_gso(int fd, const char *buf, size_t count, uint16...
function Nwrite_gso (line 723) | int
function Nwrite_gso (line 749) | int
function has_sendfile (line 757) | int
function Nsendfile (line 773) | int
function setnonblocking (line 837) | int
function getsockdomain (line 861) | int
function iperf_sync_close_socket (line 876) | void
FILE: src/net.h
type sockaddr (line 30) | struct sockaddr
type addrinfo (line 31) | struct addrinfo
FILE: src/queue.h
type type (line 178) | struct type
type type (line 248) | struct type
type type (line 309) | struct type
type type (line 318) | struct type
type type (line 416) | struct type
type type (line 425) | struct type
FILE: src/t_api.c
function test_iperf_set_test_bind_port (line 41) | int test_iperf_set_test_bind_port(struct iperf_test *test)
function test_iperf_set_mss (line 51) | int test_iperf_set_mss(struct iperf_test *test)
function main (line 60) | int
FILE: src/t_auth.c
function main (line 48) | int
function test_authtoken (line 115) | int
function main (line 150) | int
FILE: src/t_timer.c
function timer_proc (line 42) | static void
function main (line 49) | int
FILE: src/t_units.c
function main (line 35) | int
FILE: src/t_uuid.c
function main (line 34) | int
FILE: src/tcp_info.c
function has_tcpinfo (line 60) | int
function has_tcpinfo_retransmits (line 74) | int
function save_tcpinfo (line 98) | void
function get_total_retransmits (line 131) | long
function get_snd_cwnd (line 151) | long
function get_snd_wnd (line 173) | long
function get_rtt (line 197) | long
function get_rttvar (line 220) | long
function get_pmtu (line 240) | long
function get_reorder (line 254) | long
FILE: src/timer.c
function getnow (line 50) | static void
function list_add (line 60) | static void
function list_remove (line 99) | static void
function list_resort (line 111) | static void
function Timer (line 121) | Timer*
type timeval (line 153) | struct timeval
type iperf_time (line 154) | struct iperf_time
type iperf_time (line 156) | struct iperf_time
type timeval (line 159) | struct timeval
function tmr_run (line 176) | void
function tmr_reset (line 202) | void
function tmr_cancel (line 214) | void
function tmr_cleanup (line 226) | void
function tmr_destroy (line 239) | void
FILE: src/timer.h
type TimerClientData (line 42) | typedef union
type iperf_time (line 55) | struct iperf_time
type Timer (line 58) | typedef struct TimerStruct
type iperf_time (line 72) | struct iperf_time
type timeval (line 79) | struct timeval
type iperf_time (line 79) | struct iperf_time
type iperf_time (line 84) | struct iperf_time
type iperf_time (line 87) | struct iperf_time
FILE: src/units.c
function unit_atof (line 89) | double unit_atof(const char *s)
function unit_atof_rate (line 136) | double unit_atof_rate(const char *s)
function iperf_size_t (line 185) | iperf_size_t unit_atoi(const char *s)
function unit_snprintf (line 291) | void unit_snprintf(char *s, int inLen,
Condensed preview — 108 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,748K chars).
[
{
"path": ".github/CONTRIBUTING.md",
"chars": 3491,
"preview": "# iperf3 Contribution Guidelines\n\nThanks for contributing to iperf3!\n\nThis page contains some guidelines for filing issu"
},
{
"path": ".github/ISSUE_TEMPLATE.md",
"chars": 1305,
"preview": "_NOTE: The iperf3 issue tracker is for registering bugs, enhancement\nrequests, or submissions of code. It is not a mean"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 1190,
"preview": "_PLEASE NOTE the following text from the iperf3 license. Submitting a\npull request to the iperf3 repository constitutes"
},
{
"path": ".github/workflows/build.yml",
"chars": 1843,
"preview": "name: GitHub Actions Build Test\npermissions:\n contents: read\non:\n push:\n branches:\n - master\n pull_request:"
},
{
"path": ".gitignore",
"chars": 366,
"preview": "*~\n*.a\n*.la\n*.lo\n*.o\n*.orig\n*.Po\n/Makefile\n/autom4te.cache\n/config.log\n/config.status\n/iperf3.spec\ndocs/_build\ndocs/_sta"
},
{
"path": ".gitlab-ci.yml",
"chars": 1335,
"preview": "# To contribute improvements to CI/CD templates, please follow the Development guide at:\n# https://docs.gitlab.com/devel"
},
{
"path": "INSTALL",
"chars": 9498,
"preview": "Installation Instructions\n*************************\n\nCopyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 "
},
{
"path": "LICENSE",
"chars": 11828,
"preview": "\"iperf, Copyright (c) 2014-2026, The Regents of the University of California,\nthrough Lawrence Berkeley National Laborat"
},
{
"path": "Makefile.am",
"chars": 23,
"preview": "SUBDIRS = src examples\n"
},
{
"path": "Makefile.in",
"chars": 26534,
"preview": "# Makefile.in generated by automake 1.18.1 from Makefile.am.\n# @configure_input@\n\n# Copyright (C) 1994-2025 Free Softwar"
},
{
"path": "README.md",
"chars": 5920,
"preview": "iperf3: A TCP, UDP, and SCTP network bandwidth measurement tool\n======================================================="
},
{
"path": "RELNOTES.md",
"chars": 47350,
"preview": "iperf3 Release Notes\n====================\n\niperf-3.20 2025-11-14\n---------------------\n\nNOTE: iperf-3.20 incorporates al"
},
{
"path": "aclocal.m4",
"chars": 387432,
"preview": "# generated automatically by aclocal 1.18.1 -*- Autoconf -*-\n\n# Copyright (C) 1996-2025 Free Software Foundation, Inc.\n\n"
},
{
"path": "auth_test.sh",
"chars": 1423,
"preview": "#!/bin/bash\n#\n# This is a set of commands to run and verify they work before doing a new release.\n# Eventually they shou"
},
{
"path": "bootstrap.sh",
"chars": 1512,
"preview": "#! /bin/sh\n#\n# iperf, Copyright (c) 2014, The Regents of the University of\n# California, through Lawrence Berkeley Natio"
},
{
"path": "config/ax_check_openssl.m4",
"chars": 4197,
"preview": "# ===========================================================================\n# https://www.gnu.org/software/autocon"
},
{
"path": "config/ax_pthread.m4",
"chars": 22556,
"preview": "# ===========================================================================\n# https://www.gnu.org/software/auto"
},
{
"path": "config/compile",
"chars": 8064,
"preview": "#! /bin/sh\n# Wrapper for compilers which do not understand '-c -o'.\n\nscriptversion=2025-06-18.21; # UTC\n\n# Copyright (C)"
},
{
"path": "config/config.guess",
"chars": 50743,
"preview": "#! /bin/sh\n# Attempt to guess a canonical system name.\n# Copyright 1992-2024 Free Software Foundation, Inc.\n\n# shellch"
},
{
"path": "config/config.sub",
"chars": 39713,
"preview": "#! /bin/sh\n# Configuration validation subroutine script.\n# Copyright 1992-2024 Free Software Foundation, Inc.\n\n# shell"
},
{
"path": "config/depcomp",
"chars": 23700,
"preview": "#! /bin/sh\n# depcomp - compile a program generating dependencies as side-effects\n\nscriptversion=2025-06-18.21; # UTC\n\n# "
},
{
"path": "config/install-sh",
"chars": 15442,
"preview": "#!/bin/sh\n# install - install a program, script, or datafile\n\nscriptversion=2025-06-18.21; # UTC\n\n# This originates from"
},
{
"path": "config/iperf_config_static_bin.m4",
"chars": 368,
"preview": "# Also link binaries as static\nAC_ARG_ENABLE([static-bin],\n AS_HELP_STRING([--enable-static-bin], [link iperf3 binary"
},
{
"path": "config/ltmain.sh",
"chars": 337554,
"preview": "#! /usr/bin/env sh\n## DO NOT EDIT - This file generated from ./build-aux/ltmain.in\n## by inline-source v20"
},
{
"path": "config/missing",
"chars": 7733,
"preview": "#! /bin/sh\n# Common wrapper for a few potentially missing GNU and other programs.\n\nscriptversion=2025-06-18.21; # UTC\n\n#"
},
{
"path": "config/mkinstalldirs",
"chars": 3665,
"preview": "#! /bin/sh\n# mkinstalldirs --- make directory hierarchy\n\nscriptversion=2025-06-18.21; # UTC\n\n# Original author: Noah Fri"
},
{
"path": "config/test-driver",
"chars": 5220,
"preview": "#! /bin/sh\n# test-driver - basic testsuite driver script.\n\nscriptversion=2025-06-18.21; # UTC\n\n# Copyright (C) 2011-2025"
},
{
"path": "configure",
"chars": 597069,
"preview": "#! /bin/sh\n# Guess values for system-dependent variables and create Makefiles.\n# Generated by GNU Autoconf 2.72 for iper"
},
{
"path": "configure.ac",
"chars": 15967,
"preview": "# iperf, Copyright (c) 2014-2026, The Regents of the University of\n# California, through Lawrence Berkeley National Labo"
},
{
"path": "contrib/Dockerfile",
"chars": 570,
"preview": "# Instructions:\n# - Configure for a static binary: ./configure --enable-static \"LDFLAGS=--static\" --disable-shared --wit"
},
{
"path": "contrib/README.txt",
"chars": 336,
"preview": "\nThis directory contains files that might be useful to analyze iperf3 results\n\niperf3_to_gnuplot.py: converts iperf3 JSO"
},
{
"path": "contrib/iperf3.gp",
"chars": 997,
"preview": "#\n# sample Gnuplot command file for iperf3 results\nset term x11\n#set term png\n#set term postscript landscape color\nset k"
},
{
"path": "contrib/iperf3.service",
"chars": 147,
"preview": "[Unit]\nDescription=iperf3\nRequires=network.target\n\n[Service]\nExecStart=/usr/bin/iperf3 -s\nRestart=on-failure\n\n[Install]\n"
},
{
"path": "contrib/iperf3_to_gnuplot.py",
"chars": 3787,
"preview": "#!/usr/bin/env python\n\n\"\"\"\nExtract iperf data from json blob and format for gnuplot.\n\"\"\"\n\nimport json\nimport os\nimport s"
},
{
"path": "docs/2017-04-27.txt",
"chars": 4238,
"preview": "Subject: iperf3 status, April 2017\n\nThis is the first of a series of (maybe periodic?) updates about\niperf3 development"
},
{
"path": "docs/2017-06-06.txt",
"chars": 1753,
"preview": "Subject: iperf3 status, June 2017\n\niperf 3.2 Release Plans\n-----------------------\n\nWe've done quite a bit of work the "
},
{
"path": "docs/Makefile",
"chars": 6758,
"preview": "# Makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line.\nSPHINXOPTS =\nSPHINXBUILD "
},
{
"path": "docs/_esnet/LICENSE",
"chars": 1480,
"preview": "Copyright (c) 2014, ESnet\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodif"
},
{
"path": "docs/_esnet/README.rst",
"chars": 3274,
"preview": "esnet-gh-pages-base\n===================\n\nBase templates for ESnet's GitHub pages. These pages are created using the\nSphi"
},
{
"path": "docs/_esnet/deploy.sh",
"chars": 407,
"preview": "#!/bin/sh\n\nGIT_URL=`git remote show origin | awk '/Push URL/ { print $NF }'`\nDEPLOY_DIR=/tmp/deploy.$$\nmkdir ${DEPLOY_D"
},
{
"path": "docs/_esnet/static/esnet.css",
"chars": 2198,
"preview": "body {\n\tpadding-top: 70px; // bootstrap default\n}\n\n.navbar-default {\n\tbackground-color: #006495;\n\tborder-color: #004e74;"
},
{
"path": "docs/_esnet/templates/layout.html",
"chars": 4393,
"preview": "{% extends \"basic/layout.html\" %}\n\n{% set theme_css_files = [] %}\n{% if theme_bootstrap_version == \"3\" %}\n {% set boots"
},
{
"path": "docs/_esnet/templates/navbar.html",
"chars": 2130,
"preview": " <div id=\"navbar\" class=\"{{ theme_navbar_class }} navbar-default {% if theme_navbar_fixed_top == 'true' -%} navbar-fixe"
},
{
"path": "docs/_esnet/templates/relations.html",
"chars": 712,
"preview": "{# Switch to icon instead of text in `sm` view size for BS3 only. #}\n{%- if prev %}\n <li>\n <a href=\"{{ prev.link|e }"
},
{
"path": "docs/building.rst",
"chars": 814,
"preview": "Building iperf3\n===============\n\nBuilding iperf3, as with most tools of this type, is a fairly\nstraightforward operation"
},
{
"path": "docs/conf.py",
"chars": 8682,
"preview": "# -*- coding: utf-8 -*-\n#\n# iperf documentation build configuration file, created by\n# sphinx-quickstart on Fri Mar 28 1"
},
{
"path": "docs/dev.rst",
"chars": 11767,
"preview": "iperf3 Development\n==================\n\nThe iperf3 project is hosted on GitHub at:\n\nhttp://github.com/esnet/iperf\n\nThis s"
},
{
"path": "docs/faq.rst",
"chars": 13382,
"preview": ".. _faq:\n\niperf3 FAQ\n==========\n\nWhat is the history of iperf3, and what is the difference between iperf2 and iperf3?\n "
},
{
"path": "docs/index.rst",
"chars": 2348,
"preview": ".. iperf documentation master file, created by\n sphinx-quickstart on Fri Mar 28 14:58:40 2014.\n You can adapt this f"
},
{
"path": "docs/invoking.rst",
"chars": 28390,
"preview": "Invoking iperf3\n===============\n\niperf3 includes a manual page listing all of the command-line options.\nThe manual page "
},
{
"path": "docs/news.rst",
"chars": 20421,
"preview": "iperf3 Project News\n===================\n\n2025-11-14: iperf-3.20 released\n--------------------------------\n\n| URL: http"
},
{
"path": "docs/obtaining.rst",
"chars": 3376,
"preview": ".. _obtaining:\n\nObtaining iperf3\n================\n\nBinary Distributions\n--------------------\n\nNote that ESnet does not d"
},
{
"path": "examples/Makefile.am",
"chars": 269,
"preview": "noinst_PROGRAMS\t\t= mic mis\t\t# Build, but don't install\n\nAM_CPPFLAGS\t\t= -I$(top_srcdir)/src\n\nmic_SOURCES\t\t= mic.c\nmic_CFL"
},
{
"path": "examples/Makefile.in",
"chars": 22236,
"preview": "# Makefile.in generated by automake 1.18.1 from Makefile.am.\n# @configure_input@\n\n# Copyright (C) 1994-2025 Free Softwar"
},
{
"path": "examples/mic.c",
"chars": 1514,
"preview": "#include \"iperf_config.h\"\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <unistd.h>\n#include <string.h>\n#include <stdi"
},
{
"path": "examples/mis.c",
"chars": 1236,
"preview": "#include \"iperf_config.h\"\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <unistd.h>\n#include <string.h>\n#include <stdi"
},
{
"path": "iperf3.spec.in",
"chars": 1463,
"preview": "Name:\tiperf3\nVersion: @VERSION@\nRelease:\t1%{?dist}\nSummary: Measurement tool for TCP/UDP bandwidth performance\n\nGroup:\t "
},
{
"path": "make_release",
"chars": 1158,
"preview": "#!/bin/sh\n\nproj=\"iperf\"\n\nif [ \"x$2\" != \"x\" ]; then\ntag=$2\nelse\ntag=`awk '/IPERF_VERSION / {\n gsub(/\"/, \"\", $3);\n print"
},
{
"path": "src/Makefile.am",
"chars": 3744,
"preview": "lib_LTLIBRARIES = libiperf.la # Build and install an iperf library\nbin_PROGRAM"
},
{
"path": "src/Makefile.in",
"chars": 108978,
"preview": "# Makefile.in generated by automake 1.18.1 from Makefile.am.\n# @configure_input@\n\n# Copyright (C) 1994-2025 Free Softwar"
},
{
"path": "src/cjson.c",
"chars": 78257,
"preview": "/*\n Copyright (c) 2009-2017 Dave Gamble and cJSON contributors\n\n Permission is hereby granted, free of charge, to any "
},
{
"path": "src/cjson.h",
"chars": 16217,
"preview": "/*\n Copyright (c) 2009-2017 Dave Gamble and cJSON contributors\n\n Permission is hereby granted, free of charge, to any "
},
{
"path": "src/dscp.c",
"chars": 4634,
"preview": "/* dscp lookup routines lifted wholesale from openssh */\n\n/*\n * Copyright (c) 2000 Markus Friedl. All rights reserved.\n"
},
{
"path": "src/flowlabel.h",
"chars": 2612,
"preview": "/*\n * iperf, Copyright (c) 2014, The Regents of the University of\n * California, through Lawrence Berkeley National Labo"
},
{
"path": "src/iperf.h",
"chars": 18470,
"preview": "/*\n * iperf, Copyright (c) 2014-2020, 2023, The Regents of the University of\n * California, through Lawrence Berkeley Na"
},
{
"path": "src/iperf3.1",
"chars": 22354,
"preview": ".TH IPERF3 1 \"November 2025\" ESnet \"User Manuals\"\n.SH NAME\niperf3 \\- perform network throughput tests\n.SH SYNOPSIS\n.B ip"
},
{
"path": "src/iperf_api.c",
"chars": 197024,
"preview": "/*\n * iperf, Copyright (c) 2014-2026, The Regents of the University of\n * California, through Lawrence Berkeley National"
},
{
"path": "src/iperf_api.h",
"chars": 25502,
"preview": "/*\n * iperf, Copyright (c) 2014-2025, The Regents of the University of\n * California, through Lawrence Berkeley National"
},
{
"path": "src/iperf_auth.c",
"chars": 14221,
"preview": "/*\n * iperf, Copyright (c) 2014-2023, The Regents of the University of\n * California, through Lawrence Berkeley National"
},
{
"path": "src/iperf_auth.h",
"chars": 2219,
"preview": "/*\n * iperf, Copyright (c) 2014-2017, The Regents of the University of\n * California, through Lawrence Berkeley National"
},
{
"path": "src/iperf_client_api.c",
"chars": 28032,
"preview": "/*\n * iperf, Copyright (c) 2014-2023, The Regents of the University of\n * California, through Lawrence Berkeley National"
},
{
"path": "src/iperf_config.h.in",
"chars": 4931,
"preview": "/* src/iperf_config.h.in. Generated from configure.ac by autoheader. */\n\n/* Can bind to device via SO_BINDTODEVICE or "
},
{
"path": "src/iperf_error.c",
"chars": 20706,
"preview": "/*\n * iperf, Copyright (c) 2014-2022, The Regents of the University of\n * California, through Lawrence Berkeley National"
},
{
"path": "src/iperf_locale.c",
"chars": 26417,
"preview": "/*---------------------------------------------------------------\n * iperf, Copyright (c) 2014-2022, The Regents of the "
},
{
"path": "src/iperf_locale.h",
"chars": 5468,
"preview": "/*\n * iperf, Copyright (c) 2014-2020, The Regents of the University of\n * California, through Lawrence Berkeley National"
},
{
"path": "src/iperf_pthread.c",
"chars": 1036,
"preview": "#include \"iperf_config.h\"\n\n#if defined(HAVE_PTHREAD) && defined(__ANDROID__)\n\n/* Workaround for `pthread_cancel()` in An"
},
{
"path": "src/iperf_pthread.h",
"chars": 749,
"preview": "#include \"iperf_config.h\"\n\n#if defined(HAVE_PTHREAD)\n\n#include <pthread.h>\n\n#if defined(__ANDROID__)\n\n/* Adding missing "
},
{
"path": "src/iperf_sctp.c",
"chars": 20794,
"preview": "/*\n * iperf, Copyright (c) 2014-2019, The Regents of the University of\n * California, through Lawrence Berkeley National"
},
{
"path": "src/iperf_sctp.h",
"chars": 2393,
"preview": "/*\n * iperf, Copyright (c) 2014, The Regents of the University of\n * California, through Lawrence Berkeley National Labo"
},
{
"path": "src/iperf_server_api.c",
"chars": 33210,
"preview": "/*\n * iperf, Copyright (c) 2014-2023 The Regents of the University of\n * California, through Lawrence Berkeley National "
},
{
"path": "src/iperf_tcp.c",
"chars": 17591,
"preview": "/*\n * iperf, Copyright (c) 2014-2022, The Regents of the University of\n * California, through Lawrence Berkeley National"
},
{
"path": "src/iperf_tcp.h",
"chars": 2060,
"preview": "/*\n * iperf, Copyright (c) 2014, The Regents of the University of\n * California, through Lawrence Berkeley National Labo"
},
{
"path": "src/iperf_time.c",
"chars": 4513,
"preview": "/*\n * iperf, Copyright (c) 2014-2018, The Regents of the University of\n * California, through Lawrence Berkeley National"
},
{
"path": "src/iperf_time.h",
"chars": 2553,
"preview": "/*\n * iperf, Copyright (c) 2014-2018, The Regents of the University of\n * California, through Lawrence Berkeley National"
},
{
"path": "src/iperf_udp.c",
"chars": 23959,
"preview": "/*\n * iperf, Copyright (c) 2014-2026, The Regents of the University of\n * California, through Lawrence Berkeley National"
},
{
"path": "src/iperf_udp.h",
"chars": 1971,
"preview": "/*\n * iperf, Copyright (c) 2014, The Regents of the University of\n * California, through Lawrence Berkeley National Labo"
},
{
"path": "src/iperf_util.c",
"chars": 17645,
"preview": "/*\n * iperf, Copyright (c) 2014-2026, The Regents of the University of\n * California, through Lawrence Berkeley National"
},
{
"path": "src/iperf_util.h",
"chars": 2363,
"preview": "/*\n * iperf, Copyright (c) 2014-2017, The Regents of the University of\n * California, through Lawrence Berkeley National"
},
{
"path": "src/libiperf.3",
"chars": 3862,
"preview": ".TH LIBIPERF 3 \"January 2022\" ESnet \"User Manuals\"\n.SH NAME\nlibiperf \\- API for iperf3 network throughput tester\n\n.SH SY"
},
{
"path": "src/main.c",
"chars": 6261,
"preview": "/*\n * iperf, Copyright (c) 2014-2023, The Regents of the University of\n * California, through Lawrence Berkeley National"
},
{
"path": "src/net.c",
"chars": 22674,
"preview": "/*\n * iperf, Copyright (c) 2014-2023, The Regents of the University of\n * California, through Lawrence Berkeley National"
},
{
"path": "src/net.h",
"chars": 2758,
"preview": "/*\n * iperf, Copyright (c) 2014, 2017, The Regents of the University of\n * California, through Lawrence Berkeley Nationa"
},
{
"path": "src/portable_endian.h",
"chars": 4637,
"preview": "// \"License\": Public Domain\n// I, Mathias Panzenböck, place this file hereby into the public domain. Use it at your own "
},
{
"path": "src/private.pem",
"chars": 1679,
"preview": "-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEAwVbvPf/eDIZKmEVth9+VPgSx1RkXOAPCJ5tl51bcYoy9P10N\nnoutsTK/64VclIuyUDUdAw8"
},
{
"path": "src/public.pem",
"chars": 451,
"preview": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwVbvPf/eDIZKmEVth9+V\nPgSx1RkXOAPCJ5tl51bcYoy9P10N"
},
{
"path": "src/queue.h",
"chars": 18109,
"preview": "/*\t$OpenBSD: queue.h,v 1.32 2007/04/30 18:42:34 pedro Exp $\t*/\n/*\t$NetBSD: queue.h,v 1.11 1996/05/16 05:17:14 mycroft Ex"
},
{
"path": "src/t_api.c",
"chars": 2515,
"preview": "/*\n * iperf, Copyright (c) 2017-2020, The Regents of the University of\n * California, through Lawrence Berkeley National"
},
{
"path": "src/t_auth.c",
"chars": 5478,
"preview": "/*\n * iperf, Copyright (c) 2020, The Regents of the University of\n * California, through Lawrence Berkeley National Labo"
},
{
"path": "src/t_timer.c",
"chars": 2081,
"preview": "/*\n * iperf, Copyright (c) 2014, The Regents of the University of\n * California, through Lawrence Berkeley National Labo"
},
{
"path": "src/t_units.c",
"chars": 3735,
"preview": "/*\n * iperf, Copyright (c) 2014, 2017, The Regents of the University of\n * California, through Lawrence Berkeley Nationa"
},
{
"path": "src/t_uuid.c",
"chars": 1657,
"preview": "/*\n * iperf, Copyright (c) 2014, The Regents of the University of\n * California, through Lawrence Berkeley National Labo"
},
{
"path": "src/tcp_info.c",
"chars": 8627,
"preview": "/*\n * iperf, Copyright (c) 2014, 2017, The Regents of the University of\n * California, through Lawrence Berkeley Nationa"
},
{
"path": "src/timer.c",
"chars": 5716,
"preview": "/*\n * iperf, Copyright (c) 2014, The Regents of the University of\n * California, through Lawrence Berkeley National Labo"
},
{
"path": "src/timer.h",
"chars": 3613,
"preview": "/*\n * iperf, Copyright (c) 2014, The Regents of the University of\n * California, through Lawrence Berkeley National Labo"
},
{
"path": "src/units.c",
"chars": 9448,
"preview": "/*---------------------------------------------------------------\n * Copyright (c) 1999,2000,2001,2002,2003\n * The Board"
},
{
"path": "src/units.h",
"chars": 1538,
"preview": "/*\n * iperf, Copyright (c) 2014, The Regents of the University of\n * California, through Lawrence Berkeley National Labo"
},
{
"path": "src/version.h.in",
"chars": 1364,
"preview": "/*\n * iperf, Copyright (c) 2014, The Regents of the University of\n * California, through Lawrence Berkeley National Labo"
},
{
"path": "test_commands.sh",
"chars": 1972,
"preview": "#!/bin/sh\n#\n# This is a set of commands to run and verify they work before doing a new release.\n# Eventually they should"
}
]
About this extraction
This page contains the full source code of the esnet/iperf GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 108 files (2.5 MB), approximately 654.9k tokens, and a symbol index with 754 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.