| #include <stdio.h> |
| #include <errno.h> |
| #include <netdb.h> |
| #include <string.h> |
| #include "iperf.h" |
| #include "iperf_error.h" |
| |
| int i_errno; |
| |
| char * |
| iperf_strerror(int i_errno) |
| { |
| static char errstr[256]; |
| int len; |
| |
| len = sizeof(errstr); |
| memset(errstr, 0, len); |
| |
| switch (i_errno) { |
| case IENONE: |
| snprintf(errstr, len, "no error"); |
| break; |
| case IESERVCLIENT: |
| snprintf(errstr, len, "iperf cannot be both server and client"); |
| break; |
| case IENOROLE: |
| snprintf(errstr, len, "iperf instance must either be a client (-c) or server (-s)"); |
| break; |
| case IECLIENTONLY: |
| snprintf(errstr, len, "some option you are trying to set is client only"); |
| break; |
| case IEDURATION: |
| snprintf(errstr, len, "test duration too long (maximum = %d seconds)", MAX_TIME); |
| break; |
| case IENUMSTREAMS: |
| snprintf(errstr, len, "number of parallel streams too large (maximum = %d)", MAX_STREAMS); |
| break; |
| case IEBLOCKSIZE: |
| snprintf(errstr, len, "block size too large (maximum = %d bytes)", MAX_BLOCKSIZE); |
| break; |
| case IEBUFSIZE: |
| snprintf(errstr, len, "socket buffer size too large (maximum = %d bytes)", MAX_TCP_BUFFER); |
| break; |
| case IEINTERVAL: |
| snprintf(errstr, len, "report interval too large (maximum = %d seconds)", MAX_INTERVAL); |
| break; |
| case IEMSS: |
| snprintf(errstr, len, "TCP MSS too large (maximum = %d bytes)", MAX_MSS); |
| break; |
| case IENEWTEST: |
| snprintf(errstr, len, "unable to create a new test"); |
| break; |
| case IEINITTEST: |
| snprintf(errstr, len, "test initialization failed"); |
| break; |
| case IELISTEN: |
| snprintf(errstr, len, "unable to start listener for connections"); |
| break; |
| case IECONNECT: |
| snprintf(errstr, len, "unable to connect to server"); |
| break; |
| case IEACCEPT: |
| snprintf(errstr, len, "unable to accept connection from client"); |
| break; |
| case IESENDCOOKIE: |
| snprintf(errstr, len, "unable to send cookie to server"); |
| break; |
| case IERECVCOOKIE: |
| snprintf(errstr, len, "unable to receive cookie to server"); |
| break; |
| case IECTRLWRITE: |
| snprintf(errstr, len, "unable to write to the control socket"); |
| break; |
| case IECTRLREAD: |
| snprintf(errstr, len, "unable to read from the control socket"); |
| break; |
| case IECTRLCLOSE: |
| snprintf(errstr, len, "control socket has closed unexpectedly"); |
| break; |
| case IEMESSAGE: |
| snprintf(errstr, len, "received an unknown control message"); |
| break; |
| case IESENDMESSAGE: |
| snprintf(errstr, len, "unable to send control message"); |
| break; |
| case IERECVMESSAGE: |
| snprintf(errstr, len, "unable to receive control message"); |
| break; |
| case IESENDPARAMS: |
| snprintf(errstr, len, "unable to send parameters to server"); |
| break; |
| case IERECVPARAMS: |
| snprintf(errstr, len, "unable to receive parameters from client"); |
| break; |
| case IEPACKAGERESULTS: |
| snprintf(errstr, len, "unable to package results"); |
| break; |
| case IESENDRESULTS: |
| snprintf(errstr, len, "unable to send results"); |
| break; |
| case IERECVRESULTS: |
| snprintf(errstr, len, "unable to receive results"); |
| break; |
| case IESELECT: |
| snprintf(errstr, len, "select failed"); |
| break; |
| case IESERVERTERM: |
| snprintf(errstr, len, "the server has terminated"); |
| break; |
| case IEACCESSDENIED: |
| snprintf(errstr, len, "the server is busy running a test. try again later."); |
| break; |
| case IESETNODELAY: |
| snprintf(errstr, len, "unable to set TCP NODELAY"); |
| break; |
| case IESETMSS: |
| snprintf(errstr, len, "unable to set TCP MSS"); |
| break; |
| case IEREUSEADDR: |
| snprintf(errstr, len, "unable to reuse address on socket"); |
| break; |
| case IENONBLOCKING: |
| snprintf(errstr, len, "unable to set socket to non-blocking"); |
| break; |
| case IESETWINDOWSIZE: |
| snprintf(errstr, len, "unable to set socket window size"); |
| break; |
| case IEPROTOCOL: |
| snprintf(errstr, len, "protocol does not exist"); |
| break; |
| case IECREATESTREAM: |
| snprintf(errstr, len, "unable to create a new stream"); |
| break; |
| case IEINITSTREAM: |
| snprintf(errstr, len, "unable to initialize stream"); |
| break; |
| case IESTREAMLISTEN: |
| snprintf(errstr, len, "unable to start stream listener"); |
| break; |
| case IESTREAMCONNECT: |
| snprintf(errstr, len, "unable to connect stream"); |
| break; |
| case IESTREAMACCEPT: |
| snprintf(errstr, len, "unable to accept stream connection"); |
| break; |
| case IESTREAMWRITE: |
| snprintf(errstr, len, "unable to write to stream socket"); |
| break; |
| case IESTREAMREAD: |
| snprintf(errstr, len, "unable to read from stream socket"); |
| break; |
| case IESTREAMCLOSE: |
| snprintf(errstr, len, "stream socket has closed unexpectedly"); |
| break; |
| case IESTREAMID: |
| snprintf(errstr, len, "stream has an invalid id"); |
| break; |
| case IENEWTIMER: |
| snprintf(errstr, len, "unable to create new timer"); |
| break; |
| case IEUPDATETIMER: |
| snprintf(errstr, len, "unable to update timer"); |
| break; |
| } |
| |
| return (errstr); |
| } |
| |
| void |
| iperf_error(char *estr) |
| { |
| fprintf(stderr, "%s: ", estr); |
| fprintf(stderr, "%s", iperf_strerror(i_errno)); |
| if (errno) |
| fprintf(stderr, ": %s", strerror(errno)); |
| else if (h_errno) |
| fprintf(stderr, ": %s", hstrerror(h_errno)); |
| |
| fprintf(stderr, "\n"); |
| } |
| |
| /* |
| void |
| iperf_error(char *estr) |
| { |
| fprintf(stderr, "%s: ", estr); |
| |
| switch (i_errno) { |
| case IESERVCLIENT: |
| fprintf(stderr, "iperf cannot be both server and client\n"); |
| break; |
| case IENOROLE: |
| fprintf(stderr, "iperf instance must either be a client (-c) or server (-s)\n"); |
| break; |
| case IECLIENTONLY: |
| fprintf(stderr, "some option you are trying to set is client only\n"); |
| break; |
| case IEDURATION: |
| fprintf(stderr, "test duration too long (maximum = %d seconds)\n", MAX_TIME); |
| break; |
| case IENUMSTREAMS: |
| fprintf(stderr, "number of parallel streams too large (maximum = %d)\n", MAX_STREAMS); |
| break; |
| case IEBLOCKSIZE: |
| fprintf(stderr, "block size too large (maximum = %d bytes)\n", MAX_BLOCKSIZE); |
| break; |
| case IEBUFSIZE: |
| fprintf(stderr, "socket buffer size too large (maximum = %d bytes)\n", MAX_TCP_BUFFER); |
| break; |
| case IEINTERVAL: |
| fprintf(stderr, "report interval too large (maximum = %d seconds)\n", MAX_INTERVAL); |
| break; |
| case IEMSS: |
| fprintf(stderr, "TCP MSS too large (maximum = %d bytes)\n", MAX_MSS); |
| break; |
| case IECTRLWRITE: |
| if (errno) |
| fprintf(stderr, "unable to write to the control socket: %s\n", strerror(errno)); |
| else |
| fprintf(stderr, "unable to write to the control socket\n"); |
| break; |
| case IECTRLREAD: |
| if (errno) |
| fprintf(stderr, "unable to read from the control socket: %s\n", strerror(errno)); |
| else |
| fprintf(stderr, "unable to read from the control socket\n"); |
| break; |
| case IECTRLCLOSE: |
| fprintf(stderr, "control socket has closed unexpectedly\n"); |
| break; |
| case IESTREAMWRITE: |
| if (errno) |
| fprintf(stderr, "unable to write to stream socket: %s\n", strerror(errno)); |
| else |
| fprintf(stderr, "unable to write to stream socket\n"); |
| break; |
| case IESTREAMREAD: |
| if (errno) |
| fprintf(stderr, "unable to read from stream socket: %s\n", strerror(errno)); |
| else |
| fprintf(stderr, "unable to read from stream socket\n"); |
| break; |
| case IESTREAMCLOSE: |
| fprintf(stderr, "stream socket has closed unexpectedly\n"); |
| break; |
| case IENEWTEST: |
| if (errno) |
| fprintf(stderr, "unable to create a new test: %s\n", strerror(errno)); |
| else |
| fprintf(stderr, "unable to create a new test\n"); |
| break; |
| case IECONNECT: |
| if (errno) |
| fprintf(stderr, "unable to connect to server: %s\n", strerror(errno)); |
| else if (h_errno) |
| fprintf(stderr, "unable to connect to server: %s\n", hstrerror(h_errno)); |
| else |
| fprintf(stderr, "unable to connect to server\n"); |
| break; |
| case IESELECT: |
| if (errno) |
| fprintf(stderr, "select failed: %s\n", strerror(errno)); |
| else |
| fprintf(stderr, "select failed\n"); |
| break; |
| case IESENDPARAMS: |
| if (errno) |
| fprintf(stderr, "unable to send parameters to server: %s\n", strerror(errno)); |
| else |
| fprintf(stderr, "unable to send parameters to server\n"); |
| break; |
| case IERECVPARAMS: |
| if (errno) |
| fprintf(stderr, "unable to receive parameters from client: %s\n", strerror(errno)); |
| else |
| fprintf(stderr, "unable to receive parameters from client\n"); |
| break; |
| case IECREATESTREAM: |
| if (errno) |
| fprintf(stderr, "unable to create a new stream: %s\n", strerror(errno)); |
| else if (h_errno) |
| fprintf(stderr, "unable to create a new stream: %s\n", hstrerror(h_errno)); |
| else |
| fprintf(stderr, "unable to create a new stream\n"); |
| break; |
| case IEINITSTREAM: |
| if (errno) |
| fprintf(stderr, "unable to initialize stream: %s\n", strerror(errno)); |
| else if (h_errno) |
| fprintf(stderr, "unable to initialize stream: %s\n", hstrerror(h_errno)); |
| else |
| fprintf(stderr, "unable to initialize stream\n"); |
| break; |
| case IESETWINDOWSIZE: |
| if (errno) |
| fprintf(stderr, "unable to set socket window size: %s\n", strerror(errno)); |
| else |
| fprintf(stderr, "unable to set socket window size\n"); |
| break; |
| case IEPACKAGERESULTS: |
| if (errno) |
| fprintf(stderr, "unable to package results: %s\n", strerror(errno)); |
| else |
| fprintf(stderr, "unable to package results\n"); |
| break; |
| case IESENDRESULTS: |
| if (errno) |
| fprintf(stderr, "unable to send results: %s\n", strerror(errno)); |
| else |
| fprintf(stderr, "unable to send results\n"); |
| break; |
| case IERECVRESULTS: |
| if (errno) |
| fprintf(stderr, "unable to receive results: %s\n", strerror(errno)); |
| else |
| fprintf(stderr, "unable to receive results\n"); |
| break; |
| case IESTREAMID: |
| fprintf(stderr, "stream has an invalid id\n"); |
| break; |
| case IESERVERTERM: |
| fprintf(stderr, "the server has terminated\n"); |
| break; |
| case IEACCESSDENIED: |
| fprintf(stderr, "the server is busy running a test. try again later.\n"); |
| break; |
| case IEMESSAGE: |
| fprintf(stderr, "received an unknown control message\n"); |
| break; |
| case IESENDMESSAGE: |
| if (errno) |
| fprintf(stderr, "unable to send control message: %s\n", strerror(errno)); |
| else |
| fprintf(stderr, "unable to send control message\n"); |
| break; |
| case IERECVMESSAGE: |
| if (errno) |
| fprintf(stderr, "unable to receive control message: %s\n", strerror(errno)); |
| else |
| fprintf(stderr, "unable to receive control message\n"); |
| break; |
| case IESENDCOOKIE: |
| if (errno) |
| fprintf(stderr, "unable to send cookie to server: %s\n", strerror(errno)); |
| else |
| fprintf(stderr, "unable to send cookie to server\n"); |
| break; |
| case IERECVCOOKIE: |
| if (errno) |
| fprintf(stderr, "unable to receive cookie to server: %s\n", strerror(errno)); |
| else |
| fprintf(stderr, "unable to receive cookie to server\n"); |
| break; |
| case IELISTEN: |
| if (errno) |
| fprintf(stderr, "unable to start listener for connections: %s\n", strerror(errno)); |
| else |
| fprintf(stderr, "unable to start listener for connections\n"); |
| break; |
| case IEACCEPT: |
| if (errno) |
| fprintf(stderr, "unable to accept connection from client: %s\n", strerror(errno)); |
| else if (h_errno) |
| fprintf(stderr, "unable to accept connection from client: %s\n", hstrerror(h_errno)); |
| else |
| fprintf(stderr, "unable to accept connection from client\n"); |
| break; |
| case IESETNODELAY: |
| if (errno) |
| fprintf(stderr, "unable to set TCP NODELAY: %s\n", strerror(errno)); |
| else |
| fprintf(stderr, "unable to set TCP NODELAY\n"); |
| break; |
| case IESETMSS: |
| if (errno) |
| fprintf(stderr, "unable to set TCP MSS: %s\n", strerror(errno)); |
| else |
| fprintf(stderr, "unable to set TCP MSS\n"); |
| break; |
| case IEREUSEADDR: |
| if (errno) |
| fprintf(stderr, "unable to reuse address on socket: %s\n", strerror(errno)); |
| else |
| fprintf(stderr, "unable to reuse address on socket\n"); |
| break; |
| case IESTREAMCONNECT: |
| if (errno) |
| fprintf(stderr, "unable to connect stream: %s\n", strerror(errno)); |
| else if (h_errno) |
| fprintf(stderr, "unable to connect stream: %s\n", hstrerror(h_errno)); |
| else |
| fprintf(stderr, "unable to connect stream\n"); |
| break; |
| case IESTREAMACCEPT: |
| if (errno) |
| fprintf(stderr, "unable to accept stream connection: %s\n", strerror(errno)); |
| else |
| fprintf(stderr, "unable to accept stream connection\n"); |
| break; |
| case IENONBLOCKING: |
| if (errno) |
| fprintf(stderr, "unable to set socket to non-blocking: %s\n", strerror(errno)); |
| else |
| fprintf(stderr, "unable to set socket to non-blocking\n"); |
| break; |
| case IEUPDATETIMER: |
| if (errno) |
| fprintf(stderr, "unable to update timer: %s\n", strerror(errno)); |
| else |
| fprintf(stderr, "unable to update timer\n"); |
| break; |
| case IENEWTIMER: |
| if (errno) |
| fprintf(stderr, "unable to create new timer: %s\n", strerror(errno)); |
| else |
| fprintf(stderr, "unable to create new timer\n"); |
| break; |
| case IEINITTEST: |
| if (errno) |
| fprintf(stderr, "test initialization failed: %s\n", strerror(errno)); |
| else |
| fprintf(stderr, "test initialization failed\n"); |
| break; |
| } |
| } |
| |
| */ |
| |