Annotation of embedaddon/iperf/src/iperf_error.c, revision 1.1
1.1 ! misho 1: /*
! 2: * iperf, Copyright (c) 2014, 2015, 2016, The Regents of the University of
! 3: * California, through Lawrence Berkeley National Laboratory (subject
! 4: * to receipt of any required approvals from the U.S. Dept. of
! 5: * Energy). All rights reserved.
! 6: *
! 7: * If you have questions about your rights to use or distribute this
! 8: * software, please contact Berkeley Lab's Technology Transfer
! 9: * Department at TTD@lbl.gov.
! 10: *
! 11: * NOTICE. This software is owned by the U.S. Department of Energy.
! 12: * As such, the U.S. Government has been granted for itself and others
! 13: * acting on its behalf a paid-up, nonexclusive, irrevocable,
! 14: * worldwide license in the Software to reproduce, prepare derivative
! 15: * works, and perform publicly and display publicly. Beginning five
! 16: * (5) years after the date permission to assert copyright is obtained
! 17: * from the U.S. Department of Energy, and subject to any subsequent
! 18: * five (5) year renewals, the U.S. Government is granted for itself
! 19: * and others acting on its behalf a paid-up, nonexclusive,
! 20: * irrevocable, worldwide license in the Software to reproduce,
! 21: * prepare derivative works, distribute copies to the public, perform
! 22: * publicly and display publicly, and to permit others to do so.
! 23: *
! 24: * This code is distributed under a BSD style license, see the LICENSE
! 25: * file for complete information.
! 26: */
! 27: #include <stdio.h>
! 28: #include <errno.h>
! 29: #include <netdb.h>
! 30: #include <string.h>
! 31: #include <stdlib.h>
! 32: #include <stdarg.h>
! 33: #include "iperf.h"
! 34: #include "iperf_api.h"
! 35:
! 36: /* Do a printf to stderr. */
! 37: void
! 38: iperf_err(struct iperf_test *test, const char *format, ...)
! 39: {
! 40: va_list argp;
! 41: char str[1000];
! 42:
! 43: va_start(argp, format);
! 44: vsnprintf(str, sizeof(str), format, argp);
! 45: if (test != NULL && test->json_output && test->json_top != NULL)
! 46: cJSON_AddStringToObject(test->json_top, "error", str);
! 47: else
! 48: if (test && test->outfile) {
! 49: fprintf(test->outfile, "iperf3: %s\n", str);
! 50: }
! 51: else {
! 52: fprintf(stderr, "iperf3: %s\n", str);
! 53: }
! 54: va_end(argp);
! 55: }
! 56:
! 57: /* Do a printf to stderr or log file as appropriate, then exit. */
! 58: void
! 59: iperf_errexit(struct iperf_test *test, const char *format, ...)
! 60: {
! 61: va_list argp;
! 62: char str[1000];
! 63:
! 64: va_start(argp, format);
! 65: vsnprintf(str, sizeof(str), format, argp);
! 66: if (test != NULL && test->json_output && test->json_top != NULL) {
! 67: cJSON_AddStringToObject(test->json_top, "error", str);
! 68: iperf_json_finish(test);
! 69: } else
! 70: if (test && test->outfile) {
! 71: fprintf(test->outfile, "iperf3: %s\n", str);
! 72: }
! 73: else {
! 74: fprintf(stderr, "iperf3: %s\n", str);
! 75: }
! 76: va_end(argp);
! 77: if (test)
! 78: iperf_delete_pidfile(test);
! 79: exit(1);
! 80: }
! 81:
! 82: int i_errno;
! 83:
! 84: char *
! 85: iperf_strerror(int i_errno)
! 86: {
! 87: static char errstr[256];
! 88: int len, perr, herr;
! 89: perr = herr = 0;
! 90:
! 91: len = sizeof(errstr);
! 92: memset(errstr, 0, len);
! 93:
! 94: switch (i_errno) {
! 95: case IENONE:
! 96: snprintf(errstr, len, "no error");
! 97: break;
! 98: case IESERVCLIENT:
! 99: snprintf(errstr, len, "cannot be both server and client");
! 100: break;
! 101: case IENOROLE:
! 102: snprintf(errstr, len, "must either be a client (-c) or server (-s)");
! 103: break;
! 104: case IESERVERONLY:
! 105: snprintf(errstr, len, "some option you are trying to set is server only");
! 106: break;
! 107: case IECLIENTONLY:
! 108: snprintf(errstr, len, "some option you are trying to set is client only");
! 109: break;
! 110: case IEDURATION:
! 111: snprintf(errstr, len, "test duration too long (maximum = %d seconds)", MAX_TIME);
! 112: break;
! 113: case IENUMSTREAMS:
! 114: snprintf(errstr, len, "number of parallel streams too large (maximum = %d)", MAX_STREAMS);
! 115: break;
! 116: case IEBLOCKSIZE:
! 117: snprintf(errstr, len, "block size too large (maximum = %d bytes)", MAX_BLOCKSIZE);
! 118: break;
! 119: case IEBUFSIZE:
! 120: snprintf(errstr, len, "socket buffer size too large (maximum = %d bytes)", MAX_TCP_BUFFER);
! 121: break;
! 122: case IEINTERVAL:
! 123: snprintf(errstr, len, "invalid report interval (min = %g, max = %g seconds)", MIN_INTERVAL, MAX_INTERVAL);
! 124: break;
! 125: case IEBIND:
! 126: snprintf(errstr, len, "--bind must be specified to use --cport");
! 127: break;
! 128: case IEUDPBLOCKSIZE:
! 129: snprintf(errstr, len, "block size too large (maximum = %d bytes)", MAX_UDP_BLOCKSIZE);
! 130: break;
! 131: case IEBADTOS:
! 132: snprintf(errstr, len, "bad TOS value (must be between 0 and 255 inclusive)");
! 133: break;
! 134: case IEMSS:
! 135: snprintf(errstr, len, "TCP MSS too large (maximum = %d bytes)", MAX_MSS);
! 136: break;
! 137: case IENOSENDFILE:
! 138: snprintf(errstr, len, "this OS does not support sendfile");
! 139: break;
! 140: case IEOMIT:
! 141: snprintf(errstr, len, "bogus value for --omit");
! 142: break;
! 143: case IEUNIMP:
! 144: snprintf(errstr, len, "an option you are trying to set is not implemented yet");
! 145: break;
! 146: case IEFILE:
! 147: snprintf(errstr, len, "unable to open -F file");
! 148: perr = 1;
! 149: break;
! 150: case IEBURST:
! 151: snprintf(errstr, len, "invalid burst count (maximum = %d)", MAX_BURST);
! 152: break;
! 153: case IEENDCONDITIONS:
! 154: snprintf(errstr, len, "only one test end condition (-t, -n, -k) may be specified");
! 155: break;
! 156: case IELOGFILE:
! 157: snprintf(errstr, len, "unable to open log file");
! 158: perr = 1;
! 159: break;
! 160: case IENOSCTP:
! 161: snprintf(errstr, len, "no SCTP support available");
! 162: break;
! 163: case IENEWTEST:
! 164: snprintf(errstr, len, "unable to create a new test");
! 165: perr = 1;
! 166: break;
! 167: case IEINITTEST:
! 168: snprintf(errstr, len, "test initialization failed");
! 169: perr = 1;
! 170: break;
! 171: case IELISTEN:
! 172: snprintf(errstr, len, "unable to start listener for connections");
! 173: perr = 1;
! 174: break;
! 175: case IECONNECT:
! 176: snprintf(errstr, len, "unable to connect to server");
! 177: perr = 1;
! 178: break;
! 179: case IEACCEPT:
! 180: snprintf(errstr, len, "unable to accept connection from client");
! 181: herr = 1;
! 182: perr = 1;
! 183: break;
! 184: case IESENDCOOKIE:
! 185: snprintf(errstr, len, "unable to send cookie to server");
! 186: perr = 1;
! 187: break;
! 188: case IERECVCOOKIE:
! 189: snprintf(errstr, len, "unable to receive cookie at server");
! 190: perr = 1;
! 191: break;
! 192: case IECTRLWRITE:
! 193: snprintf(errstr, len, "unable to write to the control socket");
! 194: perr = 1;
! 195: break;
! 196: case IECTRLREAD:
! 197: snprintf(errstr, len, "unable to read from the control socket");
! 198: perr = 1;
! 199: break;
! 200: case IECTRLCLOSE:
! 201: snprintf(errstr, len, "control socket has closed unexpectedly");
! 202: break;
! 203: case IEMESSAGE:
! 204: snprintf(errstr, len, "received an unknown control message");
! 205: break;
! 206: case IESENDMESSAGE:
! 207: snprintf(errstr, len, "unable to send control message");
! 208: perr = 1;
! 209: break;
! 210: case IERECVMESSAGE:
! 211: snprintf(errstr, len, "unable to receive control message");
! 212: perr = 1;
! 213: break;
! 214: case IESENDPARAMS:
! 215: snprintf(errstr, len, "unable to send parameters to server");
! 216: perr = 1;
! 217: break;
! 218: case IERECVPARAMS:
! 219: snprintf(errstr, len, "unable to receive parameters from client");
! 220: perr = 1;
! 221: break;
! 222: case IEPACKAGERESULTS:
! 223: snprintf(errstr, len, "unable to package results");
! 224: perr = 1;
! 225: break;
! 226: case IESENDRESULTS:
! 227: snprintf(errstr, len, "unable to send results");
! 228: perr = 1;
! 229: break;
! 230: case IERECVRESULTS:
! 231: snprintf(errstr, len, "unable to receive results");
! 232: perr = 1;
! 233: break;
! 234: case IESELECT:
! 235: snprintf(errstr, len, "select failed");
! 236: perr = 1;
! 237: break;
! 238: case IECLIENTTERM:
! 239: snprintf(errstr, len, "the client has terminated");
! 240: break;
! 241: case IESERVERTERM:
! 242: snprintf(errstr, len, "the server has terminated");
! 243: break;
! 244: case IEACCESSDENIED:
! 245: snprintf(errstr, len, "the server is busy running a test. try again later");
! 246: break;
! 247: case IESETNODELAY:
! 248: snprintf(errstr, len, "unable to set TCP/SCTP NODELAY");
! 249: perr = 1;
! 250: break;
! 251: case IESETMSS:
! 252: snprintf(errstr, len, "unable to set TCP/SCTP MSS");
! 253: perr = 1;
! 254: break;
! 255: case IESETBUF:
! 256: snprintf(errstr, len, "unable to set socket buffer size");
! 257: perr = 1;
! 258: break;
! 259: case IESETTOS:
! 260: snprintf(errstr, len, "unable to set IP TOS");
! 261: perr = 1;
! 262: break;
! 263: case IESETCOS:
! 264: snprintf(errstr, len, "unable to set IPv6 traffic class");
! 265: perr = 1;
! 266: break;
! 267: case IESETFLOW:
! 268: snprintf(errstr, len, "unable to set IPv6 flow label");
! 269: break;
! 270: case IEREUSEADDR:
! 271: snprintf(errstr, len, "unable to reuse address on socket");
! 272: perr = 1;
! 273: break;
! 274: case IENONBLOCKING:
! 275: snprintf(errstr, len, "unable to set socket to non-blocking");
! 276: perr = 1;
! 277: break;
! 278: case IESETWINDOWSIZE:
! 279: snprintf(errstr, len, "unable to set socket window size");
! 280: perr = 1;
! 281: break;
! 282: case IEPROTOCOL:
! 283: snprintf(errstr, len, "protocol does not exist");
! 284: break;
! 285: case IEAFFINITY:
! 286: snprintf(errstr, len, "unable to set CPU affinity");
! 287: perr = 1;
! 288: break;
! 289: case IEDAEMON:
! 290: snprintf(errstr, len, "unable to become a daemon");
! 291: perr = 1;
! 292: break;
! 293: case IECREATESTREAM:
! 294: snprintf(errstr, len, "unable to create a new stream");
! 295: herr = 1;
! 296: perr = 1;
! 297: break;
! 298: case IEINITSTREAM:
! 299: snprintf(errstr, len, "unable to initialize stream");
! 300: herr = 1;
! 301: perr = 1;
! 302: break;
! 303: case IESTREAMLISTEN:
! 304: snprintf(errstr, len, "unable to start stream listener");
! 305: perr = 1;
! 306: break;
! 307: case IESTREAMCONNECT:
! 308: snprintf(errstr, len, "unable to connect stream");
! 309: herr = 1;
! 310: perr = 1;
! 311: break;
! 312: case IESTREAMACCEPT:
! 313: snprintf(errstr, len, "unable to accept stream connection");
! 314: perr = 1;
! 315: break;
! 316: case IESTREAMWRITE:
! 317: snprintf(errstr, len, "unable to write to stream socket");
! 318: perr = 1;
! 319: break;
! 320: case IESTREAMREAD:
! 321: snprintf(errstr, len, "unable to read from stream socket");
! 322: perr = 1;
! 323: break;
! 324: case IESTREAMCLOSE:
! 325: snprintf(errstr, len, "stream socket has closed unexpectedly");
! 326: break;
! 327: case IESTREAMID:
! 328: snprintf(errstr, len, "stream has an invalid id");
! 329: break;
! 330: case IENEWTIMER:
! 331: snprintf(errstr, len, "unable to create new timer");
! 332: perr = 1;
! 333: break;
! 334: case IEUPDATETIMER:
! 335: snprintf(errstr, len, "unable to update timer");
! 336: perr = 1;
! 337: break;
! 338: case IESETCONGESTION:
! 339: snprintf(errstr, len, "unable to set TCP_CONGESTION: "
! 340: "Supplied congestion control algorithm not supported on this host");
! 341: break;
! 342: case IEPIDFILE:
! 343: snprintf(errstr, len, "unable to write PID file");
! 344: perr = 1;
! 345: break;
! 346: case IEV6ONLY:
! 347: snprintf(errstr, len, "Unable to set/reset IPV6_V6ONLY");
! 348: perr = 1;
! 349: break;
! 350: case IESETSCTPDISABLEFRAG:
! 351: snprintf(errstr, len, "unable to set SCTP_DISABLE_FRAGMENTS");
! 352: perr = 1;
! 353: break;
! 354: case IESETSCTPNSTREAM:
! 355: snprintf(errstr, len, "unable to set SCTP_INIT num of SCTP streams\n");
! 356: perr = 1;
! 357: break;
! 358: case IESETPACING:
! 359: snprintf(errstr, len, "unable to set socket pacing");
! 360: perr = 1;
! 361: break;
! 362: }
! 363:
! 364: if (herr || perr)
! 365: strncat(errstr, ": ", len - strlen(errstr) - 1);
! 366: if (h_errno && herr) {
! 367: strncat(errstr, hstrerror(h_errno), len - strlen(errstr) - 1);
! 368: } else if (errno && perr) {
! 369: strncat(errstr, strerror(errno), len - strlen(errstr) - 1);
! 370: }
! 371:
! 372: return errstr;
! 373: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>