Diff for /embedaddon/iperf/src/iperf_error.c between versions 1.1 and 1.1.1.3

version 1.1, 2016/10/18 13:28:18 version 1.1.1.3, 2023/09/27 11:14:54
Line 1 Line 1
 /*  /*
 * iperf, Copyright (c) 2014, 2015, 2016, The Regents of the University of * iperf, Copyright (c) 2014-2022, The Regents of the University of
  * California, through Lawrence Berkeley National Laboratory (subject   * California, through Lawrence Berkeley National Laboratory (subject
  * to receipt of any required approvals from the U.S. Dept. of   * to receipt of any required approvals from the U.S. Dept. of
  * Energy).  All rights reserved.   * Energy).  All rights reserved.
Line 33 Line 33
 #include "iperf.h"  #include "iperf.h"
 #include "iperf_api.h"  #include "iperf_api.h"
   
   int gerror;
   
   char iperf_timestrerr[100];
   
 /* Do a printf to stderr. */  /* Do a printf to stderr. */
 void  void
 iperf_err(struct iperf_test *test, const char *format, ...)  iperf_err(struct iperf_test *test, const char *format, ...)
 {  {
     va_list argp;      va_list argp;
     char str[1000];      char str[1000];
       time_t now;
       struct tm *ltm = NULL;
       char *ct = NULL;
   
       /* Timestamp if requested */
       if (test != NULL && test->timestamps) {
           time(&now);
           ltm = localtime(&now);
           strftime(iperf_timestrerr, sizeof(iperf_timestrerr), test->timestamp_format, ltm);
           ct = iperf_timestrerr;
       }
   
     va_start(argp, format);      va_start(argp, format);
     vsnprintf(str, sizeof(str), format, argp);      vsnprintf(str, sizeof(str), format, argp);
     if (test != NULL && test->json_output && test->json_top != NULL)      if (test != NULL && test->json_output && test->json_top != NULL)
         cJSON_AddStringToObject(test->json_top, "error", str);          cJSON_AddStringToObject(test->json_top, "error", str);
    else    else {
        if (test && test->outfile) {        if (test && test->outfile && test->outfile != stdout) {
             if (ct) {
                 fprintf(test->outfile, "%s", ct);
             }
             fprintf(test->outfile, "iperf3: %s\n", str);              fprintf(test->outfile, "iperf3: %s\n", str);
         }          }
         else {          else {
               if (ct) {
                   fprintf(stderr, "%s", ct);
               }
             fprintf(stderr, "iperf3: %s\n", str);              fprintf(stderr, "iperf3: %s\n", str);
         }          }
       }
     va_end(argp);      va_end(argp);
 }  }
   
