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,
70 iperf_server_listen(struct iperf_test *test) in iperf_server_listen() argument
73 …if((test->listener = netannounce(test->settings->domain, Ptcp, test->bind_address, test->server_po… in iperf_server_listen()
74 …if (errno == EAFNOSUPPORT && (test->settings->domain == AF_INET6 || test->settings->domain == AF_U… in iperf_server_listen()
80 warning("this system does not seem to support IPv6 - trying IPv4"); in iperf_server_listen()
81 test->settings->domain = AF_INET; in iperf_server_listen()
85 return -1; in iperf_server_listen()
89 if (!test->json_output) { in iperf_server_listen()
90 iperf_printf(test, "-----------------------------------------------------------\n"); in iperf_server_listen()
91 iperf_printf(test, "Server listening on %d\n", test->server_port); in iperf_server_listen()
92 iperf_printf(test, "-----------------------------------------------------------\n"); in iperf_server_listen()
93 if (test->forceflush) in iperf_server_listen()
94 iflush(test); in iperf_server_listen()
97 FD_ZERO(&test->read_set); in iperf_server_listen()
98 FD_ZERO(&test->write_set); in iperf_server_listen()
99 FD_SET(test->listener, &test->read_set); in iperf_server_listen()
100 if (test->listener > test->max_fd) test->max_fd = test->listener; in iperf_server_listen()
106 iperf_accept(struct iperf_test *test) in iperf_accept() argument
114 if ((s = accept(test->listener, (struct sockaddr *) &addr, &len)) < 0) { in iperf_accept()
116 return -1; in iperf_accept()
119 if (test->ctrl_sck == -1) { in iperf_accept()
121 test->ctrl_sck = s; in iperf_accept()
122 if (Nread(test->ctrl_sck, test->cookie, COOKIE_SIZE, Ptcp) < 0) { in iperf_accept()
124 return -1; in iperf_accept()
126 FD_SET(test->ctrl_sck, &test->read_set); in iperf_accept()
127 if (test->ctrl_sck > test->max_fd) test->max_fd = test->ctrl_sck; in iperf_accept()
129 if (iperf_set_send_state(test, PARAM_EXCHANGE) != 0) in iperf_accept()
130 return -1; in iperf_accept()
131 if (iperf_exchange_parameters(test) < 0) in iperf_accept()
132 return -1; in iperf_accept()
133 if (test->server_affinity != -1) in iperf_accept()
134 if (iperf_setaffinity(test, test->server_affinity) != 0) in iperf_accept()
135 return -1; in iperf_accept()
136 if (test->on_connect) in iperf_accept()
137 test->on_connect(test); in iperf_accept()
140 * Don't try to read from the socket. It could block an ongoing test. in iperf_accept()
145 return -1; in iperf_accept()
156 iperf_handle_message_server(struct iperf_test *test) in iperf_handle_message_server() argument
162 if ((rval = Nread(test->ctrl_sck, (char*) &test->state, sizeof(signed char), Ptcp)) <= 0) { in iperf_handle_message_server()
164 iperf_err(test, "the client has unexpectedly closed the connection"); in iperf_handle_message_server()
166 test->state = IPERF_DONE; in iperf_handle_message_server()
170 return -1; in iperf_handle_message_server()
174 switch(test->state) { in iperf_handle_message_server()
178 test->done = 1; in iperf_handle_message_server()
179 cpu_util(test->cpu_util); in iperf_handle_message_server()
180 test->stats_callback(test); in iperf_handle_message_server()
181 SLIST_FOREACH(sp, &test->streams, streams) { in iperf_handle_message_server()
182 FD_CLR(sp->socket, &test->read_set); in iperf_handle_message_server()
183 FD_CLR(sp->socket, &test->write_set); in iperf_handle_message_server()
184 close(sp->socket); in iperf_handle_message_server()
186 test->reporter_callback(test); in iperf_handle_message_server()
187 if (iperf_set_send_state(test, EXCHANGE_RESULTS) != 0) in iperf_handle_message_server()
188 return -1; in iperf_handle_message_server()
189 if (iperf_exchange_results(test) < 0) in iperf_handle_message_server()
190 return -1; in iperf_handle_message_server()
191 if (iperf_set_send_state(test, DISPLAY_RESULTS) != 0) in iperf_handle_message_server()
192 return -1; in iperf_handle_message_server()
193 if (test->on_test_finish) in iperf_handle_message_server()
194 test->on_test_finish(test); in iperf_handle_message_server()
203 signed char oldstate = test->state; in iperf_handle_message_server()
204 cpu_util(test->cpu_util); in iperf_handle_message_server()
205 test->state = DISPLAY_RESULTS; in iperf_handle_message_server()
206 test->reporter_callback(test); in iperf_handle_message_server()
207 test->state = oldstate; in iperf_handle_message_server()
210 iperf_err(test, "the client has terminated"); in iperf_handle_message_server()
211 SLIST_FOREACH(sp, &test->streams, streams) { in iperf_handle_message_server()
212 FD_CLR(sp->socket, &test->read_set); in iperf_handle_message_server()
213 FD_CLR(sp->socket, &test->write_set); in iperf_handle_message_server()
214 close(sp->socket); in iperf_handle_message_server()
216 test->state = IPERF_DONE; in iperf_handle_message_server()
220 return -1; in iperf_handle_message_server()
229 struct iperf_test *test = client_data.p; in server_timer_proc() local
232 test->timer = NULL; in server_timer_proc()
233 if (test->done) in server_timer_proc()
235 test->done = 1; in server_timer_proc()
237 while (!SLIST_EMPTY(&test->streams)) { in server_timer_proc()
238 sp = SLIST_FIRST(&test->streams); in server_timer_proc()
239 SLIST_REMOVE_HEAD(&test->streams, streams); in server_timer_proc()
240 close(sp->socket); in server_timer_proc()
243 close(test->ctrl_sck); in server_timer_proc()
249 struct iperf_test *test = client_data.p; in server_stats_timer_proc() local
251 if (test->done) in server_stats_timer_proc()
253 if (test->stats_callback) in server_stats_timer_proc()
254 test->stats_callback(test); in server_stats_timer_proc()
260 struct iperf_test *test = client_data.p; in server_reporter_timer_proc() local
262 if (test->done) in server_reporter_timer_proc()
264 if (test->reporter_callback) in server_reporter_timer_proc()
265 test->reporter_callback(test); in server_reporter_timer_proc()
269 create_server_timers(struct iperf_test * test) in create_server_timers() argument
279 return -1; in create_server_timers()
281 cd.p = test; in create_server_timers()
282 test->timer = test->stats_timer = test->reporter_timer = NULL; in create_server_timers()
283 if (test->duration != 0 ) { in create_server_timers()
284 test->done = 0; in create_server_timers()
285 …test->timer = tmr_create(&now, server_timer_proc, cd, (test->duration + test->omit + grace_period)… in create_server_timers()
286 if (test->timer == NULL) { in create_server_timers()
288 return -1; in create_server_timers()
292 test->stats_timer = test->reporter_timer = NULL; in create_server_timers()
293 if (test->stats_interval != 0) { in create_server_timers()
294 …test->stats_timer = tmr_create(&now, server_stats_timer_proc, cd, test->stats_interval * SEC_TO_US… in create_server_timers()
295 if (test->stats_timer == NULL) { in create_server_timers()
297 return -1; in create_server_timers()
300 if (test->reporter_interval != 0) { in create_server_timers()
301 …test->reporter_timer = tmr_create(&now, server_reporter_timer_proc, cd, test->reporter_interval * … in create_server_timers()
302 if (test->reporter_timer == NULL) { in create_server_timers()
304 return -1; in create_server_timers()
313 struct iperf_test *test = client_data.p; in server_omit_timer_proc() local
315 test->omit_timer = NULL; in server_omit_timer_proc()
316 test->omitting = 0; in server_omit_timer_proc()
317 iperf_reset_stats(test); in server_omit_timer_proc()
318 if (test->verbose && !test->json_output && test->reporter_interval == 0) in server_omit_timer_proc()
319 iperf_printf(test, "%s", report_omit_done); in server_omit_timer_proc()
322 if (test->stats_timer != NULL) in server_omit_timer_proc()
323 tmr_reset(nowP, test->stats_timer); in server_omit_timer_proc()
324 if (test->reporter_timer != NULL) in server_omit_timer_proc()
325 tmr_reset(nowP, test->reporter_timer); in server_omit_timer_proc()
329 create_server_omit_timer(struct iperf_test * test) in create_server_omit_timer() argument
334 if (test->omit == 0) { in create_server_omit_timer()
335 test->omit_timer = NULL; in create_server_omit_timer()
336 test->omitting = 0; in create_server_omit_timer()
340 return -1; in create_server_omit_timer()
342 test->omitting = 1; in create_server_omit_timer()
343 cd.p = test; in create_server_omit_timer()
344 test->omit_timer = tmr_create(&now, server_omit_timer_proc, cd, test->omit * SEC_TO_US, 0); in create_server_omit_timer()
345 if (test->omit_timer == NULL) { in create_server_omit_timer()
347 return -1; in create_server_omit_timer()
355 cleanup_server(struct iperf_test *test) in cleanup_server() argument
360 SLIST_FOREACH(sp, &test->streams, streams) { in cleanup_server()
361 FD_CLR(sp->socket, &test->read_set); in cleanup_server()
362 FD_CLR(sp->socket, &test->write_set); in cleanup_server()
363 close(sp->socket); in cleanup_server()
366 /* Close open test sockets */ in cleanup_server()
367 if (test->ctrl_sck) { in cleanup_server()
368 close(test->ctrl_sck); in cleanup_server()
370 if (test->listener) { in cleanup_server()
371 close(test->listener); in cleanup_server()
375 if (test->stats_timer != NULL) { in cleanup_server()
376 tmr_cancel(test->stats_timer); in cleanup_server()
377 test->stats_timer = NULL; in cleanup_server()
379 if (test->reporter_timer != NULL) { in cleanup_server()
380 tmr_cancel(test->reporter_timer); in cleanup_server()
381 test->reporter_timer = NULL; in cleanup_server()
383 if (test->omit_timer != NULL) { in cleanup_server()
384 tmr_cancel(test->omit_timer); in cleanup_server()
385 test->omit_timer = NULL; in cleanup_server()
387 if (test->congestion_used != NULL) { in cleanup_server()
388 free(test->congestion_used); in cleanup_server()
389 test->congestion_used = NULL; in cleanup_server()
391 if (test->timer != NULL) { in cleanup_server()
392 tmr_cancel(test->timer); in cleanup_server()
393 test->timer = NULL; in cleanup_server()
399 iperf_run_server(struct iperf_test *test) in iperf_run_server() argument
413 if (test->logfile) in iperf_run_server()
414 if (iperf_open_logfile(test) < 0) in iperf_run_server()
415 return -1; in iperf_run_server()
417 if (test->affinity != -1) in iperf_run_server()
418 if (iperf_setaffinity(test, test->affinity) != 0) in iperf_run_server()
419 return -2; in iperf_run_server()
421 if (test->json_output) in iperf_run_server()
422 if (iperf_json_start(test) < 0) in iperf_run_server()
423 return -2; in iperf_run_server()
425 if (test->json_output) { in iperf_run_server()
426 cJSON_AddItemToObject(test->json_start, "version", cJSON_CreateString(version)); in iperf_run_server()
427 cJSON_AddItemToObject(test->json_start, "system_info", cJSON_CreateString(get_system_info())); in iperf_run_server()
428 } else if (test->verbose) { in iperf_run_server()
429 iperf_printf(test, "%s\n", version); in iperf_run_server()
430 iperf_printf(test, "%s", ""); in iperf_run_server()
431 iperf_printf(test, "%s\n", get_system_info()); in iperf_run_server()
432 iflush(test); in iperf_run_server()
436 if (iperf_server_listen(test) < 0) { in iperf_run_server()
437 return -2; in iperf_run_server()
443 test->state = IPERF_START; in iperf_run_server()
447 while (test->state != IPERF_DONE) { in iperf_run_server()
450 if (test->bitrate_limit_exceeded) { in iperf_run_server()
451 cleanup_server(test); in iperf_run_server()
453 return -1; in iperf_run_server()
456 memcpy(&read_set, &test->read_set, sizeof(fd_set)); in iperf_run_server()
457 memcpy(&write_set, &test->write_set, sizeof(fd_set)); in iperf_run_server()
461 result = select(test->max_fd + 1, &read_set, &write_set, NULL, timeout); in iperf_run_server()
464 cleanup_server(test); in iperf_run_server()
466 return -1; in iperf_run_server()
469 if (FD_ISSET(test->listener, &read_set)) { in iperf_run_server()
470 if (test->state != CREATE_STREAMS) { in iperf_run_server()
471 if (iperf_accept(test) < 0) { in iperf_run_server()
472 cleanup_server(test); in iperf_run_server()
473 return -1; in iperf_run_server()
475 FD_CLR(test->listener, &read_set); in iperf_run_server()
478 if (test->mode == BIDIRECTIONAL) { in iperf_run_server()
479 streams_to_send = test->num_streams; in iperf_run_server()
480 streams_to_rec = test->num_streams; in iperf_run_server()
481 } else if (test->mode == RECEIVER) { in iperf_run_server()
482 streams_to_rec = test->num_streams; in iperf_run_server()
485 streams_to_send = test->num_streams; in iperf_run_server()
490 if (FD_ISSET(test->ctrl_sck, &read_set)) { in iperf_run_server()
491 if (iperf_handle_message_server(test) < 0) { in iperf_run_server()
492 cleanup_server(test); in iperf_run_server()
493 return -1; in iperf_run_server()
495 FD_CLR(test->ctrl_sck, &read_set); in iperf_run_server()
498 if (test->state == CREATE_STREAMS) { in iperf_run_server()
499 if (FD_ISSET(test->prot_listener, &read_set)) { in iperf_run_server()
501 if ((s = test->protocol->accept(test)) < 0) { in iperf_run_server()
502 cleanup_server(test); in iperf_run_server()
503 return -1; in iperf_run_server()
507 if (test->protocol->id == Ptcp) { in iperf_run_server()
508 if (test->congestion) { in iperf_run_server()
509 … if (setsockopt(s, IPPROTO_TCP, TCP_CONGESTION, test->congestion, strlen(test->congestion)) < 0) { in iperf_run_server()
525 cleanup_server(test); in iperf_run_server()
528 return -1; in iperf_run_server()
538 cleanup_server(test); in iperf_run_server()
541 return -1; in iperf_run_server()
543 test->congestion_used = strdup(ca); in iperf_run_server()
544 if (test->debug) { in iperf_run_server()
545 printf("Congestion algorithm is %s\n", test->congestion_used); in iperf_run_server()
561 if (flag != -1) { in iperf_run_server()
562 sp = iperf_new_stream(test, s, flag); in iperf_run_server()
564 cleanup_server(test); in iperf_run_server()
565 return -1; in iperf_run_server()
568 if (sp->sender) in iperf_run_server()
569 FD_SET(s, &test->write_set); in iperf_run_server()
571 FD_SET(s, &test->read_set); in iperf_run_server()
573 if (s > test->max_fd) test->max_fd = s; in iperf_run_server()
581 if (test->protocol->id != Pudp || in iperf_run_server()
582 !sp->sender) { in iperf_run_server()
586 if (test->on_new_stream) in iperf_run_server()
587 test->on_new_stream(sp); in iperf_run_server()
589 flag = -1; in iperf_run_server()
592 FD_CLR(test->prot_listener, &read_set); in iperf_run_server()
597 if (test->protocol->id != Ptcp) { in iperf_run_server()
598 FD_CLR(test->prot_listener, &test->read_set); in iperf_run_server()
599 close(test->prot_listener); in iperf_run_server()
601 … if (test->no_delay || test->settings->mss || test->settings->socket_bufsize) { in iperf_run_server()
602 FD_CLR(test->listener, &test->read_set); in iperf_run_server()
603 close(test->listener); in iperf_run_server()
604 test->listener = 0; in iperf_run_server()
605 … if ((s = netannounce(test->settings->domain, Ptcp, test->bind_address, test->server_port)) < 0) { in iperf_run_server()
606 cleanup_server(test); in iperf_run_server()
608 return -1; in iperf_run_server()
610 test->listener = s; in iperf_run_server()
611 FD_SET(test->listener, &test->read_set); in iperf_run_server()
612 if (test->listener > test->max_fd) test->max_fd = test->listener; in iperf_run_server()
615 test->prot_listener = -1; in iperf_run_server()
618 …iperf_size_t total_requested_rate = test->num_streams * test->settings->rate * (test->mode == BIDI… in iperf_run_server()
619 … if (test->settings->bitrate_limit > 0 && total_requested_rate > test->settings->bitrate_limit) { in iperf_run_server()
620 …iperf_err(test, "Client total requested throughput rate of %" PRIu64 " bps exceeded %" PRIu64 " bp… in iperf_run_server()
621 total_requested_rate, test->settings->bitrate_limit); in iperf_run_server()
622 cleanup_server(test); in iperf_run_server()
624 return -1; in iperf_run_server()
627 if (iperf_set_send_state(test, TEST_START) != 0) { in iperf_run_server()
628 cleanup_server(test); in iperf_run_server()
629 return -1; in iperf_run_server()
631 if (iperf_init_test(test) < 0) { in iperf_run_server()
632 cleanup_server(test); in iperf_run_server()
633 return -1; in iperf_run_server()
635 if (create_server_timers(test) < 0) { in iperf_run_server()
636 cleanup_server(test); in iperf_run_server()
637 return -1; in iperf_run_server()
639 if (create_server_omit_timer(test) < 0) { in iperf_run_server()
640 cleanup_server(test); in iperf_run_server()
641 return -1; in iperf_run_server()
643 if (test->mode != RECEIVER) in iperf_run_server()
644 if (iperf_create_send_timers(test) < 0) { in iperf_run_server()
645 cleanup_server(test); in iperf_run_server()
646 return -1; in iperf_run_server()
648 if (iperf_set_send_state(test, TEST_RUNNING) != 0) { in iperf_run_server()
649 cleanup_server(test); in iperf_run_server()
650 return -1; in iperf_run_server()
655 if (test->state == TEST_RUNNING) { in iperf_run_server()
656 if (test->mode == BIDIRECTIONAL) { in iperf_run_server()
657 if (iperf_recv(test, &read_set) < 0) { in iperf_run_server()
658 cleanup_server(test); in iperf_run_server()
659 return -1; in iperf_run_server()
661 if (iperf_send(test, &write_set) < 0) { in iperf_run_server()
662 cleanup_server(test); in iperf_run_server()
663 return -1; in iperf_run_server()
665 } else if (test->mode == SENDER) { in iperf_run_server()
667 if (iperf_send(test, &write_set) < 0) { in iperf_run_server()
668 cleanup_server(test); in iperf_run_server()
669 return -1; in iperf_run_server()
673 if (iperf_recv(test, &read_set) < 0) { in iperf_run_server()
674 cleanup_server(test); in iperf_run_server()
675 return -1; in iperf_run_server()
682 (timeout != NULL && timeout->tv_sec == 0 && timeout->tv_usec == 0)) { in iperf_run_server()
689 cleanup_server(test); in iperf_run_server()
691 if (test->json_output) { in iperf_run_server()
692 if (iperf_json_finish(test) < 0) in iperf_run_server()
693 return -1; in iperf_run_server()
696 iflush(test); in iperf_run_server()
698 if (test->server_affinity != -1) in iperf_run_server()
699 if (iperf_clearaffinity(test) != 0) in iperf_run_server()
700 return -1; in iperf_run_server()