1 /* 2 * Copyright (c) 2009-2011, The Regents of the University of California, 3 * through Lawrence Berkeley National Laboratory (subject to receipt of any 4 * required approvals from the U.S. Dept. of Energy). All rights reserved. 5 * 6 * This code is distributed under a BSD style license, see the LICENSE file 7 * for complete information. 8 */ 9 10 #include <stdio.h> 11 #include <errno.h> 12 #include <netdb.h> 13 #include <string.h> 14 #include "iperf.h" 15 #include "iperf_error.h" 16 17 int i_errno; 18 19 char * 20 iperf_strerror(int i_errno) 21 { 22 static char errstr[256]; 23 int len, perr, herr; 24 perr = herr = 0; 25 26 len = sizeof(errstr); 27 memset(errstr, 0, len); 28 29 switch (i_errno) { 30 case IENONE: 31 snprintf(errstr, len, "No error"); 32 break; 33 case IESERVCLIENT: 34 snprintf(errstr, len, "Iperf cannot be both server and client"); 35 break; 36 case IENOROLE: 37 snprintf(errstr, len, "Iperf instance must either be a client (-c) or server (-s)"); 38 break; 39 case IECLIENTONLY: 40 snprintf(errstr, len, "Some option you are trying to set is client only"); 41 break; 42 case IEDURATION: 43 snprintf(errstr, len, "Test duration too long (maximum = %d seconds)", MAX_TIME); 44 break; 45 case IENUMSTREAMS: 46 snprintf(errstr, len, "Number of parallel streams too large (maximum = %d)", MAX_STREAMS); 47 break; 48 case IEBLOCKSIZE: 49 snprintf(errstr, len, "Block size too large (maximum = %d bytes)", MAX_BLOCKSIZE); 50 break; 51 case IEBUFSIZE: 52 snprintf(errstr, len, "Socket buffer size too large (maximum = %d bytes)", MAX_TCP_BUFFER); 53 break; 54 case IEINTERVAL: 55 snprintf(errstr, len, "Report interval too large (maximum = %d seconds)", MAX_INTERVAL); 56 break; 57 case IEMSS: 58 snprintf(errstr, len, "TCP MSS too large (maximum = %d bytes)", MAX_MSS); 59 break; 60 case IENEWTEST: 61 snprintf(errstr, len, "Unable to create a new test"); 62 perr = 1; 63 break; 64 case IEINITTEST: 65 snprintf(errstr, len, "Test initialization failed"); 66 perr = 1; 67 break; 68 case IELISTEN: 69 snprintf(errstr, len, "Unable to start listener for connections"); 70 perr = 1; 71 break; 72 case IECONNECT: 73 snprintf(errstr, len, "Unable to connect to server"); 74 herr = 1; 75 perr = 1; 76 break; 77 case IEACCEPT: 78 snprintf(errstr, len, "Unable to accept connection from client"); 79 herr = 1; 80 perr = 1; 81 break; 82 case IESENDCOOKIE: 83 snprintf(errstr, len, "Unable to send cookie to server"); 84 perr = 1; 85 break; 86 case IERECVCOOKIE: 87 snprintf(errstr, len, "Unable to receive cookie to server"); 88 perr = 1; 89 break; 90 case IECTRLWRITE: 91 snprintf(errstr, len, "Unable to write to the control socket"); 92 perr = 1; 93 break; 94 case IECTRLREAD: 95 snprintf(errstr, len, "Unable to read from the control socket"); 96 perr = 1; 97 break; 98 case IECTRLCLOSE: 99 snprintf(errstr, len, "Control socket has closed unexpectedly"); 100 break; 101 case IEMESSAGE: 102 snprintf(errstr, len, "Received an unknown control message"); 103 break; 104 case IESENDMESSAGE: 105 snprintf(errstr, len, "Unable to send control message"); 106 perr = 1; 107 break; 108 case IERECVMESSAGE: 109 snprintf(errstr, len, "Unable to receive control message"); 110 perr = 1; 111 break; 112 case IESENDPARAMS: 113 snprintf(errstr, len, "Unable to send parameters to server"); 114 perr = 1; 115 break; 116 case IERECVPARAMS: 117 snprintf(errstr, len, "Unable to receive parameters from client"); 118 perr = 1; 119 break; 120 case IEPACKAGERESULTS: 121 snprintf(errstr, len, "Unable to package results"); 122 perr = 1; 123 break; 124 case IESENDRESULTS: 125 snprintf(errstr, len, "Unable to send results"); 126 perr = 1; 127 break; 128 case IERECVRESULTS: 129 snprintf(errstr, len, "Unable to receive results"); 130 perr = 1; 131 break; 132 case IESELECT: 133 snprintf(errstr, len, "Select failed"); 134 perr = 1; 135 break; 136 case IECLIENTTERM: 137 snprintf(errstr, len, "The client has terminated"); 138 break; 139 case IESERVERTERM: 140 snprintf(errstr, len, "The server has terminated"); 141 break; 142 case IEACCESSDENIED: 143 snprintf(errstr, len, "The server is busy running a test. try again later"); 144 break; 145 case IESETNODELAY: 146 snprintf(errstr, len, "Unable to set TCP NODELAY"); 147 perr = 1; 148 break; 149 case IESETMSS: 150 snprintf(errstr, len, "Unable to set TCP MSS"); 151 perr = 1; 152 break; 153 case IESETBUF: 154 snprintf(errstr, len, "Unable to set socket buffer size"); 155 perr = 1; 156 break; 157 case IESETTOS: 158 snprintf(errstr, len, "Unable to set IP TOS"); 159 perr = 1; 160 break; 161 case IESETCOS: 162 snprintf(errstr, len, "Unable to set IPv6 traffic class"); 163 perr = 1; 164 break; 165 case IEREUSEADDR: 166 snprintf(errstr, len, "Unable to reuse address on socket"); 167 perr = 1; 168 break; 169 case IENONBLOCKING: 170 snprintf(errstr, len, "Unable to set socket to non-blocking"); 171 perr = 1; 172 break; 173 case IESETWINDOWSIZE: 174 snprintf(errstr, len, "Unable to set socket window size"); 175 perr = 1; 176 break; 177 case IEPROTOCOL: 178 snprintf(errstr, len, "Protocol does not exist"); 179 break; 180 case IECREATESTREAM: 181 snprintf(errstr, len, "Unable to create a new stream"); 182 herr = 1; 183 perr = 1; 184 break; 185 case IEINITSTREAM: 186 snprintf(errstr, len, "Unable to initialize stream"); 187 herr = 1; 188 perr = 1; 189 break; 190 case IESTREAMLISTEN: 191 snprintf(errstr, len, "Unable to start stream listener"); 192 perr = 1; 193 break; 194 case IESTREAMCONNECT: 195 snprintf(errstr, len, "Unable to connect stream"); 196 herr = 1; 197 perr = 1; 198 break; 199 case IESTREAMACCEPT: 200 snprintf(errstr, len, "Unable to accept stream connection"); 201 perr = 1; 202 break; 203 case IESTREAMWRITE: 204 snprintf(errstr, len, "Unable to write to stream socket"); 205 perr = 1; 206 break; 207 case IESTREAMREAD: 208 snprintf(errstr, len, "Unable to read from stream socket"); 209 perr = 1; 210 break; 211 case IESTREAMCLOSE: 212 snprintf(errstr, len, "Stream socket has closed unexpectedly"); 213 break; 214 case IESTREAMID: 215 snprintf(errstr, len, "Stream has an invalid id"); 216 break; 217 case IENEWTIMER: 218 snprintf(errstr, len, "Unable to create new timer"); 219 perr = 1; 220 break; 221 case IEUPDATETIMER: 222 snprintf(errstr, len, "Unable to update timer"); 223 perr = 1; 224 break; 225 } 226 227 if (herr || perr) 228 strncat(errstr, ": ", len); 229 if (h_errno && herr) { 230 strncat(errstr, hstrerror(h_errno), len); 231 } else if (errno && perr) { 232 strncat(errstr, strerror(errno), len); 233 } 234 235 return (errstr); 236 } 237 238 void 239 iperf_error(char *estr) 240 { 241 fprintf(stderr, "%s: %s\n", estr, iperf_strerror(i_errno)); 242 } 243 244 /* 245 void 246 iperf_error(char *estr) 247 { 248 fprintf(stderr, "%s: ", estr); 249 250 switch (i_errno) { 251 case IESERVCLIENT: 252 fprintf(stderr, "iperf cannot be both server and client\n"); 253 break; 254 case IENOROLE: 255 fprintf(stderr, "iperf instance must either be a client (-c) or server (-s)\n"); 256 break; 257 case IECLIENTONLY: 258 fprintf(stderr, "some option you are trying to set is client only\n"); 259 break; 260 case IEDURATION: 261 fprintf(stderr, "test duration too long (maximum = %d seconds)\n", MAX_TIME); 262 break; 263 case IENUMSTREAMS: 264 fprintf(stderr, "number of parallel streams too large (maximum = %d)\n", MAX_STREAMS); 265 break; 266 case IEBLOCKSIZE: 267 fprintf(stderr, "block size too large (maximum = %d bytes)\n", MAX_BLOCKSIZE); 268 break; 269 case IEBUFSIZE: 270 fprintf(stderr, "socket buffer size too large (maximum = %d bytes)\n", MAX_TCP_BUFFER); 271 break; 272 case IEINTERVAL: 273 fprintf(stderr, "report interval too large (maximum = %d seconds)\n", MAX_INTERVAL); 274 break; 275 case IEMSS: 276 fprintf(stderr, "TCP MSS too large (maximum = %d bytes)\n", MAX_MSS); 277 break; 278 case IECTRLWRITE: 279 if (errno) 280 fprintf(stderr, "unable to write to the control socket: %s\n", strerror(errno)); 281 else 282 fprintf(stderr, "unable to write to the control socket\n"); 283 break; 284 case IECTRLREAD: 285 if (errno) 286 fprintf(stderr, "unable to read from the control socket: %s\n", strerror(errno)); 287 else 288 fprintf(stderr, "unable to read from the control socket\n"); 289 break; 290 case IECTRLCLOSE: 291 fprintf(stderr, "control socket has closed unexpectedly\n"); 292 break; 293 case IESTREAMWRITE: 294 if (errno) 295 fprintf(stderr, "unable to write to stream socket: %s\n", strerror(errno)); 296 else 297 fprintf(stderr, "unable to write to stream socket\n"); 298 break; 299 case IESTREAMREAD: 300 if (errno) 301 fprintf(stderr, "unable to read from stream socket: %s\n", strerror(errno)); 302 else 303 fprintf(stderr, "unable to read from stream socket\n"); 304 break; 305 case IESTREAMCLOSE: 306 fprintf(stderr, "stream socket has closed unexpectedly\n"); 307 break; 308 case IENEWTEST: 309 if (errno) 310 fprintf(stderr, "unable to create a new test: %s\n", strerror(errno)); 311 else 312 fprintf(stderr, "unable to create a new test\n"); 313 break; 314 case IECONNECT: 315 if (errno) 316 fprintf(stderr, "unable to connect to server: %s\n", strerror(errno)); 317 else if (h_errno) 318 fprintf(stderr, "unable to connect to server: %s\n", hstrerror(h_errno)); 319 else 320 fprintf(stderr, "unable to connect to server\n"); 321 break; 322 case IESELECT: 323 if (errno) 324 fprintf(stderr, "select failed: %s\n", strerror(errno)); 325 else 326 fprintf(stderr, "select failed\n"); 327 break; 328 case IESENDPARAMS: 329 if (errno) 330 fprintf(stderr, "unable to send parameters to server: %s\n", strerror(errno)); 331 else 332 fprintf(stderr, "unable to send parameters to server\n"); 333 break; 334 case IERECVPARAMS: 335 if (errno) 336 fprintf(stderr, "unable to receive parameters from client: %s\n", strerror(errno)); 337 else 338 fprintf(stderr, "unable to receive parameters from client\n"); 339 break; 340 case IECREATESTREAM: 341 if (errno) 342 fprintf(stderr, "unable to create a new stream: %s\n", strerror(errno)); 343 else if (h_errno) 344 fprintf(stderr, "unable to create a new stream: %s\n", hstrerror(h_errno)); 345 else 346 fprintf(stderr, "unable to create a new stream\n"); 347 break; 348 case IEINITSTREAM: 349 if (errno) 350 fprintf(stderr, "unable to initialize stream: %s\n", strerror(errno)); 351 else if (h_errno) 352 fprintf(stderr, "unable to initialize stream: %s\n", hstrerror(h_errno)); 353 else 354 fprintf(stderr, "unable to initialize stream\n"); 355 break; 356 case IESETWINDOWSIZE: 357 if (errno) 358 fprintf(stderr, "unable to set socket window size: %s\n", strerror(errno)); 359 else 360 fprintf(stderr, "unable to set socket window size\n"); 361 break; 362 case IEPACKAGERESULTS: 363 if (errno) 364 fprintf(stderr, "unable to package results: %s\n", strerror(errno)); 365 else 366 fprintf(stderr, "unable to package results\n"); 367 break; 368 case IESENDRESULTS: 369 if (errno) 370 fprintf(stderr, "unable to send results: %s\n", strerror(errno)); 371 else 372 fprintf(stderr, "unable to send results\n"); 373 break; 374 case IERECVRESULTS: 375 if (errno) 376 fprintf(stderr, "unable to receive results: %s\n", strerror(errno)); 377 else 378 fprintf(stderr, "unable to receive results\n"); 379 break; 380 case IESTREAMID: 381 fprintf(stderr, "stream has an invalid id\n"); 382 break; 383 case IESERVERTERM: 384 fprintf(stderr, "the server has terminated\n"); 385 break; 386 case IEACCESSDENIED: 387 fprintf(stderr, "the server is busy running a test. try again later.\n"); 388 break; 389 case IEMESSAGE: 390 fprintf(stderr, "received an unknown control message\n"); 391 break; 392 case IESENDMESSAGE: 393 if (errno) 394 fprintf(stderr, "unable to send control message: %s\n", strerror(errno)); 395 else 396 fprintf(stderr, "unable to send control message\n"); 397 break; 398 case IERECVMESSAGE: 399 if (errno) 400 fprintf(stderr, "unable to receive control message: %s\n", strerror(errno)); 401 else 402 fprintf(stderr, "unable to receive control message\n"); 403 break; 404 case IESENDCOOKIE: 405 if (errno) 406 fprintf(stderr, "unable to send cookie to server: %s\n", strerror(errno)); 407 else 408 fprintf(stderr, "unable to send cookie to server\n"); 409 break; 410 case IERECVCOOKIE: 411 if (errno) 412 fprintf(stderr, "unable to receive cookie to server: %s\n", strerror(errno)); 413 else 414 fprintf(stderr, "unable to receive cookie to server\n"); 415 break; 416 case IELISTEN: 417 if (errno) 418 fprintf(stderr, "unable to start listener for connections: %s\n", strerror(errno)); 419 else 420 fprintf(stderr, "unable to start listener for connections\n"); 421 break; 422 case IEACCEPT: 423 if (errno) 424 fprintf(stderr, "unable to accept connection from client: %s\n", strerror(errno)); 425 else if (h_errno) 426 fprintf(stderr, "unable to accept connection from client: %s\n", hstrerror(h_errno)); 427 else 428 fprintf(stderr, "unable to accept connection from client\n"); 429 break; 430 case IESETNODELAY: 431 if (errno) 432 fprintf(stderr, "unable to set TCP NODELAY: %s\n", strerror(errno)); 433 else 434 fprintf(stderr, "unable to set TCP NODELAY\n"); 435 break; 436 case IESETMSS: 437 if (errno) 438 fprintf(stderr, "unable to set TCP MSS: %s\n", strerror(errno)); 439 else 440 fprintf(stderr, "unable to set TCP MSS\n"); 441 break; 442 case IEREUSEADDR: 443 if (errno) 444 fprintf(stderr, "unable to reuse address on socket: %s\n", strerror(errno)); 445 else 446 fprintf(stderr, "unable to reuse address on socket\n"); 447 break; 448 case IESTREAMCONNECT: 449 if (errno) 450 fprintf(stderr, "unable to connect stream: %s\n", strerror(errno)); 451 else if (h_errno) 452 fprintf(stderr, "unable to connect stream: %s\n", hstrerror(h_errno)); 453 else 454 fprintf(stderr, "unable to connect stream\n"); 455 break; 456 case IESTREAMACCEPT: 457 if (errno) 458 fprintf(stderr, "unable to accept stream connection: %s\n", strerror(errno)); 459 else 460 fprintf(stderr, "unable to accept stream connection\n"); 461 break; 462 case IENONBLOCKING: 463 if (errno) 464 fprintf(stderr, "unable to set socket to non-blocking: %s\n", strerror(errno)); 465 else 466 fprintf(stderr, "unable to set socket to non-blocking\n"); 467 break; 468 case IEUPDATETIMER: 469 if (errno) 470 fprintf(stderr, "unable to update timer: %s\n", strerror(errno)); 471 else 472 fprintf(stderr, "unable to update timer\n"); 473 break; 474 case IENEWTIMER: 475 if (errno) 476 fprintf(stderr, "unable to create new timer: %s\n", strerror(errno)); 477 else 478 fprintf(stderr, "unable to create new timer\n"); 479 break; 480 case IEINITTEST: 481 if (errno) 482 fprintf(stderr, "test initialization failed: %s\n", strerror(errno)); 483 else 484 fprintf(stderr, "test initialization failed\n"); 485 break; 486 } 487 } 488 489 */ 490 491