Lines Matching +full:- +full:- +full:test
2 * iperf, Copyright (c) 2014-2020, The Regents of the University of
13 * acting on its behalf a paid-up, nonexclusive, irrevocable,
19 * and others acting on its behalf a paid-up, nonexclusive,
55 iperf_create_streams(struct iperf_test *test, int sender) in iperf_create_streams() argument
63 int orig_bind_port = test->bind_port; in iperf_create_streams()
64 for (i = 0; i < test->num_streams; ++i) { in iperf_create_streams()
66 test->bind_port = orig_bind_port; in iperf_create_streams()
68 test->bind_port += i; in iperf_create_streams()
69 if ((s = test->protocol->connect(test)) < 0) in iperf_create_streams()
70 return -1; in iperf_create_streams()
73 if (test->protocol->id == Ptcp) { in iperf_create_streams()
74 if (test->congestion) { in iperf_create_streams()
75 if (setsockopt(s, IPPROTO_TCP, TCP_CONGESTION, test->congestion, strlen(test->congestion)) < 0) { in iperf_create_streams()
80 return -1; in iperf_create_streams()
91 return -1; in iperf_create_streams()
93 test->congestion_used = strdup(ca); in iperf_create_streams()
94 if (test->debug) { in iperf_create_streams()
95 printf("Congestion algorithm is %s\n", test->congestion_used); in iperf_create_streams()
102 FD_SET(s, &test->write_set); in iperf_create_streams()
104 FD_SET(s, &test->read_set); in iperf_create_streams()
105 if (s > test->max_fd) test->max_fd = s; in iperf_create_streams()
107 sp = iperf_new_stream(test, s, sender); in iperf_create_streams()
109 return -1; in iperf_create_streams()
112 if (test->on_new_stream) in iperf_create_streams()
113 test->on_new_stream(sp); in iperf_create_streams()
122 struct iperf_test *test = client_data.p; in test_timer_proc() local
124 test->timer = NULL; in test_timer_proc()
125 test->done = 1; in test_timer_proc()
131 struct iperf_test *test = client_data.p; in client_stats_timer_proc() local
133 if (test->done) in client_stats_timer_proc()
135 if (test->stats_callback) in client_stats_timer_proc()
136 test->stats_callback(test); in client_stats_timer_proc()
142 struct iperf_test *test = client_data.p; in client_reporter_timer_proc() local
144 if (test->done) in client_reporter_timer_proc()
146 if (test->reporter_callback) in client_reporter_timer_proc()
147 test->reporter_callback(test); in client_reporter_timer_proc()
151 create_client_timers(struct iperf_test * test) in create_client_timers() argument
158 return -1; in create_client_timers()
160 cd.p = test; in create_client_timers()
161 test->timer = test->stats_timer = test->reporter_timer = NULL; in create_client_timers()
162 if (test->duration != 0) { in create_client_timers()
163 test->done = 0; in create_client_timers()
164 …test->timer = tmr_create(&now, test_timer_proc, cd, ( test->duration + test->omit ) * SEC_TO_US, 0… in create_client_timers()
165 if (test->timer == NULL) { in create_client_timers()
167 return -1; in create_client_timers()
170 if (test->stats_interval != 0) { in create_client_timers()
171 …test->stats_timer = tmr_create(&now, client_stats_timer_proc, cd, test->stats_interval * SEC_TO_US… in create_client_timers()
172 if (test->stats_timer == NULL) { in create_client_timers()
174 return -1; in create_client_timers()
177 if (test->reporter_interval != 0) { in create_client_timers()
178 …test->reporter_timer = tmr_create(&now, client_reporter_timer_proc, cd, test->reporter_interval * … in create_client_timers()
179 if (test->reporter_timer == NULL) { in create_client_timers()
181 return -1; in create_client_timers()
190 struct iperf_test *test = client_data.p; in client_omit_timer_proc() local
192 test->omit_timer = NULL; in client_omit_timer_proc()
193 test->omitting = 0; in client_omit_timer_proc()
194 iperf_reset_stats(test); in client_omit_timer_proc()
195 if (test->verbose && !test->json_output && test->reporter_interval == 0) in client_omit_timer_proc()
196 iperf_printf(test, "%s", report_omit_done); in client_omit_timer_proc()
199 if (test->stats_timer != NULL) in client_omit_timer_proc()
200 tmr_reset(nowP, test->stats_timer); in client_omit_timer_proc()
201 if (test->reporter_timer != NULL) in client_omit_timer_proc()
202 tmr_reset(nowP, test->reporter_timer); in client_omit_timer_proc()
206 create_client_omit_timer(struct iperf_test * test) in create_client_omit_timer() argument
211 if (test->omit == 0) { in create_client_omit_timer()
212 test->omit_timer = NULL; in create_client_omit_timer()
213 test->omitting = 0; in create_client_omit_timer()
217 return -1; in create_client_omit_timer()
219 test->omitting = 1; in create_client_omit_timer()
220 cd.p = test; in create_client_omit_timer()
221 test->omit_timer = tmr_create(&now, client_omit_timer_proc, cd, test->omit * SEC_TO_US, 0); in create_client_omit_timer()
222 if (test->omit_timer == NULL) { in create_client_omit_timer()
224 return -1; in create_client_omit_timer()
231 iperf_handle_message_client(struct iperf_test *test) in iperf_handle_message_client() argument
237 if ((rval = read(test->ctrl_sck, (char*) &test->state, sizeof(signed char))) <= 0) { in iperf_handle_message_client()
240 return -1; in iperf_handle_message_client()
243 return -1; in iperf_handle_message_client()
247 switch (test->state) { in iperf_handle_message_client()
249 if (iperf_exchange_parameters(test) < 0) in iperf_handle_message_client()
250 return -1; in iperf_handle_message_client()
251 if (test->on_connect) in iperf_handle_message_client()
252 test->on_connect(test); in iperf_handle_message_client()
255 if (test->mode == BIDIRECTIONAL) in iperf_handle_message_client()
257 if (iperf_create_streams(test, 1) < 0) in iperf_handle_message_client()
258 return -1; in iperf_handle_message_client()
259 if (iperf_create_streams(test, 0) < 0) in iperf_handle_message_client()
260 return -1; in iperf_handle_message_client()
262 else if (iperf_create_streams(test, test->mode) < 0) in iperf_handle_message_client()
263 return -1; in iperf_handle_message_client()
266 if (iperf_init_test(test) < 0) in iperf_handle_message_client()
267 return -1; in iperf_handle_message_client()
268 if (create_client_timers(test) < 0) in iperf_handle_message_client()
269 return -1; in iperf_handle_message_client()
270 if (create_client_omit_timer(test) < 0) in iperf_handle_message_client()
271 return -1; in iperf_handle_message_client()
272 if (test->mode) in iperf_handle_message_client()
273 if (iperf_create_send_timers(test) < 0) in iperf_handle_message_client()
274 return -1; in iperf_handle_message_client()
279 if (iperf_exchange_results(test) < 0) in iperf_handle_message_client()
280 return -1; in iperf_handle_message_client()
283 if (test->on_test_finish) in iperf_handle_message_client()
284 test->on_test_finish(test); in iperf_handle_message_client()
285 iperf_client_end(test); in iperf_handle_message_client()
296 signed char oldstate = test->state; in iperf_handle_message_client()
297 cpu_util(test->cpu_util); in iperf_handle_message_client()
298 test->state = DISPLAY_RESULTS; in iperf_handle_message_client()
299 test->reporter_callback(test); in iperf_handle_message_client()
300 test->state = oldstate; in iperf_handle_message_client()
301 return -1; in iperf_handle_message_client()
304 return -1; in iperf_handle_message_client()
306 if (Nread(test->ctrl_sck, (char*) &err, sizeof(err), Ptcp) < 0) { in iperf_handle_message_client()
308 return -1; in iperf_handle_message_client()
311 if (Nread(test->ctrl_sck, (char*) &err, sizeof(err), Ptcp) < 0) { in iperf_handle_message_client()
313 return -1; in iperf_handle_message_client()
316 return -1; in iperf_handle_message_client()
319 return -1; in iperf_handle_message_client()
327 /* iperf_connect -- client to server connection function */
329 iperf_connect(struct iperf_test *test) in iperf_connect() argument
331 FD_ZERO(&test->read_set); in iperf_connect()
332 FD_ZERO(&test->write_set); in iperf_connect()
334 make_cookie(test->cookie); in iperf_connect()
337 if (test->ctrl_sck < 0) in iperf_connect()
339 …test->ctrl_sck = netdial(test->settings->domain, Ptcp, test->bind_address, 0, test->server_hostnam… in iperf_connect()
340 if (test->ctrl_sck < 0) { in iperf_connect()
342 return -1; in iperf_connect()
345 if (Nwrite(test->ctrl_sck, test->cookie, COOKIE_SIZE, Ptcp) < 0) { in iperf_connect()
347 return -1; in iperf_connect()
350 FD_SET(test->ctrl_sck, &test->read_set); in iperf_connect()
351 if (test->ctrl_sck > test->max_fd) test->max_fd = test->ctrl_sck; in iperf_connect()
357 if (getsockopt(test->ctrl_sck, IPPROTO_TCP, TCP_MAXSEG, &opt, &len) < 0) { in iperf_connect()
358 test->ctrl_sck_mss = 0; in iperf_connect()
362 test->ctrl_sck_mss = opt; in iperf_connect()
370 test->ctrl_sck_mss = 0; in iperf_connect()
374 if (test->verbose) { in iperf_connect()
375 printf("Control connection MSS %d\n", test->ctrl_sck_mss); in iperf_connect()
379 * If we're doing a UDP test and the block size wasn't explicitly in iperf_connect()
383 * work on non-jumbo-frame Ethernet networks. The goal is to in iperf_connect()
389 * --reverse tests, we assume that the MTU is the same in both in iperf_connect()
393 if (test->protocol->id == Pudp) { in iperf_connect()
394 if (test->settings->blksize == 0) { in iperf_connect()
395 if (test->ctrl_sck_mss) { in iperf_connect()
396 test->settings->blksize = test->ctrl_sck_mss; in iperf_connect()
399 test->settings->blksize = DEFAULT_UDP_BLKSIZE; in iperf_connect()
401 if (test->verbose) { in iperf_connect()
402 printf("Setting UDP block size to %d\n", test->settings->blksize); in iperf_connect()
410 if (test->ctrl_sck_mss > 0 && in iperf_connect()
411 test->settings->blksize > test->ctrl_sck_mss) { in iperf_connect()
414 …%d exceeds TCP MSS %d, may result in fragmentation / drops", test->settings->blksize, test->ctrl_s… in iperf_connect()
424 iperf_client_end(struct iperf_test *test) in iperf_client_end() argument
429 SLIST_FOREACH(sp, &test->streams, streams) { in iperf_client_end()
430 close(sp->socket); in iperf_client_end()
434 test->reporter_callback(test); in iperf_client_end()
436 if (iperf_set_send_state(test, IPERF_DONE) != 0) in iperf_client_end()
437 return -1; in iperf_client_end()
440 if (test->ctrl_sck) in iperf_client_end()
441 close(test->ctrl_sck); in iperf_client_end()
448 iperf_run_client(struct iperf_test * test) in iperf_run_client() argument
457 if (test->logfile) in iperf_run_client()
458 if (iperf_open_logfile(test) < 0) in iperf_run_client()
459 return -1; in iperf_run_client()
461 if (test->affinity != -1) in iperf_run_client()
462 if (iperf_setaffinity(test, test->affinity) != 0) in iperf_run_client()
463 return -1; in iperf_run_client()
465 if (test->json_output) in iperf_run_client()
466 if (iperf_json_start(test) < 0) in iperf_run_client()
467 return -1; in iperf_run_client()
469 if (test->json_output) { in iperf_run_client()
470 cJSON_AddItemToObject(test->json_start, "version", cJSON_CreateString(version)); in iperf_run_client()
471 cJSON_AddItemToObject(test->json_start, "system_info", cJSON_CreateString(get_system_info())); in iperf_run_client()
472 } else if (test->verbose) { in iperf_run_client()
473 iperf_printf(test, "%s\n", version); in iperf_run_client()
474 iperf_printf(test, "%s", ""); in iperf_run_client()
475 iperf_printf(test, "%s\n", get_system_info()); in iperf_run_client()
476 iflush(test); in iperf_run_client()
480 if (iperf_connect(test) < 0) in iperf_run_client()
487 while (test->state != IPERF_DONE) { in iperf_run_client()
488 memcpy(&read_set, &test->read_set, sizeof(fd_set)); in iperf_run_client()
489 memcpy(&write_set, &test->write_set, sizeof(fd_set)); in iperf_run_client()
492 result = select(test->max_fd + 1, &read_set, &write_set, NULL, timeout); in iperf_run_client()
498 if (FD_ISSET(test->ctrl_sck, &read_set)) { in iperf_run_client()
499 if (iperf_handle_message_client(test) < 0) { in iperf_run_client()
502 FD_CLR(test->ctrl_sck, &read_set); in iperf_run_client()
506 if (test->state == TEST_RUNNING) { in iperf_run_client()
512 // Set non-blocking for non-UDP tests in iperf_run_client()
513 if (test->protocol->id != Pudp) { in iperf_run_client()
514 SLIST_FOREACH(sp, &test->streams, streams) { in iperf_run_client()
515 setnonblocking(sp->socket, 1); in iperf_run_client()
521 if (test->mode == BIDIRECTIONAL) in iperf_run_client()
523 if (iperf_send(test, &write_set) < 0) in iperf_run_client()
525 if (iperf_recv(test, &read_set) < 0) in iperf_run_client()
527 } else if (test->mode == SENDER) { in iperf_run_client()
529 if (iperf_send(test, &write_set) < 0) in iperf_run_client()
533 if (iperf_recv(test, &read_set) < 0) in iperf_run_client()
542 /* Is the test done yet? */ in iperf_run_client()
543 if ((!test->omitting) && in iperf_run_client()
544 ((test->duration != 0 && test->done) || in iperf_run_client()
545 (test->settings->bytes != 0 && test->bytes_sent >= test->settings->bytes) || in iperf_run_client()
546 (test->settings->blocks != 0 && test->blocks_sent >= test->settings->blocks))) { in iperf_run_client()
548 // Unset non-blocking for non-UDP tests in iperf_run_client()
549 if (test->protocol->id != Pudp) { in iperf_run_client()
550 SLIST_FOREACH(sp, &test->streams, streams) { in iperf_run_client()
551 setnonblocking(sp->socket, 0); in iperf_run_client()
556 test->done = 1; in iperf_run_client()
557 cpu_util(test->cpu_util); in iperf_run_client()
558 test->stats_callback(test); in iperf_run_client()
559 if (iperf_set_send_state(test, TEST_END) != 0) in iperf_run_client()
564 // connection(s) even if test is over. This prevents a in iperf_run_client()
568 else if (test->mode == RECEIVER && test->state == TEST_END) { in iperf_run_client()
569 if (iperf_recv(test, &read_set) < 0) in iperf_run_client()
574 if (test->json_output) { in iperf_run_client()
575 if (iperf_json_finish(test) < 0) in iperf_run_client()
576 return -1; in iperf_run_client()
578 iperf_printf(test, "\n"); in iperf_run_client()
579 iperf_printf(test, "%s", report_done); in iperf_run_client()
582 iflush(test); in iperf_run_client()
587 iperf_client_end(test); in iperf_run_client()
588 if (test->json_output) in iperf_run_client()
589 iperf_json_finish(test); in iperf_run_client()
590 iflush(test); in iperf_run_client()
591 return -1; in iperf_run_client()