Annotation of embedaddon/iperf/src/iperf_error.c, revision 1.1.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>