Compare commits
66 Commits
dev
...
releng-3.1
Author | SHA1 | Date | |
---|---|---|---|
|
62b137cb9b | ||
|
09357ad97d | ||
|
bc225c79a8 | ||
|
6557bc4650 | ||
|
81e90414de | ||
|
77904aeb30 | ||
|
3990f284e3 | ||
|
a7424218a6 | ||
|
708165605a | ||
|
bb1e3d7573 | ||
|
3f0f86ac96 | ||
|
d24f61b7d0 | ||
|
8b78ba13d5 | ||
|
cb55cc6fdc | ||
|
51b41245aa | ||
|
64db8f5330 | ||
|
89ede124d7 | ||
|
2956c48c8b | ||
|
4a56567b10 | ||
|
a1c712b3bd | ||
|
f9813626e5 | ||
|
e4ca82f829 | ||
|
7d21cd554d | ||
|
c803257022 | ||
|
6cdcde886f | ||
|
48eeff28b5 | ||
|
c14053114b | ||
|
2b8ad3e4f4 | ||
|
85c4f9414a | ||
|
f9d2e97b1f | ||
|
aa8a3f4fd7 | ||
|
b114f9050d | ||
|
9b18ce66ee | ||
|
0208757cc1 | ||
|
abb24a2efc | ||
|
b5fab64943 | ||
|
b97df9a9d5 | ||
|
3a8e21f33a | ||
|
a859727060 | ||
|
85b25c2ec8 | ||
|
b83fa5c5e5 | ||
|
b0a7688253 | ||
|
8e0a54ebd9 | ||
|
3ea0269f50 | ||
|
a8653a7443 | ||
|
0ecdfdda80 | ||
|
a977ae2a1b | ||
|
ad05aac904 | ||
|
11fadc3f39 | ||
|
5c2cbf4cf2 | ||
|
515b6e9e1a | ||
|
5a6a0f7b48 | ||
|
2a187a957a | ||
|
9eef1603c6 | ||
|
d2a2252911 | ||
|
7bdd5b0e2d | ||
|
e0aa15a939 | ||
|
a214ba23c8 | ||
|
0cd46ccebd | ||
|
a2324b962b | ||
|
e26b07112b | ||
|
4c20d0d692 | ||
|
15ec8e6ebb | ||
|
2eace5a9e3 | ||
|
e4428187b3 | ||
|
d5c850653d |
@ -235,6 +235,7 @@ EGREP = @EGREP@
|
||||
ETAGS = @ETAGS@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
FILECMD = @FILECMD@
|
||||
GREP = @GREP@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
|
@ -18,7 +18,7 @@ such as nuttcp and netperf, but were missing from the original iperf.
|
||||
These include, for example, a zero-copy mode and optional JSON output.
|
||||
Note that iperf3 is *not* backwards compatible with the original iperf.
|
||||
|
||||
Primary development for iperf3 takes place on CentOS Linux, FreeBSD,
|
||||
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.
|
||||
|
60
RELNOTES.md
60
RELNOTES.md
@ -1,8 +1,64 @@
|
||||
iperf3 Release Notes
|
||||
====================
|
||||
|
||||
iperf-3.12 2022-09-xx
|
||||
---------------------
|
||||
|
||||
* 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
|
||||
|
||||
@ -891,7 +947,7 @@ iperf 3.0b4 2010-08-02
|
||||
* Setting TCP window size (-w) is now supported
|
||||
* Updates to iperf_error
|
||||
* Added new errors
|
||||
* Should generate more relavent messages
|
||||
* 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
|
||||
|
243
aclocal.m4
vendored
243
aclocal.m4
vendored
@ -22,7 +22,8 @@ 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-2015 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1996-2001, 2003-2019, 2021-2022 Free Software
|
||||
# Foundation, Inc.
|
||||
# Written by Gordon Matzigkeit, 1996
|
||||
#
|
||||
# This file is free software; the Free Software Foundation gives
|
||||
@ -53,7 +54,7 @@ m4_define([_LT_COPYING], [dnl
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
])
|
||||
|
||||
# serial 58 LT_INIT
|
||||
# serial 59 LT_INIT
|
||||
|
||||
|
||||
# LT_PREREQ(VERSION)
|
||||
@ -203,6 +204,7 @@ 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
|
||||
@ -241,8 +243,8 @@ esac
|
||||
ofile=libtool
|
||||
can_build_shared=yes
|
||||
|
||||
# All known linkers require a '.a' archive for static linking (except MSVC,
|
||||
# which needs '.lib').
|
||||
# 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
|
||||
@ -794,7 +796,7 @@ _LT_EOF
|
||||
# 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" \
|
||||
$SED '$q' "$ltmain" >> "$cfgfile" \
|
||||
|| (rm -f "$cfgfile"; exit 1)
|
||||
|
||||
mv -f "$cfgfile" "$ofile" ||
|
||||
@ -1056,8 +1058,8 @@ 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 cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
|
||||
$AR cru libconftest.a conftest.o 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
|
||||
@ -1082,11 +1084,11 @@ _LT_EOF
|
||||
darwin1.*)
|
||||
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
|
||||
darwin*)
|
||||
case ${MACOSX_DEPLOYMENT_TARGET},$host in
|
||||
10.[[012]],*|,*powerpc*)
|
||||
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
|
||||
*)
|
||||
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
|
||||
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' ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
@ -1135,12 +1137,12 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
|
||||
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"
|
||||
_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_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"
|
||||
_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
|
||||
@ -1254,7 +1256,8 @@ _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
|
||||
# _LT_WITH_SYSROOT
|
||||
# ----------------
|
||||
AC_DEFUN([_LT_WITH_SYSROOT],
|
||||
[AC_MSG_CHECKING([for 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
|
||||
@ -1271,7 +1274,7 @@ case $with_sysroot in #(
|
||||
fi
|
||||
;; #(
|
||||
/*)
|
||||
lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
|
||||
lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"`
|
||||
;; #(
|
||||
no|'')
|
||||
;; #(
|
||||
@ -1301,7 +1304,7 @@ ia64-*-hpux*)
|
||||
# options accordingly.
|
||||
echo 'int i;' > conftest.$ac_ext
|
||||
if AC_TRY_EVAL(ac_compile); then
|
||||
case `/usr/bin/file conftest.$ac_objext` in
|
||||
case `$FILECMD conftest.$ac_objext` in
|
||||
*ELF-32*)
|
||||
HPUX_IA64_MODE=32
|
||||
;;
|
||||
@ -1318,7 +1321,7 @@ ia64-*-hpux*)
|
||||
echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
|
||||
if AC_TRY_EVAL(ac_compile); then
|
||||
if test yes = "$lt_cv_prog_gnu_ld"; then
|
||||
case `/usr/bin/file conftest.$ac_objext` in
|
||||
case `$FILECMD conftest.$ac_objext` in
|
||||
*32-bit*)
|
||||
LD="${LD-ld} -melf32bsmip"
|
||||
;;
|
||||
@ -1330,7 +1333,7 @@ ia64-*-hpux*)
|
||||
;;
|
||||
esac
|
||||
else
|
||||
case `/usr/bin/file conftest.$ac_objext` in
|
||||
case `$FILECMD conftest.$ac_objext` in
|
||||
*32-bit*)
|
||||
LD="${LD-ld} -32"
|
||||
;;
|
||||
@ -1352,7 +1355,7 @@ mips64*-*linux*)
|
||||
echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
|
||||
if AC_TRY_EVAL(ac_compile); then
|
||||
emul=elf
|
||||
case `/usr/bin/file conftest.$ac_objext` in
|
||||
case `$FILECMD conftest.$ac_objext` in
|
||||
*32-bit*)
|
||||
emul="${emul}32"
|
||||
;;
|
||||
@ -1360,7 +1363,7 @@ mips64*-*linux*)
|
||||
emul="${emul}64"
|
||||
;;
|
||||
esac
|
||||
case `/usr/bin/file conftest.$ac_objext` in
|
||||
case `$FILECMD conftest.$ac_objext` in
|
||||
*MSB*)
|
||||
emul="${emul}btsmip"
|
||||
;;
|
||||
@ -1368,7 +1371,7 @@ mips64*-*linux*)
|
||||
emul="${emul}ltsmip"
|
||||
;;
|
||||
esac
|
||||
case `/usr/bin/file conftest.$ac_objext` in
|
||||
case `$FILECMD conftest.$ac_objext` in
|
||||
*N32*)
|
||||
emul="${emul}n32"
|
||||
;;
|
||||
@ -1388,14 +1391,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
|
||||
# not appear in the list.
|
||||
echo 'int i;' > conftest.$ac_ext
|
||||
if AC_TRY_EVAL(ac_compile); then
|
||||
case `/usr/bin/file conftest.o` in
|
||||
case `$FILECMD conftest.o` in
|
||||
*32-bit*)
|
||||
case $host in
|
||||
x86_64-*kfreebsd*-gnu)
|
||||
LD="${LD-ld} -m elf_i386_fbsd"
|
||||
;;
|
||||
x86_64-*linux*)
|
||||
case `/usr/bin/file conftest.o` in
|
||||
case `$FILECMD conftest.o` in
|
||||
*x86-64*)
|
||||
LD="${LD-ld} -m elf32_x86_64"
|
||||
;;
|
||||
@ -1463,7 +1466,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
|
||||
# options accordingly.
|
||||
echo 'int i;' > conftest.$ac_ext
|
||||
if AC_TRY_EVAL(ac_compile); then
|
||||
case `/usr/bin/file conftest.o` in
|
||||
case `$FILECMD conftest.o` in
|
||||
*64-bit*)
|
||||
case $lt_cv_prog_gnu_ld in
|
||||
yes*)
|
||||
@ -1502,9 +1505,22 @@ need_locks=$enable_libtool_lock
|
||||
m4_defun([_LT_PROG_AR],
|
||||
[AC_CHECK_TOOLS(AR, [ar], false)
|
||||
: ${AR=ar}
|
||||
: ${AR_FLAGS=cru}
|
||||
_LT_DECL([], [AR], [1], [The archiver])
|
||||
_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])
|
||||
|
||||
# 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 thats 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
|
||||
@ -1723,7 +1739,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
|
||||
lt_cv_sys_max_cmd_len=8192;
|
||||
;;
|
||||
|
||||
bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
|
||||
bitrig* | 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`
|
||||
@ -1766,7 +1782,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
|
||||
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/.*[[ ]]//'`
|
||||
lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[[ ]]//'`
|
||||
else
|
||||
lt_cv_sys_max_cmd_len=32768
|
||||
fi
|
||||
@ -2216,26 +2232,35 @@ m4_defun([_LT_CMD_STRIPLIB],
|
||||
striplib=
|
||||
old_striplib=
|
||||
AC_MSG_CHECKING([whether stripping libraries is possible])
|
||||
if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
|
||||
test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
|
||||
test -z "$striplib" && striplib="$STRIP --strip-unneeded"
|
||||
AC_MSG_RESULT([yes])
|
||||
if test -z "$STRIP"; then
|
||||
AC_MSG_RESULT([no])
|
||||
else
|
||||
# FIXME - insert some real tests, host_os isn't really good enough
|
||||
case $host_os in
|
||||
darwin*)
|
||||
if test -n "$STRIP"; then
|
||||
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])
|
||||
else
|
||||
;;
|
||||
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])
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
AC_MSG_RESULT([no])
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
|
||||
_LT_DECL([], [striplib], [1])
|
||||
@ -2558,7 +2583,7 @@ cygwin* | mingw* | pw32* | cegcc*)
|
||||
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'
|
||||
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"])
|
||||
;;
|
||||
@ -2568,14 +2593,14 @@ m4_if([$1], [],[
|
||||
;;
|
||||
pw32*)
|
||||
# pw32 DLLs use 'pw' prefix rather than 'lib'
|
||||
library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
|
||||
library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
|
||||
;;
|
||||
esac
|
||||
dynamic_linker='Win32 ld.exe'
|
||||
;;
|
||||
|
||||
*,cl*)
|
||||
# Native MSVC
|
||||
*,cl* | *,icl*)
|
||||
# Native MSVC or ICC
|
||||
libname_spec='$name'
|
||||
soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
|
||||
library_names_spec='$libname.dll.lib'
|
||||
@ -2594,7 +2619,7 @@ m4_if([$1], [],[
|
||||
done
|
||||
IFS=$lt_save_ifs
|
||||
# Convert to MSYS style.
|
||||
sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
|
||||
sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
|
||||
;;
|
||||
cygwin*)
|
||||
# Convert to unix form, then to dos form, then back to unix form
|
||||
@ -2631,7 +2656,7 @@ m4_if([$1], [],[
|
||||
;;
|
||||
|
||||
*)
|
||||
# Assume MSVC wrapper
|
||||
# Assume MSVC and ICC wrapper
|
||||
library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib'
|
||||
dynamic_linker='Win32 ld.exe'
|
||||
;;
|
||||
@ -2664,7 +2689,7 @@ dgux*)
|
||||
shlibpath_var=LD_LIBRARY_PATH
|
||||
;;
|
||||
|
||||
freebsd* | dragonfly*)
|
||||
freebsd* | dragonfly* | midnightbsd*)
|
||||
# DragonFly does not have aout. When/if they implement a new
|
||||
# versioning mechanism, adjust this.
|
||||
if test -x /usr/bin/objformat; then
|
||||
@ -3463,7 +3488,7 @@ beos*)
|
||||
|
||||
bsdi[[45]]*)
|
||||
lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
|
||||
lt_cv_file_magic_cmd='/usr/bin/file -L'
|
||||
lt_cv_file_magic_cmd='$FILECMD -L'
|
||||
lt_cv_file_magic_test_file=/shlib/libc.so
|
||||
;;
|
||||
|
||||
@ -3497,14 +3522,14 @@ darwin* | rhapsody*)
|
||||
lt_cv_deplibs_check_method=pass_all
|
||||
;;
|
||||
|
||||
freebsd* | dragonfly*)
|
||||
freebsd* | dragonfly* | midnightbsd*)
|
||||
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
|
||||
case $host_cpu in
|
||||
i*86 )
|
||||
# Not sure whether the presence of OpenBSD here was a mistake.
|
||||
# Let's accept both of them until this is cleared up.
|
||||
lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
|
||||
lt_cv_file_magic_cmd=/usr/bin/file
|
||||
lt_cv_file_magic_cmd=$FILECMD
|
||||
lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
|
||||
;;
|
||||
esac
|
||||
@ -3518,7 +3543,7 @@ haiku*)
|
||||
;;
|
||||
|
||||
hpux10.20* | hpux11*)
|
||||
lt_cv_file_magic_cmd=/usr/bin/file
|
||||
lt_cv_file_magic_cmd=$FILECMD
|
||||
case $host_cpu in
|
||||
ia64*)
|
||||
lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
|
||||
@ -3565,7 +3590,7 @@ netbsd*)
|
||||
|
||||
newos6*)
|
||||
lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
|
||||
lt_cv_file_magic_cmd=/usr/bin/file
|
||||
lt_cv_file_magic_cmd=$FILECMD
|
||||
lt_cv_file_magic_test_file=/usr/lib/libnls.so
|
||||
;;
|
||||
|
||||
@ -3692,13 +3717,13 @@ else
|
||||
mingw*) lt_bad_file=conftest.nm/nofile ;;
|
||||
*) lt_bad_file=/dev/null ;;
|
||||
esac
|
||||
case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
|
||||
case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in
|
||||
*$lt_bad_file* | *'Invalid file or object type'*)
|
||||
lt_cv_path_NM="$tmp_nm -B"
|
||||
break 2
|
||||
;;
|
||||
*)
|
||||
case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
|
||||
case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in
|
||||
*/dev/null*)
|
||||
lt_cv_path_NM="$tmp_nm -p"
|
||||
break 2
|
||||
@ -3724,7 +3749,7 @@ else
|
||||
# Let the user override the test.
|
||||
else
|
||||
AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
|
||||
case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
|
||||
case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in
|
||||
*COFF*)
|
||||
DUMPBIN="$DUMPBIN -symbols -headers"
|
||||
;;
|
||||
@ -3964,7 +3989,7 @@ esac
|
||||
|
||||
if test "$lt_cv_nm_interface" = "MS dumpbin"; then
|
||||
# Gets list of data symbols to import.
|
||||
lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
|
||||
lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'"
|
||||
# Adjust the below global symbol transforms to fixup imported variables.
|
||||
lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
|
||||
lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'"
|
||||
@ -3982,20 +4007,20 @@ fi
|
||||
# Transform an extracted symbol line into a proper C declaration.
|
||||
# Some systems (esp. on ia64) link data and code symbols differently,
|
||||
# so use this general approach.
|
||||
lt_cv_sys_global_symbol_to_cdecl="sed -n"\
|
||||
lt_cv_sys_global_symbol_to_cdecl="$SED -n"\
|
||||
$lt_cdecl_hook\
|
||||
" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
|
||||
" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
|
||||
|
||||
# Transform an extracted symbol line into symbol name and symbol address
|
||||
lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
|
||||
lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\
|
||||
$lt_c_name_hook\
|
||||
" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
|
||||
" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'"
|
||||
|
||||
# Transform an extracted symbol line into symbol name with lib prefix and
|
||||
# symbol address.
|
||||
lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
|
||||
lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\
|
||||
$lt_c_name_lib_hook\
|
||||
" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
|
||||
" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\
|
||||
@ -4019,7 +4044,7 @@ for ac_symprfx in "" "_"; do
|
||||
if test "$lt_cv_nm_interface" = "MS dumpbin"; then
|
||||
# Fake it for dumpbin and say T for any non-static function,
|
||||
# D for any global variable and I for any imported variable.
|
||||
# Also find C++ and __fastcall symbols from MSVC++,
|
||||
# Also find C++ and __fastcall symbols from MSVC++ or ICC,
|
||||
# which start with @ or ?.
|
||||
lt_cv_sys_global_symbol_pipe="$AWK ['"\
|
||||
" {last_section=section; section=\$ 3};"\
|
||||
@ -4037,9 +4062,9 @@ for ac_symprfx in "" "_"; do
|
||||
" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
|
||||
" ' prfx=^$ac_symprfx]"
|
||||
else
|
||||
lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
|
||||
lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
|
||||
fi
|
||||
lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
|
||||
lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'"
|
||||
|
||||
# Check to see that the pipe works correctly.
|
||||
pipe_works=no
|
||||
@ -4326,7 +4351,7 @@ m4_if([$1], [CXX], [
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
freebsd* | dragonfly*)
|
||||
freebsd* | dragonfly* | midnightbsd*)
|
||||
# FreeBSD uses GNU C++
|
||||
;;
|
||||
hpux9* | hpux10* | hpux11*)
|
||||
@ -4409,7 +4434,7 @@ m4_if([$1], [CXX], [
|
||||
_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
|
||||
;;
|
||||
*)
|
||||
case `$CC -V 2>&1 | sed 5q` in
|
||||
case `$CC -V 2>&1 | $SED 5q` in
|
||||
*Sun\ C*)
|
||||
# Sun C++ 5.9
|
||||
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
|
||||
@ -4745,7 +4770,7 @@ m4_if([$1], [CXX], [
|
||||
_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
|
||||
;;
|
||||
*)
|
||||
case `$CC -V 2>&1 | sed 5q` in
|
||||
case `$CC -V 2>&1 | $SED 5q` in
|
||||
*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*)
|
||||
# Sun Fortran 8.3 passes all unrecognized flags to the linker
|
||||
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
|
||||
@ -4928,7 +4953,7 @@ m4_if([$1], [CXX], [
|
||||
if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
|
||||
_LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
|
||||
else
|
||||
_LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
|
||||
_LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
|
||||
fi
|
||||
;;
|
||||
pw32*)
|
||||
@ -4936,7 +4961,7 @@ m4_if([$1], [CXX], [
|
||||
;;
|
||||
cygwin* | mingw* | cegcc*)
|
||||
case $cc_basename in
|
||||
cl*)
|
||||
cl* | icl*)
|
||||
_LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
|
||||
;;
|
||||
*)
|
||||
@ -4993,15 +5018,15 @@ dnl Note also adjust exclude_expsyms for C++ above.
|
||||
|
||||
case $host_os in
|
||||
cygwin* | mingw* | pw32* | cegcc*)
|
||||
# FIXME: the MSVC++ port hasn't been tested in a loooong time
|
||||
# FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time
|
||||
# When not using gcc, we currently assume that we are using
|
||||
# Microsoft Visual C++.
|
||||
# Microsoft Visual C++ or Intel C++ Compiler.
|
||||
if test yes != "$GCC"; then
|
||||
with_gnu_ld=no
|
||||
fi
|
||||
;;
|
||||
interix*)
|
||||
# we just hope/assume this is gcc and not c89 (= MSVC++)
|
||||
# we just hope/assume this is gcc and not c89 (= MSVC++ or ICC)
|
||||
with_gnu_ld=yes
|
||||
;;
|
||||
openbsd* | bitrig*)
|
||||
@ -5053,7 +5078,7 @@ dnl Note also adjust exclude_expsyms for C++ above.
|
||||
_LT_TAGVAR(whole_archive_flag_spec, $1)=
|
||||
fi
|
||||
supports_anon_versioning=no
|
||||
case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in
|
||||
case `$LD -v | $SED -e 's/([[^)]]\+)\s\+//' 2>&1` in
|
||||
*GNU\ gold*) supports_anon_versioning=yes ;;
|
||||
*\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
|
||||
*\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
|
||||
@ -5165,6 +5190,7 @@ _LT_EOF
|
||||
emximp -o $lib $output_objdir/$libname.def'
|
||||
_LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
|
||||
_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
|
||||
_LT_TAGVAR(file_list_spec, $1)='@'
|
||||
;;
|
||||
|
||||
interix[[3-9]]*)
|
||||
@ -5179,7 +5205,7 @@ _LT_EOF
|
||||
# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
|
||||
# time. Moving up from 0x10000000 also allows more sbrk(2) space.
|
||||
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
|
||||
_LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
|
||||
_LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
|
||||
;;
|
||||
|
||||
gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
|
||||
@ -5222,7 +5248,7 @@ _LT_EOF
|
||||
_LT_TAGVAR(compiler_needs_object, $1)=yes
|
||||
;;
|
||||
esac
|
||||
case `$CC -V 2>&1 | sed 5q` in
|
||||
case `$CC -V 2>&1 | $SED 5q` in
|
||||
*Sun\ C*) # Sun C 5.9
|
||||
_LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
|
||||
_LT_TAGVAR(compiler_needs_object, $1)=yes
|
||||
@ -5234,7 +5260,7 @@ _LT_EOF
|
||||
|
||||
if test yes = "$supports_anon_versioning"; then
|
||||
_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
|
||||
cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
|
||||
cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
|
||||
echo "local: *; };" >> $output_objdir/$libname.ver~
|
||||
$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
|
||||
fi
|
||||
@ -5250,7 +5276,7 @@ _LT_EOF
|
||||
_LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
|
||||
if test yes = "$supports_anon_versioning"; then
|
||||
_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
|
||||
cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
|
||||
cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
|
||||
echo "local: *; };" >> $output_objdir/$libname.ver~
|
||||
$LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
|
||||
fi
|
||||
@ -5382,7 +5408,7 @@ _LT_EOF
|
||||
if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
|
||||
_LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
|
||||
else
|
||||
_LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
|
||||
_LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
|
||||
fi
|
||||
aix_use_runtimelinking=no
|
||||
|
||||
@ -5565,12 +5591,12 @@ _LT_EOF
|
||||
|
||||
cygwin* | mingw* | pw32* | cegcc*)
|
||||
# When not using gcc, we currently assume that we are using
|
||||
# Microsoft Visual C++.
|
||||
# Microsoft Visual C++ or Intel C++ Compiler.
|
||||
# hardcode_libdir_flag_spec is actually meaningless, as there is
|
||||
# no search path for DLLs.
|
||||
case $cc_basename in
|
||||
cl*)
|
||||
# Native MSVC
|
||||
cl* | icl*)
|
||||
# Native MSVC or ICC
|
||||
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
|
||||
_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
|
||||
_LT_TAGVAR(always_export_symbols, $1)=yes
|
||||
@ -5611,7 +5637,7 @@ _LT_EOF
|
||||
fi'
|
||||
;;
|
||||
*)
|
||||
# Assume MSVC wrapper
|
||||
# Assume MSVC and ICC wrapper
|
||||
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
|
||||
_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
|
||||
# Tell ltmain to make .lib files, not .a files.
|
||||
@ -5659,7 +5685,7 @@ _LT_EOF
|
||||
;;
|
||||
|
||||
# FreeBSD 3 and greater uses gcc -shared to do shared libraries.
|
||||
freebsd* | dragonfly*)
|
||||
freebsd* | dragonfly* | midnightbsd*)
|
||||
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
|
||||
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
|
||||
_LT_TAGVAR(hardcode_direct, $1)=yes
|
||||
@ -5870,6 +5896,7 @@ _LT_EOF
|
||||
emximp -o $lib $output_objdir/$libname.def'
|
||||
_LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
|
||||
_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
|
||||
_LT_TAGVAR(file_list_spec, $1)='@'
|
||||
;;
|
||||
|
||||
osf3*)
|
||||
@ -6636,8 +6663,8 @@ if test yes != "$_lt_caught_CXX_error"; then
|
||||
|
||||
cygwin* | mingw* | pw32* | cegcc*)
|
||||
case $GXX,$cc_basename in
|
||||
,cl* | no,cl*)
|
||||
# Native MSVC
|
||||
,cl* | no,cl* | ,icl* | no,icl*)
|
||||
# Native MSVC or ICC
|
||||
# hardcode_libdir_flag_spec is actually meaningless, as there is
|
||||
# no search path for DLLs.
|
||||
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
|
||||
@ -6735,6 +6762,7 @@ if test yes != "$_lt_caught_CXX_error"; then
|
||||
emximp -o $lib $output_objdir/$libname.def'
|
||||
_LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
|
||||
_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
|
||||
_LT_TAGVAR(file_list_spec, $1)='@'
|
||||
;;
|
||||
|
||||
dgux*)
|
||||
@ -6765,7 +6793,7 @@ if test yes != "$_lt_caught_CXX_error"; then
|
||||
_LT_TAGVAR(archive_cmds_need_lc, $1)=no
|
||||
;;
|
||||
|
||||
freebsd* | dragonfly*)
|
||||
freebsd* | dragonfly* | midnightbsd*)
|
||||
# FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
|
||||
# conventions
|
||||
_LT_TAGVAR(ld_shlibs, $1)=yes
|
||||
@ -6902,7 +6930,7 @@ if test yes != "$_lt_caught_CXX_error"; then
|
||||
# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
|
||||
# time. Moving up from 0x10000000 also allows more sbrk(2) space.
|
||||
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
|
||||
_LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
|
||||
_LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
|
||||
;;
|
||||
irix5* | irix6*)
|
||||
case $cc_basename in
|
||||
@ -7042,13 +7070,13 @@ if test yes != "$_lt_caught_CXX_error"; then
|
||||
_LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
|
||||
if test yes = "$supports_anon_versioning"; then
|
||||
_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
|
||||
cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
|
||||
cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
|
||||
echo "local: *; };" >> $output_objdir/$libname.ver~
|
||||
$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
case `$CC -V 2>&1 | sed 5q` in
|
||||
case `$CC -V 2>&1 | $SED 5q` in
|
||||
*Sun\ C*)
|
||||
# Sun C++ 5.9
|
||||
_LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
|
||||
@ -8186,6 +8214,14 @@ _LT_DECL([], [DLLTOOL], [1], [DLL creation program])
|
||||
AC_SUBST([DLLTOOL])
|
||||
])
|
||||
|
||||
# _LT_DECL_FILECMD
|
||||
# ----------------
|
||||
# Check for a file(cmd) program that can be used to detect file type and magic
|
||||
m4_defun([_LT_DECL_FILECMD],
|
||||
[AC_CHECK_TOOL([FILECMD], [file], [:])
|
||||
_LT_DECL([], [FILECMD], [1], [A file(cmd) program that detects file types])
|
||||
])# _LD_DECL_FILECMD
|
||||
|
||||
# _LT_DECL_SED
|
||||
# ------------
|
||||
# Check for a fully-functional sed program, that truncates
|
||||
@ -8365,8 +8401,8 @@ _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd],
|
||||
|
||||
# Helper functions for option handling. -*- Autoconf -*-
|
||||
#
|
||||
# Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software
|
||||
# Foundation, Inc.
|
||||
# Copyright (C) 2004-2005, 2007-2009, 2011-2019, 2021-2022 Free
|
||||
# Software Foundation, Inc.
|
||||
# Written by Gary V. Vaughan, 2004
|
||||
#
|
||||
# This file is free software; the Free Software Foundation gives
|
||||
@ -8797,7 +8833,7 @@ LT_OPTION_DEFINE([LTDL_INIT], [convenience],
|
||||
|
||||
# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*-
|
||||
#
|
||||
# Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software
|
||||
# Copyright (C) 2004-2005, 2007-2008, 2011-2019, 2021-2022 Free Software
|
||||
# Foundation, Inc.
|
||||
# Written by Gary V. Vaughan, 2004
|
||||
#
|
||||
@ -8922,7 +8958,8 @@ m4_define([lt_dict_filter],
|
||||
|
||||
# ltversion.m4 -- version numbers -*- Autoconf -*-
|
||||
#
|
||||
# Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2004, 2011-2019, 2021-2022 Free Software Foundation,
|
||||
# Inc.
|
||||
# Written by Scott James Remnant, 2004
|
||||
#
|
||||
# This file is free software; the Free Software Foundation gives
|
||||
@ -8931,23 +8968,23 @@ m4_define([lt_dict_filter],
|
||||
|
||||
# @configure_input@
|
||||
|
||||
# serial 4179 ltversion.m4
|
||||
# serial 4245 ltversion.m4
|
||||
# This file is part of GNU Libtool
|
||||
|
||||
m4_define([LT_PACKAGE_VERSION], [2.4.6])
|
||||
m4_define([LT_PACKAGE_REVISION], [2.4.6])
|
||||
m4_define([LT_PACKAGE_VERSION], [2.4.7])
|
||||
m4_define([LT_PACKAGE_REVISION], [2.4.7])
|
||||
|
||||
AC_DEFUN([LTVERSION_VERSION],
|
||||
[macro_version='2.4.6'
|
||||
macro_revision='2.4.6'
|
||||
[macro_version='2.4.7'
|
||||
macro_revision='2.4.7'
|
||||
_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
|
||||
_LT_DECL(, macro_revision, 0)
|
||||
])
|
||||
|
||||
# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*-
|
||||
#
|
||||
# Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software
|
||||
# Foundation, Inc.
|
||||
# Copyright (C) 2004-2005, 2007, 2009, 2011-2019, 2021-2022 Free
|
||||
# Software Foundation, Inc.
|
||||
# Written by Scott James Remnant, 2004.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation gives
|
||||
|
22
bootstrap.sh
22
bootstrap.sh
@ -30,25 +30,5 @@
|
||||
# script to regenerate all of the autotools-built files.
|
||||
# Normally, this is only of use to developers.
|
||||
|
||||
# Figure out how to invoke libtoolize. On MacOS (with MacPorts)
|
||||
# it's invoked as glibtoolize.
|
||||
if libtoolize --version >/dev/null 2>&1; then
|
||||
libtoolize=libtoolize
|
||||
elif glibtoolize --version >/dev/null 2>&1; then
|
||||
libtoolize=glibtoolize
|
||||
else
|
||||
libtoolize=""
|
||||
fi
|
||||
if [ "x$libtoolize" = "x" ]; then
|
||||
echo "Can't find libtoolize, exiting."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Execute the various autotools commands in the correct order.
|
||||
set -x
|
||||
$libtoolize --copy --force --automake
|
||||
aclocal -I config
|
||||
autoheader
|
||||
automake --add-missing --copy
|
||||
autoconf
|
||||
autoreconf -fi
|
||||
rm -rf config.cache
|
||||
|
1686
config/config.guess
vendored
1686
config/config.guess
vendored
File diff suppressed because it is too large
Load Diff
2939
config/config.sub
vendored
2939
config/config.sub
vendored
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
# install - install a program, script, or datafile
|
||||
|
||||
scriptversion=2011-11-20.07; # UTC
|
||||
scriptversion=2020-11-14.01; # UTC
|
||||
|
||||
# This originates from X11R5 (mit/util/scripts/install.sh), which was
|
||||
# later released in X11R6 (xc/config/util/install.sh) with the
|
||||
@ -41,19 +41,15 @@ scriptversion=2011-11-20.07; # UTC
|
||||
# This script is compatible with the BSD install script, but was written
|
||||
# from scratch.
|
||||
|
||||
tab=' '
|
||||
nl='
|
||||
'
|
||||
IFS=" "" $nl"
|
||||
IFS=" $tab$nl"
|
||||
|
||||
# set DOITPROG to echo to test this script
|
||||
# Set DOITPROG to "echo" to test this script.
|
||||
|
||||
# Don't use :- since 4.3BSD and earlier shells don't like it.
|
||||
doit=${DOITPROG-}
|
||||
if test -z "$doit"; then
|
||||
doit_exec=exec
|
||||
else
|
||||
doit_exec=$doit
|
||||
fi
|
||||
doit_exec=${doit:-exec}
|
||||
|
||||
# Put in absolute file names if you don't have them in your path;
|
||||
# or use environment vars.
|
||||
@ -68,22 +64,16 @@ mvprog=${MVPROG-mv}
|
||||
rmprog=${RMPROG-rm}
|
||||
stripprog=${STRIPPROG-strip}
|
||||
|
||||
posix_glob='?'
|
||||
initialize_posix_glob='
|
||||
test "$posix_glob" != "?" || {
|
||||
if (set -f) 2>/dev/null; then
|
||||
posix_glob=
|
||||
else
|
||||
posix_glob=:
|
||||
fi
|
||||
}
|
||||
'
|
||||
|
||||
posix_mkdir=
|
||||
|
||||
# Desired mode of installed file.
|
||||
mode=0755
|
||||
|
||||
# Create dirs (including intermediate dirs) using mode 755.
|
||||
# This is like GNU 'install' as of coreutils 8.32 (2020).
|
||||
mkdir_umask=22
|
||||
|
||||
backupsuffix=
|
||||
chgrpcmd=
|
||||
chmodcmd=$chmodprog
|
||||
chowncmd=
|
||||
@ -97,7 +87,7 @@ dir_arg=
|
||||
dst_arg=
|
||||
|
||||
copy_on_change=false
|
||||
no_target_directory=
|
||||
is_target_a_directory=possibly
|
||||
|
||||
usage="\
|
||||
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
|
||||
@ -114,18 +104,28 @@ Options:
|
||||
--version display version info and exit.
|
||||
|
||||
-c (ignored)
|
||||
-C install only if different (preserve the last data modification time)
|
||||
-C install only if different (preserve data modification time)
|
||||
-d create directories instead of installing files.
|
||||
-g GROUP $chgrpprog installed files to GROUP.
|
||||
-m MODE $chmodprog installed files to MODE.
|
||||
-o USER $chownprog installed files to USER.
|
||||
-p pass -p to $cpprog.
|
||||
-s $stripprog installed files.
|
||||
-S SUFFIX attempt to back up existing files, with suffix SUFFIX.
|
||||
-t DIRECTORY install into DIRECTORY.
|
||||
-T report an error if DSTFILE is a directory.
|
||||
|
||||
Environment variables override the default commands:
|
||||
CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
|
||||
RMPROG STRIPPROG
|
||||
|
||||
By default, rm is invoked with -f; when overridden with RMPROG,
|
||||
it's up to you to specify -f if you want it.
|
||||
|
||||
If -S is not specified, no backups are attempted.
|
||||
|
||||
Email bug reports to bug-automake@gnu.org.
|
||||
Automake home page: https://www.gnu.org/software/automake/
|
||||
"
|
||||
|
||||
while test $# -ne 0; do
|
||||
@ -137,46 +137,62 @@ while test $# -ne 0; do
|
||||
-d) dir_arg=true;;
|
||||
|
||||
-g) chgrpcmd="$chgrpprog $2"
|
||||
shift;;
|
||||
shift;;
|
||||
|
||||
--help) echo "$usage"; exit $?;;
|
||||
|
||||
-m) mode=$2
|
||||
case $mode in
|
||||
*' '* | *' '* | *'
|
||||
'* | *'*'* | *'?'* | *'['*)
|
||||
echo "$0: invalid mode: $mode" >&2
|
||||
exit 1;;
|
||||
esac
|
||||
shift;;
|
||||
case $mode in
|
||||
*' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
|
||||
echo "$0: invalid mode: $mode" >&2
|
||||
exit 1;;
|
||||
esac
|
||||
shift;;
|
||||
|
||||
-o) chowncmd="$chownprog $2"
|
||||
shift;;
|
||||
shift;;
|
||||
|
||||
-p) cpprog="$cpprog -p";;
|
||||
|
||||
-s) stripcmd=$stripprog;;
|
||||
|
||||
-t) dst_arg=$2
|
||||
# Protect names problematic for 'test' and other utilities.
|
||||
case $dst_arg in
|
||||
-* | [=\(\)!]) dst_arg=./$dst_arg;;
|
||||
esac
|
||||
shift;;
|
||||
-S) backupsuffix="$2"
|
||||
shift;;
|
||||
|
||||
-T) no_target_directory=true;;
|
||||
-t)
|
||||
is_target_a_directory=always
|
||||
dst_arg=$2
|
||||
# Protect names problematic for 'test' and other utilities.
|
||||
case $dst_arg in
|
||||
-* | [=\(\)!]) dst_arg=./$dst_arg;;
|
||||
esac
|
||||
shift;;
|
||||
|
||||
-T) is_target_a_directory=never;;
|
||||
|
||||
--version) echo "$0 $scriptversion"; exit $?;;
|
||||
|
||||
--) shift
|
||||
break;;
|
||||
--) shift
|
||||
break;;
|
||||
|
||||
-*) echo "$0: invalid option: $1" >&2
|
||||
exit 1;;
|
||||
-*) echo "$0: invalid option: $1" >&2
|
||||
exit 1;;
|
||||
|
||||
*) break;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
# We allow the use of options -d and -T together, by making -d
|
||||
# take the precedence; this is for compatibility with GNU install.
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
if test -n "$dst_arg"; then
|
||||
echo "$0: target directory not allowed when installing a directory." >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
|
||||
# When -d is used, all remaining arguments are directories to create.
|
||||
# When -t is used, the destination is already specified.
|
||||
@ -207,6 +223,15 @@ if test $# -eq 0; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if test -z "$dir_arg"; then
|
||||
if test $# -gt 1 || test "$is_target_a_directory" = always; then
|
||||
if test ! -d "$dst_arg"; then
|
||||
echo "$0: $dst_arg: Is not a directory." >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test -z "$dir_arg"; then
|
||||
do_exit='(exit $ret); exit $ret'
|
||||
trap "ret=129; $do_exit" 1
|
||||
@ -223,16 +248,16 @@ if test -z "$dir_arg"; then
|
||||
|
||||
*[0-7])
|
||||
if test -z "$stripcmd"; then
|
||||
u_plus_rw=
|
||||
u_plus_rw=
|
||||
else
|
||||
u_plus_rw='% 200'
|
||||
u_plus_rw='% 200'
|
||||
fi
|
||||
cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
|
||||
*)
|
||||
if test -z "$stripcmd"; then
|
||||
u_plus_rw=
|
||||
u_plus_rw=
|
||||
else
|
||||
u_plus_rw=,u+rw
|
||||
u_plus_rw=,u+rw
|
||||
fi
|
||||
cp_umask=$mode$u_plus_rw;;
|
||||
esac
|
||||
@ -250,6 +275,10 @@ do
|
||||
dstdir=$dst
|
||||
test -d "$dstdir"
|
||||
dstdir_status=$?
|
||||
# Don't chown directories that already exist.
|
||||
if test $dstdir_status = 0; then
|
||||
chowncmd=""
|
||||
fi
|
||||
else
|
||||
|
||||
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
|
||||
@ -266,178 +295,148 @@ do
|
||||
fi
|
||||
dst=$dst_arg
|
||||
|
||||
# If destination is a directory, append the input filename; won't work
|
||||
# if double slashes aren't ignored.
|
||||
# If destination is a directory, append the input filename.
|
||||
if test -d "$dst"; then
|
||||
if test -n "$no_target_directory"; then
|
||||
echo "$0: $dst_arg: Is a directory" >&2
|
||||
exit 1
|
||||
if test "$is_target_a_directory" = never; then
|
||||
echo "$0: $dst_arg: Is a directory" >&2
|
||||
exit 1
|
||||
fi
|
||||
dstdir=$dst
|
||||
dst=$dstdir/`basename "$src"`
|
||||
dstbase=`basename "$src"`
|
||||
case $dst in
|
||||
*/) dst=$dst$dstbase;;
|
||||
*) dst=$dst/$dstbase;;
|
||||
esac
|
||||
dstdir_status=0
|
||||
else
|
||||
# Prefer dirname, but fall back on a substitute if dirname fails.
|
||||
dstdir=`
|
||||
(dirname "$dst") 2>/dev/null ||
|
||||
expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
||||
X"$dst" : 'X\(//\)[^/]' \| \
|
||||
X"$dst" : 'X\(//\)$' \| \
|
||||
X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
|
||||
echo X"$dst" |
|
||||
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
/^X\(\/\/\)[^/].*/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
/^X\(\/\/\)$/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
/^X\(\/\).*/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
s/.*/./; q'
|
||||
`
|
||||
|
||||
dstdir=`dirname "$dst"`
|
||||
test -d "$dstdir"
|
||||
dstdir_status=$?
|
||||
fi
|
||||
fi
|
||||
|
||||
case $dstdir in
|
||||
*/) dstdirslash=$dstdir;;
|
||||
*) dstdirslash=$dstdir/;;
|
||||
esac
|
||||
|
||||
obsolete_mkdir_used=false
|
||||
|
||||
if test $dstdir_status != 0; then
|
||||
case $posix_mkdir in
|
||||
'')
|
||||
# Create intermediate dirs using mode 755 as modified by the umask.
|
||||
# This is like FreeBSD 'install' as of 1997-10-28.
|
||||
umask=`umask`
|
||||
case $stripcmd.$umask in
|
||||
# Optimize common cases.
|
||||
*[2367][2367]) mkdir_umask=$umask;;
|
||||
.*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
|
||||
# With -d, create the new directory with the user-specified mode.
|
||||
# Otherwise, rely on $mkdir_umask.
|
||||
if test -n "$dir_arg"; then
|
||||
mkdir_mode=-m$mode
|
||||
else
|
||||
mkdir_mode=
|
||||
fi
|
||||
|
||||
*[0-7])
|
||||
mkdir_umask=`expr $umask + 22 \
|
||||
- $umask % 100 % 40 + $umask % 20 \
|
||||
- $umask % 10 % 4 + $umask % 2
|
||||
`;;
|
||||
*) mkdir_umask=$umask,go-w;;
|
||||
esac
|
||||
posix_mkdir=false
|
||||
# The $RANDOM variable is not portable (e.g., dash). Use it
|
||||
# here however when possible just to lower collision chance.
|
||||
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
|
||||
|
||||
# With -d, create the new directory with the user-specified mode.
|
||||
# Otherwise, rely on $mkdir_umask.
|
||||
if test -n "$dir_arg"; then
|
||||
mkdir_mode=-m$mode
|
||||
trap '
|
||||
ret=$?
|
||||
rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null
|
||||
exit $ret
|
||||
' 0
|
||||
|
||||
# Because "mkdir -p" follows existing symlinks and we likely work
|
||||
# directly in world-writeable /tmp, make sure that the '$tmpdir'
|
||||
# directory is successfully created first before we actually test
|
||||
# 'mkdir -p'.
|
||||
if (umask $mkdir_umask &&
|
||||
$mkdirprog $mkdir_mode "$tmpdir" &&
|
||||
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
|
||||
then
|
||||
if test -z "$dir_arg" || {
|
||||
# Check for POSIX incompatibilities with -m.
|
||||
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
|
||||
# other-writable bit of parent directory when it shouldn't.
|
||||
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
|
||||
test_tmpdir="$tmpdir/a"
|
||||
ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
|
||||
case $ls_ld_tmpdir in
|
||||
d????-?r-*) different_mode=700;;
|
||||
d????-?--*) different_mode=755;;
|
||||
*) false;;
|
||||
esac &&
|
||||
$mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
|
||||
ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
|
||||
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
|
||||
}
|
||||
}
|
||||
then posix_mkdir=:
|
||||
fi
|
||||
rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
|
||||
else
|
||||
mkdir_mode=
|
||||
# Remove any dirs left behind by ancient mkdir implementations.
|
||||
rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
|
||||
fi
|
||||
|
||||
posix_mkdir=false
|
||||
case $umask in
|
||||
*[123567][0-7][0-7])
|
||||
# POSIX mkdir -p sets u+wx bits regardless of umask, which
|
||||
# is incompatible with FreeBSD 'install' when (umask & 300) != 0.
|
||||
;;
|
||||
*)
|
||||
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
|
||||
trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
|
||||
|
||||
if (umask $mkdir_umask &&
|
||||
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
|
||||
then
|
||||
if test -z "$dir_arg" || {
|
||||
# Check for POSIX incompatibilities with -m.
|
||||
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
|
||||
# other-writable bit of parent directory when it shouldn't.
|
||||
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
|
||||
ls_ld_tmpdir=`ls -ld "$tmpdir"`
|
||||
case $ls_ld_tmpdir in
|
||||
d????-?r-*) different_mode=700;;
|
||||
d????-?--*) different_mode=755;;
|
||||
*) false;;
|
||||
esac &&
|
||||
$mkdirprog -m$different_mode -p -- "$tmpdir" && {
|
||||
ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
|
||||
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
|
||||
}
|
||||
}
|
||||
then posix_mkdir=:
|
||||
fi
|
||||
rmdir "$tmpdir/d" "$tmpdir"
|
||||
else
|
||||
# Remove any dirs left behind by ancient mkdir implementations.
|
||||
rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
|
||||
fi
|
||||
trap '' 0;;
|
||||
esac;;
|
||||
trap '' 0;;
|
||||
esac
|
||||
|
||||
if
|
||||
$posix_mkdir && (
|
||||
umask $mkdir_umask &&
|
||||
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
|
||||
umask $mkdir_umask &&
|
||||
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
|
||||
)
|
||||
then :
|
||||
else
|
||||
|
||||
# The umask is ridiculous, or mkdir does not conform to POSIX,
|
||||
# mkdir does not conform to POSIX,
|
||||
# or it failed possibly due to a race condition. Create the
|
||||
# directory the slow way, step by step, checking for races as we go.
|
||||
|
||||
case $dstdir in
|
||||
/*) prefix='/';;
|
||||
[-=\(\)!]*) prefix='./';;
|
||||
*) prefix='';;
|
||||
/*) prefix='/';;
|
||||
[-=\(\)!]*) prefix='./';;
|
||||
*) prefix='';;
|
||||
esac
|
||||
|
||||
eval "$initialize_posix_glob"
|
||||
|
||||
oIFS=$IFS
|
||||
IFS=/
|
||||
$posix_glob set -f
|
||||
set -f
|
||||
set fnord $dstdir
|
||||
shift
|
||||
$posix_glob set +f
|
||||
set +f
|
||||
IFS=$oIFS
|
||||
|
||||
prefixes=
|
||||
|
||||
for d
|
||||
do
|
||||
test X"$d" = X && continue
|
||||
test X"$d" = X && continue
|
||||
|
||||
prefix=$prefix$d
|
||||
if test -d "$prefix"; then
|
||||
prefixes=
|
||||
else
|
||||
if $posix_mkdir; then
|
||||
(umask=$mkdir_umask &&
|
||||
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
|
||||
# Don't fail if two instances are running concurrently.
|
||||
test -d "$prefix" || exit 1
|
||||
else
|
||||
case $prefix in
|
||||
*\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
|
||||
*) qprefix=$prefix;;
|
||||
esac
|
||||
prefixes="$prefixes '$qprefix'"
|
||||
fi
|
||||
fi
|
||||
prefix=$prefix/
|
||||
prefix=$prefix$d
|
||||
if test -d "$prefix"; then
|
||||
prefixes=
|
||||
else
|
||||
if $posix_mkdir; then
|
||||
(umask $mkdir_umask &&
|
||||
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
|
||||
# Don't fail if two instances are running concurrently.
|
||||
test -d "$prefix" || exit 1
|
||||
else
|
||||
case $prefix in
|
||||
*\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
|
||||
*) qprefix=$prefix;;
|
||||
esac
|
||||
prefixes="$prefixes '$qprefix'"
|
||||
fi
|
||||
fi
|
||||
prefix=$prefix/
|
||||
done
|
||||
|
||||
if test -n "$prefixes"; then
|
||||
# Don't fail if two instances are running concurrently.
|
||||
(umask $mkdir_umask &&
|
||||
eval "\$doit_exec \$mkdirprog $prefixes") ||
|
||||
test -d "$dstdir" || exit 1
|
||||
obsolete_mkdir_used=true
|
||||
# Don't fail if two instances are running concurrently.
|
||||
(umask $mkdir_umask &&
|
||||
eval "\$doit_exec \$mkdirprog $prefixes") ||
|
||||
test -d "$dstdir" || exit 1
|
||||
obsolete_mkdir_used=true
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@ -450,14 +449,25 @@ do
|
||||
else
|
||||
|
||||
# Make a couple of temp file names in the proper directory.
|
||||
dsttmp=$dstdir/_inst.$$_
|
||||
rmtmp=$dstdir/_rm.$$_
|
||||
dsttmp=${dstdirslash}_inst.$$_
|
||||
rmtmp=${dstdirslash}_rm.$$_
|
||||
|
||||
# Trap to clean up those temp files at exit.
|
||||
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
|
||||
|
||||
# Copy the file name to the temp name.
|
||||
(umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
|
||||
(umask $cp_umask &&
|
||||
{ test -z "$stripcmd" || {
|
||||
# Create $dsttmp read-write so that cp doesn't create it read-only,
|
||||
# which would cause strip to fail.
|
||||
if test -z "$doit"; then
|
||||
: >"$dsttmp" # No need to fork-exec 'touch'.
|
||||
else
|
||||
$doit touch "$dsttmp"
|
||||
fi
|
||||
}
|
||||
} &&
|
||||
$doit_exec $cpprog "$src" "$dsttmp") &&
|
||||
|
||||
# and set any options; do chmod last to preserve setuid bits.
|
||||
#
|
||||
@ -472,20 +482,24 @@ do
|
||||
|
||||
# If -C, don't bother to copy if it wouldn't change the file.
|
||||
if $copy_on_change &&
|
||||
old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
|
||||
new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
|
||||
|
||||
eval "$initialize_posix_glob" &&
|
||||
$posix_glob set -f &&
|
||||
old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
|
||||
new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
|
||||
set -f &&
|
||||
set X $old && old=:$2:$4:$5:$6 &&
|
||||
set X $new && new=:$2:$4:$5:$6 &&
|
||||
$posix_glob set +f &&
|
||||
|
||||
set +f &&
|
||||
test "$old" = "$new" &&
|
||||
$cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
|
||||
then
|
||||
rm -f "$dsttmp"
|
||||
else
|
||||
# If $backupsuffix is set, and the file being installed
|
||||
# already exists, attempt a backup. Don't worry if it fails,
|
||||
# e.g., if mv doesn't support -f.
|
||||
if test -n "$backupsuffix" && test -f "$dst"; then
|
||||
$doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null
|
||||
fi
|
||||
|
||||
# Rename the file to the real destination.
|
||||
$doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
|
||||
|
||||
@ -493,24 +507,24 @@ do
|
||||
# to itself, or perhaps because mv is so ancient that it does not
|
||||
# support -f.
|
||||
{
|
||||
# Now remove or move aside any old file at destination location.
|
||||
# We try this two ways since rm can't unlink itself on some
|
||||
# systems and the destination file might be busy for other
|
||||
# reasons. In this case, the final cleanup might fail but the new
|
||||
# file should still install successfully.
|
||||
{
|
||||
test ! -f "$dst" ||
|
||||
$doit $rmcmd -f "$dst" 2>/dev/null ||
|
||||
{ $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
|
||||
{ $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
|
||||
} ||
|
||||
{ echo "$0: cannot unlink or rename $dst" >&2
|
||||
(exit 1); exit 1
|
||||
}
|
||||
} &&
|
||||
# Now remove or move aside any old file at destination location.
|
||||
# We try this two ways since rm can't unlink itself on some
|
||||
# systems and the destination file might be busy for other
|
||||
# reasons. In this case, the final cleanup might fail but the new
|
||||
# file should still install successfully.
|
||||
{
|
||||
test ! -f "$dst" ||
|
||||
$doit $rmcmd "$dst" 2>/dev/null ||
|
||||
{ $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
|
||||
{ $doit $rmcmd "$rmtmp" 2>/dev/null; :; }
|
||||
} ||
|
||||
{ echo "$0: cannot unlink or rename $dst" >&2
|
||||
(exit 1); exit 1
|
||||
}
|
||||
} &&
|
||||
|
||||
# Now rename the file to the real destination.
|
||||
$doit $mvcmd "$dsttmp" "$dst"
|
||||
# Now rename the file to the real destination.
|
||||
$doit $mvcmd "$dsttmp" "$dst"
|
||||
}
|
||||
fi || exit 1
|
||||
|
||||
@ -519,9 +533,9 @@ do
|
||||
done
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
|
859
config/ltmain.sh
859
config/ltmain.sh
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,7 @@
|
||||
#! /bin/sh
|
||||
# mkinstalldirs --- make directory hierarchy
|
||||
|
||||
scriptversion=2009-04-28.21; # UTC
|
||||
scriptversion=2020-07-26.22; # UTC
|
||||
|
||||
# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
|
||||
# Created: 1993-05-16
|
||||
@ -92,6 +92,8 @@ case $dirmode in
|
||||
*)
|
||||
if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
|
||||
test ! -d ./--version; then
|
||||
echo "umask 22"
|
||||
umask 22
|
||||
echo "mkdir -m $dirmode -p -- $*"
|
||||
exec mkdir -m "$dirmode" -p -- "$@"
|
||||
else
|
||||
@ -104,6 +106,9 @@ case $dirmode in
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "umask 22"
|
||||
umask 22
|
||||
|
||||
for file
|
||||
do
|
||||
case $file in
|
||||
@ -132,21 +137,16 @@ do
|
||||
|
||||
if test ! -d "$pathcomp"; then
|
||||
errstatus=$lasterr
|
||||
else
|
||||
if test ! -z "$dirmode"; then
|
||||
echo "chmod $dirmode $pathcomp"
|
||||
lasterr=
|
||||
chmod "$dirmode" "$pathcomp" || lasterr=$?
|
||||
|
||||
if test ! -z "$lasterr"; then
|
||||
errstatus=$lasterr
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
pathcomp=$pathcomp/
|
||||
done
|
||||
|
||||
if test ! -z "$dirmode"; then
|
||||
echo "chmod $dirmode $file"
|
||||
chmod "$dirmode" "$file" || errstatus=$?
|
||||
fi
|
||||
done
|
||||
|
||||
exit $errstatus
|
||||
@ -154,9 +154,9 @@ exit $errstatus
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
|
@ -1,9 +1,9 @@
|
||||
#! /bin/sh
|
||||
# test-driver - basic testsuite driver script.
|
||||
|
||||
scriptversion=2013-07-13.22; # UTC
|
||||
scriptversion=2018-03-07.03; # UTC
|
||||
|
||||
# Copyright (C) 2011-2013 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2011-2021 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@ -16,7 +16,7 @@ scriptversion=2013-07-13.22; # UTC
|
||||
# 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/>.
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
@ -42,11 +42,13 @@ print_usage ()
|
||||
{
|
||||
cat <<END
|
||||
Usage:
|
||||
test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
|
||||
[--expect-failure={yes|no}] [--color-tests={yes|no}]
|
||||
[--enable-hard-errors={yes|no}] [--]
|
||||
test-driver --test-name NAME --log-file PATH --trs-file PATH
|
||||
[--expect-failure {yes|no}] [--color-tests {yes|no}]
|
||||
[--enable-hard-errors {yes|no}] [--]
|
||||
TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
|
||||
|
||||
The '--test-name', '--log-file' and '--trs-file' options are mandatory.
|
||||
See the GNU Automake documentation for information.
|
||||
END
|
||||
}
|
||||
|
||||
@ -103,14 +105,20 @@ trap "st=130; $do_exit" 2
|
||||
trap "st=141; $do_exit" 13
|
||||
trap "st=143; $do_exit" 15
|
||||
|
||||
# Test script is run here.
|
||||
"$@" >$log_file 2>&1
|
||||
# Test script is run here. We create the file first, then append to it,
|
||||
# to ameliorate tests themselves also writing to the log file. Our tests
|
||||
# don't, but others can (automake bug#35762).
|
||||
: >"$log_file"
|
||||
"$@" >>"$log_file" 2>&1
|
||||
estatus=$?
|
||||
|
||||
if test $enable_hard_errors = no && test $estatus -eq 99; then
|
||||
estatus=1
|
||||
tweaked_estatus=1
|
||||
else
|
||||
tweaked_estatus=$estatus
|
||||
fi
|
||||
|
||||
case $estatus:$expect_failure in
|
||||
case $tweaked_estatus:$expect_failure in
|
||||
0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
|
||||
0:*) col=$grn res=PASS recheck=no gcopy=no;;
|
||||
77:*) col=$blu res=SKIP recheck=no gcopy=yes;;
|
||||
@ -119,6 +127,12 @@ case $estatus:$expect_failure in
|
||||
*:*) col=$red res=FAIL recheck=yes gcopy=yes;;
|
||||
esac
|
||||
|
||||
# Report the test outcome and exit status in the logs, so that one can
|
||||
# know whether the test passed or failed simply by looking at the '.log'
|
||||
# file, without the need of also peaking into the corresponding '.trs'
|
||||
# file (automake bug#11814).
|
||||
echo "$res $test_name (exit status: $estatus)" >>"$log_file"
|
||||
|
||||
# Report outcome to console.
|
||||
echo "${col}${res}${std}: $test_name"
|
||||
|
||||
@ -131,9 +145,9 @@ echo ":copy-in-global-log: $gcopy" >> $trs_file
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
|
368
configure
vendored
368
configure
vendored
@ -1,11 +1,11 @@
|
||||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.71 for iperf 3.11.
|
||||
# Generated by GNU Autoconf 2.71 for iperf 3.12.
|
||||
#
|
||||
# Report bugs to <https://github.com/esnet/iperf>.
|
||||
#
|
||||
#
|
||||
# Copyright (C) 1992-1996, 1998-2017, 2020-2022 Free Software Foundation,
|
||||
# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
|
||||
# Inc.
|
||||
#
|
||||
#
|
||||
@ -621,8 +621,8 @@ MAKEFLAGS=
|
||||
# Identity of this package.
|
||||
PACKAGE_NAME='iperf'
|
||||
PACKAGE_TARNAME='iperf'
|
||||
PACKAGE_VERSION='3.11'
|
||||
PACKAGE_STRING='iperf 3.11'
|
||||
PACKAGE_VERSION='3.12'
|
||||
PACKAGE_STRING='iperf 3.12'
|
||||
PACKAGE_BUGREPORT='https://github.com/esnet/iperf'
|
||||
PACKAGE_URL='https://software.es.net/iperf/'
|
||||
|
||||
@ -683,6 +683,7 @@ ac_ct_AR
|
||||
AR
|
||||
DLLTOOL
|
||||
OBJDUMP
|
||||
FILECMD
|
||||
LN_S
|
||||
NM
|
||||
ac_ct_DUMPBIN
|
||||
@ -1365,7 +1366,7 @@ if test "$ac_init_help" = "long"; then
|
||||
# Omit some internal or obsolete options to make the list less imposing.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
cat <<_ACEOF
|
||||
\`configure' configures iperf 3.11 to adapt to many kinds of systems.
|
||||
\`configure' configures iperf 3.12 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
@ -1436,7 +1437,7 @@ fi
|
||||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of iperf 3.11:";;
|
||||
short | recursive ) echo "Configuration of iperf 3.12:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
@ -1554,7 +1555,7 @@ fi
|
||||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
iperf configure 3.11
|
||||
iperf configure 3.12
|
||||
generated by GNU Autoconf 2.71
|
||||
|
||||
Copyright (C) 2021 Free Software Foundation, Inc.
|
||||
@ -1832,7 +1833,7 @@ cat >config.log <<_ACEOF
|
||||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
It was created by iperf $as_me 3.11, which was
|
||||
It was created by iperf $as_me 3.12, which was
|
||||
generated by GNU Autoconf 2.71. Invocation command line was
|
||||
|
||||
$ $0$ac_configure_args_raw
|
||||
@ -3199,7 +3200,7 @@ fi
|
||||
|
||||
# Define the identity of the package.
|
||||
PACKAGE='iperf'
|
||||
VERSION='3.11'
|
||||
VERSION='3.12'
|
||||
|
||||
|
||||
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
|
||||
@ -3351,8 +3352,8 @@ esac
|
||||
|
||||
|
||||
|
||||
macro_version='2.4.6'
|
||||
macro_revision='2.4.6'
|
||||
macro_version='2.4.7'
|
||||
macro_revision='2.4.7'
|
||||
|
||||
|
||||
|
||||
@ -5229,13 +5230,13 @@ else
|
||||
mingw*) lt_bad_file=conftest.nm/nofile ;;
|
||||
*) lt_bad_file=/dev/null ;;
|
||||
esac
|
||||
case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
|
||||
case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in
|
||||
*$lt_bad_file* | *'Invalid file or object type'*)
|
||||
lt_cv_path_NM="$tmp_nm -B"
|
||||
break 2
|
||||
;;
|
||||
*)
|
||||
case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
|
||||
case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in
|
||||
*/dev/null*)
|
||||
lt_cv_path_NM="$tmp_nm -p"
|
||||
break 2
|
||||
@ -5373,7 +5374,7 @@ esac
|
||||
fi
|
||||
fi
|
||||
|
||||
case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
|
||||
case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in
|
||||
*COFF*)
|
||||
DUMPBIN="$DUMPBIN -symbols -headers"
|
||||
;;
|
||||
@ -5477,7 +5478,7 @@ else $as_nop
|
||||
lt_cv_sys_max_cmd_len=8192;
|
||||
;;
|
||||
|
||||
bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
|
||||
bitrig* | 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`
|
||||
@ -5520,7 +5521,7 @@ else $as_nop
|
||||
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/.*[ ]//'`
|
||||
lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[ ]//'`
|
||||
else
|
||||
lt_cv_sys_max_cmd_len=32768
|
||||
fi
|
||||
@ -5725,6 +5726,114 @@ esac
|
||||
|
||||
|
||||
|
||||
if test -n "$ac_tool_prefix"; then
|
||||
# Extract the first word of "${ac_tool_prefix}file", so it can be a program name with args.
|
||||
set dummy ${ac_tool_prefix}file; ac_word=$2
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
|
||||
printf %s "checking for $ac_word... " >&6; }
|
||||
if test ${ac_cv_prog_FILECMD+y}
|
||||
then :
|
||||
printf %s "(cached) " >&6
|
||||
else $as_nop
|
||||
if test -n "$FILECMD"; then
|
||||
ac_cv_prog_FILECMD="$FILECMD" # Let the user override the test.
|
||||
else
|
||||
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
||||
for as_dir in $PATH
|
||||
do
|
||||
IFS=$as_save_IFS
|
||||
case $as_dir in #(((
|
||||
'') as_dir=./ ;;
|
||||
*/) ;;
|
||||
*) as_dir=$as_dir/ ;;
|
||||
esac
|
||||
for ac_exec_ext in '' $ac_executable_extensions; do
|
||||
if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
|
||||
ac_cv_prog_FILECMD="${ac_tool_prefix}file"
|
||||
printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
|
||||
break 2
|
||||
fi
|
||||
done
|
||||
done
|
||||
IFS=$as_save_IFS
|
||||
|
||||
fi
|
||||
fi
|
||||
FILECMD=$ac_cv_prog_FILECMD
|
||||
if test -n "$FILECMD"; then
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FILECMD" >&5
|
||||
printf "%s\n" "$FILECMD" >&6; }
|
||||
else
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
printf "%s\n" "no" >&6; }
|
||||
fi
|
||||
|
||||
|
||||
fi
|
||||
if test -z "$ac_cv_prog_FILECMD"; then
|
||||
ac_ct_FILECMD=$FILECMD
|
||||
# Extract the first word of "file", so it can be a program name with args.
|
||||
set dummy file; ac_word=$2
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
|
||||
printf %s "checking for $ac_word... " >&6; }
|
||||
if test ${ac_cv_prog_ac_ct_FILECMD+y}
|
||||
then :
|
||||
printf %s "(cached) " >&6
|
||||
else $as_nop
|
||||
if test -n "$ac_ct_FILECMD"; then
|
||||
ac_cv_prog_ac_ct_FILECMD="$ac_ct_FILECMD" # Let the user override the test.
|
||||
else
|
||||
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
||||
for as_dir in $PATH
|
||||
do
|
||||
IFS=$as_save_IFS
|
||||
case $as_dir in #(((
|
||||
'') as_dir=./ ;;
|
||||
*/) ;;
|
||||
*) as_dir=$as_dir/ ;;
|
||||
esac
|
||||
for ac_exec_ext in '' $ac_executable_extensions; do
|
||||
if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
|
||||
ac_cv_prog_ac_ct_FILECMD="file"
|
||||
printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
|
||||
break 2
|
||||
fi
|
||||
done
|
||||
done
|
||||
IFS=$as_save_IFS
|
||||
|
||||
fi
|
||||
fi
|
||||
ac_ct_FILECMD=$ac_cv_prog_ac_ct_FILECMD
|
||||
if test -n "$ac_ct_FILECMD"; then
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FILECMD" >&5
|
||||
printf "%s\n" "$ac_ct_FILECMD" >&6; }
|
||||
else
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
printf "%s\n" "no" >&6; }
|
||||
fi
|
||||
|
||||
if test "x$ac_ct_FILECMD" = x; then
|
||||
FILECMD=":"
|
||||
else
|
||||
case $cross_compiling:$ac_tool_warned in
|
||||
yes:)
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
|
||||
printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
|
||||
ac_tool_warned=yes ;;
|
||||
esac
|
||||
FILECMD=$ac_ct_FILECMD
|
||||
fi
|
||||
else
|
||||
FILECMD="$ac_cv_prog_FILECMD"
|
||||
fi
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if test -n "$ac_tool_prefix"; then
|
||||
# Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
|
||||
set dummy ${ac_tool_prefix}objdump; ac_word=$2
|
||||
@ -5868,7 +5977,7 @@ beos*)
|
||||
|
||||
bsdi[45]*)
|
||||
lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
|
||||
lt_cv_file_magic_cmd='/usr/bin/file -L'
|
||||
lt_cv_file_magic_cmd='$FILECMD -L'
|
||||
lt_cv_file_magic_test_file=/shlib/libc.so
|
||||
;;
|
||||
|
||||
@ -5902,14 +6011,14 @@ darwin* | rhapsody*)
|
||||
lt_cv_deplibs_check_method=pass_all
|
||||
;;
|
||||
|
||||
freebsd* | dragonfly*)
|
||||
freebsd* | dragonfly* | midnightbsd*)
|
||||
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
|
||||
case $host_cpu in
|
||||
i*86 )
|
||||
# Not sure whether the presence of OpenBSD here was a mistake.
|
||||
# Let's accept both of them until this is cleared up.
|
||||
lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
|
||||
lt_cv_file_magic_cmd=/usr/bin/file
|
||||
lt_cv_file_magic_cmd=$FILECMD
|
||||
lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
|
||||
;;
|
||||
esac
|
||||
@ -5923,7 +6032,7 @@ haiku*)
|
||||
;;
|
||||
|
||||
hpux10.20* | hpux11*)
|
||||
lt_cv_file_magic_cmd=/usr/bin/file
|
||||
lt_cv_file_magic_cmd=$FILECMD
|
||||
case $host_cpu in
|
||||
ia64*)
|
||||
lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
|
||||
@ -5970,7 +6079,7 @@ netbsd*)
|
||||
|
||||
newos6*)
|
||||
lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
|
||||
lt_cv_file_magic_cmd=/usr/bin/file
|
||||
lt_cv_file_magic_cmd=$FILECMD
|
||||
lt_cv_file_magic_test_file=/usr/lib/libnls.so
|
||||
;;
|
||||
|
||||
@ -6344,13 +6453,29 @@ esac
|
||||
fi
|
||||
|
||||
: ${AR=ar}
|
||||
: ${AR_FLAGS=cru}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# 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 thats 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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# 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.
|
||||
|
||||
|
||||
|
||||
|
||||
@ -6767,7 +6892,7 @@ esac
|
||||
|
||||
if test "$lt_cv_nm_interface" = "MS dumpbin"; then
|
||||
# Gets list of data symbols to import.
|
||||
lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
|
||||
lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'"
|
||||
# Adjust the below global symbol transforms to fixup imported variables.
|
||||
lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
|
||||
lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'"
|
||||
@ -6785,20 +6910,20 @@ fi
|
||||
# Transform an extracted symbol line into a proper C declaration.
|
||||
# Some systems (esp. on ia64) link data and code symbols differently,
|
||||
# so use this general approach.
|
||||
lt_cv_sys_global_symbol_to_cdecl="sed -n"\
|
||||
lt_cv_sys_global_symbol_to_cdecl="$SED -n"\
|
||||
$lt_cdecl_hook\
|
||||
" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
|
||||
" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
|
||||
|
||||
# Transform an extracted symbol line into symbol name and symbol address
|
||||
lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
|
||||
lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\
|
||||
$lt_c_name_hook\
|
||||
" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
|
||||
" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'"
|
||||
|
||||
# Transform an extracted symbol line into symbol name with lib prefix and
|
||||
# symbol address.
|
||||
lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
|
||||
lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\
|
||||
$lt_c_name_lib_hook\
|
||||
" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
|
||||
" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\
|
||||
@ -6822,7 +6947,7 @@ for ac_symprfx in "" "_"; do
|
||||
if test "$lt_cv_nm_interface" = "MS dumpbin"; then
|
||||
# Fake it for dumpbin and say T for any non-static function,
|
||||
# D for any global variable and I for any imported variable.
|
||||
# Also find C++ and __fastcall symbols from MSVC++,
|
||||
# Also find C++ and __fastcall symbols from MSVC++ or ICC,
|
||||
# which start with @ or ?.
|
||||
lt_cv_sys_global_symbol_pipe="$AWK '"\
|
||||
" {last_section=section; section=\$ 3};"\
|
||||
@ -6840,9 +6965,9 @@ for ac_symprfx in "" "_"; do
|
||||
" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
|
||||
" ' prfx=^$ac_symprfx"
|
||||
else
|
||||
lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
|
||||
lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
|
||||
fi
|
||||
lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
|
||||
lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'"
|
||||
|
||||
# Check to see that the pipe works correctly.
|
||||
pipe_works=no
|
||||
@ -7045,7 +7170,7 @@ case $with_sysroot in #(
|
||||
fi
|
||||
;; #(
|
||||
/*)
|
||||
lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
|
||||
lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"`
|
||||
;; #(
|
||||
no|'')
|
||||
;; #(
|
||||
@ -7170,7 +7295,7 @@ ia64-*-hpux*)
|
||||
ac_status=$?
|
||||
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||
test $ac_status = 0; }; then
|
||||
case `/usr/bin/file conftest.$ac_objext` in
|
||||
case `$FILECMD conftest.$ac_objext` in
|
||||
*ELF-32*)
|
||||
HPUX_IA64_MODE=32
|
||||
;;
|
||||
@ -7191,7 +7316,7 @@ ia64-*-hpux*)
|
||||
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||
test $ac_status = 0; }; then
|
||||
if test yes = "$lt_cv_prog_gnu_ld"; then
|
||||
case `/usr/bin/file conftest.$ac_objext` in
|
||||
case `$FILECMD conftest.$ac_objext` in
|
||||
*32-bit*)
|
||||
LD="${LD-ld} -melf32bsmip"
|
||||
;;
|
||||
@ -7203,7 +7328,7 @@ ia64-*-hpux*)
|
||||
;;
|
||||
esac
|
||||
else
|
||||
case `/usr/bin/file conftest.$ac_objext` in
|
||||
case `$FILECMD conftest.$ac_objext` in
|
||||
*32-bit*)
|
||||
LD="${LD-ld} -32"
|
||||
;;
|
||||
@ -7229,7 +7354,7 @@ mips64*-*linux*)
|
||||
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||
test $ac_status = 0; }; then
|
||||
emul=elf
|
||||
case `/usr/bin/file conftest.$ac_objext` in
|
||||
case `$FILECMD conftest.$ac_objext` in
|
||||
*32-bit*)
|
||||
emul="${emul}32"
|
||||
;;
|
||||
@ -7237,7 +7362,7 @@ mips64*-*linux*)
|
||||
emul="${emul}64"
|
||||
;;
|
||||
esac
|
||||
case `/usr/bin/file conftest.$ac_objext` in
|
||||
case `$FILECMD conftest.$ac_objext` in
|
||||
*MSB*)
|
||||
emul="${emul}btsmip"
|
||||
;;
|
||||
@ -7245,7 +7370,7 @@ mips64*-*linux*)
|
||||
emul="${emul}ltsmip"
|
||||
;;
|
||||
esac
|
||||
case `/usr/bin/file conftest.$ac_objext` in
|
||||
case `$FILECMD conftest.$ac_objext` in
|
||||
*N32*)
|
||||
emul="${emul}n32"
|
||||
;;
|
||||
@ -7269,14 +7394,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
|
||||
ac_status=$?
|
||||
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||
test $ac_status = 0; }; then
|
||||
case `/usr/bin/file conftest.o` in
|
||||
case `$FILECMD conftest.o` in
|
||||
*32-bit*)
|
||||
case $host in
|
||||
x86_64-*kfreebsd*-gnu)
|
||||
LD="${LD-ld} -m elf_i386_fbsd"
|
||||
;;
|
||||
x86_64-*linux*)
|
||||
case `/usr/bin/file conftest.o` in
|
||||
case `$FILECMD conftest.o` in
|
||||
*x86-64*)
|
||||
LD="${LD-ld} -m elf32_x86_64"
|
||||
;;
|
||||
@ -7384,7 +7509,7 @@ printf "%s\n" "$lt_cv_cc_needs_belf" >&6; }
|
||||
ac_status=$?
|
||||
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||
test $ac_status = 0; }; then
|
||||
case `/usr/bin/file conftest.o` in
|
||||
case `$FILECMD conftest.o` in
|
||||
*64-bit*)
|
||||
case $lt_cv_prog_gnu_ld in
|
||||
yes*)
|
||||
@ -8167,8 +8292,8 @@ int forced_loaded() { return 2;}
|
||||
_LT_EOF
|
||||
echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
|
||||
$LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
|
||||
echo "$AR cru libconftest.a conftest.o" >&5
|
||||
$AR cru libconftest.a conftest.o 2>&5
|
||||
echo "$AR $AR_FLAGS libconftest.a conftest.o" >&5
|
||||
$AR $AR_FLAGS libconftest.a conftest.o 2>&5
|
||||
echo "$RANLIB libconftest.a" >&5
|
||||
$RANLIB libconftest.a 2>&5
|
||||
cat > conftest.c << _LT_EOF
|
||||
@ -8196,11 +8321,11 @@ printf "%s\n" "$lt_cv_ld_force_load" >&6; }
|
||||
darwin1.*)
|
||||
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
|
||||
darwin*)
|
||||
case ${MACOSX_DEPLOYMENT_TARGET},$host in
|
||||
10.[012],*|,*powerpc*)
|
||||
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
|
||||
*)
|
||||
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
|
||||
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' ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
@ -8588,8 +8713,8 @@ esac
|
||||
ofile=libtool
|
||||
can_build_shared=yes
|
||||
|
||||
# All known linkers require a '.a' archive for static linking (except MSVC,
|
||||
# which needs '.lib').
|
||||
# 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
|
||||
@ -9097,7 +9222,7 @@ lt_prog_compiler_static=
|
||||
lt_prog_compiler_static='-qstaticlink'
|
||||
;;
|
||||
*)
|
||||
case `$CC -V 2>&1 | sed 5q` in
|
||||
case `$CC -V 2>&1 | $SED 5q` in
|
||||
*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
|
||||
# Sun Fortran 8.3 passes all unrecognized flags to the linker
|
||||
lt_prog_compiler_pic='-KPIC'
|
||||
@ -9520,15 +9645,15 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries
|
||||
|
||||
case $host_os in
|
||||
cygwin* | mingw* | pw32* | cegcc*)
|
||||
# FIXME: the MSVC++ port hasn't been tested in a loooong time
|
||||
# FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time
|
||||
# When not using gcc, we currently assume that we are using
|
||||
# Microsoft Visual C++.
|
||||
# Microsoft Visual C++ or Intel C++ Compiler.
|
||||
if test yes != "$GCC"; then
|
||||
with_gnu_ld=no
|
||||
fi
|
||||
;;
|
||||
interix*)
|
||||
# we just hope/assume this is gcc and not c89 (= MSVC++)
|
||||
# we just hope/assume this is gcc and not c89 (= MSVC++ or ICC)
|
||||
with_gnu_ld=yes
|
||||
;;
|
||||
openbsd* | bitrig*)
|
||||
@ -9580,7 +9705,7 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries
|
||||
whole_archive_flag_spec=
|
||||
fi
|
||||
supports_anon_versioning=no
|
||||
case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in
|
||||
case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in
|
||||
*GNU\ gold*) supports_anon_versioning=yes ;;
|
||||
*\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
|
||||
*\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
|
||||
@ -9692,6 +9817,7 @@ _LT_EOF
|
||||
emximp -o $lib $output_objdir/$libname.def'
|
||||
old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
|
||||
enable_shared_with_static_runtimes=yes
|
||||
file_list_spec='@'
|
||||
;;
|
||||
|
||||
interix[3-9]*)
|
||||
@ -9706,7 +9832,7 @@ _LT_EOF
|
||||
# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
|
||||
# time. Moving up from 0x10000000 also allows more sbrk(2) space.
|
||||
archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
|
||||
archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
|
||||
archive_expsym_cmds='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
|
||||
;;
|
||||
|
||||
gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
|
||||
@ -9749,7 +9875,7 @@ _LT_EOF
|
||||
compiler_needs_object=yes
|
||||
;;
|
||||
esac
|
||||
case `$CC -V 2>&1 | sed 5q` in
|
||||
case `$CC -V 2>&1 | $SED 5q` in
|
||||
*Sun\ C*) # Sun C 5.9
|
||||
whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
|
||||
compiler_needs_object=yes
|
||||
@ -9761,7 +9887,7 @@ _LT_EOF
|
||||
|
||||
if test yes = "$supports_anon_versioning"; then
|
||||
archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
|
||||
cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
|
||||
cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
|
||||
echo "local: *; };" >> $output_objdir/$libname.ver~
|
||||
$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
|
||||
fi
|
||||
@ -9777,7 +9903,7 @@ _LT_EOF
|
||||
archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
|
||||
if test yes = "$supports_anon_versioning"; then
|
||||
archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
|
||||
cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
|
||||
cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
|
||||
echo "local: *; };" >> $output_objdir/$libname.ver~
|
||||
$LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
|
||||
fi
|
||||
@ -9909,7 +10035,7 @@ _LT_EOF
|
||||
if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
|
||||
export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
|
||||
else
|
||||
export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
|
||||
export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
|
||||
fi
|
||||
aix_use_runtimelinking=no
|
||||
|
||||
@ -10180,12 +10306,12 @@ fi
|
||||
|
||||
cygwin* | mingw* | pw32* | cegcc*)
|
||||
# When not using gcc, we currently assume that we are using
|
||||
# Microsoft Visual C++.
|
||||
# Microsoft Visual C++ or Intel C++ Compiler.
|
||||
# hardcode_libdir_flag_spec is actually meaningless, as there is
|
||||
# no search path for DLLs.
|
||||
case $cc_basename in
|
||||
cl*)
|
||||
# Native MSVC
|
||||
cl* | icl*)
|
||||
# Native MSVC or ICC
|
||||
hardcode_libdir_flag_spec=' '
|
||||
allow_undefined_flag=unsupported
|
||||
always_export_symbols=yes
|
||||
@ -10226,7 +10352,7 @@ fi
|
||||
fi'
|
||||
;;
|
||||
*)
|
||||
# Assume MSVC wrapper
|
||||
# Assume MSVC and ICC wrapper
|
||||
hardcode_libdir_flag_spec=' '
|
||||
allow_undefined_flag=unsupported
|
||||
# Tell ltmain to make .lib files, not .a files.
|
||||
@ -10267,8 +10393,8 @@ fi
|
||||
output_verbose_link_cmd=func_echo_all
|
||||
archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
|
||||
module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
|
||||
archive_expsym_cmds="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"
|
||||
module_expsym_cmds="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"
|
||||
archive_expsym_cmds="$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"
|
||||
module_expsym_cmds="$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"
|
||||
|
||||
else
|
||||
ld_shlibs=no
|
||||
@ -10302,7 +10428,7 @@ fi
|
||||
;;
|
||||
|
||||
# FreeBSD 3 and greater uses gcc -shared to do shared libraries.
|
||||
freebsd* | dragonfly*)
|
||||
freebsd* | dragonfly* | midnightbsd*)
|
||||
archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
|
||||
hardcode_libdir_flag_spec='-R$libdir'
|
||||
hardcode_direct=yes
|
||||
@ -10553,6 +10679,7 @@ printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; }
|
||||
emximp -o $lib $output_objdir/$libname.def'
|
||||
old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
|
||||
enable_shared_with_static_runtimes=yes
|
||||
file_list_spec='@'
|
||||
;;
|
||||
|
||||
osf3*)
|
||||
@ -11245,7 +11372,7 @@ cygwin* | mingw* | pw32* | cegcc*)
|
||||
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'
|
||||
soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
|
||||
|
||||
sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
|
||||
;;
|
||||
@ -11255,14 +11382,14 @@ cygwin* | mingw* | pw32* | cegcc*)
|
||||
;;
|
||||
pw32*)
|
||||
# pw32 DLLs use 'pw' prefix rather than 'lib'
|
||||
library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
|
||||
library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
|
||||
;;
|
||||
esac
|
||||
dynamic_linker='Win32 ld.exe'
|
||||
;;
|
||||
|
||||
*,cl*)
|
||||
# Native MSVC
|
||||
*,cl* | *,icl*)
|
||||
# Native MSVC or ICC
|
||||
libname_spec='$name'
|
||||
soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
|
||||
library_names_spec='$libname.dll.lib'
|
||||
@ -11281,7 +11408,7 @@ cygwin* | mingw* | pw32* | cegcc*)
|
||||
done
|
||||
IFS=$lt_save_ifs
|
||||
# Convert to MSYS style.
|
||||
sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
|
||||
sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
|
||||
;;
|
||||
cygwin*)
|
||||
# Convert to unix form, then to dos form, then back to unix form
|
||||
@ -11318,7 +11445,7 @@ cygwin* | mingw* | pw32* | cegcc*)
|
||||
;;
|
||||
|
||||
*)
|
||||
# Assume MSVC wrapper
|
||||
# Assume MSVC and ICC wrapper
|
||||
library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
|
||||
dynamic_linker='Win32 ld.exe'
|
||||
;;
|
||||
@ -11351,7 +11478,7 @@ dgux*)
|
||||
shlibpath_var=LD_LIBRARY_PATH
|
||||
;;
|
||||
|
||||
freebsd* | dragonfly*)
|
||||
freebsd* | dragonfly* | midnightbsd*)
|
||||
# DragonFly does not have aout. When/if they implement a new
|
||||
# versioning mechanism, adjust this.
|
||||
if test -x /usr/bin/objformat; then
|
||||
@ -12504,30 +12631,41 @@ striplib=
|
||||
old_striplib=
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
|
||||
printf %s "checking whether stripping libraries is possible... " >&6; }
|
||||
if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
|
||||
test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
|
||||
test -z "$striplib" && striplib="$STRIP --strip-unneeded"
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
printf "%s\n" "yes" >&6; }
|
||||
if test -z "$STRIP"; then
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
printf "%s\n" "no" >&6; }
|
||||
else
|
||||
# FIXME - insert some real tests, host_os isn't really good enough
|
||||
case $host_os in
|
||||
darwin*)
|
||||
if test -n "$STRIP"; then
|
||||
if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
|
||||
old_striplib="$STRIP --strip-debug"
|
||||
striplib="$STRIP --strip-unneeded"
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
printf "%s\n" "yes" >&6; }
|
||||
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"
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
printf "%s\n" "yes" >&6; }
|
||||
else
|
||||
;;
|
||||
freebsd*)
|
||||
if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then
|
||||
old_striplib="$STRIP --strip-debug"
|
||||
striplib="$STRIP --strip-unneeded"
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
printf "%s\n" "yes" >&6; }
|
||||
else
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
printf "%s\n" "no" >&6; }
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
printf "%s\n" "no" >&6; }
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
printf "%s\n" "no" >&6; }
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
@ -14484,6 +14622,40 @@ printf "%s\n" "#define HAVE_TCP_CONGESTION 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
|
||||
# Check for TCP_USER_TIMEOUT sockopt (believed to be Linux 2.6.37+ only)
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking TCP_USER_TIMEOUT socket option" >&5
|
||||
printf %s "checking TCP_USER_TIMEOUT socket option... " >&6; }
|
||||
if test ${iperf3_cv_header_tcp_user_timeout+y}
|
||||
then :
|
||||
printf %s "(cached) " >&6
|
||||
else $as_nop
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#include <netinet/tcp.h>
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
int foo = TCP_USER_TIMEOUT;
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_compile "$LINENO"
|
||||
then :
|
||||
iperf3_cv_header_tcp_user_timeout=yes
|
||||
else $as_nop
|
||||
iperf3_cv_header_tcp_user_timeout=no
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
|
||||
fi
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $iperf3_cv_header_tcp_user_timeout" >&5
|
||||
printf "%s\n" "$iperf3_cv_header_tcp_user_timeout" >&6; }
|
||||
if test "x$iperf3_cv_header_tcp_user_timeout" = "xyes"; then
|
||||
|
||||
printf "%s\n" "#define HAVE_TCP_USER_TIMEOUT 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
|
||||
# Check for IPv6 flowlabel support (believed to be Linux only)
|
||||
# We check for IPV6_FLOWLABEL_MGR in <linux/in6.h> even though we
|
||||
# don't use that file directly (we have our own stripped-down
|
||||
@ -15406,7 +15578,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
||||
# report actual input values of CONFIG_FILES etc. instead of their
|
||||
# values after options handling.
|
||||
ac_log="
|
||||
This file was extended by iperf $as_me 3.11, which was
|
||||
This file was extended by iperf $as_me 3.12, which was
|
||||
generated by GNU Autoconf 2.71. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
@ -15475,7 +15647,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
|
||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
ac_cs_config='$ac_cs_config_escaped'
|
||||
ac_cs_version="\\
|
||||
iperf config.status 3.11
|
||||
iperf config.status 3.12
|
||||
configured by $0, generated by GNU Autoconf 2.71,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
@ -15638,6 +15810,7 @@ lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_q
|
||||
lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
|
||||
reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
|
||||
reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
|
||||
FILECMD='`$ECHO "$FILECMD" | $SED "$delay_single_quote_subst"`'
|
||||
OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
|
||||
deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
|
||||
file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
|
||||
@ -15646,6 +15819,7 @@ want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
|
||||
DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
|
||||
sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
|
||||
AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
|
||||
lt_ar_flags='`$ECHO "$lt_ar_flags" | $SED "$delay_single_quote_subst"`'
|
||||
AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
|
||||
archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
|
||||
STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
|
||||
@ -15766,6 +15940,7 @@ LN_S \
|
||||
lt_SP2NL \
|
||||
lt_NL2SP \
|
||||
reload_flag \
|
||||
FILECMD \
|
||||
OBJDUMP \
|
||||
deplibs_check_method \
|
||||
file_magic_cmd \
|
||||
@ -15774,7 +15949,6 @@ want_nocaseglob \
|
||||
DLLTOOL \
|
||||
sharedlib_from_linklib_cmd \
|
||||
AR \
|
||||
AR_FLAGS \
|
||||
archiver_list_spec \
|
||||
STRIP \
|
||||
RANLIB \
|
||||
@ -16721,6 +16895,9 @@ to_host_file_cmd=$lt_cv_to_host_file_cmd
|
||||
# convert \$build files to toolchain format.
|
||||
to_tool_file_cmd=$lt_cv_to_tool_file_cmd
|
||||
|
||||
# A file(cmd) program that detects file types.
|
||||
FILECMD=$lt_FILECMD
|
||||
|
||||
# An object symbol dumper.
|
||||
OBJDUMP=$lt_OBJDUMP
|
||||
|
||||
@ -16745,8 +16922,11 @@ sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
|
||||
# The archiver.
|
||||
AR=$lt_AR
|
||||
|
||||
# Flags to create an archive (by configure).
|
||||
lt_ar_flags=$lt_ar_flags
|
||||
|
||||
# Flags to create an archive.
|
||||
AR_FLAGS=$lt_AR_FLAGS
|
||||
AR_FLAGS=\${ARFLAGS-"\$lt_ar_flags"}
|
||||
|
||||
# How to feed a file listing to the archiver.
|
||||
archiver_list_spec=$lt_archiver_list_spec
|
||||
@ -17122,7 +17302,7 @@ ltmain=$ac_aux_dir/ltmain.sh
|
||||
# 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" \
|
||||
$SED '$q' "$ltmain" >> "$cfgfile" \
|
||||
|| (rm -f "$cfgfile"; exit 1)
|
||||
|
||||
mv -f "$cfgfile" "$ofile" ||
|
||||
|
14
configure.ac
14
configure.ac
@ -25,7 +25,7 @@
|
||||
|
||||
# Initialize the autoconf system for the specified tool, version and mailing list
|
||||
AC_PREREQ([2.71])
|
||||
AC_INIT([iperf],[3.11],[https://github.com/esnet/iperf],[iperf],[https://software.es.net/iperf/])
|
||||
AC_INIT([iperf],[3.12],[https://github.com/esnet/iperf],[iperf],[https://software.es.net/iperf/])
|
||||
m4_include([config/ax_check_openssl.m4])
|
||||
m4_include([config/iperf_config_static_bin.m4])
|
||||
AC_LANG(C)
|
||||
@ -169,6 +169,18 @@ if test "x$iperf3_cv_header_tcp_congestion" = "xyes"; then
|
||||
AC_DEFINE([HAVE_TCP_CONGESTION], [1], [Have TCP_CONGESTION sockopt.])
|
||||
fi
|
||||
|
||||
# Check for TCP_USER_TIMEOUT sockopt (believed to be Linux 2.6.37+ only)
|
||||
AC_CACHE_CHECK([TCP_USER_TIMEOUT socket option],
|
||||
[iperf3_cv_header_tcp_user_timeout],
|
||||
AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM([[#include <netinet/tcp.h>]],
|
||||
[[int foo = TCP_USER_TIMEOUT;]])],
|
||||
iperf3_cv_header_tcp_user_timeout=yes,
|
||||
iperf3_cv_header_tcp_user_timeout=no))
|
||||
if test "x$iperf3_cv_header_tcp_user_timeout" = "xyes"; then
|
||||
AC_DEFINE([HAVE_TCP_USER_TIMEOUT], [1], [Have TCP_USER_TIMEOUT sockopt.])
|
||||
fi
|
||||
|
||||
# Check for IPv6 flowlabel support (believed to be Linux only)
|
||||
# We check for IPV6_FLOWLABEL_MGR in <linux/in6.h> even though we
|
||||
# don't use that file directly (we have our own stripped-down
|
||||
|
@ -3,7 +3,7 @@ This directory contains files that might be useful to analyze iperf3 results
|
||||
|
||||
iperf3_to_gnuplot.py: converts iperf3 JSON output to format easy to plot in gnuplot
|
||||
|
||||
iperf3.gp: sample gnuplot commands to plot throught and retransmits
|
||||
iperf3.gp: sample gnuplot commands to plot throughput and retransmits
|
||||
|
||||
|
||||
Other iperf3 related projects that might be of interest:
|
||||
|
@ -63,7 +63,7 @@ body {
|
||||
}
|
||||
|
||||
/*
|
||||
* Veritcal divider
|
||||
* Vertical divider
|
||||
*/
|
||||
.navbar .divider-vertical {
|
||||
height: 50px;
|
||||
|
@ -28,72 +28,72 @@ the executable.
|
||||
::
|
||||
|
||||
IPERF3(1) User Manuals IPERF3(1)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
NAME
|
||||
iperf3 - perform network throughput tests
|
||||
|
||||
|
||||
SYNOPSIS
|
||||
iperf3 -s [ options ]
|
||||
iperf3 -c server [ options ]
|
||||
|
||||
|
||||
|
||||
|
||||
DESCRIPTION
|
||||
iperf3 is a tool for performing network throughput measurements. It
|
||||
can test TCP, UDP, or SCTP throughput. To perform an iperf3 test the
|
||||
user must establish both a server and a client.
|
||||
|
||||
|
||||
The iperf3 executable contains both client and server functionality.
|
||||
An iperf3 server can be started using either of the -s or --server com-
|
||||
mand-line parameters, for example:
|
||||
|
||||
|
||||
iperf3 -s
|
||||
|
||||
|
||||
iperf3 --server
|
||||
|
||||
|
||||
Note that many iperf3 parameters have both short (-s) and long
|
||||
(--server) forms. In this section we will generally use the short form
|
||||
of command-line flags, unless only the long form of a flag is avail-
|
||||
able.
|
||||
|
||||
|
||||
By default, the iperf3 server listens on TCP port 5201 for connections
|
||||
from an iperf3 client. A custom port can be specified by using the -p
|
||||
flag, for example:
|
||||
|
||||
|
||||
iperf3 -s -p 5002
|
||||
|
||||
|
||||
After the server is started, it will listen for connections from iperf3
|
||||
clients (in other words, the iperf3 program run in client mode). The
|
||||
client mode can be started using the -c command-line option, which also
|
||||
requires a host to which iperf3 should connect. The host can by speci-
|
||||
fied by hostname, IPv4 literal, or IPv6 literal:
|
||||
|
||||
|
||||
iperf3 -c iperf3.example.com
|
||||
|
||||
|
||||
iperf3 -c 192.0.2.1
|
||||
|
||||
|
||||
iperf3 -c 2001:db8::1
|
||||
|
||||
|
||||
If the iperf3 server is running on a non-default TCP port, that port
|
||||
number needs to be specified on the client as well:
|
||||
|
||||
|
||||
iperf3 -c iperf3.example.com -p 5002
|
||||
|
||||
|
||||
The initial TCP connection is used to exchange test parameters, control
|
||||
the start and end of the test, and to exchange test results. This is
|
||||
sometimes referred to as the "control connection". The actual test
|
||||
data is sent over a separate TCP connection, as a separate flow of UDP
|
||||
packets, or as an independent SCTP connection, depending on what proto-
|
||||
col was specified by the client.
|
||||
|
||||
|
||||
Normally, the test data is sent from the client to the server, and mea-
|
||||
sures the upload speed of the client. Measuring the download speed
|
||||
from the server can be done by specifying the -R flag on the client.
|
||||
This causes data to be sent from the server to the client.
|
||||
|
||||
|
||||
iperf3 -c iperf3.example.com -p 5202 -R
|
||||
|
||||
|
||||
Results are displayed on both the client and server. There will be at
|
||||
least one line of output per measurement interval (by default a mea-
|
||||
surement interval lasts for one second, but this can be changed by the
|
||||
@ -103,43 +103,43 @@ the executable.
|
||||
measurement interval are taken from the point of view of the endpoint
|
||||
process emitting that output (in other words, the output on the client
|
||||
shows the measurement interval data for the client.
|
||||
|
||||
|
||||
At the end of the test is a set of statistics that shows (at least as
|
||||
much as possible) a summary of the test as seen by both the sender and
|
||||
the receiver, with lines tagged accordingly. Recall that by default
|
||||
the client is the sender and the server is the receiver, although as
|
||||
indicated above, use of the -R flag will reverse these roles.
|
||||
|
||||
|
||||
The client can be made to retrieve the server-side output for a given
|
||||
test by specifying the --get-server-output flag.
|
||||
|
||||
|
||||
Either the client or the server can produce its output in a JSON struc-
|
||||
ture, useful for integration with other programs, by passing it the -J
|
||||
flag. Because the contents of the JSON structure are only competely
|
||||
flag. Because the contents of the JSON structure are only completely
|
||||
known after the test has finished, no JSON output will be emitted until
|
||||
the end of the test.
|
||||
|
||||
|
||||
iperf3 has a (overly) large set of command-line options that can be
|
||||
used to set the parameters of a test. They are given in the "GENERAL
|
||||
OPTIONS" section of the manual page below, as well as summarized in
|
||||
iperf3's help output, which can be viewed by running iperf3 with the -h
|
||||
flag.
|
||||
|
||||
|
||||
GENERAL OPTIONS
|
||||
-p, --port n
|
||||
set server port to listen on/connect to to n (default 5201)
|
||||
|
||||
|
||||
-f, --format
|
||||
[kmgtKMGT] format to report: Kbits/Mbits/Gbits/Tbits
|
||||
|
||||
|
||||
-i, --interval n
|
||||
pause n seconds between periodic throughput reports; default is
|
||||
1, use 0 to disable
|
||||
|
||||
|
||||
-I, --pidfile file
|
||||
write a file with the process ID, most useful when running as a
|
||||
daemon.
|
||||
|
||||
|
||||
-F, --file name
|
||||
Use a file as the source (on the sender) or sink (on the
|
||||
receiver) of data, rather than just generating random data or
|
||||
@ -148,7 +148,7 @@ the executable.
|
||||
It does not turn iperf3 into a file transfer tool. The length,
|
||||
attributes, and in some cases contents of the received file may
|
||||
not match those of the original file.
|
||||
|
||||
|
||||
-A, --affinity n/n,m
|
||||
Set the CPU affinity, if possible (Linux, FreeBSD, and Windows
|
||||
only). On both the client and server you can set the local
|
||||
@ -157,105 +157,118 @@ the executable.
|
||||
server's affinity for just that one test, using the n,m form of
|
||||
argument. Note that when using this feature, a process will
|
||||
only be bound to a single CPU (as opposed to a set containing
|
||||
potentialy multiple CPUs).
|
||||
|
||||
-B, --bind host
|
||||
bind to the specific interface associated with address host.
|
||||
--bind-dev dev.ft R bind to the specified network interface.
|
||||
This option uses SO_BINDTODEVICE, and may require root permis-
|
||||
sions. (Available on Linux and possibly other systems.)
|
||||
|
||||
potentially multiple CPUs).
|
||||
|
||||
-B, --bind host[%dev]
|
||||
bind to the specific interface associated with address host. If
|
||||
an optional interface is specified, it is treated as a shortcut
|
||||
for --bind-dev dev. Note that a percent sign and interface
|
||||
device name are required for IPv6 link-local address literals.
|
||||
--bind-dev dev bind to the specified network interface. This
|
||||
option uses SO_BINDTODEVICE, and may require root permissions.
|
||||
(Available on Linux and possibly other systems.)
|
||||
|
||||
-V, --verbose
|
||||
give more detailed output
|
||||
|
||||
|
||||
-J, --json
|
||||
output in JSON format
|
||||
|
||||
|
||||
--logfile file
|
||||
send output to a log file.
|
||||
|
||||
|
||||
--forceflush
|
||||
force flushing output at every interval. Used to avoid buffer-
|
||||
force flushing output at every interval. Used to avoid buffer-
|
||||
ing when sending output to pipe.
|
||||
|
||||
|
||||
--timestamps[=format]
|
||||
prepend a timestamp at the start of each output line. By
|
||||
default, timestamps have the format emitted by ctime(1).
|
||||
Optionally, = followed by a format specification can be passed
|
||||
to customize the timestamps, see strftime(3). If this optional
|
||||
format is given, the = must immediately follow the --timestamps
|
||||
prepend a timestamp at the start of each output line. By
|
||||
default, timestamps have the format emitted by ctime(1).
|
||||
Optionally, = followed by a format specification can be passed
|
||||
to customize the timestamps, see strftime(3). If this optional
|
||||
format is given, the = must immediately follow the --timestamps
|
||||
option with no whitespace intervening.
|
||||
|
||||
|
||||
--rcv-timeout #
|
||||
set idle timeout for receiving data during active tests. The
|
||||
set idle timeout for receiving data during active tests. The
|
||||
receiver will halt a test if no data is received from the sender
|
||||
for this number of ms (default to 12000 ms, or 2 minutes).
|
||||
|
||||
|
||||
-d, --debug
|
||||
emit debugging output. Primarily (perhaps exclusively) of use
|
||||
emit debugging output. Primarily (perhaps exclusively) of use
|
||||
to developers.
|
||||
|
||||
|
||||
-v, --version
|
||||
show version information and quit
|
||||
|
||||
|
||||
-h, --help
|
||||
show a help synopsis
|
||||
|
||||
|
||||
|
||||
|
||||
SERVER SPECIFIC OPTIONS
|
||||
-s, --server
|
||||
run in server mode
|
||||
|
||||
|
||||
-D, --daemon
|
||||
run the server in background as a daemon
|
||||
|
||||
|
||||
-1, --one-off
|
||||
handle one client connection, then exit.
|
||||
|
||||
handle one client connection, then exit. If an idle time is
|
||||
set, the server will exit after that amount of time with no con-
|
||||
nection.
|
||||
|
||||
--idle-timeout n
|
||||
restart the server after n seconds in case it gets stuck. In
|
||||
one-off mode, this is the number of seconds the server will wait
|
||||
before exiting.
|
||||
|
||||
--server-bitrate-limit n[KMGT]
|
||||
set a limit on the server side, which will cause a test to abort
|
||||
if the client specifies a test of more than n bits per second,
|
||||
if the client specifies a test of more than n bits per second,
|
||||
or if the average data sent or received by the client (including
|
||||
all data streams) is greater than n bits per second. The
|
||||
default limit is zero, which implies no limit. The interval
|
||||
all data streams) is greater than n bits per second. The
|
||||
default limit is zero, which implies no limit. The interval
|
||||
over which to average the data rate is 5 seconds by default, but
|
||||
can be specified by adding a '/' and a number to the bitrate
|
||||
can be specified by adding a '/' and a number to the bitrate
|
||||
specifier.
|
||||
|
||||
|
||||
--rsa-private-key-path file
|
||||
path to the RSA private key (not password-protected) used to
|
||||
decrypt authentication credentials from the client (if built
|
||||
path to the RSA private key (not password-protected) used to
|
||||
decrypt authentication credentials from the client (if built
|
||||
with OpenSSL support).
|
||||
|
||||
|
||||
--authorized-users-path file
|
||||
path to the configuration file containing authorized users cre-
|
||||
dentials to run iperf tests (if built with OpenSSL support).
|
||||
The file is a comma separated list of usernames and password
|
||||
hashes; more information on the structure of the file can be
|
||||
path to the configuration file containing authorized users cre-
|
||||
dentials to run iperf tests (if built with OpenSSL support).
|
||||
The file is a comma separated list of usernames and password
|
||||
hashes; more information on the structure of the file can be
|
||||
found in the EXAMPLES section.
|
||||
|
||||
|
||||
--time-skew-thresholdsecond seconds
|
||||
time skew threshold (in seconds) between the server and client
|
||||
time skew threshold (in seconds) between the server and client
|
||||
during the authentication process.
|
||||
|
||||
|
||||
CLIENT SPECIFIC OPTIONS
|
||||
-c, --client host
|
||||
run in client mode, connecting to the specified server. By
|
||||
default, a test consists of sending data from the client to the
|
||||
server, unless the -R flag is specified.
|
||||
|
||||
-c, --client host[%dev]
|
||||
run in client mode, connecting to the specified server. By
|
||||
default, a test consists of sending data from the client to the
|
||||
server, unless the -R flag is specified. If an optional inter-
|
||||
face is specified, it is treated as a shortcut for --bind-dev
|
||||
dev. Note that a percent sign and interface device name are
|
||||
required for IPv6 link-local address literals.
|
||||
|
||||
--sctp use SCTP rather than TCP (FreeBSD and Linux)
|
||||
|
||||
|
||||
-u, --udp
|
||||
use UDP rather than TCP
|
||||
|
||||
|
||||
--connect-timeout n
|
||||
set timeout for establishing the initial control connection to
|
||||
the server, in milliseconds. The default behavior is the oper-
|
||||
ating system's timeout for TCP connection establishment. Pro-
|
||||
viding a shorter value may speed up detection of a down iperf3
|
||||
server.
|
||||
|
||||
|
||||
-b, --bitrate n[KMGT]
|
||||
set target bitrate to n bits/sec (default 1 Mbit/sec for UDP,
|
||||
unlimited for TCP/SCTP). If there are multiple streams (-P
|
||||
@ -269,7 +282,7 @@ the executable.
|
||||
inside iperf3, and is available on all platforms. Compare with
|
||||
the --fq-rate flag. This option replaces the --bandwidth flag,
|
||||
which is now deprecated but (at least for now) still accepted.
|
||||
|
||||
|
||||
--pacing-timer n[KMGT]
|
||||
set pacing timer interval in microseconds (default 1000
|
||||
microseconds, or 1 ms). This controls iperf3's internal pacing
|
||||
@ -278,7 +291,7 @@ the executable.
|
||||
timer parameter smooth out the traffic emitted by iperf3, but
|
||||
potentially at the cost of performance due to more frequent
|
||||
timer processing.
|
||||
|
||||
|
||||
--fq-rate n[KMGT]
|
||||
Set a rate to be used with fair-queueing based socket-level pac-
|
||||
ing, in bits per second. This pacing (if specified) will be in
|
||||
@ -287,201 +300,207 @@ the executable.
|
||||
test. Only available on platforms supporting the SO_MAX_PAC-
|
||||
ING_RATE socket option (currently only Linux). The default is
|
||||
no fair-queueing based pacing.
|
||||
|
||||
|
||||
--no-fq-socket-pacing
|
||||
This option is deprecated and will be removed. It is equivalent
|
||||
to specifying --fq-rate=0.
|
||||
|
||||
|
||||
-t, --time n
|
||||
time in seconds to transmit for (default 10 secs)
|
||||
|
||||
|
||||
-n, --bytes n[KMGT]
|
||||
number of bytes to transmit (instead of -t)
|
||||
|
||||
|
||||
-k, --blockcount n[KMGT]
|
||||
number of blocks (packets) to transmit (instead of -t or -n)
|
||||
|
||||
|
||||
-l, --length n[KMGT]
|
||||
length of buffer to read or write. For TCP tests, the default
|
||||
value is 128KB. In the case of UDP, iperf3 tries to dynamically
|
||||
determine a reasonable sending size based on the path MTU; if
|
||||
that cannot be determined it uses 1460 bytes as a sending size.
|
||||
For SCTP tests, the default size is 64KB.
|
||||
|
||||
|
||||
--cport port
|
||||
bind data streams to a specific client port (for TCP and UDP
|
||||
only, default is to use an ephemeral port)
|
||||
|
||||
|
||||
-P, --parallel n
|
||||
number of parallel client streams to run. Note that iperf3 is
|
||||
single threaded, so if you are CPU bound, this will not yield
|
||||
higher throughput.
|
||||
|
||||
|
||||
-R, --reverse
|
||||
reverse the direction of a test, so that the server sends data
|
||||
to the client
|
||||
|
||||
|
||||
--bidir
|
||||
test in both directions (normal and reverse), with both the
|
||||
client and server sending and receiving data simultaneously
|
||||
|
||||
|
||||
-w, --window n[KMGT]
|
||||
window size / socket buffer size (this gets sent to the server
|
||||
and used on that side too)
|
||||
|
||||
set socket buffer size / window size. This value gets sent to
|
||||
the server and used on that side too; on both sides this option
|
||||
sets both the sending and receiving socket buffer sizes. This
|
||||
option can be used to set (indirectly) the maximum TCP window
|
||||
size. Note that on Linux systems, the effective maximum window
|
||||
size is approximately double what is specified by this option
|
||||
(this behavior is not a bug in iperf3 but a "feature" of the
|
||||
Linux kernel, as documented by tcp(7) and socket(7)).
|
||||
|
||||
-M, --set-mss n
|
||||
set TCP/SCTP maximum segment size (MTU - 40 bytes)
|
||||
|
||||
|
||||
-N, --no-delay
|
||||
set TCP/SCTP no delay, disabling Nagle's Algorithm
|
||||
|
||||
|
||||
-4, --version4
|
||||
only use IPv4
|
||||
|
||||
|
||||
-6, --version6
|
||||
only use IPv6
|
||||
|
||||
|
||||
-S, --tos n
|
||||
set the IP type of service. The usual prefixes for octal and hex
|
||||
can be used, i.e. 52, 064 and 0x34 all specify the same value.
|
||||
|
||||
|
||||
--dscp dscp
|
||||
set the IP DSCP bits. Both numeric and symbolic values are
|
||||
accepted. Numeric values can be specified in decimal, octal and
|
||||
hex (see --tos above).
|
||||
|
||||
hex (see --tos above). To set both the DSCP bits and the ECN
|
||||
bits, use --tos.
|
||||
|
||||
-L, --flowlabel n
|
||||
set the IPv6 flow label (currently only supported on Linux)
|
||||
|
||||
|
||||
-X, --xbind name
|
||||
Bind SCTP associations to a specific subset of links using
|
||||
sctp_bindx(3). The --B flag will be ignored if this flag is
|
||||
Bind SCTP associations to a specific subset of links using
|
||||
sctp_bindx(3). The --B flag will be ignored if this flag is
|
||||
specified. Normally SCTP will include the protocol addresses of
|
||||
all active links on the local host when setting up an associa-
|
||||
tion. Specifying at least one --X name will disable this behav-
|
||||
iour. This flag must be specified for each link to be included
|
||||
in the association, and is supported for both iperf servers and
|
||||
all active links on the local host when setting up an associa-
|
||||
tion. Specifying at least one --X name will disable this behav-
|
||||
iour. This flag must be specified for each link to be included
|
||||
in the association, and is supported for both iperf servers and
|
||||
clients (the latter are supported by passing the first --X argu-
|
||||
ment to bind(2)). Hostnames are accepted as arguments and are
|
||||
resolved using getaddrinfo(3). If the --4 or --6 flags are
|
||||
specified, names which do not resolve to addresses within the
|
||||
ment to bind(2)). Hostnames are accepted as arguments and are
|
||||
resolved using getaddrinfo(3). If the --4 or --6 flags are
|
||||
specified, names which do not resolve to addresses within the
|
||||
specified protocol family will be ignored.
|
||||
|
||||
|
||||
--nstreams n
|
||||
Set number of SCTP streams.
|
||||
|
||||
|
||||
-Z, --zerocopy
|
||||
Use a "zero copy" method of sending data, such as sendfile(2),
|
||||
Use a "zero copy" method of sending data, such as sendfile(2),
|
||||
instead of the usual write(2).
|
||||
|
||||
|
||||
-O, --omit n
|
||||
Omit the first n seconds of the test, to skip past the TCP slow-
|
||||
start period.
|
||||
|
||||
|
||||
-T, --title str
|
||||
Prefix every output line with this string.
|
||||
|
||||
|
||||
--extra-data str
|
||||
Specify an extra data string field to be included in JSON out-
|
||||
Specify an extra data string field to be included in JSON out-
|
||||
put.
|
||||
|
||||
|
||||
-C, --congestion algo
|
||||
Set the congestion control algorithm (Linux and FreeBSD only).
|
||||
An older --linux-congestion synonym for this flag is accepted
|
||||
Set the congestion control algorithm (Linux and FreeBSD only).
|
||||
An older --linux-congestion synonym for this flag is accepted
|
||||
but is deprecated.
|
||||
|
||||
|
||||
--get-server-output
|
||||
Get the output from the server. The output format is determined
|
||||
by the server (in particular, if the server was invoked with the
|
||||
--json flag, the output will be in JSON format, otherwise it
|
||||
will be in human-readable format). If the client is run with
|
||||
--json, the server output is included in a JSON object; other-
|
||||
wise it is appended at the bottom of the human-readable output.
|
||||
|
||||
--json flag, the output will be in JSON format, otherwise it
|
||||
will be in human-readable format). If the client is run with
|
||||
--json, the server output is included in a JSON object; other-
|
||||
wise it is appended at the bottom of the human-readable output.
|
||||
|
||||
--udp-counters-64bit
|
||||
Use 64-bit counters in UDP test packets. The use of this option
|
||||
can help prevent counter overflows during long or high-bitrate
|
||||
UDP tests. Both client and server need to be running at least
|
||||
version 3.1 for this option to work. It may become the default
|
||||
can help prevent counter overflows during long or high-bitrate
|
||||
UDP tests. Both client and server need to be running at least
|
||||
version 3.1 for this option to work. It may become the default
|
||||
behavior at some point in the future.
|
||||
|
||||
|
||||
--repeating-payload
|
||||
Use repeating pattern in payload, instead of random bytes. The
|
||||
same payload is used in iperf2 (ASCII '0..9' repeating). It
|
||||
might help to test and reveal problems in networking gear with
|
||||
hardware compression (including some WiFi access points), where
|
||||
iperf2 and iperf3 perform differently, just based on payload
|
||||
Use repeating pattern in payload, instead of random bytes. The
|
||||
same payload is used in iperf2 (ASCII '0..9' repeating). It
|
||||
might help to test and reveal problems in networking gear with
|
||||
hardware compression (including some WiFi access points), where
|
||||
iperf2 and iperf3 perform differently, just based on payload
|
||||
entropy.
|
||||
|
||||
|
||||
--dont-fragment
|
||||
Set the IPv4 Don't Fragment (DF) bit on outgoing packets. Only
|
||||
Set the IPv4 Don't Fragment (DF) bit on outgoing packets. Only
|
||||
applicable to tests doing UDP over IPv4.
|
||||
|
||||
|
||||
--username username
|
||||
username to use for authentication to the iperf server (if built
|
||||
with OpenSSL support). The password will be prompted for inter-
|
||||
actively when the test is run. Note, the password to use can
|
||||
also be specified via the IPERF3_PASSWORD environment variable.
|
||||
If this variable is present, the password prompt will be
|
||||
actively when the test is run. Note, the password to use can
|
||||
also be specified via the IPERF3_PASSWORD environment variable.
|
||||
If this variable is present, the password prompt will be
|
||||
skipped.
|
||||
|
||||
|
||||
--rsa-public-key-path file
|
||||
path to the RSA public key used to encrypt authentication cre-
|
||||
path to the RSA public key used to encrypt authentication cre-
|
||||
dentials (if built with OpenSSL support)
|
||||
|
||||
|
||||
|
||||
|
||||
EXAMPLES
|
||||
Authentication - RSA Keypair
|
||||
The authentication feature of iperf3 requires an RSA public keypair.
|
||||
The public key is used to encrypt the authentication token containing
|
||||
the user credentials, while the private key is used to decrypt the
|
||||
authentication token. The private key must be in PEM format and addi-
|
||||
tionally must not have a password set. The public key must be in PEM
|
||||
format and use SubjectPrefixKeyInfo encoding. An example of a set of
|
||||
UNIX/Linux commands using OpenSSL to generate a correctly-formed key-
|
||||
The authentication feature of iperf3 requires an RSA public keypair.
|
||||
The public key is used to encrypt the authentication token containing
|
||||
the user credentials, while the private key is used to decrypt the
|
||||
authentication token. The private key must be in PEM format and addi-
|
||||
tionally must not have a password set. The public key must be in PEM
|
||||
format and use SubjectPrefixKeyInfo encoding. An example of a set of
|
||||
UNIX/Linux commands using OpenSSL to generate a correctly-formed key-
|
||||
pair follows:
|
||||
|
||||
|
||||
> openssl genrsa -des3 -out private.pem 2048
|
||||
> openssl rsa -in private.pem -outform PEM -pubout -out public.pem
|
||||
> openssl rsa -in private.pem -out private_not_protected.pem -out-
|
||||
form PEM
|
||||
|
||||
|
||||
After these commands, the public key will be contained in the file pub-
|
||||
lic.pem and the private key will be contained in the file pri-
|
||||
lic.pem and the private key will be contained in the file pri-
|
||||
vate_not_protected.pem.
|
||||
|
||||
|
||||
Authentication - Authorized users configuration file
|
||||
A simple plaintext file must be provided to the iperf3 server in order
|
||||
to specify the authorized user credentials. The file is a simple list
|
||||
of comma-separated pairs of a username and a corresponding password
|
||||
hash. The password hash is a SHA256 hash of the string "{$user}$pass-
|
||||
word". The file can also contain commented lines (starting with the #
|
||||
character). An example of commands to generate the password hash on a
|
||||
A simple plaintext file must be provided to the iperf3 server in order
|
||||
to specify the authorized user credentials. The file is a simple list
|
||||
of comma-separated pairs of a username and a corresponding password
|
||||
hash. The password hash is a SHA256 hash of the string "{$user}$pass-
|
||||
word". The file can also contain commented lines (starting with the #
|
||||
character). An example of commands to generate the password hash on a
|
||||
UNIX/Linux system is given below:
|
||||
|
||||
|
||||
> S_USER=mario S_PASSWD=rossi
|
||||
> echo -n "{$S_USER}$S_PASSWD" | sha256sum | awk '{ print $1 }'
|
||||
|
||||
|
||||
An example of a password file (with an entry corresponding to the above
|
||||
username and password) is given below:
|
||||
> cat credentials.csv
|
||||
# file format: username,sha256
|
||||
mario,bf7a49a846d44b454a5d11e7acfaf13d138bbe0b7483aa3e050879700572709b
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
AUTHORS
|
||||
A list of the contributors to iperf3 can be found within the documenta-
|
||||
tion located at https://software.es.net/iperf/dev.html#authors.
|
||||
|
||||
|
||||
|
||||
|
||||
SEE ALSO
|
||||
libiperf(3), https://software.es.net/iperf
|
||||
|
||||
|
||||
|
||||
ESnet January 2022
|
||||
IPERF3(1)
|
||||
|
||||
|
||||
|
||||
ESnet January 2022 IPERF3(1)
|
||||
|
||||
The iperf3 manual page will typically be installed in manual
|
||||
section 1.
|
||||
|
@ -4,6 +4,7 @@ iperf3 Project News
|
||||
2022-01-28: iperf-3.11 released
|
||||
----------------------------------
|
||||
| URL: https://downloads.es.net/pub/iperf/iperf-3.11.tar.gz
|
||||
| SHA256: ``de8cb409fad61a0574f4cb07eb19ce1159707403ac2dc01b5d175e91240b7e5f``
|
||||
|
||||
iperf 3.11 is principally a bugfix release. Also GitHub
|
||||
Discussions are now supported.
|
||||
|
@ -207,6 +207,7 @@ EGREP = @EGREP@
|
||||
ETAGS = @ETAGS@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
FILECMD = @FILECMD@
|
||||
GREP = @GREP@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
|
@ -533,6 +533,7 @@ EGREP = @EGREP@
|
||||
ETAGS = @ETAGS@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
FILECMD = @FILECMD@
|
||||
GREP = @GREP@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
|
102
src/cjson.c
102
src/cjson.c
@ -37,6 +37,7 @@
|
||||
#pragma warning (disable : 4001)
|
||||
#endif
|
||||
|
||||
#include "iperf_config.h"
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
@ -82,8 +83,24 @@
|
||||
#endif
|
||||
|
||||
#ifndef NAN
|
||||
#ifdef _WIN32
|
||||
#define NAN sqrt(-1.0)
|
||||
#else
|
||||
#define NAN 0.0/0.0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_INTTYPES_H)
|
||||
# include <inttypes.h>
|
||||
#else
|
||||
# ifndef PRIu64
|
||||
# if sizeof(long) == 8
|
||||
# define PRIu64 "lu"
|
||||
# else
|
||||
# define PRIu64 "llu"
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
const unsigned char *json;
|
||||
@ -103,9 +120,9 @@ CJSON_PUBLIC(const char *) cJSON_GetErrorPtr(void)
|
||||
return (const char*) (global_error.json + global_error.position);
|
||||
}
|
||||
|
||||
CJSON_PUBLIC(char *) cJSON_GetStringValue(cJSON *item)
|
||||
CJSON_PUBLIC(char *) cJSON_GetStringValue(const cJSON * const item)
|
||||
{
|
||||
if (!cJSON_IsString(item))
|
||||
if (!cJSON_IsString(item))
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
@ -113,18 +130,18 @@ CJSON_PUBLIC(char *) cJSON_GetStringValue(cJSON *item)
|
||||
return item->valuestring;
|
||||
}
|
||||
|
||||
CJSON_PUBLIC(double) cJSON_GetNumberValue(cJSON *item)
|
||||
CJSON_PUBLIC(double) cJSON_GetNumberValue(const cJSON * const item)
|
||||
{
|
||||
if (!cJSON_IsNumber(item))
|
||||
if (!cJSON_IsNumber(item))
|
||||
{
|
||||
return NAN;
|
||||
return (double) NAN;
|
||||
}
|
||||
|
||||
return item->valuedouble;
|
||||
}
|
||||
|
||||
/* This is a safeguard to prevent copy-pasters from using incompatible C and header files */
|
||||
#if (CJSON_VERSION_MAJOR != 1) || (CJSON_VERSION_MINOR != 7) || (CJSON_VERSION_PATCH != 13)
|
||||
#if (CJSON_VERSION_MAJOR != 1) || (CJSON_VERSION_MINOR != 7) || (CJSON_VERSION_PATCH != 15)
|
||||
#error cJSON.h and cJSON.c have different versions. Make sure that both have the same.
|
||||
#endif
|
||||
|
||||
@ -518,10 +535,8 @@ static unsigned char* ensure(printbuffer * const p, size_t needed)
|
||||
|
||||
return NULL;
|
||||
}
|
||||
if (newbuffer)
|
||||
{
|
||||
memcpy(newbuffer, p->buffer, p->offset + 1);
|
||||
}
|
||||
|
||||
memcpy(newbuffer, p->buffer, p->offset + 1);
|
||||
p->hooks.deallocate(p->buffer);
|
||||
}
|
||||
p->length = newsize;
|
||||
@ -571,6 +586,10 @@ static cJSON_bool print_number(const cJSON * const item, printbuffer * const out
|
||||
{
|
||||
length = sprintf((char*)number_buffer, "null");
|
||||
}
|
||||
else if(d == (double)item->valueint)
|
||||
{
|
||||
length = sprintf((char*)number_buffer, "%" PRIu64, item->valueint);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Try 15 decimal places of precision to avoid nonsignificant nonzero digits */
|
||||
@ -1112,7 +1131,7 @@ CJSON_PUBLIC(cJSON *) cJSON_ParseWithLengthOpts(const char *value, size_t buffer
|
||||
}
|
||||
|
||||
buffer.content = (const unsigned char*)value;
|
||||
buffer.length = buffer_length;
|
||||
buffer.length = buffer_length;
|
||||
buffer.offset = 0;
|
||||
buffer.hooks = global_hooks;
|
||||
|
||||
@ -1520,6 +1539,10 @@ static cJSON_bool parse_array(cJSON * const item, parse_buffer * const input_buf
|
||||
success:
|
||||
input_buffer->depth--;
|
||||
|
||||
if (head != NULL) {
|
||||
head->prev = current_item;
|
||||
}
|
||||
|
||||
item->type = cJSON_Array;
|
||||
item->child = head;
|
||||
|
||||
@ -1692,6 +1715,10 @@ static cJSON_bool parse_object(cJSON * const item, parse_buffer * const input_bu
|
||||
success:
|
||||
input_buffer->depth--;
|
||||
|
||||
if (head != NULL) {
|
||||
head->prev = current_item;
|
||||
}
|
||||
|
||||
item->type = cJSON_Object;
|
||||
item->child = head;
|
||||
|
||||
@ -1978,15 +2005,6 @@ static cJSON_bool add_item_to_array(cJSON *array, cJSON *item)
|
||||
suffix_object(child->prev, item);
|
||||
array->child->prev = item;
|
||||
}
|
||||
else
|
||||
{
|
||||
while (child->next)
|
||||
{
|
||||
child = child->next;
|
||||
}
|
||||
suffix_object(child, item);
|
||||
array->child->prev = item;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
@ -2213,6 +2231,12 @@ CJSON_PUBLIC(cJSON *) cJSON_DetachItemViaPointer(cJSON *parent, cJSON * const it
|
||||
/* first element */
|
||||
parent->child = item->next;
|
||||
}
|
||||
else if (item->next == NULL)
|
||||
{
|
||||
/* last element */
|
||||
parent->child->prev = item->prev;
|
||||
}
|
||||
|
||||
/* make sure the detached item doesn't point anywhere anymore */
|
||||
item->prev = NULL;
|
||||
item->next = NULL;
|
||||
@ -2310,6 +2334,10 @@ CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemViaPointer(cJSON * const parent, cJSON
|
||||
}
|
||||
if (parent->child == item)
|
||||
{
|
||||
if (parent->child->prev == parent->child)
|
||||
{
|
||||
replacement->prev = replacement;
|
||||
}
|
||||
parent->child = replacement;
|
||||
}
|
||||
else
|
||||
@ -2321,6 +2349,10 @@ CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemViaPointer(cJSON * const parent, cJSON
|
||||
{
|
||||
replacement->prev->next = replacement;
|
||||
}
|
||||
if (replacement->next == NULL)
|
||||
{
|
||||
parent->child->prev = replacement;
|
||||
}
|
||||
}
|
||||
|
||||
item->next = NULL;
|
||||
@ -2353,6 +2385,11 @@ static cJSON_bool replace_item_in_object(cJSON *object, const char *string, cJSO
|
||||
cJSON_free(replacement->string);
|
||||
}
|
||||
replacement->string = (char*)cJSON_strdup((const unsigned char*)string, &global_hooks);
|
||||
if (replacement->string == NULL)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
replacement->type &= ~cJSON_StringIsConst;
|
||||
|
||||
return cJSON_ReplaceItemViaPointer(object, get_object_item(object, string, case_sensitive), replacement);
|
||||
@ -2542,6 +2579,7 @@ CJSON_PUBLIC(cJSON *) cJSON_CreateIntArray(const int *numbers, int count)
|
||||
}
|
||||
|
||||
a = cJSON_CreateArray();
|
||||
|
||||
for(i = 0; a && (i < (size_t)count); i++)
|
||||
{
|
||||
n = cJSON_CreateNumber(numbers[i]);
|
||||
@ -2561,6 +2599,10 @@ CJSON_PUBLIC(cJSON *) cJSON_CreateIntArray(const int *numbers, int count)
|
||||
p = n;
|
||||
}
|
||||
|
||||
if (a && a->child) {
|
||||
a->child->prev = n;
|
||||
}
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
@ -2597,6 +2639,10 @@ CJSON_PUBLIC(cJSON *) cJSON_CreateFloatArray(const float *numbers, int count)
|
||||
p = n;
|
||||
}
|
||||
|
||||
if (a && a->child) {
|
||||
a->child->prev = n;
|
||||
}
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
@ -2614,7 +2660,7 @@ CJSON_PUBLIC(cJSON *) cJSON_CreateDoubleArray(const double *numbers, int count)
|
||||
|
||||
a = cJSON_CreateArray();
|
||||
|
||||
for(i = 0;a && (i < (size_t)count); i++)
|
||||
for(i = 0; a && (i < (size_t)count); i++)
|
||||
{
|
||||
n = cJSON_CreateNumber(numbers[i]);
|
||||
if(!n)
|
||||
@ -2633,6 +2679,10 @@ CJSON_PUBLIC(cJSON *) cJSON_CreateDoubleArray(const double *numbers, int count)
|
||||
p = n;
|
||||
}
|
||||
|
||||
if (a && a->child) {
|
||||
a->child->prev = n;
|
||||
}
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
@ -2669,6 +2719,10 @@ CJSON_PUBLIC(cJSON *) cJSON_CreateStringArray(const char *const *strings, int co
|
||||
p = n;
|
||||
}
|
||||
|
||||
if (a && a->child) {
|
||||
a->child->prev = n;
|
||||
}
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
@ -2740,6 +2794,10 @@ CJSON_PUBLIC(cJSON *) cJSON_Duplicate(const cJSON *item, cJSON_bool recurse)
|
||||
}
|
||||
child = child->next;
|
||||
}
|
||||
if (newitem && newitem->child)
|
||||
{
|
||||
newitem->child->prev = newchild;
|
||||
}
|
||||
|
||||
return newitem;
|
||||
|
||||
@ -2951,7 +3009,7 @@ CJSON_PUBLIC(cJSON_bool) cJSON_IsRaw(const cJSON * const item)
|
||||
|
||||
CJSON_PUBLIC(cJSON_bool) cJSON_Compare(const cJSON * const a, const cJSON * const b, const cJSON_bool case_sensitive)
|
||||
{
|
||||
if ((a == NULL) || (b == NULL) || ((a->type & 0xFF) != (b->type & 0xFF)) || cJSON_IsInvalid(a))
|
||||
if ((a == NULL) || (b == NULL) || ((a->type & 0xFF) != (b->type & 0xFF)))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
16
src/cjson.h
16
src/cjson.h
@ -19,7 +19,6 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
*/
|
||||
#include "iperf_config.h"
|
||||
|
||||
#ifndef cJSON__h
|
||||
#define cJSON__h
|
||||
@ -86,7 +85,7 @@ then using the CJSON_API_VISIBILITY flag to "export" the same symbols the way CJ
|
||||
/* project version */
|
||||
#define CJSON_VERSION_MAJOR 1
|
||||
#define CJSON_VERSION_MINOR 7
|
||||
#define CJSON_VERSION_PATCH 13
|
||||
#define CJSON_VERSION_PATCH 15
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
@ -181,8 +180,8 @@ CJSON_PUBLIC(cJSON_bool) cJSON_HasObjectItem(const cJSON *object, const char *st
|
||||
CJSON_PUBLIC(const char *) cJSON_GetErrorPtr(void);
|
||||
|
||||
/* Check item type and return its value */
|
||||
CJSON_PUBLIC(char *) cJSON_GetStringValue(cJSON *item);
|
||||
CJSON_PUBLIC(double) cJSON_GetNumberValue(cJSON *item);
|
||||
CJSON_PUBLIC(char *) cJSON_GetStringValue(const cJSON * const item);
|
||||
CJSON_PUBLIC(double) cJSON_GetNumberValue(const cJSON * const item);
|
||||
|
||||
/* These functions check the type of an item */
|
||||
CJSON_PUBLIC(cJSON_bool) cJSON_IsInvalid(const cJSON * const item);
|
||||
@ -261,7 +260,7 @@ CJSON_PUBLIC(cJSON_bool) cJSON_Compare(const cJSON * const a, const cJSON * cons
|
||||
|
||||
/* Minify a strings, remove blank characters(such as ' ', '\t', '\r', '\n') from strings.
|
||||
* The input pointer json cannot point to a read-only address area, such as a string constant,
|
||||
* but should point to a readable and writable adress area. */
|
||||
* but should point to a readable and writable address area. */
|
||||
CJSON_PUBLIC(void) cJSON_Minify(char *json);
|
||||
|
||||
/* Helper functions for creating and adding items to an object at the same time.
|
||||
@ -284,6 +283,13 @@ CJSON_PUBLIC(double) cJSON_SetNumberHelper(cJSON *object, double number);
|
||||
/* Change the valuestring of a cJSON_String object, only takes effect when type of object is cJSON_String */
|
||||
CJSON_PUBLIC(char*) cJSON_SetValuestring(cJSON *object, const char *valuestring);
|
||||
|
||||
/* If the object is not a boolean type this does nothing and returns cJSON_Invalid else it returns the new type*/
|
||||
#define cJSON_SetBoolValue(object, boolValue) ( \
|
||||
(object != NULL && ((object)->type & (cJSON_False|cJSON_True))) ? \
|
||||
(object)->type=((object)->type &(~(cJSON_False|cJSON_True)))|((boolValue)?cJSON_True:cJSON_False) : \
|
||||
cJSON_Invalid\
|
||||
)
|
||||
|
||||
/* Macro for iterating over an array or object */
|
||||
#define cJSON_ArrayForEach(element, array) for(element = (array != NULL) ? (array)->child : NULL; element != NULL; element = element->next)
|
||||
|
||||
|
@ -29,15 +29,18 @@
|
||||
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/version.h>
|
||||
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,7,0)
|
||||
#include <linux/in6.h>
|
||||
#else
|
||||
#ifndef __ANDROID__
|
||||
/*
|
||||
It is just a stripped copy of the Linux kernel header "linux/in6.h"
|
||||
"Flow label" things are still not defined in "netinet/in*.h" headers,
|
||||
but we cannot use "linux/in6.h" immediately because it currently
|
||||
conflicts with "netinet/in.h" .
|
||||
conflicts with "netinet/in.h" . (in kernel versions < 3.7.0)
|
||||
*/
|
||||
|
||||
#ifndef __ANDROID__
|
||||
struct in6_flowlabel_req
|
||||
{
|
||||
struct in6_addr flr_dst;
|
||||
@ -68,6 +71,7 @@ struct in6_flowlabel_req
|
||||
#define IPV6_FLOWINFO_FLOWLABEL 0x000fffff
|
||||
#define IPV6_FLOWINFO_PRIORITY 0x0ff00000
|
||||
|
||||
#endif
|
||||
#define IPV6_FLOWLABEL_MGR 32
|
||||
#define IPV6_FLOWINFO_SEND 33
|
||||
|
||||
|
48
src/iperf.h
48
src/iperf.h
@ -101,15 +101,14 @@ struct iperf_interval_results
|
||||
/* Just placeholders, never accessed. */
|
||||
char *tcpInfo;
|
||||
#endif
|
||||
int interval_retrans;
|
||||
int interval_sacks;
|
||||
int snd_cwnd;
|
||||
int snd_wnd;
|
||||
long interval_retrans;
|
||||
long snd_cwnd;
|
||||
long snd_wnd;
|
||||
TAILQ_ENTRY(iperf_interval_results) irlistentries;
|
||||
void *custom_data;
|
||||
int rtt;
|
||||
int rttvar;
|
||||
int pmtu;
|
||||
long rtt;
|
||||
long rttvar;
|
||||
long pmtu;
|
||||
};
|
||||
|
||||
struct iperf_stream_result
|
||||
@ -119,16 +118,14 @@ struct iperf_stream_result
|
||||
iperf_size_t bytes_received_this_interval;
|
||||
iperf_size_t bytes_sent_this_interval;
|
||||
iperf_size_t bytes_sent_omit;
|
||||
int stream_prev_total_retrans;
|
||||
int stream_retrans;
|
||||
int stream_prev_total_sacks;
|
||||
int stream_sacks;
|
||||
int stream_max_rtt;
|
||||
int stream_min_rtt;
|
||||
int stream_sum_rtt;
|
||||
long stream_prev_total_retrans;
|
||||
long stream_retrans;
|
||||
long stream_max_rtt;
|
||||
long stream_min_rtt;
|
||||
long stream_sum_rtt;
|
||||
int stream_count_rtt;
|
||||
int stream_max_snd_cwnd;
|
||||
int stream_max_snd_wnd;
|
||||
long stream_max_snd_cwnd;
|
||||
long stream_max_snd_wnd;
|
||||
struct iperf_time start_time;
|
||||
struct iperf_time end_time;
|
||||
struct iperf_time start_time_fixed;
|
||||
@ -168,6 +165,7 @@ struct iperf_settings
|
||||
#endif // HAVE_SSL
|
||||
int connect_timeout; /* socket connection timeout, in ms */
|
||||
int idle_timeout; /* server idle time timeout */
|
||||
unsigned int snd_timeout; /* Timeout for sending tcp messages in active mode, in us */
|
||||
struct iperf_time rcv_timeout; /* Timeout for receiving messages in active mode, in us */
|
||||
};
|
||||
|
||||
@ -257,6 +255,15 @@ enum iperf_mode {
|
||||
BIDIRECTIONAL = -1
|
||||
};
|
||||
|
||||
enum debug_level {
|
||||
DEBUG_LEVEL_ERROR = 1,
|
||||
DEBUG_LEVEL_WARN = 2,
|
||||
DEBUG_LEVEL_INFO = 3,
|
||||
DEBUG_LEVEL_DEBUG = 4,
|
||||
DEBUG_LEVEL_MAX = 4
|
||||
};
|
||||
|
||||
|
||||
struct iperf_test
|
||||
{
|
||||
char role; /* 'c' lient or 's' erver */
|
||||
@ -311,6 +318,7 @@ struct iperf_test
|
||||
int json_output; /* -J option - JSON output */
|
||||
int zerocopy; /* -Z option - use sendfile */
|
||||
int debug; /* -d option - enable debug */
|
||||
enum debug_level debug_level; /* -d option option - level of debug messages to show */
|
||||
int get_server_output; /* --get-server-output */
|
||||
int udp_counters_64bit; /* --use-64-bit-udp-counters */
|
||||
int forceflush; /* --forceflush - flushing output at every interval */
|
||||
@ -421,4 +429,12 @@ struct iperf_test
|
||||
|
||||
extern int gerror; /* error value from getaddrinfo(3), for use in internal error handling */
|
||||
|
||||
/* UDP "connect" message and reply (textual value for Wireshark, etc. readability - legacy was numeric) */
|
||||
#define UDP_CONNECT_MSG 0x36373839 // "6789" - legacy value was 123456789
|
||||
#define UDP_CONNECT_REPLY 0x39383736 // "9876" - legacy value was 987654321
|
||||
#define LEGACY_UDP_CONNECT_REPLY 987654321 // Old servers may still reply with the legacy value
|
||||
|
||||
/* In Reverse mode, maximum number of packets to wait for "accept" response - to handle out of order packets */
|
||||
#define MAX_REVERSE_OUT_OF_ORDER_PACKETS 2
|
||||
|
||||
#endif /* !__IPERF_H */
|
||||
|
13
src/iperf3.1
13
src/iperf3.1
@ -1,4 +1,4 @@
|
||||
.TH IPERF3 1 "January 2022" ESnet "User Manuals"
|
||||
.TH IPERF3 1 "September 2022" ESnet "User Manuals"
|
||||
.SH NAME
|
||||
iperf3 \- perform network throughput tests
|
||||
.SH SYNOPSIS
|
||||
@ -145,6 +145,7 @@ bind to the specific interface associated with address \fIhost\fR.
|
||||
If an optional interface is specified, it is treated as a shortcut
|
||||
for \fB--bind-dev \fIdev\fR.
|
||||
Note that a percent sign and interface device name are required for IPv6 link-local address literals.
|
||||
.TP
|
||||
.BR --bind-dev " \fIdev\fR"
|
||||
bind to the specified network interface.
|
||||
This option uses SO_BINDTODEVICE, and may require root permissions.
|
||||
@ -179,6 +180,14 @@ set idle timeout for receiving data during active tests. The receiver
|
||||
will halt a test if no data is received from the sender for this
|
||||
number of ms (default to 12000 ms, or 2 minutes).
|
||||
.TP
|
||||
.BR --snd-timeout " \fI#\fR"
|
||||
set timeout for unacknowledged TCP data (on both test and control
|
||||
connections) This option can be used to force a faster test timeout
|
||||
in case of a network partition during a test. The required
|
||||
parameter is specified in ms, and defaults to the system settings.
|
||||
This functionality depends on the TCP_USER_TIMEOUT socket option, and
|
||||
will not work on systems that do not support it.
|
||||
.TP
|
||||
.BR -d ", " --debug " "
|
||||
emit debugging output.
|
||||
Primarily (perhaps exclusively) of use to developers.
|
||||
@ -383,7 +392,7 @@ Use a "zero copy" method of sending data, such as sendfile(2),
|
||||
instead of the usual write(2).
|
||||
.TP
|
||||
.BR -O ", " --omit " \fIn\fR"
|
||||
Omit the first n seconds of the test, to skip past the TCP slow-start
|
||||
Perform pre-test for N seconds and omit the pre-test statistics, to skip past the TCP slow-start
|
||||
period.
|
||||
.TP
|
||||
.BR -T ", " --title " \fIstr\fR"
|
||||
|
@ -278,6 +278,12 @@ iperf_get_test_repeating_payload(struct iperf_test *ipt)
|
||||
return ipt->repeating_payload;
|
||||
}
|
||||
|
||||
int
|
||||
iperf_get_test_bind_port(struct iperf_test *ipt)
|
||||
{
|
||||
return ipt->bind_port;
|
||||
}
|
||||
|
||||
int
|
||||
iperf_get_test_server_port(struct iperf_test *ipt)
|
||||
{
|
||||
@ -411,6 +417,12 @@ iperf_get_test_congestion_control(struct iperf_test* ipt)
|
||||
return ipt->congestion;
|
||||
}
|
||||
|
||||
int
|
||||
iperf_get_test_mss(struct iperf_test *ipt)
|
||||
{
|
||||
return ipt->settings->mss;
|
||||
}
|
||||
|
||||
/************** Setter routines for some fields inside iperf_test *************/
|
||||
|
||||
void
|
||||
@ -521,6 +533,12 @@ iperf_set_test_burst(struct iperf_test *ipt, int burst)
|
||||
ipt->settings->burst = burst;
|
||||
}
|
||||
|
||||
void
|
||||
iperf_set_test_bind_port(struct iperf_test *ipt, int bind_port)
|
||||
{
|
||||
ipt->bind_port = bind_port;
|
||||
}
|
||||
|
||||
void
|
||||
iperf_set_test_server_port(struct iperf_test *ipt, int srv_port)
|
||||
{
|
||||
@ -767,6 +785,11 @@ iperf_set_test_congestion_control(struct iperf_test* ipt, char* cc)
|
||||
ipt->congestion = strdup(cc);
|
||||
}
|
||||
|
||||
void
|
||||
iperf_set_test_mss(struct iperf_test *ipt, int mss)
|
||||
{
|
||||
ipt->settings->mss = mss;
|
||||
}
|
||||
|
||||
/********************** Get/set test protocol structure ***********************/
|
||||
|
||||
@ -1054,14 +1077,15 @@ iperf_parse_arguments(struct iperf_test *test, int argc, char **argv)
|
||||
{"connect-timeout", required_argument, NULL, OPT_CONNECT_TIMEOUT},
|
||||
{"idle-timeout", required_argument, NULL, OPT_IDLE_TIMEOUT},
|
||||
{"rcv-timeout", required_argument, NULL, OPT_RCV_TIMEOUT},
|
||||
{"debug", no_argument, NULL, 'd'},
|
||||
{"snd-timeout", required_argument, NULL, OPT_SND_TIMEOUT},
|
||||
{"debug", optional_argument, NULL, 'd'},
|
||||
{"help", no_argument, NULL, 'h'},
|
||||
{NULL, 0, NULL, 0}
|
||||
};
|
||||
int flag;
|
||||
int portno;
|
||||
int blksize;
|
||||
int server_flag, client_flag, rate_flag, duration_flag, rcv_timeout_flag;
|
||||
int server_flag, client_flag, rate_flag, duration_flag, rcv_timeout_flag, snd_timeout_flag;
|
||||
char *endptr;
|
||||
#if defined(HAVE_CPU_AFFINITY)
|
||||
char* comma;
|
||||
@ -1073,7 +1097,7 @@ iperf_parse_arguments(struct iperf_test *test, int argc, char **argv)
|
||||
int rcv_timeout_in = 0;
|
||||
|
||||
blksize = 0;
|
||||
server_flag = client_flag = rate_flag = duration_flag = rcv_timeout_flag = 0;
|
||||
server_flag = client_flag = rate_flag = duration_flag = rcv_timeout_flag = snd_timeout_flag =0;
|
||||
#if defined(HAVE_SSL)
|
||||
char *client_username = NULL, *client_rsa_public_key = NULL, *server_rsa_private_key = NULL;
|
||||
#endif /* HAVE_SSL */
|
||||
@ -1280,8 +1304,8 @@ iperf_parse_arguments(struct iperf_test *test, int argc, char **argv)
|
||||
if (iperf_parse_hostname(test, optarg, &p, &p1)) {
|
||||
#if defined(HAVE_SO_BINDTODEVICE)
|
||||
/* Get rid of the hostname we saved earlier. */
|
||||
free(iperf_get_test_server_hostname(test));
|
||||
iperf_set_test_server_hostname(test, p);
|
||||
free(iperf_get_test_bind_address(test));
|
||||
iperf_set_test_bind_address(test, p);
|
||||
iperf_set_test_bind_dev(test, p1);
|
||||
#else /* HAVE_SO_BINDTODEVICE */
|
||||
i_errno = IEBINDDEVNOSUPPORT;
|
||||
@ -1420,6 +1444,16 @@ iperf_parse_arguments(struct iperf_test *test, int argc, char **argv)
|
||||
test->settings->rcv_timeout.usecs = (rcv_timeout_in % SEC_TO_mS) * mS_TO_US;
|
||||
rcv_timeout_flag = 1;
|
||||
break;
|
||||
#if defined(HAVE_TCP_USER_TIMEOUT)
|
||||
case OPT_SND_TIMEOUT:
|
||||
test->settings->snd_timeout = atoi(optarg);
|
||||
if (test->settings->snd_timeout < 0 || test->settings->snd_timeout > MAX_TIME * SEC_TO_mS) {
|
||||
i_errno = IESNDTIMEOUT;
|
||||
return -1;
|
||||
}
|
||||
snd_timeout_flag = 1;
|
||||
break;
|
||||
#endif /* HAVE_TCP_USER_TIMEOUT */
|
||||
case 'A':
|
||||
#if defined(HAVE_CPU_AFFINITY)
|
||||
test->affinity = strtol(optarg, &endptr, 0);
|
||||
@ -1457,6 +1491,12 @@ iperf_parse_arguments(struct iperf_test *test, int argc, char **argv)
|
||||
break;
|
||||
case 'd':
|
||||
test->debug = 1;
|
||||
test->debug_level = DEBUG_LEVEL_MAX;
|
||||
if (optarg) {
|
||||
test->debug_level = atoi(optarg);
|
||||
if (test->debug_level < 0)
|
||||
test->debug_level = DEBUG_LEVEL_MAX;
|
||||
}
|
||||
break;
|
||||
case 'I':
|
||||
test->pidfile = strdup(optarg);
|
||||
@ -1648,7 +1688,7 @@ iperf_parse_arguments(struct iperf_test *test, int argc, char **argv)
|
||||
iperf_size_t file_bytes = st.st_size;
|
||||
test->settings->bytes = file_bytes;
|
||||
if (test->debug)
|
||||
printf("End condition set to file-size: %d bytes\n", test->settings->bytes);
|
||||
printf("End condition set to file-size: %"PRIu64" bytes\n", test->settings->bytes);
|
||||
}
|
||||
// if failing to read file stat, it should fallback to default duration mode
|
||||
}
|
||||
@ -1716,6 +1756,14 @@ int iperf_open_logfile(struct iperf_test *test)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void iperf_close_logfile(struct iperf_test *test)
|
||||
{
|
||||
if (test->outfile && test->outfile != stdout) {
|
||||
fclose(test->outfile);
|
||||
test->outfile = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
iperf_set_send_state(struct iperf_test *test, signed char state)
|
||||
{
|
||||
@ -2079,10 +2127,8 @@ send_parameters(struct iperf_test *test)
|
||||
if (test->server_affinity != -1)
|
||||
cJSON_AddNumberToObject(j, "server_affinity", test->server_affinity);
|
||||
cJSON_AddNumberToObject(j, "time", test->duration);
|
||||
if (test->settings->bytes)
|
||||
cJSON_AddNumberToObject(j, "num", test->settings->bytes);
|
||||
if (test->settings->blocks)
|
||||
cJSON_AddNumberToObject(j, "blockcount", test->settings->blocks);
|
||||
cJSON_AddNumberToObject(j, "num", test->settings->bytes);
|
||||
cJSON_AddNumberToObject(j, "blockcount", test->settings->blocks);
|
||||
if (test->settings->mss)
|
||||
cJSON_AddNumberToObject(j, "MSS", test->settings->mss);
|
||||
if (test->no_delay)
|
||||
@ -2192,8 +2238,10 @@ get_parameters(struct iperf_test *test)
|
||||
test->server_affinity = j_p->valueint;
|
||||
if ((j_p = cJSON_GetObjectItem(j, "time")) != NULL)
|
||||
test->duration = j_p->valueint;
|
||||
test->settings->bytes = 0;
|
||||
if ((j_p = cJSON_GetObjectItem(j, "num")) != NULL)
|
||||
test->settings->bytes = j_p->valueint;
|
||||
test->settings->blocks = 0;
|
||||
if ((j_p = cJSON_GetObjectItem(j, "blockcount")) != NULL)
|
||||
test->settings->blocks = j_p->valueint;
|
||||
if ((j_p = cJSON_GetObjectItem(j, "MSS")) != NULL)
|
||||
@ -2669,6 +2717,7 @@ iperf_new_test()
|
||||
|
||||
test->bitrate_limit_intervals_traffic_bytes = (iperf_size_t *) malloc(sizeof(iperf_size_t) * MAX_INTERVAL);
|
||||
if (!test->bitrate_limit_intervals_traffic_bytes) {
|
||||
free(test->settings);
|
||||
free(test);
|
||||
i_errno = IENEWTEST;
|
||||
return NULL;
|
||||
@ -2728,6 +2777,7 @@ iperf_defaults(struct iperf_test *testp)
|
||||
testp->remote_congestion_used = NULL;
|
||||
testp->server_port = PORT;
|
||||
testp->ctrl_sck = -1;
|
||||
testp->listener = -1;
|
||||
testp->prot_listener = -1;
|
||||
testp->other_side_has_retransmits = 0;
|
||||
|
||||
@ -2913,10 +2963,7 @@ iperf_free_test(struct iperf_test *test)
|
||||
if (test->logfile) {
|
||||
free(test->logfile);
|
||||
test->logfile = NULL;
|
||||
if (test->outfile && test->outfile != stdout) {
|
||||
fclose(test->outfile);
|
||||
test->outfile = NULL;
|
||||
}
|
||||
iperf_close_logfile(test);
|
||||
}
|
||||
|
||||
if (test->server_output_text) {
|
||||
@ -3010,6 +3057,7 @@ iperf_reset_test(struct iperf_test *test)
|
||||
test->state = 0;
|
||||
|
||||
test->ctrl_sck = -1;
|
||||
test->listener = -1;
|
||||
test->prot_listener = -1;
|
||||
|
||||
test->bytes_sent = 0;
|
||||
@ -4335,6 +4383,10 @@ iperf_add_stream(struct iperf_test *test, struct iperf_stream *sp)
|
||||
sp->id = 1;
|
||||
} else {
|
||||
// for (n = test->streams, i = 2; n->next; n = n->next, ++i);
|
||||
// NOTE: this would ideally be set to 1, however this will not
|
||||
// be changed since it is not causing a significant problem
|
||||
// and changing it would break multi-stream tests between old
|
||||
// and new iperf3 versions.
|
||||
i = 2;
|
||||
SLIST_FOREACH(n, &test->streams, streams) {
|
||||
prev = n;
|
||||
@ -4427,7 +4479,8 @@ diskfile_recv(struct iperf_stream *sp)
|
||||
|
||||
r = sp->rcv2(sp);
|
||||
if (r > 0) {
|
||||
(void) write(sp->diskfile_fd, sp->buffer, r);
|
||||
// NOTE: Currently ignoring the return value of writing to disk
|
||||
(void) (write(sp->diskfile_fd, sp->buffer, r) + 1);
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
@ -89,6 +89,7 @@ typedef uint64_t iperf_size_t;
|
||||
#define OPT_IDLE_TIMEOUT 25
|
||||
#define OPT_DONT_FRAGMENT 26
|
||||
#define OPT_RCV_TIMEOUT 27
|
||||
#define OPT_SND_TIMEOUT 28
|
||||
|
||||
/* states */
|
||||
#define TEST_START 1
|
||||
@ -131,6 +132,7 @@ int iperf_get_test_num_streams( struct iperf_test* ipt );
|
||||
int iperf_get_test_repeating_payload( struct iperf_test* ipt );
|
||||
int iperf_get_test_timestamps( struct iperf_test* ipt );
|
||||
const char* iperf_get_test_timestamp_format( struct iperf_test* ipt );
|
||||
int iperf_get_test_bind_port( struct iperf_test* ipt );
|
||||
int iperf_get_test_server_port( struct iperf_test* ipt );
|
||||
char* iperf_get_test_server_hostname( struct iperf_test* ipt );
|
||||
char* iperf_get_test_template( struct iperf_test* ipt );
|
||||
@ -150,6 +152,7 @@ int iperf_get_test_no_delay( struct iperf_test* ipt );
|
||||
int iperf_get_test_connect_timeout( struct iperf_test* ipt );
|
||||
int iperf_get_dont_fragment( struct iperf_test* ipt );
|
||||
char* iperf_get_test_congestion_control(struct iperf_test* ipt);
|
||||
int iperf_get_test_mss(struct iperf_test* ipt);
|
||||
|
||||
/* Setter routines for some fields inside iperf_test. */
|
||||
void iperf_set_verbose( struct iperf_test* ipt, int verbose );
|
||||
@ -166,6 +169,7 @@ void iperf_set_test_pacing_timer( struct iperf_test* ipt, int pacing_timer );
|
||||
void iperf_set_test_bytes( struct iperf_test* ipt, uint64_t bytes );
|
||||
void iperf_set_test_blocks( struct iperf_test* ipt, uint64_t blocks );
|
||||
void iperf_set_test_burst( struct iperf_test* ipt, int burst );
|
||||
void iperf_set_test_bind_port( struct iperf_test* ipt, int bind_port );
|
||||
void iperf_set_test_server_port( struct iperf_test* ipt, int server_port );
|
||||
void iperf_set_test_socket_bufsize( struct iperf_test* ipt, int socket_bufsize );
|
||||
void iperf_set_test_num_streams( struct iperf_test* ipt, int num_streams );
|
||||
@ -190,6 +194,7 @@ void iperf_set_test_bidirectional( struct iperf_test* ipt, int bidirectional)
|
||||
void iperf_set_test_no_delay( struct iperf_test* ipt, int no_delay);
|
||||
void iperf_set_dont_fragment( struct iperf_test* ipt, int dont_fragment );
|
||||
void iperf_set_test_congestion_control(struct iperf_test* ipt, char* cc);
|
||||
void iperf_set_test_mss(struct iperf_test* ipt, int mss);
|
||||
|
||||
#if defined(HAVE_SSL)
|
||||
void iperf_set_test_client_username(struct iperf_test *ipt, const char *client_username);
|
||||
@ -302,6 +307,7 @@ int iperf_init_test(struct iperf_test *);
|
||||
int iperf_create_send_timers(struct iperf_test *);
|
||||
int iperf_parse_arguments(struct iperf_test *, int, char **);
|
||||
int iperf_open_logfile(struct iperf_test *);
|
||||
void iperf_close_logfile(struct iperf_test *);
|
||||
void iperf_reset_test(struct iperf_test *);
|
||||
void iperf_reset_stats(struct iperf_test * test);
|
||||
|
||||
@ -383,6 +389,7 @@ enum {
|
||||
IEIDLETIMEOUT = 30, // Invalid value specified as idle state timeout
|
||||
IERCVTIMEOUT = 31, // Illegal message receive timeout
|
||||
IERVRSONLYRCVTIMEOUT = 32, // Client receive timeout is valid only in reverse mode
|
||||
IESNDTIMEOUT = 33, // Illegal message send timeout
|
||||
/* Test errors */
|
||||
IENEWTEST = 100, // Unable to create a new test (check perror)
|
||||
IEINITTEST = 101, // Test initialization failed (check perror)
|
||||
@ -432,6 +439,7 @@ enum {
|
||||
IESETDONTFRAGMENT = 145, // Unable to set IP Do-Not-Fragment
|
||||
IEBINDDEVNOSUPPORT = 146, // `ip%%dev` is not supported as system does not support bind to device
|
||||
IEHOSTDEV = 147, // host device name (ip%%<dev>) is supported (and required) only for IPv6 link-local address
|
||||
IESETUSERTIMEOUT = 148, // Unable to set TCP USER_TIMEOUT (check perror)
|
||||
/* Stream errors */
|
||||
IECREATESTREAM = 200, // Unable to create a new stream (check herror/perror)
|
||||
IEINITSTREAM = 201, // Unable to initialize stream (check herror/perror)
|
||||
|
@ -69,9 +69,15 @@ iperf_create_streams(struct iperf_test *test, int sender)
|
||||
for (i = 0; i < test->num_streams; ++i) {
|
||||
|
||||
test->bind_port = orig_bind_port;
|
||||
if (orig_bind_port)
|
||||
if (orig_bind_port) {
|
||||
test->bind_port += i;
|
||||
if ((s = test->protocol->connect(test)) < 0)
|
||||
// If Bidir make sure send and receive ports are different
|
||||
if (!sender && test->mode == BIDIRECTIONAL)
|
||||
test->bind_port += test->num_streams;
|
||||
}
|
||||
s = test->protocol->connect(test);
|
||||
test->bind_port = orig_bind_port;
|
||||
if (s < 0)
|
||||
return -1;
|
||||
|
||||
#if defined(HAVE_TCP_CONGESTION)
|
||||
@ -356,6 +362,9 @@ iperf_handle_message_client(struct iperf_test *test)
|
||||
int
|
||||
iperf_connect(struct iperf_test *test)
|
||||
{
|
||||
int opt;
|
||||
socklen_t len;
|
||||
|
||||
if (NULL == test)
|
||||
{
|
||||
iperf_err(NULL, "No test\n");
|
||||
@ -382,6 +391,15 @@ iperf_connect(struct iperf_test *test)
|
||||
return -1;
|
||||
}
|
||||
|
||||
#if defined(HAVE_TCP_USER_TIMEOUT)
|
||||
if ((opt = test->settings->snd_timeout)) {
|
||||
if (setsockopt(test->ctrl_sck, IPPROTO_TCP, TCP_USER_TIMEOUT, &opt, sizeof(opt)) < 0) {
|
||||
i_errno = IESETUSERTIMEOUT;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
#endif /* HAVE_TCP_USER_TIMEOUT */
|
||||
|
||||
if (Nwrite(test->ctrl_sck, test->cookie, COOKIE_SIZE, Ptcp) < 0) {
|
||||
i_errno = IESENDCOOKIE;
|
||||
return -1;
|
||||
@ -390,9 +408,6 @@ iperf_connect(struct iperf_test *test)
|
||||
FD_SET(test->ctrl_sck, &test->read_set);
|
||||
if (test->ctrl_sck > test->max_fd) test->max_fd = test->ctrl_sck;
|
||||
|
||||
int opt;
|
||||
socklen_t len;
|
||||
|
||||
len = sizeof(opt);
|
||||
if (getsockopt(test->ctrl_sck, IPPROTO_TCP, TCP_MAXSEG, &opt, &len) < 0) {
|
||||
test->ctrl_sck_mss = 0;
|
||||
|
@ -105,6 +105,9 @@
|
||||
/* Have tcpi_snd_wnd field in tcp_info. */
|
||||
#undef HAVE_TCP_INFO_SND_WND
|
||||
|
||||
/* Have TCP_USER_TIMEOUT sockopt. */
|
||||
#undef HAVE_TCP_USER_TIMEOUT
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
|
@ -346,6 +346,10 @@ iperf_strerror(int int_errno)
|
||||
snprintf(errstr, len, "receive timeout value is incorrect or not in range");
|
||||
perr = 1;
|
||||
break;
|
||||
case IESNDTIMEOUT:
|
||||
snprintf(errstr, len, "send timeout value is incorrect or not in range");
|
||||
perr = 1;
|
||||
break;
|
||||
case IERVRSONLYRCVTIMEOUT:
|
||||
snprintf(errstr, len, "client receive timeout is valid only in receiving mode");
|
||||
perr = 1;
|
||||
@ -454,6 +458,10 @@ iperf_strerror(int int_errno)
|
||||
case IESETDONTFRAGMENT:
|
||||
snprintf(errstr, len, "unable to set IP Do-Not-Fragment flag");
|
||||
break;
|
||||
case IESETUSERTIMEOUT:
|
||||
snprintf(errstr, len, "unable to set TCP/SCTP MSS");
|
||||
perr = 1;
|
||||
break;
|
||||
default:
|
||||
snprintf(errstr, len, "int_errno=%d", int_errno);
|
||||
perr = 1;
|
||||
|
@ -106,7 +106,7 @@ const char usage_longstr[] = "Usage: iperf3 [-s|-c host] [options]\n"
|
||||
" -A, --affinity n/n,m set CPU affinity\n"
|
||||
#endif /* HAVE_CPU_AFFINITY */
|
||||
#if defined(HAVE_SO_BINDTODEVICE)
|
||||
" -B, --bind <host>[%<dev>] bind to the interface associated with the address <host>\n"
|
||||
" -B, --bind <host>[%%<dev>] bind to the interface associated with the address <host>\n"
|
||||
" (optional <dev> equivalent to `--bind-dev <dev>`)\n"
|
||||
" --bind-dev <dev> bind to the network interface with SO_BINDTODEVICE\n"
|
||||
#else /* HAVE_SO_BINDTODEVICE */
|
||||
@ -119,9 +119,13 @@ const char usage_longstr[] = "Usage: iperf3 [-s|-c host] [options]\n"
|
||||
" --timestamps<=format> emit a timestamp at the start of each output line\n"
|
||||
" (optional \"=\" and format string as per strftime(3))\n"
|
||||
|
||||
" --rcv-timeout # idle timeout for receiving data\n"
|
||||
" (default %d ms)\n"
|
||||
" -d, --debug emit debugging output\n"
|
||||
" --rcv-timeout # idle timeout for receiving data (default %d ms)\n"
|
||||
#if defined(HAVE_TCP_USER_TIMEOUT)
|
||||
" --snd-timeout # timeout for unacknowledged TCP data\n"
|
||||
" (in ms, default is system settings)\n"
|
||||
#endif /* HAVE_TCP_USER_TIMEOUT */
|
||||
" -d, --debug[=#] emit debugging output\n"
|
||||
" (optional optional \"=\" and debug level: 1-4. Default is 4 - all messages)\n"
|
||||
" -v, --version show version information and quit\n"
|
||||
" -h, --help show this message and quit\n"
|
||||
"Server specific:\n"
|
||||
@ -142,7 +146,7 @@ const char usage_longstr[] = "Usage: iperf3 [-s|-c host] [options]\n"
|
||||
" and client during the authentication process\n"
|
||||
#endif //HAVE_SSL
|
||||
"Client specific:\n"
|
||||
" -c, --client <host>[%<dev>] run in client mode, connecting to <host>\n"
|
||||
" -c, --client <host>[%%<dev>] run in client mode, connecting to <host>\n"
|
||||
" (option <dev> equivalent to `--bind-dev <dev>`)\n"
|
||||
#if defined(HAVE_SCTP_H)
|
||||
" --sctp use SCTP rather than TCP\n"
|
||||
@ -190,7 +194,7 @@ const char usage_longstr[] = "Usage: iperf3 [-s|-c host] [options]\n"
|
||||
" -L, --flowlabel N set the IPv6 flow label (only supported on Linux)\n"
|
||||
#endif /* HAVE_FLOWLABEL */
|
||||
" -Z, --zerocopy use a 'zero copy' method of sending data\n"
|
||||
" -O, --omit N omit the first n seconds\n"
|
||||
" -O, --omit N perform pre-test for N seconds and omit the pre-test statistics\n"
|
||||
" -T, --title str prefix every output line with this string\n"
|
||||
" --extra-data str data string to include in client and server JSON\n"
|
||||
" --get-server-output get results from server\n"
|
||||
@ -222,7 +226,7 @@ const char usage_longstr[] = "Usage: iperf3 [-s|-c host] [options]\n"
|
||||
|
||||
#ifdef OBSOLETE /* from old iperf: no longer supported. Add some of these back someday */
|
||||
"-d, --dualtest Do a bidirectional test simultaneously\n"
|
||||
"-L, --listenport # port to recieve bidirectional tests back on\n"
|
||||
"-L, --listenport # port to receive bidirectional tests back on\n"
|
||||
"-I, --stdin input the data to be transmitted from stdin\n"
|
||||
"-F, --fileinput <name> input the data to be transmitted from a file\n"
|
||||
"-r, --tradeoff Do a bidirectional test individually\n"
|
||||
|
@ -165,6 +165,7 @@ iperf_sctp_listen(struct iperf_test *test)
|
||||
int s, opt, saved_errno;
|
||||
|
||||
close(test->listener);
|
||||
test->listener = -1;
|
||||
|
||||
snprintf(portstr, 6, "%d", test->server_port);
|
||||
memset(&hints, 0, sizeof(hints));
|
||||
|
@ -130,6 +130,16 @@ iperf_accept(struct iperf_test *test)
|
||||
return -1;
|
||||
}
|
||||
|
||||
#if defined(HAVE_TCP_USER_TIMEOUT)
|
||||
int opt;
|
||||
if ((opt = test->settings->snd_timeout)) {
|
||||
if (setsockopt(s, IPPROTO_TCP, TCP_USER_TIMEOUT, &opt, sizeof(opt)) < 0) {
|
||||
i_errno = IESETUSERTIMEOUT;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
#endif /* HAVE_TCP_USER_TIMEOUT */
|
||||
|
||||
if (Nread(test->ctrl_sck, test->cookie, COOKIE_SIZE, Ptcp) < 0) {
|
||||
i_errno = IERECVCOOKIE;
|
||||
return -1;
|
||||
@ -257,6 +267,7 @@ server_timer_proc(TimerClientData client_data, struct iperf_time *nowP)
|
||||
iperf_free_stream(sp);
|
||||
}
|
||||
close(test->ctrl_sck);
|
||||
test->ctrl_sck = -1;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -371,23 +382,29 @@ static void
|
||||
cleanup_server(struct iperf_test *test)
|
||||
{
|
||||
struct iperf_stream *sp;
|
||||
iperf_close_logfile(test);
|
||||
|
||||
/* Close open streams */
|
||||
SLIST_FOREACH(sp, &test->streams, streams) {
|
||||
FD_CLR(sp->socket, &test->read_set);
|
||||
FD_CLR(sp->socket, &test->write_set);
|
||||
close(sp->socket);
|
||||
if (sp->socket > -1) {
|
||||
FD_CLR(sp->socket, &test->read_set);
|
||||
FD_CLR(sp->socket, &test->write_set);
|
||||
close(sp->socket);
|
||||
}
|
||||
}
|
||||
|
||||
/* Close open test sockets */
|
||||
if (test->ctrl_sck) {
|
||||
if (test->ctrl_sck > -1) {
|
||||
close(test->ctrl_sck);
|
||||
test->ctrl_sck = -1;
|
||||
}
|
||||
if (test->listener) {
|
||||
if (test->listener > -1) {
|
||||
close(test->listener);
|
||||
test->listener = -1;
|
||||
}
|
||||
if (test->prot_listener > -1) { // May remain open if create socket failed
|
||||
close(test->prot_listener);
|
||||
test->prot_listener = -1;
|
||||
}
|
||||
|
||||
/* Cancel any remaining timers. */
|
||||
@ -437,15 +454,19 @@ iperf_run_server(struct iperf_test *test)
|
||||
|
||||
if (test->logfile)
|
||||
if (iperf_open_logfile(test) < 0)
|
||||
return -1;
|
||||
return -2;
|
||||
|
||||
if (test->affinity != -1)
|
||||
if (iperf_setaffinity(test, test->affinity) != 0)
|
||||
if (iperf_setaffinity(test, test->affinity) != 0) {
|
||||
cleanup_server(test);
|
||||
return -2;
|
||||
}
|
||||
|
||||
if (test->json_output)
|
||||
if (iperf_json_start(test) < 0)
|
||||
if (iperf_json_start(test) < 0) {
|
||||
cleanup_server(test);
|
||||
return -2;
|
||||
}
|
||||
|
||||
if (test->json_output) {
|
||||
cJSON_AddItemToObject(test->json_start, "version", cJSON_CreateString(version));
|
||||
@ -459,6 +480,7 @@ iperf_run_server(struct iperf_test *test)
|
||||
|
||||
// Open socket and listen
|
||||
if (iperf_server_listen(test) < 0) {
|
||||
cleanup_server(test);
|
||||
return -2;
|
||||
}
|
||||
|
||||
@ -589,6 +611,22 @@ iperf_run_server(struct iperf_test *test)
|
||||
|
||||
if (!is_closed(s)) {
|
||||
|
||||
#if defined(HAVE_TCP_USER_TIMEOUT)
|
||||
if (test->protocol->id == Ptcp) {
|
||||
int opt;
|
||||
if ((opt = test->settings->snd_timeout)) {
|
||||
if (setsockopt(s, IPPROTO_TCP, TCP_USER_TIMEOUT, &opt, sizeof(opt)) < 0) {
|
||||
saved_errno = errno;
|
||||
close(s);
|
||||
cleanup_server(test);
|
||||
errno = saved_errno;
|
||||
i_errno = IESETUSERTIMEOUT;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* HAVE_TCP_USER_TIMEOUT */
|
||||
|
||||
#if defined(HAVE_TCP_CONGESTION)
|
||||
if (test->protocol->id == Ptcp) {
|
||||
if (test->congestion) {
|
||||
@ -696,11 +734,12 @@ iperf_run_server(struct iperf_test *test)
|
||||
if (test->protocol->id != Ptcp) {
|
||||
FD_CLR(test->prot_listener, &test->read_set);
|
||||
close(test->prot_listener);
|
||||
test->prot_listener = -1;
|
||||
} else {
|
||||
if (test->no_delay || test->settings->mss || test->settings->socket_bufsize) {
|
||||
FD_CLR(test->listener, &test->read_set);
|
||||
close(test->listener);
|
||||
test->listener = 0;
|
||||
test->listener = -1;
|
||||
if ((s = netannounce(test->settings->domain, Ptcp, test->bind_address, test->bind_dev, test->server_port)) < 0) {
|
||||
cleanup_server(test);
|
||||
i_errno = IELISTEN;
|
||||
@ -789,7 +828,6 @@ iperf_run_server(struct iperf_test *test)
|
||||
}
|
||||
}
|
||||
|
||||
cleanup_server(test);
|
||||
|
||||
if (test->json_output) {
|
||||
if (iperf_json_finish(test) < 0)
|
||||
@ -797,6 +835,7 @@ iperf_run_server(struct iperf_test *test)
|
||||
}
|
||||
|
||||
iflush(test);
|
||||
cleanup_server(test);
|
||||
|
||||
if (test->server_affinity != -1)
|
||||
if (iperf_clearaffinity(test) != 0)
|
||||
|
@ -100,7 +100,7 @@ iperf_tcp_send(struct iperf_stream *sp)
|
||||
sp->result->bytes_sent += r;
|
||||
sp->result->bytes_sent_this_interval += r;
|
||||
|
||||
if (sp->test->debug)
|
||||
if (sp->test->debug_level >= DEBUG_LEVEL_DEBUG)
|
||||
printf("sent %d bytes of %d, pending %d, total %" PRIu64 "\n",
|
||||
r, sp->settings->blksize, sp->pending_size, sp->result->bytes_sent);
|
||||
|
||||
@ -421,6 +421,18 @@ iperf_tcp_connect(struct iperf_test *test)
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
#if defined(HAVE_TCP_USER_TIMEOUT)
|
||||
if ((opt = test->settings->snd_timeout)) {
|
||||
if (setsockopt(s, IPPROTO_TCP, TCP_USER_TIMEOUT, &opt, sizeof(opt)) < 0) {
|
||||
saved_errno = errno;
|
||||
close(s);
|
||||
freeaddrinfo(server_res);
|
||||
errno = saved_errno;
|
||||
i_errno = IESETUSERTIMEOUT;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
#endif /* HAVE_TCP_USER_TIMEOUT */
|
||||
|
||||
/* Read back and verify the sender socket buffer size */
|
||||
optlen = sizeof(sndbuf_actual);
|
||||
|
@ -123,7 +123,7 @@ iperf_udp_recv(struct iperf_stream *sp)
|
||||
sent_time.usecs = usec;
|
||||
}
|
||||
|
||||
if (sp->test->debug)
|
||||
if (sp->test->debug_level >= DEBUG_LEVEL_DEBUG)
|
||||
fprintf(stderr, "pcount %" PRIu64 " packet_count %d\n", pcount, sp->packet_count);
|
||||
|
||||
/*
|
||||
@ -256,7 +256,7 @@ iperf_udp_send(struct iperf_stream *sp)
|
||||
sp->result->bytes_sent += r;
|
||||
sp->result->bytes_sent_this_interval += r;
|
||||
|
||||
if (sp->test->debug)
|
||||
if (sp->test->debug_level >= DEBUG_LEVEL_DEBUG)
|
||||
printf("sent %d bytes of %d, total %" PRIu64 "\n", r, sp->settings->blksize, sp->result->bytes_sent);
|
||||
|
||||
return r;
|
||||
@ -365,7 +365,7 @@ int
|
||||
iperf_udp_accept(struct iperf_test *test)
|
||||
{
|
||||
struct sockaddr_storage sa_peer;
|
||||
int buf;
|
||||
unsigned int buf;
|
||||
socklen_t len;
|
||||
int sz, s;
|
||||
int rc;
|
||||
@ -452,7 +452,7 @@ iperf_udp_accept(struct iperf_test *test)
|
||||
test->max_fd = (test->max_fd < test->prot_listener) ? test->prot_listener : test->max_fd;
|
||||
|
||||
/* Let the client know we're ready "accept" another UDP "stream" */
|
||||
buf = 987654321; /* any content will work here */
|
||||
buf = UDP_CONNECT_REPLY;
|
||||
if (write(s, &buf, sizeof(buf)) < 0) {
|
||||
i_errno = IESTREAMWRITE;
|
||||
return -1;
|
||||
@ -494,11 +494,13 @@ iperf_udp_listen(struct iperf_test *test)
|
||||
int
|
||||
iperf_udp_connect(struct iperf_test *test)
|
||||
{
|
||||
int s, buf, sz;
|
||||
int s, sz;
|
||||
unsigned int buf;
|
||||
#ifdef SO_RCVTIMEO
|
||||
struct timeval tv;
|
||||
#endif
|
||||
int rc;
|
||||
int i, max_len_wait_for_reply;
|
||||
|
||||
/* Create and bind our local socket. */
|
||||
if ((s = netdial(test->settings->domain, Pudp, test->bind_address, test->bind_dev, test->bind_port, test->server_hostname, test->server_port, -1)) < 0) {
|
||||
@ -564,7 +566,10 @@ iperf_udp_connect(struct iperf_test *test)
|
||||
* Write a datagram to the UDP stream to let the server know we're here.
|
||||
* The server learns our address by obtaining its peer's address.
|
||||
*/
|
||||
buf = 123456789; /* this can be pretty much anything */
|
||||
buf = UDP_CONNECT_MSG;
|
||||
if (test->debug) {
|
||||
printf("Sending Connect message to Socket %d\n", s);
|
||||
}
|
||||
if (write(s, &buf, sizeof(buf)) < 0) {
|
||||
// XXX: Should this be changed to IESTREAMCONNECT?
|
||||
i_errno = IESTREAMWRITE;
|
||||
@ -572,9 +577,24 @@ iperf_udp_connect(struct iperf_test *test)
|
||||
}
|
||||
|
||||
/*
|
||||
* Wait until the server replies back to us.
|
||||
* Wait until the server replies back to us with the "accept" response.
|
||||
*/
|
||||
if ((sz = recv(s, &buf, sizeof(buf), 0)) < 0) {
|
||||
i = 0;
|
||||
max_len_wait_for_reply = sizeof(buf);
|
||||
if (test->reverse) /* In reverse mode allow few packets to have the "accept" response - to handle out of order packets */
|
||||
max_len_wait_for_reply += MAX_REVERSE_OUT_OF_ORDER_PACKETS * test->settings->blksize;
|
||||
do {
|
||||
if ((sz = recv(s, &buf, sizeof(buf), 0)) < 0) {
|
||||
i_errno = IESTREAMREAD;
|
||||
return -1;
|
||||
}
|
||||
if (test->debug) {
|
||||
printf("Connect received for Socket %d, sz=%d, buf=%x, i=%d, max_len_wait_for_reply=%d\n", s, sz, buf, i, max_len_wait_for_reply);
|
||||
}
|
||||
i += sz;
|
||||
} while (buf != UDP_CONNECT_REPLY && buf != LEGACY_UDP_CONNECT_REPLY && i < max_len_wait_for_reply);
|
||||
|
||||
if (buf != UDP_CONNECT_REPLY && buf != LEGACY_UDP_CONNECT_REPLY) {
|
||||
i_errno = IESTREAMREAD;
|
||||
return -1;
|
||||
}
|
||||
|
@ -445,8 +445,8 @@ has_sendfile(void)
|
||||
int
|
||||
Nsendfile(int fromfd, int tofd, const char *buf, size_t count)
|
||||
{
|
||||
off_t offset;
|
||||
#if defined(HAVE_SENDFILE)
|
||||
off_t offset;
|
||||
#if defined(__FreeBSD__) || (defined(__APPLE__) && defined(__MACH__) && defined(MAC_OS_X_VERSION_10_6))
|
||||
off_t sent;
|
||||
#endif
|
||||
|
27
src/t_api.c
27
src/t_api.c
@ -40,6 +40,24 @@
|
||||
|
||||
#include "units.h"
|
||||
|
||||
int test_iperf_set_test_bind_port(struct iperf_test *test)
|
||||
{
|
||||
int port;
|
||||
port = iperf_get_test_bind_port(test);
|
||||
iperf_set_test_bind_port(test, 5202);
|
||||
port = iperf_get_test_bind_port(test);
|
||||
assert(port == 5202);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int test_iperf_set_mss(struct iperf_test *test)
|
||||
{
|
||||
int mss = iperf_get_test_mss(test);
|
||||
iperf_set_test_mss(test, 535);
|
||||
mss = iperf_get_test_mss(test);
|
||||
assert(mss == 535);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
@ -61,5 +79,14 @@ main(int argc, char **argv)
|
||||
gint = iperf_get_test_connect_timeout(test);
|
||||
assert(sint == gint);
|
||||
|
||||
int ret;
|
||||
ret = test_iperf_set_test_bind_port(test);
|
||||
|
||||
ret += test_iperf_set_mss(test);
|
||||
|
||||
if (ret < 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -133,11 +133,11 @@ long
|
||||
get_snd_cwnd(struct iperf_interval_results *irp)
|
||||
{
|
||||
#if defined(linux) && defined(TCP_MD5SIG)
|
||||
return irp->tcpInfo.tcpi_snd_cwnd * irp->tcpInfo.tcpi_snd_mss;
|
||||
return (long)irp->tcpInfo.tcpi_snd_cwnd * irp->tcpInfo.tcpi_snd_mss;
|
||||
#elif defined(__FreeBSD__) && __FreeBSD_version >= 600000
|
||||
return irp->tcpInfo.tcpi_snd_cwnd;
|
||||
#elif defined(__NetBSD__) && defined(TCP_INFO)
|
||||
return irp->tcpInfo.tcpi_snd_cwnd * irp->tcpInfo.tcpi_snd_mss;
|
||||
return (long)irp->tcpInfo.tcpi_snd_cwnd * irp->tcpInfo.tcpi_snd_mss;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
@ -157,7 +157,7 @@ get_snd_wnd(struct iperf_interval_results *irp)
|
||||
#elif defined(__FreeBSD__) && __FreeBSD_version >= 600000
|
||||
return irp->tcpInfo.tcpi_snd_wnd;
|
||||
#elif defined(__NetBSD__) && defined(TCP_INFO)
|
||||
return irp->tcpInfo.tcpi_snd_wnd * irp->tcpInfo.tcpi_snd_mss;
|
||||
return (long)irp->tcpInfo.tcpi_snd_wnd * irp->tcpInfo.tcpi_snd_mss;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user