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>