xref: /iperf/src/iperf_error.c (revision 56a97f93)
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