Line 60  iperf_errexit(struct iperf_test *test, const char *for Line 82  iperf_errexit(struct iperf_test *test, const char *for
 {  {
     va_list argp;      va_list argp;
     char str[1000];      char str[1000];
       time_t now;
       struct tm *ltm = NULL;
       char *ct = NULL;
   
       /* Timestamp if requested */
       if (test != NULL && test->timestamps) {
           time(&now);
           ltm = localtime(&now);
           strftime(iperf_timestrerr, sizeof(iperf_timestrerr), "%c ", ltm);
           ct = iperf_timestrerr;
       }
   
     va_start(argp, format);      va_start(argp, format);
     vsnprintf(str, sizeof(str), format, argp);      vsnprintf(str, sizeof(str), format, argp);
    if (test != NULL && test->json_output && test->json_top != NULL) {    if (test != NULL && test->json_output) {
        cJSON_AddStringToObject(test->json_top, "error", str);        if (test->json_top != NULL) {
             cJSON_AddStringToObject(test->json_top, "error", str);
         }
         iperf_json_finish(test);          iperf_json_finish(test);
     } else      } else
        if (test && test->outfile) {        if (test && test->outfile && test->outfile != stdout) {
             if (ct) {
                 fprintf(test->outfile, "%s", ct);
             }
             fprintf(test->outfile, "iperf3: %s\n", str);              fprintf(test->outfile, "iperf3: %s\n", str);
         }          }
         else {          else {
               if (ct) {
                   fprintf(stderr, "%s", ct);
               }
             fprintf(stderr, "iperf3: %s\n", str);              fprintf(stderr, "iperf3: %s\n", str);
         }          }
     va_end(argp);      va_end(argp);
Line 82  iperf_errexit(struct iperf_test *test, const char *for Line 123  iperf_errexit(struct iperf_test *test, const char *for
 int i_errno;  int i_errno;
   
 char *  char *
iperf_strerror(int i_errno)iperf_strerror(int int_errno)
 {  {
     static char errstr[256];      static char errstr[256];
     int len, perr, herr;      int len, perr, herr;
Line 91  iperf_strerror(int i_errno) Line 132  iperf_strerror(int i_errno)
     len = sizeof(errstr);      len = sizeof(errstr);
     memset(errstr, 0, len);      memset(errstr, 0, len);
   
    switch (i_errno) {    switch (int_errno) {
         case IENONE:          case IENONE:
             snprintf(errstr, len, "no error");              snprintf(errstr, len, "no error");
             break;              break;
Line 122  iperf_strerror(int i_errno) Line 163  iperf_strerror(int i_errno)
         case IEINTERVAL:          case IEINTERVAL:
             snprintf(errstr, len, "invalid report interval (min = %g, max = %g seconds)", MIN_INTERVAL, MAX_INTERVAL);              snprintf(errstr, len, "invalid report interval (min = %g, max = %g seconds)", MIN_INTERVAL, MAX_INTERVAL);
             break;              break;
        case IEBIND:    case IEBIND: /* UNUSED */
             snprintf(errstr, len, "--bind must be specified to use --cport");              snprintf(errstr, len, "--bind must be specified to use --cport");
             break;              break;
         case IEUDPBLOCKSIZE:          case IEUDPBLOCKSIZE:
            snprintf(errstr, len, "block size too large (maximum = %d bytes)", MAX_UDP_BLOCKSIZE);            snprintf(errstr, len, "block size invalid (minimum = %d bytes, maximum = %d bytes)", MIN_UDP_BLOCKSIZE, MAX_UDP_BLOCKSIZE);
             break;              break;
        case IEBADTOS:        case IEBADTOS:
            snprintf(errstr, len, "bad TOS value (must be between 0 and 255 inclusive)");            snprintf(errstr, len, "bad TOS value (must be between 0 and 255 inclusive)");
             break;
         case IESETCLIENTAUTH:
              snprintf(errstr, len, "you must specify a username, password, and path to a valid RSA public key");
             break;
         case IESETSERVERAUTH:
              snprintf(errstr, len, "you must specify a path to a valid RSA private key and a user credential file");
             break;
         case IEBADFORMAT:
             snprintf(errstr, len, "bad format specifier (valid formats are in the set [kmgtKMGT])");
             break;              break;
           case IEBADPORT:
               snprintf(errstr, len, "port number must be between 1 and 65535 inclusive");
               break;
         case IEMSS:          case IEMSS:
             snprintf(errstr, len, "TCP MSS too large (maximum = %d bytes)", MAX_MSS);              snprintf(errstr, len, "TCP MSS too large (maximum = %d bytes)", MAX_MSS);
             break;              break;
Line 168  iperf_strerror(int i_errno) Line 221  iperf_strerror(int i_errno)
             snprintf(errstr, len, "test initialization failed");              snprintf(errstr, len, "test initialization failed");
             perr = 1;              perr = 1;
             break;              break;
           case IEAUTHTEST:
               snprintf(errstr, len, "test authorization failed");
               break;
         case IELISTEN:          case IELISTEN:
             snprintf(errstr, len, "unable to start listener for connections");              snprintf(errstr, len, "unable to start listener for connections");
               herr = 1;
             perr = 1;              perr = 1;
             break;              break;
         case IECONNECT:          case IECONNECT:
            snprintf(errstr, len, "unable to connect to server");            snprintf(errstr, len, "unable to connect to server - server may have stopped running or use a different port, firewall issue, etc.");
             perr = 1;              perr = 1;
               herr = 1;
             break;              break;
         case IEACCEPT:          case IEACCEPT:
             snprintf(errstr, len, "unable to accept connection from client");              snprintf(errstr, len, "unable to accept connection from client");
Line 201  iperf_strerror(int i_errno) Line 259  iperf_strerror(int i_errno)
             snprintf(errstr, len, "control socket has closed unexpectedly");              snprintf(errstr, len, "control socket has closed unexpectedly");
             break;              break;
         case IEMESSAGE:          case IEMESSAGE:
            snprintf(errstr, len, "received an unknown control message");            snprintf(errstr, len, "received an unknown control message (ensure other side is iperf3 and not iperf)");
             break;              break;
         case IESENDMESSAGE:          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;              perr = 1;
             break;              break;
         case IERECVMESSAGE:          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;              perr = 1;
             break;              break;
         case IESENDPARAMS:          case IESENDPARAMS:
Line 286  iperf_strerror(int i_errno) Line 344  iperf_strerror(int i_errno)
             snprintf(errstr, len, "unable to set CPU affinity");              snprintf(errstr, len, "unable to set CPU affinity");
             perr = 1;              perr = 1;
             break;              break;
           case IERCVTIMEOUT:
               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 IEUDPFILETRANSFER:
               snprintf(errstr, len, "cannot transfer file using UDP");
               break;
           case IERVRSONLYRCVTIMEOUT:
               snprintf(errstr, len, "client receive timeout is valid only in receiving mode");
               perr = 1;
               break;
         case IEDAEMON:          case IEDAEMON:
             snprintf(errstr, len, "unable to become a daemon");              snprintf(errstr, len, "unable to become a daemon");
             perr = 1;              perr = 1;
Line 302  iperf_strerror(int i_errno) Line 375  iperf_strerror(int i_errno)
             break;              break;
         case IESTREAMLISTEN:          case IESTREAMLISTEN:
             snprintf(errstr, len, "unable to start stream listener");              snprintf(errstr, len, "unable to start stream listener");
               herr = 1;
             perr = 1;              perr = 1;
             break;              break;
         case IESTREAMCONNECT:          case IESTREAMCONNECT:
Line 336  iperf_strerror(int i_errno) Line 410  iperf_strerror(int i_errno)
             perr = 1;              perr = 1;
             break;              break;
         case IESETCONGESTION:          case IESETCONGESTION:
            snprintf(errstr, len, "unable to set TCP_CONGESTION: "             snprintf(errstr, len, "unable to set TCP_CONGESTION: "
                                   "Supplied congestion control algorithm not supported on this host");                                    "Supplied congestion control algorithm not supported on this host");
             break;              break;
         case IEPIDFILE:          case IEPIDFILE:
Line 359  iperf_strerror(int i_errno) Line 433  iperf_strerror(int i_errno)
             snprintf(errstr, len, "unable to set socket pacing");              snprintf(errstr, len, "unable to set socket pacing");
             perr = 1;              perr = 1;
             break;              break;
           case IESETBUF2:
               snprintf(errstr, len, "socket buffer size not set correctly");
               break;
           case IEREVERSEBIDIR:
               snprintf(errstr, len, "cannot be both reverse and bidirectional");
               break;
           case IETOTALRATE:
               snprintf(errstr, len, "total required bandwidth is larger than server limit");
               break;
       case IESKEWTHRESHOLD:
               snprintf(errstr, len, "skew threshold must be a positive number");
               break;
           case IEIDLETIMEOUT:
               snprintf(errstr, len, "idle timeout parameter is not positive or larger than allowed limit");
               break;
           case IEBINDDEV:
               snprintf(errstr, len, "Unable to bind-to-device (check perror, maybe permissions?)");
               break;
       case IEBINDDEVNOSUPPORT:
               snprintf(errstr, len, "`<ip>%%<dev>` is not supported as system does not support bind to device");
               break;
       case IEHOSTDEV:
               snprintf(errstr, len, "host device name (ip%%<dev>) is supported (and required) only for IPv6 link-local address");
               break;        
           case IENOMSG:
               snprintf(errstr, len, "idle timeout for receiving data");
               break;
       case IESETDONTFRAGMENT:
               snprintf(errstr, len, "unable to set IP Do-Not-Fragment flag");
               break;
           case IESETUSERTIMEOUT:
               snprintf(errstr, len, "unable to set TCP USER_TIMEOUT");
               perr = 1;
               break;
           default:
               snprintf(errstr, len, "int_errno=%d", int_errno);
               perr = 1;
               break;
     }      }
   
       /* Append the result of strerror() or gai_strerror() if appropriate */
     if (herr || perr)      if (herr || perr)
         strncat(errstr, ": ", len - strlen(errstr) - 1);          strncat(errstr, ": ", len - strlen(errstr) - 1);
    if (h_errno && herr) {    if (errno && perr)
        strncat(errstr, hstrerror(h_errno), len - strlen(errstr) - 1); 
    } else if (errno && perr) { 
         strncat(errstr, strerror(errno), len - strlen(errstr) - 1);          strncat(errstr, strerror(errno), len - strlen(errstr) - 1);
       else if (herr && gerror) {
           strncat(errstr, gai_strerror(gerror), len - strlen(errstr) - 1);
           gerror = 0;
     }      }
   
     return errstr;      return errstr;

Removed from v.1.1  
changed lines
  Added in v.1.1.1.3


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>