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>