iperf: Update to version 2.0.13
authorHauke Mehrtens <hauke@hauke-m.de>
Sat, 11 May 2019 15:34:20 +0000 (17:34 +0200)
committerHauke Mehrtens <hauke@hauke-m.de>
Tue, 14 May 2019 18:28:18 +0000 (20:28 +0200)
The removed patches are already integrated in the upstream version.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
package/network/utils/iperf/Makefile
package/network/utils/iperf/patches/0001-fix-latent-bug-in-signal-handling-per-POSIX-calling-.patch [deleted file]
package/network/utils/iperf/patches/0002-cleanup-main-startup-fix-daemon-mode-per-redirecting.patch [deleted file]
package/network/utils/iperf/patches/0003-fix-non-ipv6-builds.patch

index 383eb07949ad4818c876f7dcdad5ca1f0f0b4f37..33d00b43d75e886a6d1a9cd68ea370307c8a238c 100644 (file)
@@ -8,11 +8,11 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=iperf
-PKG_VERSION:=2.0.12
-PKG_RELEASE:=3
+PKG_VERSION:=2.0.13
+PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=367f651fb1264b13f6518e41b8a7e08ce3e41b2a1c80e99ff0347561eed32646
+PKG_HASH:=c88adec966096a81136dda91b4bd19c27aae06df4d45a7f547a8e50d723778ad
 PKG_SOURCE_URL:=@SF/iperf2
 
 PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
