Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package iperf for openSUSE:Factory checked 
in at 2023-03-13 12:40:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/iperf (Old)
 and      /work/SRC/openSUSE:Factory/.iperf.new.31432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "iperf"

Mon Mar 13 12:40:17 2023 rev:33 rq:1071021 version:3.13

Changes:
--------
--- /work/SRC/openSUSE:Factory/iperf/iperf.changes      2022-12-06 
16:42:59.400765190 +0100
+++ /work/SRC/openSUSE:Factory/.iperf.new.31432/iperf.changes   2023-03-13 
12:41:09.335810380 +0100
@@ -1,0 +2,9 @@
+Tue Mar  7 07:26:47 UTC 2023 - Dirk Müller <dmuel...@suse.com>
+
+- update to 3.13:
+  * Added missing bind_dev getter and setter.
+  * a fix for A resource leak bug in function iperf_create_pidfile (#1443)
+  * doc: Fix copy-and-paste error leading to wrong error message
+  * Fix crash on rcv-timeout with JSON logfile
+
+-------------------------------------------------------------------

Old:
----
  iperf-3.12.tar.gz
  iperf-3.12.tar.gz.sha256

New:
----
  iperf-3.13.tar.gz
  iperf-3.13.tar.gz.sha256

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ iperf.spec ++++++
--- /var/tmp/diff_new_pack.SIh1VT/_old  2023-03-13 12:41:09.771812652 +0100
+++ /var/tmp/diff_new_pack.SIh1VT/_new  2023-03-13 12:41:09.775812673 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package iperf
 #
-# Copyright (c) 2022 SUSE LLC
+# Copyright (c) 2023 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 %define soname  0
 Name:           iperf
-Version:        3.12
+Version:        3.13
 Release:        0
 Summary:        A tool to measure network performance
 License:        BSD-3-Clause

++++++ iperf-3.12.tar.gz -> iperf-3.13.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iperf-3.12/.gitignore new/iperf-3.13/.gitignore
--- old/iperf-3.12/.gitignore   2022-09-30 20:49:24.000000000 +0200
+++ new/iperf-3.13/.gitignore   2023-02-16 23:23:12.000000000 +0100
@@ -30,3 +30,4 @@
 examples/Makefile
 examples/mic
 examples/mis
+.vscode/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iperf-3.12/LICENSE new/iperf-3.13/LICENSE
--- old/iperf-3.12/LICENSE      2022-09-30 20:49:24.000000000 +0200
+++ new/iperf-3.13/LICENSE      2023-02-16 23:23:12.000000000 +0100
@@ -1,4 +1,4 @@
-"iperf, Copyright (c) 2014-2022, The Regents of the University of California,
+"iperf, Copyright (c) 2014-2023, The Regents of the University of California,
 through Lawrence Berkeley National Laboratory (subject to receipt of any
 required approvals from the U.S. Dept. of Energy).  All rights reserved."
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iperf-3.12/README.md new/iperf-3.13/README.md
--- old/iperf-3.12/README.md    2022-09-30 20:49:24.000000000 +0200
+++ new/iperf-3.13/README.md    2023-02-16 23:23:12.000000000 +0100
@@ -150,7 +150,7 @@
 Copyright
 ---------
 
-iperf, Copyright (c) 2014-2022, The Regents of the University of
+iperf, Copyright (c) 2014-2023, The Regents of the University of
 California, through Lawrence Berkeley National Laboratory (subject
 to receipt of any required approvals from the U.S. Dept. of
 Energy).  All rights reserved.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iperf-3.12/RELNOTES.md new/iperf-3.13/RELNOTES.md
--- old/iperf-3.12/RELNOTES.md  2022-09-30 20:49:24.000000000 +0200
+++ new/iperf-3.13/RELNOTES.md  2023-02-16 23:23:12.000000000 +0100
@@ -1,6 +1,45 @@
 iperf3 Release Notes
 ====================
 
+iperf-3.13 2023-02-16
+---------------------
+
+* Notable user-visible changes
+
+  * fq-rate (PR #1461, Issue #1366), and bidirectional flag (Issue #1428,
+    PR #1429) were added to the JSON output.
+
+  * Added support for OpenBSD including cleaning up endian handling (PR #1396)
+    and support for TCP_INFO on systems where it was implemented (PR #1397).
+
+  * Fixed bug in how TOS is set in mapped v4 (PR #1427).
+
+  * Corrected documentation, such as updating binary download links and text
+    (Issue #1459), updating version on iperf3 websites, and fixing an
+    incorrect error message (Issue #1441).
+
+  * Fixed crash on rcv-timeout with JSON logfile (#1463, #1460, issue #1360,
+    PR #1369).
+
+  * Fixed a bug that prevented TOS/DSCP from getting set correctly for reverse
+    tests (PR #1427, Issue #638).
+
+* Developer-visible changes
+
+  * Getter and setter are now available for bind_dev (PR #1419).
+
+  * Added missing getter for bidirectional tests (PR #1453).
+
+  * Added minor changes to clean up .gitignore and error messages (#1408).
+
+  * Made sure configure scripts are runnable with /bin/sh (PR #1398).
+
+  * Cleaned up RPM spec, such as adding missing RPM build dependencies, 
dropping
+    EL5 and removing outdated %changelog (PR #1401) to make.
+
+  * Added a fix for a resource leak bug in function 
iperf_create_pidfile(#1443).
+
+
 iperf-3.12 2022-09-30
 ---------------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iperf-3.12/config/iperf_config_static_bin.m4 
new/iperf-3.13/config/iperf_config_static_bin.m4
--- old/iperf-3.12/config/iperf_config_static_bin.m4    2022-09-30 
20:49:24.000000000 +0200
+++ new/iperf-3.13/config/iperf_config_static_bin.m4    2023-02-16 
23:23:12.000000000 +0100
@@ -7,6 +7,6 @@
     [:])
 AM_CONDITIONAL([ENABLE_STATIC_BIN], [test x$enable_static_bin = xno])
 
-AS_IF([test "x$enable_static_bin" == xyes],
+AS_IF([test "x$enable_static_bin" = xyes],
  [LDFLAGS="$LDFLAGS --static"]
  [])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iperf-3.12/configure new/iperf-3.13/configure
--- old/iperf-3.12/configure    2022-09-30 20:49:24.000000000 +0200
+++ new/iperf-3.13/configure    2023-02-16 23:23:12.000000000 +0100
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for iperf 3.12.
+# Generated by GNU Autoconf 2.71 for iperf 3.13.
 #
 # Report bugs to <https://github.com/esnet/iperf>.
 #
@@ -621,8 +621,8 @@
 # Identity of this package.
 PACKAGE_NAME='iperf'
 PACKAGE_TARNAME='iperf'
-PACKAGE_VERSION='3.12'
-PACKAGE_STRING='iperf 3.12'
+PACKAGE_VERSION='3.13'
+PACKAGE_STRING='iperf 3.13'
 PACKAGE_BUGREPORT='https://github.com/esnet/iperf'
 PACKAGE_URL='https://software.es.net/iperf/'
 
@@ -1366,7 +1366,7 @@
   # 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.12 to adapt to many kinds of systems.
+\`configure' configures iperf 3.13 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1437,7 +1437,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of iperf 3.12:";;
+     short | recursive ) echo "Configuration of iperf 3.13:";;
    esac
   cat <<\_ACEOF
 
@@ -1555,7 +1555,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-iperf configure 3.12
+iperf configure 3.13
 generated by GNU Autoconf 2.71
 
 Copyright (C) 2021 Free Software Foundation, Inc.
@@ -1833,7 +1833,7 @@
 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.12, which was
+It was created by iperf $as_me 3.13, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -2667,7 +2667,7 @@
 fi
 
 
-if test "x$enable_static_bin" == xyes
+if test "x$enable_static_bin" = xyes
 then :
   LDFLAGS="$LDFLAGS --static"
 
@@ -3200,7 +3200,7 @@
 
 # Define the identity of the package.
  PACKAGE='iperf'
- VERSION='3.12'
+ VERSION='3.13'
 
 
 printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -14950,6 +14950,7 @@
 ac_fn_c_check_member "$LINENO" "struct tcp_info" "tcpi_snd_wnd" 
"ac_cv_member_struct_tcp_info_tcpi_snd_wnd" "#ifdef HAVE_LINUX_TCP_H
 #include <linux/tcp.h>
 #else
+#include <sys/types.h>
 #include <netinet/tcp.h>
 #endif
 
@@ -15578,7 +15579,7 @@
 # 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.12, which was
+This file was extended by iperf $as_me 3.13, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -15647,7 +15648,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-iperf config.status 3.12
+iperf config.status 3.13
 configured by $0, generated by GNU Autoconf 2.71,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iperf-3.12/configure.ac new/iperf-3.13/configure.ac
--- old/iperf-3.12/configure.ac 2022-09-30 20:49:24.000000000 +0200
+++ new/iperf-3.13/configure.ac 2023-02-16 23:23:12.000000000 +0100
@@ -25,7 +25,7 @@
 
 # Initialize the autoconf system for the specified tool, version and mailing 
list
 AC_PREREQ([2.71])
-AC_INIT([iperf],[3.12],[https://github.com/esnet/iperf],[iperf],[https://software.es.net/iperf/])
+AC_INIT([iperf],[3.13],[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)
@@ -305,6 +305,7 @@
 [#ifdef HAVE_LINUX_TCP_H
 #include <linux/tcp.h>
 #else
+#include <sys/types.h>
 #include <netinet/tcp.h>
 #endif
 ])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iperf-3.12/docs/conf.py new/iperf-3.13/docs/conf.py
--- old/iperf-3.12/docs/conf.py 2022-09-30 20:49:24.000000000 +0200
+++ new/iperf-3.13/docs/conf.py 2023-02-16 23:23:12.000000000 +0100
@@ -52,10 +52,10 @@
 # built documents.
 #
 # The short X.Y version.
-version = '3.10.1'
+version = '3.12'
 # The full version, including alpha/beta/rc tags.
 
-release = '3.10.1'
+release = '3.12'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iperf-3.12/docs/invoking.rst 
new/iperf-3.13/docs/invoking.rst
--- old/iperf-3.12/docs/invoking.rst    2022-09-30 20:49:24.000000000 +0200
+++ new/iperf-3.13/docs/invoking.rst    2023-02-16 23:23:12.000000000 +0100
@@ -163,10 +163,12 @@
                  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.)
+                 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
@@ -178,24 +180,33 @@
                  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).
    
+          --snd-timeout #
+                 set timeout for unacknowledged TCP data (on both test  and  
con-
+                 trol 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 
sys-
+                 tem settings.  This functionality depends on the  
TCP_USER_TIME-
+                 OUT socket option, and will not work on systems that do not 
sup-
+                 port it.
+   
           -d, --debug
-                 emit  debugging  output.  Primarily (perhaps exclusively) of 
use
+                 emit debugging output.  Primarily (perhaps exclusively)  of  
use
                  to developers.
    
           -v, --version
@@ -213,48 +224,48 @@
                  run the server in background as a daemon
    
           -1, --one-off
-                 handle one client connection, then exit.  If  an  idle  time  
is
+                 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
+                 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[%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
+                 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)
@@ -263,42 +274,42 @@
                  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
+                 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
-                 flag),  the  throughput  limit  is  applied  separately  to 
each
-                 stream.  You can also add a '/' and  a  number  to  the  
bitrate
+                 set target bitrate to n bits/sec (default 1  Mbit/sec  for  
UDP,
+                 unlimited  for  TCP/SCTP).   If  there  are multiple streams 
(-P
+                 flag), the  throughput  limit  is  applied  separately  to  
each
+                 stream.   You  can  also  add  a '/' and a number to the 
bitrate
                  specifier.  This is called "burst mode".  It will send the 
given
-                 number of packets without  pausing,  even  if  that  
temporarily
-                 exceeds  the  specified  throughput  limit.   Setting the 
target
-                 bitrate to 0 will disable bitrate  limits  (particularly  
useful
+                 number  of  packets  without  pausing,  even if that 
temporarily
+                 exceeds the specified  throughput  limit.   Setting  the  
target
+                 bitrate  to  0  will disable bitrate limits (particularly 
useful
                  for UDP tests).  This throughput limit is implemented 
internally
-                 inside iperf3, and is available on all platforms.  Compare  
with
-                 the  --fq-rate flag.  This option replaces the --bandwidth 
flag,
+                 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
-                 timer for the -b/--bitrate  option.   The  timer  fires  at  
the
-                 interval  set  by  this parameter.  Smaller values of the 
pacing
-                 timer parameter smooth out the traffic emitted  by  iperf3,  
but
-                 potentially  at  the  cost  of  performance due to more 
frequent
+                 set   pacing   timer  interval  in  microseconds  (default  
1000
+                 microseconds, or 1 ms).  This controls iperf3's internal  
pacing
+                 timer  for  the  -b/--bitrate  option.   The  timer fires at 
the
+                 interval set by this parameter.  Smaller values  of  the  
pacing
+                 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
-                 addition to any pacing due to iperf3's internal throughput  
pac-
-                 ing  (-b/--bitrate flag), and both can be specified for the 
same
-                 test.  Only available on platforms  supporting  the  
SO_MAX_PAC-
-                 ING_RATE  socket  option (currently only Linux).  The default 
is
+                 ing, in bits per second.  This pacing (if specified) will be  
in
+                 addition  to any pacing due to iperf3's internal throughput 
pac-
+                 ing (-b/--bitrate flag), and both can be specified for the  
same
+                 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
@@ -315,37 +326,37 @@
                  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
+                 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.
+                 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
+                 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
+                 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
+                 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
+                 test in both directions (normal  and  reverse),  with  both  
the
                  client and server sending and receiving data simultaneously
    
           -w, --window n[KMGT]
-                 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
+                 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
@@ -365,100 +376,100 @@
                  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). To set both the DSCP  bits  and  the  
ECN
+                 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).  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.
+                 Perform pre-test for N seconds and omit the pre-test 
statistics,
+                 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
@@ -467,16 +478,16 @@
                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
@@ -500,7 +511,8 @@
    
    
    
-   ESnet                            January 2022                        
IPERF3(1)
+   ESnet                           September 2022                       
IPERF3(1)
+
 
 The iperf3 manual page will typically be installed in manual
 section 1.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iperf-3.12/docs/news.rst new/iperf-3.13/docs/news.rst
--- old/iperf-3.12/docs/news.rst        2022-09-30 20:49:24.000000000 +0200
+++ new/iperf-3.13/docs/news.rst        2023-02-16 23:23:12.000000000 +0100
@@ -1,6 +1,15 @@
 iperf3 Project News
 ===================
 
+2022-09-30:  iperf-3.12 released
+----------------------------------
+| URL:  https://downloads.es.net/pub/iperf/iperf-3.12.tar.gz
+| SHA256:  ``72034ecfb6a7d6d67e384e19fb6efff3236ca4f7ed4c518d7db649c447e1ffd6``
+
+iperf 3.12 is principally a bugfix release, although it includes an
+updated version of cJSON and adds a few new features.
+
+
 2022-01-28:  iperf-3.11 released
 ----------------------------------
 | URL:  https://downloads.es.net/pub/iperf/iperf-3.11.tar.gz
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iperf-3.12/docs/obtaining.rst 
new/iperf-3.13/docs/obtaining.rst
--- old/iperf-3.12/docs/obtaining.rst   2022-09-30 20:49:24.000000000 +0200
+++ new/iperf-3.13/docs/obtaining.rst   2023-02-16 23:23:12.000000000 +0100
@@ -9,24 +9,28 @@
 Note that ESnet does not distribute binary packages of iperf3.  All of
 the packages listed in this section are provided by third parties, who
 are solely responsible for their contents.  This is an incomplete list
-of binary packages:
+of binary packages for various operating systems and distributions:
 
-* FreeBSD:  `benchmarks/iperf3
-  <http://freshports.org/benchmarks/iperf3>`_ in the FreeBSD Ports Collection
-* Fedora / CentOS: `iperf3
+* FreeBSD: via the FreeBSD Ports Collection with ``sudo pkg install
+  benchmarks/iperf3``.
+* Fedora / RedHat Linux / CentOS / Rocky: `iperf3
   <https://apps.fedoraproject.org/packages/iperf3/>`_ and
   `iperf3-devel
   <https://apps.fedoraproject.org/packages/iperf3-devel>`_ in Fedora
   19 and 20 and in Fedora EPEL 5, 6, and 7.  iperf3 is included as a
   part of RedHat Enterprise Linux 7.4 and later (as well as CentOS 7.4
-  and later).
+  and later, and all versions of Rocky Linux), and can generally be
+  installed with ``yum install iperf3``.
 * Ubuntu:  `iperf3 <https://launchpad.net/ubuntu/+source/iperf3>`_,
   is available in Trusty (backports), and as a part of the main
-  release in Vivid and newer.
-* macOS:  via HomeBrew.
-* Windows:  `iperf3 binaries for Windows
-  <https://iperf.fr/iperf-download.php#windows>`_ are available from
-  iperf.fr (and other sources).
+  release in Vivid and newer. It can generally be installed with
+  ``sudo apt-get install iperf3``.
+* macOS:  via HomeBrew with ``brew install iperf3`` or MacPorts with
+  ``sudo port install iperf3``.
+* Windows:  iperf3 binaries for Windows (built with `Cygwin 
<https://www.cygwin.com/>`_) can be found in a variety of
+  locations, including `<https://files.budman.pw/>`_
+  (`discussion thread
+  <https://www.neowin.net/forum/topic/1234695-iperf/>`_).
 
 Source Distributions
 --------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iperf-3.12/iperf3.spec.in 
new/iperf-3.13/iperf3.spec.in
--- old/iperf-3.12/iperf3.spec.in       2022-09-30 20:49:24.000000000 +0200
+++ new/iperf-3.13/iperf3.spec.in       2023-02-16 23:23:12.000000000 +0100
@@ -9,11 +9,9 @@
 Source0: https://downloads.es.net/pub/iperf/iperf-%{version}.tar.gz
 BuildRoot:     %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
 
-%if 0%{?el5}
-BuildRequires: e2fsprogs-devel, openssl-devel
-%else
+BuildRequires: autoconf
+BuildRequires: gcc
 BuildRequires: openssl-devel
-%endif
 
 %description
 iperf3 is a tool for active measurements of the maximum achievable
@@ -59,47 +57,3 @@
 %{_libdir}/libiperf.la
 %{_libdir}/*.so
 %{_libdir}/*.so.*
-
-%changelog
-* Fri Aug 29 2014 Aaron Brown <aa...@internet2.edu> 3.0.7-1
-- Update to 3.0.7
-
-* Tue Jul 29 2014 Aaron Brown <aa...@internet2.edu> 3.0.6-1
-- Update to 3.0.6
-
-* Mon Jun 16 2014 Aaron Brown <aa...@internet2.edu> 3.0.5-1
-- Update to 3.0.5
-
-* Wed Apr 2 2014 Susant Sahani <ssah...@redhat.com> 3.0.3-2
-- Moved static library to devel section only .
-
-* Sun Mar 30 2014 Susant Sahani <ssah...@redhat.com> 3.0.3-1
-- Update to 3.0.3 and added devel rpm support
-
-* Tue Mar 11 2014 Susant Sahani <ssah...@redhat.com> 3.0.2-1
-- Update to 3.0.2
-
-* Tue Jan 14 2014 Susant Sahani <ssah...@redhat.com> 3.0.1-1
-- Update to 3.0.1
-
-* Fri Oct 25 2013 Steven Roberts <strob...@strobe.net> 3.0-1
-- Update to 3.0
-
-* Sat May 04 2013 Kevin Fenzi <ke...@scrye.com> 3.0-0.4.b5
-- Update to 3.0b5
-
-* Thu Feb 14 2013 Fedora Release Engineering <rel-...@lists.fedoraproject.org> 
- 3.0-0.3.b4
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
-
-* Thu Jul 19 2012 Fedora Release Engineering <rel-...@lists.fedoraproject.org> 
- 3.0-0.2.b4
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
-
-* Fri Jan 13 2012 Fedora Release Engineering <rel-...@lists.fedoraproject.org> 
- 3.0-0.1.b4
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
-
-* Wed Apr 06 2011 G.Balaji <balaji...@gmail.com> 3.0b4-2
-- Changed the Spec name, removed static libs generation and devel
-- package.
-
-* Sat Mar 26 2011 G.Balaji <balaji...@gmail.com> 3.0b4-1
-- Initial Version
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iperf-3.12/src/iperf.h new/iperf-3.13/src/iperf.h
--- old/iperf-3.12/src/iperf.h  2022-09-30 20:49:24.000000000 +0200
+++ new/iperf-3.13/src/iperf.h  2023-02-16 23:23:12.000000000 +0100
@@ -94,9 +94,9 @@
     int       cnt_error;
 
     int omitted;
-#if (defined(linux) || defined(__FreeBSD__) || defined(__NetBSD__)) && \
+#if (defined(linux) || defined(__FreeBSD__) || defined(__NetBSD__) || 
defined(__OpenBSD__)) && \
        defined(TCP_INFO)
-    struct tcp_info tcpInfo; /* getsockopt(TCP_INFO) for Linux, {Free,Net}BSD 
*/
+    struct tcp_info tcpInfo; /* getsockopt(TCP_INFO) for Linux, 
{Free,Net,Open}BSD */
 #else
     /* Just placeholders, never accessed. */
     char *tcpInfo;
@@ -297,6 +297,7 @@
     FILE     *outfile;
 
     int       ctrl_sck;
+    int       mapped_v4;
     int       listener;
     int       prot_listener;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iperf-3.12/src/iperf_api.c 
new/iperf-3.13/src/iperf_api.c
--- old/iperf-3.12/src/iperf_api.c      2022-09-30 20:49:24.000000000 +0200
+++ new/iperf-3.13/src/iperf_api.c      2023-02-16 23:23:12.000000000 +0100
@@ -225,6 +225,12 @@
 }
 
 int
+iperf_get_test_bidirectional(struct iperf_test *ipt)
+{
+    return ipt->bidirectional;
+}
+
+int
 iperf_get_test_blksize(struct iperf_test *ipt)
 {
     return ipt->settings->blksize;
@@ -423,6 +429,12 @@
     return ipt->settings->mss;
 }
 
+int
+iperf_get_mapped_v4(struct iperf_test* ipt)
+{
+    return ipt->mapped_v4;
+}
+
 /************** Setter routines for some fields inside iperf_test 
*************/
 
 void
@@ -575,6 +587,12 @@
     ipt->timestamp_format = strdup(tf);
 }
 
+void
+iperf_set_mapped_v4(struct iperf_test *ipt, const int val)
+{
+    ipt->mapped_v4 = val;
+}
+
 static void
 check_sender_has_retransmits(struct iperf_test *ipt)
 {
@@ -709,7 +727,7 @@
 }
 
 void
-iperf_set_test_bind_dev(struct iperf_test *ipt, char *bnd_dev)
+iperf_set_test_bind_dev(struct iperf_test *ipt, const char *bnd_dev)
 {
     ipt->bind_dev = strdup(bnd_dev);
 }
@@ -839,7 +857,7 @@
 iperf_on_test_start(struct iperf_test *test)
 {
     if (test->json_output) {
-       cJSON_AddItemToObject(test->json_start, "test_start", 
iperf_json_printf("protocol: %s  num_streams: %d  blksize: %d  omit: %d  
duration: %d  bytes: %d  blocks: %d  reverse: %d  tos: %d  target_bitrate: %d", 
test->protocol->name, (int64_t) test->num_streams, (int64_t) 
test->settings->blksize, (int64_t) test->omit, (int64_t) test->duration, 
(int64_t) test->settings->bytes, (int64_t) test->settings->blocks, 
test->reverse?(int64_t)1:(int64_t)0, (int64_t) test->settings->tos, (int64_t) 
test->settings->rate));
+       cJSON_AddItemToObject(test->json_start, "test_start", 
iperf_json_printf("protocol: %s  num_streams: %d  blksize: %d  omit: %d  
duration: %d  bytes: %d  blocks: %d  reverse: %d  tos: %d  target_bitrate: %d 
bidir: %d fqrate: %d", test->protocol->name, (int64_t) test->num_streams, 
(int64_t) test->settings->blksize, (int64_t) test->omit, (int64_t) 
test->duration, (int64_t) test->settings->bytes, (int64_t) 
test->settings->blocks, test->reverse?(int64_t)1:(int64_t)0, (int64_t) 
test->settings->tos, (int64_t) test->settings->rate, (int64_t) 
test->bidirectional, (uint64_t) test->settings->fqrate));
     } else {
        if (test->verbose) {
            if (test->settings->bytes)
@@ -856,8 +874,10 @@
 ** old IPv4 format, which is easier on the eyes of network veterans.
 **
 ** If the v6 address is not v4-mapped it is left alone.
+**
+** Returns 1 if the v6 address is v4-mapped, 0 otherwise.
 */
-static void
+static int
 mapped_v4_to_regular_v4(char *str)
 {
     char *prefix = "::ffff:";
@@ -867,7 +887,9 @@
     if (strncmp(str, prefix, prefix_len) == 0) {
        int str_len = strlen(str);
        memmove(str, str + prefix_len, str_len - prefix_len + 1);
+       return 1;
     }
+    return 0;
 }
 
 void
@@ -910,7 +932,9 @@
             inet_ntop(AF_INET6, &sa_in6P->sin6_addr, ipr, sizeof(ipr));
            port = ntohs(sa_in6P->sin6_port);
         }
-       mapped_v4_to_regular_v4(ipr);
+       if (mapped_v4_to_regular_v4(ipr)) {
+           iperf_set_mapped_v4(test, 1);
+       }
        if (test->json_output)
            cJSON_AddItemToObject(test->json_start, "accepted_connection", 
iperf_json_printf("host: %s  port: %d", ipr, (int64_t) port));
        else
@@ -925,7 +949,9 @@
                cJSON_AddNumberToObject(test->json_start, "tcp_mss_default", 
test->ctrl_sck_mss);
            }
         }
+       // Duplicate to make sure it appears on all output
         cJSON_AddNumberToObject(test->json_start, "target_bitrate", 
test->settings->rate);
+        cJSON_AddNumberToObject(test->json_start, "fq_rate", 
test->settings->fqrate);
     } else if (test->verbose) {
         iperf_printf(test, report_cookie, test->cookie);
         if (test->protocol->id == SOCK_STREAM) {
@@ -2006,7 +2032,7 @@
             return 0;
         } else {
             if (test->debug) {
-                iperf_printf(test, report_authentication_failed, username, ts);
+                iperf_printf(test, report_authentication_failed, ret, 
username, ts);
             }
             free(username);
             free(password);
@@ -3015,6 +3041,8 @@
     struct iperf_stream *sp;
     int i;
 
+    iperf_close_logfile(test);
+
     /* Free streams */
     while (!SLIST_EMPTY(&test->streams)) {
         sp = SLIST_FIRST(&test->streams);
@@ -4293,41 +4321,57 @@
 
 /**************************************************************************/
 int
-iperf_init_stream(struct iperf_stream *sp, struct iperf_test *test)
+iperf_common_sockopts(struct iperf_test *test, int s)
 {
-    socklen_t len;
     int opt;
 
-    len = sizeof(struct sockaddr_storage);
-    if (getsockname(sp->socket, (struct sockaddr *) &sp->local_addr, &len) < 
0) {
-        i_errno = IEINITSTREAM;
-        return -1;
-    }
-    len = sizeof(struct sockaddr_storage);
-    if (getpeername(sp->socket, (struct sockaddr *) &sp->remote_addr, &len) < 
0) {
-        i_errno = IEINITSTREAM;
-        return -1;
-    }
-
     /* Set IP TOS */
     if ((opt = test->settings->tos)) {
-        if (getsockdomain(sp->socket) == AF_INET6) {
+       if (getsockdomain(s) == AF_INET6) {
 #ifdef IPV6_TCLASS
-            if (setsockopt(sp->socket, IPPROTO_IPV6, IPV6_TCLASS, &opt, 
sizeof(opt)) < 0) {
+           if (setsockopt(s, IPPROTO_IPV6, IPV6_TCLASS, &opt, sizeof(opt)) < 
0) {
                 i_errno = IESETCOS;
                 return -1;
             }
+
+           /* if the control connection was established with a mapped v4 
address
+              then set IP_TOS on v6 stream socket as well */
+           if (iperf_get_mapped_v4(test)) {
+               if (setsockopt(s, IPPROTO_IP, IP_TOS, &opt, sizeof(opt)) < 0) {
+                    /* ignore any failure of v4 TOS in IPv6 case */
+                }
+            }
 #else
             i_errno = IESETCOS;
             return -1;
 #endif
         } else {
-            if (setsockopt(sp->socket, IPPROTO_IP, IP_TOS, &opt, sizeof(opt)) 
< 0) {
+            if (setsockopt(s, IPPROTO_IP, IP_TOS, &opt, sizeof(opt)) < 0) {
                 i_errno = IESETTOS;
                 return -1;
             }
         }
     }
+    return 0;
+}
+
+/**************************************************************************/
+int
+iperf_init_stream(struct iperf_stream *sp, struct iperf_test *test)
+{
+    int opt;
+    socklen_t len;
+
+    len = sizeof(struct sockaddr_storage);
+    if (getsockname(sp->socket, (struct sockaddr *) &sp->local_addr, &len) < 
0) {
+        i_errno = IEINITSTREAM;
+        return -1;
+    }
+    len = sizeof(struct sockaddr_storage);
+    if (getpeername(sp->socket, (struct sockaddr *) &sp->remote_addr, &len) < 
0) {
+        i_errno = IEINITSTREAM;
+        return -1;
+    }
 
 #if defined(HAVE_DONT_FRAGMENT)
     /* Set Don't Fragment (DF). Only applicable to IPv4/UDP tests. */
@@ -4368,6 +4412,7 @@
 #endif /* IP_MTU_DISCOVER */
     }
 #endif /* HAVE_DONT_FRAGMENT */
+
     return 0;
 }
 
@@ -4576,6 +4621,7 @@
        }
        snprintf(buf, sizeof(buf), "%d", getpid()); /* no trailing newline */
        if (write(fd, buf, strlen(buf)) < 0) {
+           (void)close(fd);
            return -1;
        }
        if (close(fd) < 0) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iperf-3.12/src/iperf_api.h 
new/iperf-3.13/src/iperf_api.h
--- old/iperf-3.12/src/iperf_api.h      2022-09-30 20:49:24.000000000 +0200
+++ new/iperf-3.13/src/iperf_api.h      2023-02-16 23:23:12.000000000 +0100
@@ -118,6 +118,7 @@
 int    iperf_get_test_duration( struct iperf_test* ipt );
 char   iperf_get_test_role( struct iperf_test* ipt );
 int    iperf_get_test_reverse( struct iperf_test* ipt );
+int    iperf_get_test_bidirectional( struct iperf_test* ipt );
 int    iperf_get_test_blksize( struct iperf_test* ipt );
 FILE*  iperf_get_test_outfile( struct iperf_test* ipt );
 uint64_t iperf_get_test_rate( struct iperf_test* ipt );
@@ -143,6 +144,7 @@
 int    iperf_get_test_get_server_output( struct iperf_test* ipt );
 char   iperf_get_test_unit_format(struct iperf_test *ipt);
 char*  iperf_get_test_bind_address ( struct iperf_test* ipt );
+char*   iperf_get_test_bind_dev(struct iperf_test *ipt);
 int    iperf_get_test_udp_counters_64bit( struct iperf_test* ipt );
 int    iperf_get_test_one_off( struct iperf_test* ipt );
 int iperf_get_test_tos( struct iperf_test* ipt );
@@ -153,6 +155,7 @@
 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);
+int     iperf_get_mapped_v4(struct iperf_test* ipt);
 
 /* Setter routines for some fields inside iperf_test. */
 void   iperf_set_verbose( struct iperf_test* ipt, int verbose );
@@ -186,6 +189,7 @@
 void   iperf_set_test_get_server_output( struct iperf_test* ipt, int 
get_server_output );
 void   iperf_set_test_unit_format(struct iperf_test *ipt, char unit_format);
 void   iperf_set_test_bind_address( struct iperf_test* ipt, const char 
*bind_address );
+void    iperf_set_test_bind_dev(struct iperf_test *ipt, const char *bnd_dev);
 void   iperf_set_test_udp_counters_64bit( struct iperf_test* ipt, int 
udp_counters_64bit );
 void   iperf_set_test_one_off( struct iperf_test* ipt, int one_off );
 void    iperf_set_test_tos( struct iperf_test* ipt, int tos );
@@ -195,6 +199,7 @@
 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);
+void    iperf_set_mapped_v4(struct iperf_test* ipt, const int val);
 
 #if defined(HAVE_SSL)
 void    iperf_set_test_client_username(struct iperf_test *ipt, const char 
*client_username);
@@ -281,6 +286,12 @@
  */
 void      iperf_free_stream(struct iperf_stream * sp);
 
+/**
+ * iperf_common_sockopts -- init stream socket with common socket options
+ *
+ */
+int       iperf_common_sockopts(struct iperf_test *, int s);
+
 int has_tcpinfo(void);
 int has_tcpinfo_retransmits(void);
 void save_tcpinfo(struct iperf_stream *sp, struct iperf_interval_results *irp);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iperf-3.12/src/iperf_error.c 
new/iperf-3.13/src/iperf_error.c
--- old/iperf-3.12/src/iperf_error.c    2022-09-30 20:49:24.000000000 +0200
+++ new/iperf-3.13/src/iperf_error.c    2023-02-16 23:23:12.000000000 +0100
@@ -260,11 +260,11 @@
             snprintf(errstr, len, "received an unknown control message");
             break;
         case IESENDMESSAGE:
-            snprintf(errstr, len, "unable to send control message");
+            snprintf(errstr, len, "unable to send control message - port may 
not be available, the other side may have stopped running, etc.");
             perr = 1;
             break;
         case IERECVMESSAGE:
-            snprintf(errstr, len, "unable to receive control message");
+            snprintf(errstr, len, "unable to receive control message - port 
may not be available, the other side may have stopped running, etc.");
             perr = 1;
             break;
         case IESENDPARAMS:
@@ -459,7 +459,7 @@
            snprintf(errstr, len, "unable to set IP Do-Not-Fragment flag");
             break;
         case IESETUSERTIMEOUT:
-            snprintf(errstr, len, "unable to set TCP/SCTP MSS");
+            snprintf(errstr, len, "unable to set TCP USER_TIMEOUT");
             perr = 1;
             break;
        default:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iperf-3.12/src/iperf_locale.c 
new/iperf-3.13/src/iperf_locale.c
--- old/iperf-3.12/src/iperf_locale.c   2022-09-30 20:49:24.000000000 +0200
+++ new/iperf-3.13/src/iperf_locale.c   2023-02-16 23:23:12.000000000 +0100
@@ -307,7 +307,7 @@
 "Authentication succeeded for user '%s' ts %ld\n";
 
 const char report_authentication_failed[] =
-"Authentication failed for user '%s' ts %ld\n";
+"Authentication failed with return code %d for user '%s' ts %ld\n";
 
 const char report_reverse[] =
 "Reverse mode, remote host %s is sending\n";
@@ -450,11 +450,7 @@
 const char report_tcpInfo[] =
 "event=TCP_Info CWND=%u SND_SSTHRESH=%u RCV_SSTHRESH=%u UNACKED=%u SACK=%u 
LOST=%u RETRANS=%u FACK=%u RTT=%u REORDERING=%u\n";
 #endif
-#if defined(__FreeBSD__)
-const char report_tcpInfo[] =
-"event=TCP_Info CWND=%u RCV_WIND=%u SND_SSTHRESH=%u RTT=%u\n";
-#endif
-#if defined(__NetBSD__)
+#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
 const char report_tcpInfo[] =
 "event=TCP_Info CWND=%u RCV_WIND=%u SND_SSTHRESH=%u RTT=%u\n";
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iperf-3.12/src/iperf_server_api.c 
new/iperf-3.13/src/iperf_server_api.c
--- old/iperf-3.12/src/iperf_server_api.c       2022-09-30 20:49:24.000000000 
+0200
+++ new/iperf-3.13/src/iperf_server_api.c       2023-02-16 23:23:12.000000000 
+0100
@@ -382,7 +382,6 @@
 cleanup_server(struct iperf_test *test)
 {
     struct iperf_stream *sp;
-    iperf_close_logfile(test);
 
     /* Close open streams */
     SLIST_FOREACH(sp, &test->streams, streams) {
@@ -390,6 +389,7 @@
             FD_CLR(sp->socket, &test->read_set);
             FD_CLR(sp->socket, &test->write_set);
             close(sp->socket);
+            sp->socket = -1;
        }
     }
 
@@ -561,7 +561,7 @@
                     test->server_forced_no_msg_restarts_count += 1;
                     i_errno = IENOMSG;
                     if (iperf_get_verbose(test))
-                        iperf_err(test, "Server restart (#%d) during active 
test due to idle data for receiving data",
+                        iperf_err(test, "Server restart (#%d) during active 
test due to idle timeout for receiving data",
                                   test->server_forced_no_msg_restarts_count);
                     cleanup_server(test);
                     return -1;
@@ -609,6 +609,13 @@
                         return -1;
                    }
 
+                   /* apply other common socket options */
+                    if (iperf_common_sockopts(test, s) < 0)
+                    {
+                        cleanup_server(test);
+                        return -1;
+                    }
+
                     if (!is_closed(s)) {
 
 #if defined(HAVE_TCP_USER_TIMEOUT)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iperf-3.12/src/iperf_tcp.c 
new/iperf-3.13/src/iperf_tcp.c
--- old/iperf-3.12/src/iperf_tcp.c      2022-09-30 20:49:24.000000000 +0200
+++ new/iperf-3.13/src/iperf_tcp.c      2023-02-16 23:23:12.000000000 +0100
@@ -545,6 +545,9 @@
        }
     }
 
+    /* Set common socket options */
+    iperf_common_sockopts(test, s);
+
     if (connect(s, (struct sockaddr *) server_res->ai_addr, 
server_res->ai_addrlen) < 0 && errno != EINPROGRESS) {
        saved_errno = errno;
        close(s);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iperf-3.12/src/iperf_udp.c 
new/iperf-3.13/src/iperf_udp.c
--- old/iperf-3.12/src/iperf_udp.c      2022-09-30 20:49:24.000000000 +0200
+++ new/iperf-3.13/src/iperf_udp.c      2023-02-16 23:23:12.000000000 +0100
@@ -555,6 +555,9 @@
        }
     }
 
+    /* Set common socket options */
+    iperf_common_sockopts(test, s);
+
 #ifdef SO_RCVTIMEO
     /* 30 sec timeout for a case when there is a network problem. */
     tv.tv_sec = 30;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iperf-3.12/src/main.c new/iperf-3.13/src/main.c
--- old/iperf-3.12/src/main.c   2022-09-30 20:49:24.000000000 +0200
+++ new/iperf-3.13/src/main.c   2023-02-16 23:23:12.000000000 +0100
@@ -151,7 +151,7 @@
             for (;;) {
                int rc;
                rc = iperf_run_server(test);
-                test->server_last_run_rc =rc;
+                test->server_last_run_rc = rc;
                if (rc < 0) {
                    iperf_err(test, "error - %s", iperf_strerror(i_errno));
                     if (test->json_output) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iperf-3.12/src/portable_endian.h 
new/iperf-3.13/src/portable_endian.h
--- old/iperf-3.12/src/portable_endian.h        2022-09-30 20:49:24.000000000 
+0200
+++ new/iperf-3.13/src/portable_endian.h        2023-02-16 23:23:12.000000000 
+0100
@@ -20,18 +20,7 @@
 #elif defined(HAVE_SYS_ENDIAN_H)
 #      include <sys/endian.h>
 
-#      if defined(__OpenBSD__)
-
-#              define be16toh(x) betoh16(x)
-#              define le16toh(x) letoh16(x)
-
-#              define be32toh(x) betoh32(x)
-#              define le32toh(x) letoh32(x)
-
-#              define be64toh(x) betoh64(x)
-#              define le64toh(x) letoh64(x)
-
-#      elif defined(__sgi)
+#      if defined(__sgi)
 
 #              include <netinet/in.h>
 #              include <inttypes.h>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/iperf-3.12/src/tcp_info.c 
new/iperf-3.13/src/tcp_info.c
--- old/iperf-3.12/src/tcp_info.c       2022-09-30 20:49:24.000000000 +0200
+++ new/iperf-3.13/src/tcp_info.c       2023-02-16 23:23:12.000000000 +0100
@@ -60,7 +60,7 @@
 int
 has_tcpinfo(void)
 {
-#if (defined(linux) || defined(__FreeBSD__) || defined(__NetBSD__)) \
+#if (defined(linux) || defined(__FreeBSD__) || defined(__NetBSD__) || 
defined(__OpenBSD__)) \
        && defined(TCP_INFO)
     return 1;
 #else
@@ -82,7 +82,7 @@
 #else
 #if defined(__FreeBSD__) && __FreeBSD_version >= 600000
     return 1; /* Should work now */
-#elif defined(__NetBSD__) && defined(TCP_INFO)
+#elif (defined(__NetBSD__) || defined(__OpenBSD__)) && defined(TCP_INFO)
     return 1;
 #else
     return 0;
@@ -94,7 +94,7 @@
 void
 save_tcpinfo(struct iperf_stream *sp, struct iperf_interval_results *irp)
 {
-#if (defined(linux) || defined(__FreeBSD__) || defined(__NetBSD__)) && \
+#if (defined(linux) || defined(__FreeBSD__) || defined(__NetBSD__) || 
defined(__OpenBSD__)) && \
        defined(TCP_INFO)
     socklen_t tcp_info_length = sizeof(struct tcp_info);
 
@@ -118,7 +118,7 @@
     return irp->tcpInfo.tcpi_total_retrans;
 #elif defined(__FreeBSD__) && __FreeBSD_version >= 600000
     return irp->tcpInfo.tcpi_snd_rexmitpack;
-#elif defined(__NetBSD__) && defined(TCP_INFO)
+#elif (defined(__NetBSD__) || defined(__OpenBSD__)) && defined(TCP_INFO)
     return irp->tcpInfo.tcpi_snd_rexmitpack;
 #else
     return -1;
@@ -138,6 +138,8 @@
     return irp->tcpInfo.tcpi_snd_cwnd;
 #elif defined(__NetBSD__) && defined(TCP_INFO)
     return (long)irp->tcpInfo.tcpi_snd_cwnd * irp->tcpInfo.tcpi_snd_mss;
+#elif defined(__OpenBSD__) && defined(TCP_INFO)
+    return irp->tcpInfo.tcpi_snd_cwnd;
 #else
     return -1;
 #endif
@@ -158,6 +160,8 @@
     return irp->tcpInfo.tcpi_snd_wnd;
 #elif defined(__NetBSD__) && defined(TCP_INFO)
     return (long)irp->tcpInfo.tcpi_snd_wnd * irp->tcpInfo.tcpi_snd_mss;
+#elif defined(__OpenBSD__) && defined(TCP_INFO)
+    return irp->tcpInfo.tcpi_snd_wnd;
 #else
     return -1;
 #endif
@@ -174,7 +178,7 @@
     return irp->tcpInfo.tcpi_rtt;
 #elif defined(__FreeBSD__) && __FreeBSD_version >= 600000
     return irp->tcpInfo.tcpi_rtt;
-#elif defined(__NetBSD__) && defined(TCP_INFO)
+#elif (defined(__NetBSD__) || defined(__OpenBSD__)) && defined(TCP_INFO)
     return irp->tcpInfo.tcpi_rtt;
 #else
     return -1;
@@ -192,7 +196,7 @@
     return irp->tcpInfo.tcpi_rttvar;
 #elif defined(__FreeBSD__) && __FreeBSD_version >= 600000
     return irp->tcpInfo.tcpi_rttvar;
-#elif defined(__NetBSD__) && defined(TCP_INFO)
+#elif (defined(__NetBSD__) || defined(__OpenBSD__)) && defined(TCP_INFO)
     return irp->tcpInfo.tcpi_rttvar;
 #else
     return -1;
@@ -223,11 +227,7 @@
            r->tcpInfo.tcpi_lost, r->tcpInfo.tcpi_retrans, 
r->tcpInfo.tcpi_fackets,
            r->tcpInfo.tcpi_rtt, r->tcpInfo.tcpi_reordering);
 #endif
-#if defined(__FreeBSD__) && defined(TCP_INFO)
-    sprintf(message, report_tcpInfo, r->tcpInfo.tcpi_snd_cwnd,
-           r->tcpInfo.tcpi_rcv_space, r->tcpInfo.tcpi_snd_ssthresh, 
r->tcpInfo.tcpi_rtt);
-#endif
-#if defined(__NetBSD__) && defined(TCP_INFO)
+#if (defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)) && 
defined(TCP_INFO)
     sprintf(message, report_tcpInfo, r->tcpInfo.tcpi_snd_cwnd,
            r->tcpInfo.tcpi_rcv_space, r->tcpInfo.tcpi_snd_ssthresh, 
r->tcpInfo.tcpi_rtt);
 #endif

++++++ iperf-3.12.tar.gz.sha256 -> iperf-3.13.tar.gz.sha256 ++++++
--- /work/SRC/openSUSE:Factory/iperf/iperf-3.12.tar.gz.sha256   2022-12-06 
16:42:59.376765061 +0100
+++ /work/SRC/openSUSE:Factory/.iperf.new.31432/iperf-3.13.tar.gz.sha256        
2023-03-13 12:41:09.323810318 +0100
@@ -1 +1 @@
-72034ecfb6a7d6d67e384e19fb6efff3236ca4f7ed4c518d7db649c447e1ffd6  
iperf-3.12.tar.gz
+bee427aeb13d6a2ee22073f23261f63712d82befaa83ac8cb4db5da4c2bdc865  
iperf-3.13.tar.gz

Reply via email to