diff --git a/package/network/utils/iperf/patches/0001-fix-latent-bug-in-signal-handling-per-POSIX-calling-.patch b/package/network/utils/iperf/patches/0001-fix-latent-bug-in-signal-handling-per-POSIX-calling-.patch
deleted file mode 100644 (file)
index a713e06..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-From 7c0ac64ebea38d0d9ff4d160db4d33bc087a3490 Mon Sep 17 00:00:00 2001
-From: Robert McMahon <rjmcmahon@rjmcmahon.com>
-Date: Mon, 16 Jul 2018 17:51:29 -0700
-Subject: [PATCH] fix latent bug in signal handling, per POSIX calling exit()
- in signal handler is not safe.  Use _exit() instead.  Also, detect the user
- signal SIGINT for the case of server needing two invocations to stop server
- threads.  Note: the server threads still need some work from graceful
- termination with a single ctrl-c
-
----
-
---- a/compat/signal.c
-+++ b/compat/signal.c
-@@ -171,7 +171,7 @@ void sig_exit( int inSigno ) {
-     static int num = 0;
-     if ( num++ == 0 ) {
-         fflush( 0 );
--        exit( 0 );
-+      _exit(0);
-     }
- } /* end sig_exit */
---- a/src/main.cpp
-+++ b/src/main.cpp
-@@ -268,7 +268,7 @@ void Sig_Interupt( int inSigno ) {
-     // We try to not allow a single interrupt handled by multiple threads
-     // to completely kill the app so we save off the first thread ID
-     // then that is the only thread that can supply the next interrupt
--    if ( thread_equalid( sThread, thread_zeroid() ) ) {
-+    if ( (inSigno == SIGINT) && thread_equalid( sThread, thread_zeroid() ) ) {
-         sThread = thread_getid();
-     } else if ( thread_equalid( sThread, thread_getid() ) ) {
-         sig_exit( inSigno );
-@@ -420,9 +420,3 @@ VOID ServiceStop() {
- }
- #endif
--
--
--
--
--
--
diff --git a/package/network/utils/iperf/patches/0002-cleanup-main-startup-fix-daemon-mode-per-redirecting.patch b/package/network/utils/iperf/patches/0002-cleanup-main-startup-fix-daemon-mode-per-redirecting.patch
deleted file mode 100644 (file)
index c8655c9..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-From 755be8bdb48d2536e39d2d7cf84e8a8f86b8776f Mon Sep 17 00:00:00 2001
-From: Robert McMahon <rjmcmahon@rjmcmahon.com>
-Date: Sat, 6 Oct 2018 13:36:52 -0700
-Subject: [PATCH] cleanup main startup, fix daemon mode per redirecting stdin,
- stderr and stdout to /dev/null
-
----
-
---- a/src/main.cpp
-+++ b/src/main.cpp
-@@ -167,67 +167,7 @@ int main( int argc, char **argv ) {
-     Settings_ParseCommandLine( argc, argv, ext_gSettings );
-     // Check for either having specified client or server
--    if ( ext_gSettings->mThreadMode == kMode_Client
--         || ext_gSettings->mThreadMode == kMode_Listener ) {
--#ifdef WIN32
--        // Start the server as a daemon
--        if ( isDaemon( ext_gSettings )) {
--          if (ext_gSettings->mThreadMode == kMode_Listener) {
--              CmdInstallService(argc, argv);
--          } else {
--              fprintf(stderr, "Client cannot be run as a daemon\n");
--          }
--            return 0;
--        }
--
--        // Remove the Windows service if requested
--        if ( isRemoveService( ext_gSettings ) ) {
--            // remove the service
--            if ( CmdRemoveService() ) {
--                fprintf(stderr, "IPerf Service is removed.\n");
--                return 0;
--            }
--        }
--#else
--      if ( isDaemon( ext_gSettings ) ) {
--          if (ext_gSettings->mThreadMode != kMode_Listener) {
--              fprintf(stderr, "Iperf client cannot be run as a daemon\n");
--              return 0;
--          }
--          if (daemon(1, 1) < 0) {
--              perror("daemon");
--          }
--          fprintf( stderr, "Running Iperf Server as a daemon\n");
--          fprintf( stderr, "The Iperf daemon process ID : %d\n",((int)getpid()));
--          fclose(stdout);
--          fclose(stderr);
--          fclose(stdin);
--      }
--#endif
--        // initialize client(s)
--        if ( ext_gSettings->mThreadMode == kMode_Client ) {
--            client_init( ext_gSettings );
--        }
--
--#ifdef HAVE_THREAD
--        // start up the reporter and client(s) or listener
--        {
--            thread_Settings *into = NULL;
--            // Create the settings structure for the reporter thread
--            Settings_Copy( ext_gSettings, &into );
--            into->mThreadMode = kMode_Reporter;
--
--            // Have the reporter launch the client or listener
--            into->runNow = ext_gSettings;
--
--            // Start all the threads that are ready to go
--            thread_start( into );
--        }
--#else
--        // No need to make a reporter thread because we don't have threads
--        thread_start( ext_gSettings );
--#endif
--    } else {
-+    if ((ext_gSettings->mThreadMode != kMode_Client) && (ext_gSettings->mThreadMode != kMode_Listener)) {
-         // neither server nor client mode was specified
-         // print usage and exit
-@@ -236,20 +176,75 @@ int main( int argc, char **argv ) {
-         // Starting in 2.0 to restart a previously defined service
-         // you must call iperf with "iperf -D" or using the environment variable
-         SERVICE_TABLE_ENTRY dispatchTable[] =
--        {
--            { (LPSTR)TEXT(SZSERVICENAME), (LPSERVICE_MAIN_FUNCTION)service_main},
--            { NULL, NULL}
--        };
-+          {
-+              { (LPSTR)TEXT(SZSERVICENAME), (LPSERVICE_MAIN_FUNCTION)service_main},
-+              { NULL, NULL}
-+          };
-       // starting the service by SCM, there is no arguments will be passed in.
-       // the arguments will pass into Service_Main entry.
-         if (!StartServiceCtrlDispatcher(dispatchTable) )
-             // If the service failed to start then print usage
- #endif
--        fprintf( stderr, usage_short, argv[0], argv[0] );
-+          fprintf( stderr, usage_short, argv[0], argv[0] );
-+      return 0;
-+    }
-+
-+
-+    switch (ext_gSettings->mThreadMode) {
-+    case kMode_Client :
-+      if ( isDaemon( ext_gSettings ) ) {
-+          fprintf(stderr, "Iperf client cannot be run as a daemon\n");
-+          return 0;
-+      }
-+        // initialize client(s)
-+        client_init( ext_gSettings );
-+      break;
-+    case kMode_Listener :
-+      if ( isDaemon( ext_gSettings ) ) {
-+          fprintf( stderr, "Running Iperf Server as a daemon\n");
-+          // Start the server as a daemon
-+#ifdef WIN32
-+          CmdInstallService(argc, argv);
-+          // Remove the Windows service if requested
-+          if ( isRemoveService( ext_gSettings ) ) {
-+              // remove the service
-+              if ( CmdRemoveService() ) {
-+                  fprintf(stderr, "IPerf Service is removed.\n");
-+                  return 0;
-+              }
-+          }
-+#else
-+          fflush(stderr);
-+          // redirect stdin, stdout and sterr to /dev/null (see dameon and no close flag)
-+          if (daemon(1, 0) < 0) {
-+              perror("daemon");
-+          }
-+      }
-+#endif
-+      break;
-+    default :
-+      fprintf( stderr, "unknown mode");
-+      break;
-+    }
-+#ifdef HAVE_THREAD
-+        // start up the reporter and client(s) or listener
-+    {
-+      thread_Settings *into = NULL;
-+      // Create the settings structure for the reporter thread
-+      Settings_Copy( ext_gSettings, &into );
-+      into->mThreadMode = kMode_Reporter;
-+
-+      // Have the reporter launch the client or listener
-+      into->runNow = ext_gSettings;
--        return 0;
-+      // Start all the threads that are ready to go
-+      thread_start( into );
-     }
-+#else
-+    // No need to make a reporter thread because we don't have threads
-+    thread_start( ext_gSettings );
-+#endif
-     // wait for other (client, server) threads to complete
-     thread_joinall();
index 9d96c1919a3293c4fca404cd5eeb49fedec10692..c6afa3e16094472c0b7a0679b9ed184dcc29e78d 100644 (file)
@@ -1,18 +1,16 @@
-Index: iperf-2.0.12/src/Listener.cpp
-===================================================================
---- iperf-2.0.12.orig/src/Listener.cpp
-+++ iperf-2.0.12/src/Listener.cpp
-@@ -670,6 +670,7 @@ int Listener::L2_setup (void) {
+--- a/src/Listener.cpp
++++ b/src/Listener.cpp
+@@ -723,6 +723,7 @@ int Listener::L2_setup (void) {
  
      // Now optimize packet flow up the raw socket
      // Establish the flow BPF to forward up only "connected" packets to this raw socket
 +#ifdef HAVE_IPV6
      if (l->sa_family == AF_INET6) {
+ #ifdef HAVE_IPV6
        struct in6_addr *v6peer = SockAddr_get_in6_addr(&server->peer);
-       struct in6_addr *v6local = SockAddr_get_in6_addr(&server->local);
-@@ -682,6 +683,9 @@ int Listener::L2_setup (void) {
-           WARN_errno( rc == SOCKET_ERROR, "l2 v4in6 connect ip bpf");
-       }
+@@ -740,6 +741,9 @@ int Listener::L2_setup (void) {
+       return -1;
+ #endif /* HAVE_IPV6 */
      } else {
 +#else
 +    {