• Home
  • Raw
  • Download

Lines Matching +full:role +full:- +full:duration +full:- +full:seconds

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,
119 …fprintf(f, usage_longstr, UDP_RATE / (1024*1024), DURATION, DEFAULT_TCP_BLKSIZE / 1024, DEFAULT_UD… in usage_long()
134 return ipt->verbose; in iperf_get_verbose()
140 return ipt->ctrl_sck; in iperf_get_control_socket()
146 return ipt->ctrl_sck_mss; in iperf_get_control_socket_mss()
152 return ipt->omit; in iperf_get_test_omit()
158 return ipt->duration; in iperf_get_test_duration()
164 return ipt->settings->rate; in iperf_get_test_rate()
170 return ipt->settings->bitrate_limit; in iperf_get_test_bitrate_limit()
176 return ipt->settings->bitrate_limit_interval; in iperf_get_test_bitrate_limit_interval()
182 return ipt->settings->bitrate_limit_stats_per_interval; in iperf_get_test_bitrate_limit_stats_per_interval()
188 return ipt->settings->fqrate; in iperf_get_test_fqrate()
194 return ipt->settings->pacing_timer; in iperf_get_test_pacing_timer()
200 return (uint64_t) ipt->settings->bytes; in iperf_get_test_bytes()
206 return (uint64_t) ipt->settings->blocks; in iperf_get_test_blocks()
212 return ipt->settings->burst; in iperf_get_test_burst()
218 return ipt->role; in iperf_get_test_role()
224 return ipt->reverse; in iperf_get_test_reverse()
230 return ipt->settings->blksize; in iperf_get_test_blksize()
236 return ipt->outfile; in iperf_get_test_outfile()
242 return ipt->settings->socket_bufsize; in iperf_get_test_socket_bufsize()
248 return ipt->reporter_interval; in iperf_get_test_reporter_interval()
254 return ipt->stats_interval; in iperf_get_test_stats_interval()
260 return ipt->num_streams; in iperf_get_test_num_streams()
266 return ipt->timestamps; in iperf_get_test_timestamps()
272 return ipt->timestamp_format; in iperf_get_test_timestamp_format()
278 return ipt->repeating_payload; in iperf_get_test_repeating_payload()
284 return ipt->server_port; in iperf_get_test_server_port()
290 return ipt->server_hostname; in iperf_get_test_server_hostname()
296 return ipt->tmp_template; in iperf_get_test_template()
302 return ipt->protocol->id; in iperf_get_test_protocol_id()
308 return ipt->json_output; in iperf_get_test_json_output()
314 return ipt->json_output_string; in iperf_get_test_json_output_string()
320 return ipt->zerocopy; in iperf_get_test_zerocopy()
326 return ipt->get_server_output; in iperf_get_test_get_server_output()
332 return ipt->settings->unit_format; in iperf_get_test_unit_format()
338 return ipt->bind_address; in iperf_get_test_bind_address()
344 return ipt->udp_counters_64bit; in iperf_get_test_udp_counters_64bit()
350 return ipt->one_off; in iperf_get_test_one_off()
356 return ipt->settings->tos; in iperf_get_test_tos()
362 return ipt->extra_data; in iperf_get_test_extra_data()
375 return ipt->no_delay; in iperf_get_test_no_delay()
381 return ipt->settings->connect_timeout; in iperf_get_test_connect_timeout()
389 ipt->verbose = verbose; in iperf_set_verbose()
395 ipt->ctrl_sck = ctrl_sck; in iperf_set_control_socket()
401 ipt->omit = omit; in iperf_set_test_omit()
405 iperf_set_test_duration(struct iperf_test *ipt, int duration) in iperf_set_test_duration() argument
407 ipt->duration = duration; in iperf_set_test_duration()
413 ipt->reporter_interval = reporter_interval; in iperf_set_test_reporter_interval()
419 ipt->stats_interval = stats_interval; in iperf_set_test_stats_interval()
425 ipt->state = state; in iperf_set_test_state()
431 ipt->settings->blksize = blksize; in iperf_set_test_blksize()
437 ipt->logfile = strdup(logfile); in iperf_set_test_logfile()
443 ipt->settings->rate = rate; in iperf_set_test_rate()
449 ipt->settings->bitrate_limit = total_rate; in iperf_set_test_bitrate_limit_maximum()
455 ipt->settings->bitrate_limit_interval = bitrate_limit_interval; in iperf_set_test_bitrate_limit_interval()
461 ipt->settings->bitrate_limit_stats_per_interval = bitrate_limit_stats_per_interval; in iperf_set_test_bitrate_limit_stats_per_interval()
467 ipt->settings->fqrate = fqrate; in iperf_set_test_fqrate()
473 ipt->settings->pacing_timer = pacing_timer; in iperf_set_test_pacing_timer()
479 ipt->settings->bytes = (iperf_size_t) bytes; in iperf_set_test_bytes()
485 ipt->settings->blocks = (iperf_size_t) blocks; in iperf_set_test_blocks()
491 ipt->settings->burst = burst; in iperf_set_test_burst()
497 ipt->server_port = srv_port; in iperf_set_test_server_port()
503 ipt->settings->socket_bufsize = socket_bufsize; in iperf_set_test_socket_bufsize()
509 ipt->num_streams = num_streams; in iperf_set_test_num_streams()
515 ipt->repeating_payload = repeating_payload; in iperf_set_test_repeating_payload()
521 ipt->timestamps = timestamps; in iperf_set_test_timestamps()
527 ipt->timestamp_format = strdup(tf); in iperf_set_test_timestamp_format()
533 if (ipt->mode != RECEIVER && ipt->protocol->id == Ptcp && has_tcpinfo_retransmits()) in check_sender_has_retransmits()
534 ipt->sender_has_retransmits = 1; in check_sender_has_retransmits()
536 ipt->sender_has_retransmits = 0; in check_sender_has_retransmits()
540 iperf_set_test_role(struct iperf_test *ipt, char role) in iperf_set_test_role() argument
542 ipt->role = role; in iperf_set_test_role()
543 if (!ipt->reverse) { in iperf_set_test_role()
544 if (ipt->bidirectional) in iperf_set_test_role()
545 ipt->mode = BIDIRECTIONAL; in iperf_set_test_role()
546 else if (role == 'c') in iperf_set_test_role()
547 ipt->mode = SENDER; in iperf_set_test_role()
548 else if (role == 's') in iperf_set_test_role()
549 ipt->mode = RECEIVER; in iperf_set_test_role()
551 if (role == 'c') in iperf_set_test_role()
552 ipt->mode = RECEIVER; in iperf_set_test_role()
553 else if (role == 's') in iperf_set_test_role()
554 ipt->mode = SENDER; in iperf_set_test_role()
562 ipt->server_hostname = strdup(server_hostname); in iperf_set_test_server_hostname()
568 ipt->tmp_template = strdup(tmp_template); in iperf_set_test_template()
574 ipt->reverse = reverse; in iperf_set_test_reverse()
575 if (!ipt->reverse) { in iperf_set_test_reverse()
576 if (ipt->role == 'c') in iperf_set_test_reverse()
577 ipt->mode = SENDER; in iperf_set_test_reverse()
578 else if (ipt->role == 's') in iperf_set_test_reverse()
579 ipt->mode = RECEIVER; in iperf_set_test_reverse()
581 if (ipt->role == 'c') in iperf_set_test_reverse()
582 ipt->mode = RECEIVER; in iperf_set_test_reverse()
583 else if (ipt->role == 's') in iperf_set_test_reverse()
584 ipt->mode = SENDER; in iperf_set_test_reverse()
592 ipt->json_output = json_output; in iperf_set_test_json_output()
604 ipt->zerocopy = (zerocopy && has_sendfile()); in iperf_set_test_zerocopy()
610 ipt->get_server_output = get_server_output; in iperf_set_test_get_server_output()
616 ipt->settings->unit_format = unit_format; in iperf_set_test_unit_format()
623 ipt->settings->client_username = strdup(client_username); in iperf_set_test_client_username()
629 ipt->settings->client_password = strdup(client_password); in iperf_set_test_client_password()
635 ipt->settings->client_rsa_pubkey = load_pubkey_from_base64(client_rsa_pubkey_base64); in iperf_set_test_client_rsa_pubkey()
641 ipt->server_authorized_users = strdup(server_authorized_users); in iperf_set_test_server_authorized_users()
647 ipt->server_rsa_private_key = load_privkey_from_base64(server_rsa_privkey_base64); in iperf_set_test_server_rsa_privkey()
654 ipt->bind_address = strdup(bnd_address); in iperf_set_test_bind_address()
660 ipt->udp_counters_64bit = udp_counters_64bit; in iperf_set_test_udp_counters_64bit()
666 ipt->one_off = one_off; in iperf_set_test_one_off()
672 ipt->settings->tos = tos; in iperf_set_test_tos()
678 ipt->extra_data = strdup(dat); in iperf_set_test_extra_data()
684 ipt->bidirectional = bidirectional; in iperf_set_test_bidirectional()
686 ipt->mode = BIDIRECTIONAL; in iperf_set_test_bidirectional()
688 iperf_set_test_reverse(ipt, ipt->reverse); in iperf_set_test_bidirectional()
694 ipt->no_delay = no_delay; in iperf_set_test_no_delay()
700 ipt->settings->connect_timeout = ct; in iperf_set_test_connect_timeout()
711 SLIST_FOREACH(prot, &test->protocols, protocols) { in get_protocol()
712 if (prot->id == prot_id) in get_protocol()
727 SLIST_FOREACH(prot, &test->protocols, protocols) { in set_protocol()
728 if (prot->id == prot_id) { in set_protocol()
729 test->protocol = prot; in set_protocol()
736 return -1; in set_protocol()
751 if (test->json_output) { in iperf_on_test_start()
752->json_start, "test_start", iperf_json_printf("protocol: %s num_streams: %d blksize: %d omit: %… in iperf_on_test_start()
754 if (test->verbose) { in iperf_on_test_start()
755 if (test->settings->bytes) in iperf_on_test_start()
756 …st_start_bytes, test->protocol->name, test->num_streams, test->settings->blksize, test->omit, test in iperf_on_test_start()
757 else if (test->settings->blocks) in iperf_on_test_start()
758 …t_start_blocks, test->protocol->name, test->num_streams, test->settings->blksize, test->omit, test in iperf_on_test_start()
760 …t, test_start_time, test->protocol->name, test->num_streams, test->settings->blksize, test->omit, … in iperf_on_test_start()
765 /* This converts an IPv6 string address from IPv4-mapped format into regular
768 ** If the v6 address is not v4-mapped it is left alone.
779 memmove(str, str + prefix_len, str_len - prefix_len + 1); in mapped_v4_to_regular_v4()
798 if (test->json_output) in iperf_on_connect()
799 …cJSON_AddItemToObject(test->json_start, "timestamp", iperf_json_printf("time: %s timesecs: %d", n… in iperf_on_connect()
800 else if (test->verbose) in iperf_on_connect()
803 if (test->role == 'c') { in iperf_on_connect()
804 if (test->json_output) in iperf_on_connect()
805 …N_AddItemToObject(test->json_start, "connecting_to", iperf_json_printf("host: %s port: %d", test- in iperf_on_connect()
807 iperf_printf(test, report_connecting, test->server_hostname, test->server_port); in iperf_on_connect()
808 if (test->reverse) in iperf_on_connect()
809 iperf_printf(test, report_reverse, test->server_hostname); in iperf_on_connect()
813 getpeername(test->ctrl_sck, (struct sockaddr *) &sa, &len); in iperf_on_connect()
814 if (getsockdomain(test->ctrl_sck) == AF_INET) { in iperf_on_connect()
816 inet_ntop(AF_INET, &sa_inP->sin_addr, ipr, sizeof(ipr)); in iperf_on_connect()
817 port = ntohs(sa_inP->sin_port); in iperf_on_connect()
820 inet_ntop(AF_INET6, &sa_in6P->sin6_addr, ipr, sizeof(ipr)); in iperf_on_connect()
821 port = ntohs(sa_in6P->sin6_port); in iperf_on_connect()
824 if (test->json_output) in iperf_on_connect()
825 …cJSON_AddItemToObject(test->json_start, "accepted_connection", iperf_json_printf("host: %s port: … in iperf_on_connect()
829 if (test->json_output) { in iperf_on_connect()
830 cJSON_AddStringToObject(test->json_start, "cookie", test->cookie); in iperf_on_connect()
831 if (test->protocol->id == SOCK_STREAM) { in iperf_on_connect()
832 if (test->settings->mss) in iperf_on_connect()
833 cJSON_AddNumberToObject(test->json_start, "tcp_mss", test->settings->mss); in iperf_on_connect()
835 cJSON_AddNumberToObject(test->json_start, "tcp_mss_default", test->ctrl_sck_mss); in iperf_on_connect()
837 if (test->settings->rate) in iperf_on_connect()
838 cJSON_AddNumberToObject(test->json_start, "target_bitrate", test->settings->rate); in iperf_on_connect()
840 } else if (test->verbose) { in iperf_on_connect()
841 iperf_printf(test, report_cookie, test->cookie); in iperf_on_connect()
842 if (test->protocol->id == SOCK_STREAM) { in iperf_on_connect()
843 if (test->settings->mss) in iperf_on_connect()
844 iperf_printf(test, " TCP MSS: %d\n", test->settings->mss); in iperf_on_connect()
846 iperf_printf(test, " TCP MSS: %d (default)\n", test->ctrl_sck_mss); in iperf_on_connect()
849 if (test->settings->rate) in iperf_on_connect()
850 iperf_printf(test, " Target Bitrate: %"PRIu64"\n", test->settings->rate); in iperf_on_connect()
871 {"one-off", no_argument, NULL, '1'}, in iperf_parse_arguments()
880 {"server-bitrate-limit", required_argument, NULL, OPT_SERVER_BITRATE_LIMIT}, in iperf_parse_arguments()
891 {"set-mss", required_argument, NULL, 'M'}, in iperf_parse_arguments()
892 {"no-delay", no_argument, NULL, 'N'}, in iperf_parse_arguments()
897 {"extra-data", required_argument, NULL, OPT_EXTRA_DATA}, in iperf_parse_arguments()
904 {"repeating-payload", no_argument, NULL, OPT_REPEATING_PAYLOAD}, in iperf_parse_arguments()
912 {"linux-congestion", required_argument, NULL, 'C'}, in iperf_parse_arguments()
922 {"get-server-output", no_argument, NULL, OPT_GET_SERVER_OUTPUT}, in iperf_parse_arguments()
923 {"udp-counters-64bit", no_argument, NULL, OPT_UDP_COUNTERS_64BIT}, in iperf_parse_arguments()
924 {"no-fq-socket-pacing", no_argument, NULL, OPT_NO_FQ_SOCKET_PACING}, in iperf_parse_arguments()
927 {"rsa-public-key-path", required_argument, NULL, OPT_CLIENT_RSA_PUBLIC_KEY}, in iperf_parse_arguments()
928 {"rsa-private-key-path", required_argument, NULL, OPT_SERVER_RSA_PRIVATE_KEY}, in iperf_parse_arguments()
929 {"authorized-users-path", required_argument, NULL, OPT_SERVER_AUTHORIZED_USERS}, in iperf_parse_arguments()
931 {"fq-rate", required_argument, NULL, OPT_FQ_RATE}, in iperf_parse_arguments()
932 {"pacing-timer", required_argument, NULL, OPT_PACING_TIMER}, in iperf_parse_arguments()
933 {"connect-timeout", required_argument, NULL, OPT_CONNECT_TIMEOUT}, in iperf_parse_arguments()
956 …argc, argv, "p:f:i:D1VJvsc:ub:t:n:k:l:P:Rw:B:M:N46S:L:ZO:F:A:T:C:dI:hX:", longopts, NULL)) != -1) { in iperf_parse_arguments()
962 return -1; in iperf_parse_arguments()
964 test->server_port = portno; in iperf_parse_arguments()
969 return -1; in iperf_parse_arguments()
971 test->settings->unit_format = *optarg; in iperf_parse_arguments()
972 if (test->settings->unit_format == 'k' || in iperf_parse_arguments()
973 test->settings->unit_format == 'K' || in iperf_parse_arguments()
974 test->settings->unit_format == 'm' || in iperf_parse_arguments()
975 test->settings->unit_format == 'M' || in iperf_parse_arguments()
976 test->settings->unit_format == 'g' || in iperf_parse_arguments()
977 test->settings->unit_format == 'G' || in iperf_parse_arguments()
978 test->settings->unit_format == 't' || in iperf_parse_arguments()
979 test->settings->unit_format == 'T') { in iperf_parse_arguments()
984 return -1; in iperf_parse_arguments()
990 test->stats_interval = test->reporter_interval = atof(optarg); in iperf_parse_arguments()
991 …if ((test->stats_interval < MIN_INTERVAL || test->stats_interval > MAX_INTERVAL) && test->stats_in… in iperf_parse_arguments()
993 return -1; in iperf_parse_arguments()
997 test->daemon = 1; in iperf_parse_arguments()
1001 test->one_off = 1; in iperf_parse_arguments()
1005 test->verbose = 1; in iperf_parse_arguments()
1008 test->json_output = 1; in iperf_parse_arguments()
1015 if (test->role == 'c') { in iperf_parse_arguments()
1017 return -1; in iperf_parse_arguments()
1022 if (test->role == 's') { in iperf_parse_arguments()
1024 return -1; in iperf_parse_arguments()
1040 return -1; in iperf_parse_arguments()
1045 test->settings->num_ostreams = unit_atoi(optarg); in iperf_parse_arguments()
1049 return -1; in iperf_parse_arguments()
1056 test->settings->burst = atoi(slash); in iperf_parse_arguments()
1057 if (test->settings->burst <= 0 || in iperf_parse_arguments()
1058 test->settings->burst > MAX_BURST) { in iperf_parse_arguments()
1060 return -1; in iperf_parse_arguments()
1063 test->settings->rate = unit_atof_rate(optarg); in iperf_parse_arguments()
1072 test->settings->bitrate_limit_interval = atof(slash); in iperf_parse_arguments()
1073 …if (test->settings->bitrate_limit_interval != 0 && /* Using same Max/Min limits as for Stats Inter… in iperf_parse_arguments()
1074 …(test->settings->bitrate_limit_interval < MIN_INTERVAL || test->settings->bitrate_limit_interval >… in iperf_parse_arguments()
1076 return -1; in iperf_parse_arguments()
1079 test->settings->bitrate_limit = unit_atof_rate(optarg); in iperf_parse_arguments()
1083 test->duration = atoi(optarg); in iperf_parse_arguments()
1084 if (test->duration > MAX_TIME) { in iperf_parse_arguments()
1086 return -1; in iperf_parse_arguments()
1092 test->settings->bytes = unit_atoi(optarg); in iperf_parse_arguments()
1096 test->settings->blocks = unit_atoi(optarg); in iperf_parse_arguments()
1104 test->num_streams = atoi(optarg); in iperf_parse_arguments()
1105 if (test->num_streams > MAX_STREAMS) { in iperf_parse_arguments()
1107 return -1; in iperf_parse_arguments()
1112 if (test->bidirectional) { in iperf_parse_arguments()
1114 return -1; in iperf_parse_arguments()
1120 if (test->reverse) { in iperf_parse_arguments()
1122 return -1; in iperf_parse_arguments()
1129 // Do sanity checks as double-precision floating point in iperf_parse_arguments()
1134 return -1; in iperf_parse_arguments()
1136 test->settings->socket_bufsize = (int) farg; in iperf_parse_arguments()
1140 test->bind_address = strdup(optarg); in iperf_parse_arguments()
1146 return -1; in iperf_parse_arguments()
1148 test->bind_port = portno; in iperf_parse_arguments()
1151 test->settings->mss = atoi(optarg); in iperf_parse_arguments()
1152 if (test->settings->mss > MAX_MSS) { in iperf_parse_arguments()
1154 return -1; in iperf_parse_arguments()
1159 test->no_delay = 1; in iperf_parse_arguments()
1163 test->settings->domain = AF_INET; in iperf_parse_arguments()
1166 test->settings->domain = AF_INET6; in iperf_parse_arguments()
1169 test->settings->tos = strtol(optarg, &endptr, 0); in iperf_parse_arguments()
1171 test->settings->tos < 0 || in iperf_parse_arguments()
1172 test->settings->tos > 255) { in iperf_parse_arguments()
1174 return -1; in iperf_parse_arguments()
1179 test->settings->tos = parse_qos(optarg); in iperf_parse_arguments()
1180 if(test->settings->tos < 0) { in iperf_parse_arguments()
1182 return -1; in iperf_parse_arguments()
1187 test->extra_data = strdup(optarg); in iperf_parse_arguments()
1192 test->settings->flowlabel = strtol(optarg, &endptr, 0); in iperf_parse_arguments()
1194 test->settings->flowlabel < 1 || test->settings->flowlabel > 0xfffff) { in iperf_parse_arguments()
1196 return -1; in iperf_parse_arguments()
1201 return -1; in iperf_parse_arguments()
1208 return -1; in iperf_parse_arguments()
1211 xbe->name = strdup(optarg); in iperf_parse_arguments()
1212 if (!xbe->name) { in iperf_parse_arguments()
1214 return -1; in iperf_parse_arguments()
1216 TAILQ_INSERT_TAIL(&test->xbind_addrs, xbe, link); in iperf_parse_arguments()
1221 return -1; in iperf_parse_arguments()
1223 test->zerocopy = 1; in iperf_parse_arguments()
1227 test->repeating_payload = 1; in iperf_parse_arguments()
1240 test->omit = atoi(optarg); in iperf_parse_arguments()
1241 if (test->omit < 0 || test->omit > 60) { in iperf_parse_arguments()
1243 return -1; in iperf_parse_arguments()
1248 test->diskfile_name = optarg; in iperf_parse_arguments()
1252 test->affinity = strtol(optarg, &endptr, 0); in iperf_parse_arguments()
1254 test->affinity < 0 || test->affinity > 1024) { in iperf_parse_arguments()
1256 return -1; in iperf_parse_arguments()
1260 test->server_affinity = atoi(comma+1); in iperf_parse_arguments()
1261 if (test->server_affinity < 0 || test->server_affinity > 1024) { in iperf_parse_arguments()
1263 return -1; in iperf_parse_arguments()
1269 return -1; in iperf_parse_arguments()
1273 test->title = strdup(optarg); in iperf_parse_arguments()
1278 test->congestion = strdup(optarg); in iperf_parse_arguments()
1282 return -1; in iperf_parse_arguments()
1286 test->debug = 1; in iperf_parse_arguments()
1289 test->pidfile = strdup(optarg); in iperf_parse_arguments()
1293 test->logfile = strdup(optarg); in iperf_parse_arguments()
1296 test->forceflush = 1; in iperf_parse_arguments()
1299 test->get_server_output = 1; in iperf_parse_arguments()
1303 test->udp_counters_64bit = 1; in iperf_parse_arguments()
1307 printf("Warning: --no-fq-socket-pacing is deprecated\n"); in iperf_parse_arguments()
1308 test->settings->fqrate = 0; in iperf_parse_arguments()
1312 return -1; in iperf_parse_arguments()
1317 test->settings->fqrate = unit_atof_rate(optarg); in iperf_parse_arguments()
1321 return -1; in iperf_parse_arguments()
1335 test->server_authorized_users = strdup(optarg); in iperf_parse_arguments()
1339 test->settings->pacing_timer = unit_atoi(optarg); in iperf_parse_arguments()
1343 test->settings->connect_timeout = unit_atoi(optarg); in iperf_parse_arguments()
1355 /* Check flag / role compatibility. */ in iperf_parse_arguments()
1356 if (test->role == 'c' && server_flag) { in iperf_parse_arguments()
1358 return -1; in iperf_parse_arguments()
1360 if (test->role == 's' && client_flag) { in iperf_parse_arguments()
1362 return -1; in iperf_parse_arguments()
1367 if (test->role == 's' && (client_username || client_rsa_public_key)){ in iperf_parse_arguments()
1369 return -1; in iperf_parse_arguments()
1370 } else if (test->role == 'c' && (client_username || client_rsa_public_key) && in iperf_parse_arguments()
1373 return -1; in iperf_parse_arguments()
1374 } else if (test->role == 'c' && (client_username && client_rsa_public_key)){ in iperf_parse_arguments()
1383 return -1; in iperf_parse_arguments()
1387 return -1; in iperf_parse_arguments()
1390 test->settings->client_username = client_username; in iperf_parse_arguments()
1391 test->settings->client_password = client_password; in iperf_parse_arguments()
1392 test->settings->client_rsa_pubkey = load_pubkey_from_file(client_rsa_public_key); in iperf_parse_arguments()
1397 if (test->role == 'c' && (server_rsa_private_key || test->server_authorized_users)){ in iperf_parse_arguments()
1399 return -1; in iperf_parse_arguments()
1400 } else if (test->role == 's' && (server_rsa_private_key || test->server_authorized_users) && in iperf_parse_arguments()
1401 !(server_rsa_private_key && test->server_authorized_users)) { in iperf_parse_arguments()
1403 return -1; in iperf_parse_arguments()
1404 } else if (test->role == 's' && server_rsa_private_key) { in iperf_parse_arguments()
1405 test->server_rsa_private_key = load_privkey_from_file(server_rsa_private_key); in iperf_parse_arguments()
1406 if (test->server_rsa_private_key == NULL){ in iperf_parse_arguments()
1408 return -1; in iperf_parse_arguments()
1416 if (test->protocol->id == Pudp) in iperf_parse_arguments()
1418 else if (test->protocol->id == Psctp) in iperf_parse_arguments()
1423 if ((test->protocol->id != Pudp && blksize <= 0) in iperf_parse_arguments()
1426 return -1; in iperf_parse_arguments()
1428 if (test->protocol->id == Pudp && in iperf_parse_arguments()
1432 return -1; in iperf_parse_arguments()
1434 test->settings->blksize = blksize; in iperf_parse_arguments()
1437 test->settings->rate = test->protocol->id == Pudp ? UDP_RATE : 0; in iperf_parse_arguments()
1439 if ((test->settings->bytes != 0 || test->settings->blocks != 0) && ! duration_flag) in iperf_parse_arguments()
1440 test->duration = 0; in iperf_parse_arguments()
1447 if ((duration_flag && test->settings->bytes != 0) || in iperf_parse_arguments()
1448 (duration_flag && test->settings->blocks != 0) || in iperf_parse_arguments()
1449 (test->settings->bytes != 0 && test->settings->blocks != 0)) { in iperf_parse_arguments()
1451 return -1; in iperf_parse_arguments()
1460 if ((test->role != 'c') && (test->role != 's')) { in iperf_parse_arguments()
1462 return -1; in iperf_parse_arguments()
1465 /* Set Total-rate average interval to multiplicity of State interval */ in iperf_parse_arguments()
1466 if (test->settings->bitrate_limit_interval != 0) { in iperf_parse_arguments()
1467 test->settings->bitrate_limit_stats_per_interval = in iperf_parse_arguments()
1468 (test->settings->bitrate_limit_interval <= test->stats_interval ? in iperf_parse_arguments()
1469 1 : round(test->settings->bitrate_limit_interval/test->stats_interval) ); in iperf_parse_arguments()
1473 if ((test->json_output) && (test->settings->unit_format != 'a')) { in iperf_parse_arguments()
1474 warning("Report format (-f) flag ignored with JSON output (-J)"); in iperf_parse_arguments()
1478 if (test->json_output && test->verbose) { in iperf_parse_arguments()
1479 warning("Verbose output (-v) may interfere with JSON output (-J)"); in iperf_parse_arguments()
1481 if (test->json_output && test->debug) { in iperf_parse_arguments()
1482 warning("Debug output (-d) may interfere with JSON output (-J)"); in iperf_parse_arguments()
1489 * Open the file specified by test->logfile and set test->outfile to its' FD.
1493 test->outfile = fopen(test->logfile, "a+"); in iperf_open_logfile()
1494 if (test->outfile == NULL) { in iperf_open_logfile()
1496 return -1; in iperf_open_logfile()
1505 test->state = state; in iperf_set_send_state()
1506 if (Nwrite(test->ctrl_sck, (char*) &state, sizeof(state), Ptcp) < 0) { in iperf_set_send_state()
1508 return -1; in iperf_set_send_state()
1517 double seconds; in iperf_check_throttle() local
1520 if (sp->test->done || sp->test->settings->rate == 0 || sp->test->settings->burst != 0) in iperf_check_throttle()
1522 iperf_time_diff(&sp->result->start_time_fixed, nowP, &temp_time); in iperf_check_throttle()
1523 seconds = iperf_time_in_secs(&temp_time); in iperf_check_throttle()
1524 bits_per_second = sp->result->bytes_sent * 8 / seconds; in iperf_check_throttle()
1525 if (bits_per_second < sp->test->settings->rate) { in iperf_check_throttle()
1526 sp->green_light = 1; in iperf_check_throttle()
1527 FD_SET(sp->socket, &sp->test->write_set); in iperf_check_throttle()
1529 sp->green_light = 0; in iperf_check_throttle()
1530 FD_CLR(sp->socket, &sp->test->write_set); in iperf_check_throttle()
1538 double seconds; in iperf_check_total_rate() local
1543 … if (test->done || test->settings->bitrate_limit == 0) // Continue only if check should be done in iperf_check_total_rate()
1547 … if (++test->bitrate_limit_last_interval_index >= test->settings->bitrate_limit_stats_per_interval) in iperf_check_total_rate()
1548 test->bitrate_limit_last_interval_index = 0; in iperf_check_total_rate()
1549 …test->bitrate_limit_intervals_traffic_bytes[test->bitrate_limit_last_interval_index] = last_interv… in iperf_check_total_rate()
1552 test->bitrate_limit_stats_count += 1; in iperf_check_total_rate()
1553 if (test->bitrate_limit_stats_count < test->settings->bitrate_limit_stats_per_interval) in iperf_check_total_rate()
1557 for (total_bytes = 0, i = 0; i < test->settings->bitrate_limit_stats_per_interval; i++) { in iperf_check_total_rate()
1558 total_bytes += test->bitrate_limit_intervals_traffic_bytes[i]; in iperf_check_total_rate()
1561 seconds = test->stats_interval * test->settings->bitrate_limit_stats_per_interval; in iperf_check_total_rate()
1562 bits_per_second = total_bytes * 8 / seconds; in iperf_check_total_rate()
1563 if (test->debug) { in iperf_check_total_rate()
1564 …rval %" PRIu64 " - throughput %" PRIu64 " bps (limit %" PRIu64 ")\n", test->bitrate_limit_stats_co… in iperf_check_total_rate()
1567 if (bits_per_second > test->settings->bitrate_limit) { in iperf_check_total_rate()
1568 …f %" PRIu64 " bps exceeded %" PRIu64 " bps limit", bits_per_second, test->settings->bitrate_limit); in iperf_check_total_rate()
1569 test->bitrate_limit_exceeded = 1; in iperf_check_total_rate()
1581 if (test->settings->burst != 0) in iperf_send()
1582 multisend = test->settings->burst; in iperf_send()
1583 else if (test->settings->rate == 0) in iperf_send()
1584 multisend = test->multisend; in iperf_send()
1588 for (; multisend > 0; --multisend) { in iperf_send()
1589 if (test->settings->rate != 0 && test->settings->burst == 0) in iperf_send()
1592 SLIST_FOREACH(sp, &test->streams, streams) { in iperf_send()
1593 if ((sp->green_light && sp->sender && in iperf_send()
1594 (write_setP == NULL || FD_ISSET(sp->socket, write_setP)))) { in iperf_send()
1595 if ((r = sp->snd(sp)) < 0) { in iperf_send()
1602 test->bytes_sent += r; in iperf_send()
1603 ++test->blocks_sent; in iperf_send()
1605 if (multisend > 1 && test->settings->bytes != 0 && test->bytes_sent >= test->settings->bytes) in iperf_send()
1607 if (multisend > 1 && test->settings->blocks != 0 && test->blocks_sent >= test->settings->blocks) in iperf_send()
1614 if (test->settings->burst != 0) { in iperf_send()
1616 SLIST_FOREACH(sp, &test->streams, streams) in iperf_send()
1617 if (sp->sender) in iperf_send()
1621 SLIST_FOREACH(sp, &test->streams, streams) in iperf_send()
1622 if (FD_ISSET(sp->socket, write_setP)) in iperf_send()
1623 FD_CLR(sp->socket, write_setP); in iperf_send()
1634 SLIST_FOREACH(sp, &test->streams, streams) { in iperf_recv()
1635 if (FD_ISSET(sp->socket, read_setP) && !sp->sender) { in iperf_recv()
1636 if ((r = sp->rcv(sp)) < 0) { in iperf_recv()
1640 test->bytes_received += r; in iperf_recv()
1641 ++test->blocks_received; in iperf_recv()
1642 FD_CLR(sp->socket, read_setP); in iperf_recv()
1655 if (test->protocol->init) { in iperf_init_test()
1656 if (test->protocol->init(test) < 0) in iperf_init_test()
1657 return -1; in iperf_init_test()
1663 return -1; in iperf_init_test()
1665 SLIST_FOREACH(sp, &test->streams, streams) { in iperf_init_test()
1666 sp->result->start_time = sp->result->start_time_fixed = now; in iperf_init_test()
1669 if (test->on_test_start) in iperf_init_test()
1670 test->on_test_start(test); in iperf_init_test()
1696 return -1; in iperf_create_send_timers()
1698 SLIST_FOREACH(sp, &test->streams, streams) { in iperf_create_send_timers()
1699 sp->green_light = 1; in iperf_create_send_timers()
1700 if (test->settings->rate != 0 && sp->sender) { in iperf_create_send_timers()
1702 sp->send_timer = tmr_create(NULL, send_timer_proc, cd, test->settings->pacing_timer, 1); in iperf_create_send_timers()
1703 if (sp->send_timer == NULL) { in iperf_create_send_timers()
1705 return -1; in iperf_create_send_timers()
1714 if ( !(test->server_rsa_private_key && test->server_authorized_users)) { in test_is_authorized()
1718 if (test->settings->authtoken){ in test_is_authorized()
1721 …int rc = decode_auth_setting(test->debug, test->settings->authtoken, test->server_rsa_private_key,… in test_is_authorized()
1723 return -1; in test_is_authorized()
1725 int ret = check_authentication(username, password, ts, test->server_authorized_users); in test_is_authorized()
1735 return -1; in test_is_authorized()
1738 return -1; in test_is_authorized()
1743 * iperf_exchange_parameters - handles the param_Exchange part for client
1753 if (test->role == 'c') { in iperf_exchange_parameters()
1756 return -1; in iperf_exchange_parameters()
1761 return -1; in iperf_exchange_parameters()
1766 return -1; in iperf_exchange_parameters()
1769 if (Nwrite(test->ctrl_sck, (char*) &err, sizeof(err), Ptcp) < 0) { in iperf_exchange_parameters()
1771 return -1; in iperf_exchange_parameters()
1773 return -1; in iperf_exchange_parameters()
1777 if ((s = test->protocol->listen(test)) < 0) { in iperf_exchange_parameters()
1779 return -1; in iperf_exchange_parameters()
1781 if (Nwrite(test->ctrl_sck, (char*) &err, sizeof(err), Ptcp) < 0) { in iperf_exchange_parameters()
1783 return -1; in iperf_exchange_parameters()
1786 if (Nwrite(test->ctrl_sck, (char*) &err, sizeof(err), Ptcp) < 0) { in iperf_exchange_parameters()
1788 return -1; in iperf_exchange_parameters()
1790 return -1; in iperf_exchange_parameters()
1793 FD_SET(s, &test->read_set); in iperf_exchange_parameters()
1794 test->max_fd = (s > test->max_fd) ? s : test->max_fd; in iperf_exchange_parameters()
1795 test->prot_listener = s; in iperf_exchange_parameters()
1799 return -1; in iperf_exchange_parameters()
1811 if (test->role == 'c') { in iperf_exchange_results()
1814 return -1; in iperf_exchange_results()
1817 return -1; in iperf_exchange_results()
1821 return -1; in iperf_exchange_results()
1824 return -1; in iperf_exchange_results()
1840 r = -1; in send_parameters()
1842 if (test->protocol->id == Ptcp) in send_parameters()
1844 else if (test->protocol->id == Pudp) in send_parameters()
1846 else if (test->protocol->id == Psctp) in send_parameters()
1848 cJSON_AddNumberToObject(j, "omit", test->omit); in send_parameters()
1849 if (test->server_affinity != -1) in send_parameters()
1850 cJSON_AddNumberToObject(j, "server_affinity", test->server_affinity); in send_parameters()
1851 cJSON_AddNumberToObject(j, "time", test->duration); in send_parameters()
1852 if (test->settings->bytes) in send_parameters()
1853 cJSON_AddNumberToObject(j, "num", test->settings->bytes); in send_parameters()
1854 if (test->settings->blocks) in send_parameters()
1855 cJSON_AddNumberToObject(j, "blockcount", test->settings->blocks); in send_parameters()
1856 if (test->settings->mss) in send_parameters()
1857 cJSON_AddNumberToObject(j, "MSS", test->settings->mss); in send_parameters()
1858 if (test->no_delay) in send_parameters()
1860 cJSON_AddNumberToObject(j, "parallel", test->num_streams); in send_parameters()
1861 if (test->reverse) in send_parameters()
1863 if (test->bidirectional) in send_parameters()
1865 if (test->settings->socket_bufsize) in send_parameters()
1866 cJSON_AddNumberToObject(j, "window", test->settings->socket_bufsize); in send_parameters()
1867 if (test->settings->blksize) in send_parameters()
1868 cJSON_AddNumberToObject(j, "len", test->settings->blksize); in send_parameters()
1869 if (test->settings->rate) in send_parameters()
1870 cJSON_AddNumberToObject(j, "bandwidth", test->settings->rate); in send_parameters()
1871 if (test->settings->fqrate) in send_parameters()
1872 cJSON_AddNumberToObject(j, "fqrate", test->settings->fqrate); in send_parameters()
1873 if (test->settings->pacing_timer) in send_parameters()
1874 cJSON_AddNumberToObject(j, "pacing_timer", test->settings->pacing_timer); in send_parameters()
1875 if (test->settings->burst) in send_parameters()
1876 cJSON_AddNumberToObject(j, "burst", test->settings->burst); in send_parameters()
1877 if (test->settings->tos) in send_parameters()
1878 cJSON_AddNumberToObject(j, "TOS", test->settings->tos); in send_parameters()
1879 if (test->settings->flowlabel) in send_parameters()
1880 cJSON_AddNumberToObject(j, "flowlabel", test->settings->flowlabel); in send_parameters()
1881 if (test->title) in send_parameters()
1882 cJSON_AddStringToObject(j, "title", test->title); in send_parameters()
1883 if (test->extra_data) in send_parameters()
1884 cJSON_AddStringToObject(j, "extra_data", test->extra_data); in send_parameters()
1885 if (test->congestion) in send_parameters()
1886 cJSON_AddStringToObject(j, "congestion", test->congestion); in send_parameters()
1887 if (test->congestion_used) in send_parameters()
1888 cJSON_AddStringToObject(j, "congestion_used", test->congestion_used); in send_parameters()
1889 if (test->get_server_output) in send_parameters()
1891 if (test->udp_counters_64bit) in send_parameters()
1893 if (test->repeating_payload) in send_parameters()
1894 cJSON_AddNumberToObject(j, "repeating_payload", test->repeating_payload); in send_parameters()
1897 …if (test->settings->client_username && test->settings->client_password && test->settings->client_r… in send_parameters()
1898 …de_auth_setting(test->settings->client_username, test->settings->client_password, test->settings->… in send_parameters()
1903 return -1; in send_parameters()
1906 cJSON_AddStringToObject(j, "authtoken", test->settings->authtoken); in send_parameters()
1911 if (test->debug) { in send_parameters()
1917 if (JSON_write(test->ctrl_sck, j) < 0) { in send_parameters()
1919 r = -1; in send_parameters()
1935 j = JSON_read(test->ctrl_sck); in get_parameters()
1938 r = -1; in get_parameters()
1940 if (test->debug) { in get_parameters()
1954 test->omit = j_p->valueint; in get_parameters()
1956 test->server_affinity = j_p->valueint; in get_parameters()
1958 test->duration = j_p->valueint; in get_parameters()
1960 test->settings->bytes = j_p->valueint; in get_parameters()
1962 test->settings->blocks = j_p->valueint; in get_parameters()
1964 test->settings->mss = j_p->valueint; in get_parameters()
1966 test->no_delay = 1; in get_parameters()
1968 test->num_streams = j_p->valueint; in get_parameters()
1974 test->settings->socket_bufsize = j_p->valueint; in get_parameters()
1976 test->settings->blksize = j_p->valueint; in get_parameters()
1978 test->settings->rate = j_p->valueint; in get_parameters()
1980 test->settings->fqrate = j_p->valueint; in get_parameters()
1982 test->settings->pacing_timer = j_p->valueint; in get_parameters()
1984 test->settings->burst = j_p->valueint; in get_parameters()
1986 test->settings->tos = j_p->valueint; in get_parameters()
1988 test->settings->flowlabel = j_p->valueint; in get_parameters()
1990 test->title = strdup(j_p->valuestring); in get_parameters()
1992 test->extra_data = strdup(j_p->valuestring); in get_parameters()
1994 test->congestion = strdup(j_p->valuestring); in get_parameters()
1996 test->congestion_used = strdup(j_p->valuestring); in get_parameters()
2002 test->repeating_payload = 1; in get_parameters()
2005 test->settings->authtoken = strdup(j_p->valuestring); in get_parameters()
2007 if (test->mode && test->protocol->id == Ptcp && has_tcpinfo_retransmits()) in get_parameters()
2008 test->sender_has_retransmits = 1; in get_parameters()
2009 if (test->settings->rate) in get_parameters()
2010 cJSON_AddNumberToObject(test->json_start, "target_bitrate", test->settings->rate); in get_parameters()
2035 r = -1; in send_results()
2037 cJSON_AddNumberToObject(j, "cpu_util_total", test->cpu_util[0]); in send_results()
2038 cJSON_AddNumberToObject(j, "cpu_util_user", test->cpu_util[1]); in send_results()
2039 cJSON_AddNumberToObject(j, "cpu_util_system", test->cpu_util[2]); in send_results()
2040 if ( test->mode == RECEIVER ) in send_results()
2041 sender_has_retransmits = -1; in send_results()
2043 sender_has_retransmits = test->sender_has_retransmits; in send_results()
2045 if ( test->congestion_used ) { in send_results()
2046 cJSON_AddStringToObject(j, "congestion_used", test->congestion_used); in send_results()
2050 if (test->role == 's' && test->get_server_output) { in send_results()
2051 if (test->json_output) { in send_results()
2053 cJSON_AddItemReferenceToObject(j, "server_output_json", test->json_top); in send_results()
2061 TAILQ_FOREACH(t, &(test->server_output_list), textlineentries) { in send_results()
2062 buflen += strlen(t->line); in send_results()
2067 TAILQ_FOREACH(t, &(test->server_output_list), textlineentries) { in send_results()
2068 strncat(output, t->line, buflen); in send_results()
2069 buflen -= strlen(t->line); in send_results()
2080 r = -1; in send_results()
2083 SLIST_FOREACH(sp, &test->streams, streams) { in send_results()
2087 r = -1; in send_results()
2090 …bytes_transferred = sp->sender ? (sp->result->bytes_sent - sp->result->bytes_sent_omit) : sp->resu… in send_results()
2091 retransmits = (sp->sender && test->sender_has_retransmits) ? sp->result->stream_retrans : -1; in send_results()
2092 cJSON_AddNumberToObject(j_stream, "id", sp->id); in send_results()
2095 cJSON_AddNumberToObject(j_stream, "jitter", sp->jitter); in send_results()
2096 cJSON_AddNumberToObject(j_stream, "errors", sp->cnt_error); in send_results()
2097 cJSON_AddNumberToObject(j_stream, "packets", sp->packet_count); in send_results()
2099 iperf_time_diff(&sp->result->start_time, &sp->result->start_time, &temp_time); in send_results()
2101 iperf_time_diff(&sp->result->start_time, &sp->result->end_time, &temp_time); in send_results()
2108 if (r == 0 && test->debug) { in send_results()
2113 if (r == 0 && JSON_write(test->ctrl_sck, j) < 0) { in send_results()
2115 r = -1; in send_results()
2153 j = JSON_read(test->ctrl_sck); in get_results()
2156 r = -1; in get_results()
2164 r = -1; in get_results()
2166 if (test->debug) { in get_results()
2172 test->remote_cpu_util[0] = j_cpu_util_total->valuedouble; in get_results()
2173 test->remote_cpu_util[1] = j_cpu_util_user->valuedouble; in get_results()
2174 test->remote_cpu_util[2] = j_cpu_util_system->valuedouble; in get_results()
2175 result_has_retransmits = j_sender_has_retransmits->valueint; in get_results()
2176 if ( test->mode == RECEIVER ) { in get_results()
2177 test->sender_has_retransmits = result_has_retransmits; in get_results()
2178 test->other_side_has_retransmits = 0; in get_results()
2180 else if ( test->mode == BIDIRECTIONAL ) in get_results()
2181 test->other_side_has_retransmits = result_has_retransmits; in get_results()
2186 r = -1; in get_results()
2193 r = -1; in get_results()
2205 r = -1; in get_results()
2207 sid = j_id->valueint; in get_results()
2208 bytes_transferred = j_bytes->valueint; in get_results()
2209 retransmits = j_retransmits->valueint; in get_results()
2210 jitter = j_jitter->valuedouble; in get_results()
2211 cerror = j_errors->valueint; in get_results()
2212 pcount = j_packets->valueint; in get_results()
2213 SLIST_FOREACH(sp, &test->streams, streams) in get_results()
2214 if (sp->id == sid) break; in get_results()
2217 r = -1; in get_results()
2219 if (sp->sender) { in get_results()
2220 sp->jitter = jitter; in get_results()
2221 sp->cnt_error = cerror; in get_results()
2222 sp->peer_packet_count = pcount; in get_results()
2223 sp->result->bytes_received = bytes_transferred; in get_results()
2227 * available; this is the case for older (pre-3.2) in get_results()
2234 sp->result->receiver_time = j_end_time->valuedouble - j_start_time->valuedouble; in get_results()
2237 sp->result->receiver_time = 0.0; in get_results()
2240 sp->peer_packet_count = pcount; in get_results()
2241 sp->result->bytes_sent = bytes_transferred; in get_results()
2242 sp->result->stream_retrans = retransmits; in get_results()
2244 sp->result->sender_time = j_end_time->valuedouble - j_start_time->valuedouble; in get_results()
2247 sp->result->sender_time = 0.0; in get_results()
2258 if (test->role == 'c' && iperf_get_test_get_server_output(test)) { in get_results()
2262 test->json_server_output = j_server_output; in get_results()
2268 test->server_output_text = strdup(j_server_output->valuestring); in get_results()
2277 test->remote_congestion_used = strdup(j_remote_congestion_used->valuestring); in get_results()
2296 r = -1; in JSON_write()
2301 r = -1; in JSON_write()
2304 r = -1; in JSON_write()
2322 * Read a four-byte integer, which is the length of the JSON to follow. in JSON_read()
2335 * length in that 4-byte integer. If we don't the socket might have in JSON_read()
2354 * add_to_interval_list -- adds new interval to the interval_list
2364 TAILQ_INSERT_TAIL(&rp->interval_results, irp, irlistentries); in add_to_interval_list()
2371 * connect_msg -- displays connection message
2382 if (getsockdomain(sp->socket) == AF_INET) { in connect_msg()
2383 …inet_ntop(AF_INET, (void *) &((struct sockaddr_in *) &sp->local_addr)->sin_addr, ipl, sizeof(ipl)); in connect_msg()
2385 …inet_ntop(AF_INET, (void *) &((struct sockaddr_in *) &sp->remote_addr)->sin_addr, ipr, sizeof(ipr)… in connect_msg()
2387 lport = ntohs(((struct sockaddr_in *) &sp->local_addr)->sin_port); in connect_msg()
2388 rport = ntohs(((struct sockaddr_in *) &sp->remote_addr)->sin_port); in connect_msg()
2390 …inet_ntop(AF_INET6, (void *) &((struct sockaddr_in6 *) &sp->local_addr)->sin6_addr, ipl, sizeof(ip… in connect_msg()
2392 …inet_ntop(AF_INET6, (void *) &((struct sockaddr_in6 *) &sp->remote_addr)->sin6_addr, ipr, sizeof(i… in connect_msg()
2394 lport = ntohs(((struct sockaddr_in6 *) &sp->local_addr)->sin6_port); in connect_msg()
2395 rport = ntohs(((struct sockaddr_in6 *) &sp->remote_addr)->sin6_port); in connect_msg()
2398 if (sp->test->json_output) in connect_msg()
2399 …oArray(sp->test->json_connected, iperf_json_printf("socket: %d local_host: %s local_port: %d re… in connect_msg()
2401 iperf_printf(sp->test, report_connected, sp->socket, ipl, lport, ipr, rport); in connect_msg()
2420 test->settings = (struct iperf_settings *) malloc(sizeof(struct iperf_settings)); in iperf_new_test()
2421 if (!test->settings) { in iperf_new_test()
2426 memset(test->settings, 0, sizeof(struct iperf_settings)); in iperf_new_test()
2428 …test->bitrate_limit_intervals_traffic_bytes = (iperf_size_t *) malloc(sizeof(iperf_size_t) * MAX_I… in iperf_new_test()
2429 if (!test->bitrate_limit_intervals_traffic_bytes) { in iperf_new_test()
2434 …memset(test->bitrate_limit_intervals_traffic_bytes, 0, sizeof(sizeof(iperf_size_t) * MAX_INTERVAL)… in iperf_new_test()
2437 test->outfile = stdout; in iperf_new_test()
2473 testp->omit = OMIT; in iperf_defaults()
2474 testp->duration = DURATION; in iperf_defaults()
2475 testp->diskfile_name = (char*) 0; in iperf_defaults()
2476 testp->affinity = -1; in iperf_defaults()
2477 testp->server_affinity = -1; in iperf_defaults()
2478 TAILQ_INIT(&testp->xbind_addrs); in iperf_defaults()
2480 CPU_ZERO(&testp->cpumask); in iperf_defaults()
2482 testp->title = NULL; in iperf_defaults()
2483 testp->extra_data = NULL; in iperf_defaults()
2484 testp->congestion = NULL; in iperf_defaults()
2485 testp->congestion_used = NULL; in iperf_defaults()
2486 testp->remote_congestion_used = NULL; in iperf_defaults()
2487 testp->server_port = PORT; in iperf_defaults()
2488 testp->ctrl_sck = -1; in iperf_defaults()
2489 testp->prot_listener = -1; in iperf_defaults()
2490 testp->other_side_has_retransmits = 0; in iperf_defaults()
2492 testp->stats_callback = iperf_stats_callback; in iperf_defaults()
2493 testp->reporter_callback = iperf_reporter_callback; in iperf_defaults()
2495 testp->stats_interval = testp->reporter_interval = 1; in iperf_defaults()
2496 testp->num_streams = 1; in iperf_defaults()
2498 testp->settings->domain = AF_UNSPEC; in iperf_defaults()
2499 testp->settings->unit_format = 'a'; in iperf_defaults()
2500 testp->settings->socket_bufsize = 0; /* use autotuning */ in iperf_defaults()
2501 testp->settings->blksize = DEFAULT_TCP_BLKSIZE; in iperf_defaults()
2502 testp->settings->rate = 0; in iperf_defaults()
2503 testp->settings->bitrate_limit = 0; in iperf_defaults()
2504 testp->settings->bitrate_limit_interval = 5; in iperf_defaults()
2505 testp->settings->bitrate_limit_stats_per_interval = 0; in iperf_defaults()
2506 testp->settings->fqrate = 0; in iperf_defaults()
2507 testp->settings->pacing_timer = 1000; in iperf_defaults()
2508 testp->settings->burst = 0; in iperf_defaults()
2509 testp->settings->mss = 0; in iperf_defaults()
2510 testp->settings->bytes = 0; in iperf_defaults()
2511 testp->settings->blocks = 0; in iperf_defaults()
2512 testp->settings->connect_timeout = -1; in iperf_defaults()
2513 memset(testp->cookie, 0, COOKIE_SIZE); in iperf_defaults()
2515 testp->multisend = 10; /* arbitrary */ in iperf_defaults()
2518 SLIST_INIT(&testp->streams); in iperf_defaults()
2519 SLIST_INIT(&testp->protocols); in iperf_defaults()
2523 return -1; in iperf_defaults()
2525 tcp->id = Ptcp; in iperf_defaults()
2526 tcp->name = "TCP"; in iperf_defaults()
2527 tcp->accept = iperf_tcp_accept; in iperf_defaults()
2528 tcp->listen = iperf_tcp_listen; in iperf_defaults()
2529 tcp->connect = iperf_tcp_connect; in iperf_defaults()
2530 tcp->send = iperf_tcp_send; in iperf_defaults()
2531 tcp->recv = iperf_tcp_recv; in iperf_defaults()
2532 tcp->init = NULL; in iperf_defaults()
2533 SLIST_INSERT_HEAD(&testp->protocols, tcp, protocols); in iperf_defaults()
2538 return -1; in iperf_defaults()
2541 udp->id = Pudp; in iperf_defaults()
2542 udp->name = "UDP"; in iperf_defaults()
2543 udp->accept = iperf_udp_accept; in iperf_defaults()
2544 udp->listen = iperf_udp_listen; in iperf_defaults()
2545 udp->connect = iperf_udp_connect; in iperf_defaults()
2546 udp->send = iperf_udp_send; in iperf_defaults()
2547 udp->recv = iperf_udp_recv; in iperf_defaults()
2548 udp->init = iperf_udp_init; in iperf_defaults()
2558 return -1; in iperf_defaults()
2561 sctp->id = Psctp; in iperf_defaults()
2562 sctp->name = "SCTP"; in iperf_defaults()
2563 sctp->accept = iperf_sctp_accept; in iperf_defaults()
2564 sctp->listen = iperf_sctp_listen; in iperf_defaults()
2565 sctp->connect = iperf_sctp_connect; in iperf_defaults()
2566 sctp->send = iperf_sctp_send; in iperf_defaults()
2567 sctp->recv = iperf_sctp_recv; in iperf_defaults()
2568 sctp->init = iperf_sctp_init; in iperf_defaults()
2573 testp->on_new_stream = iperf_on_new_stream; in iperf_defaults()
2574 testp->on_test_start = iperf_on_test_start; in iperf_defaults()
2575 testp->on_connect = iperf_on_connect; in iperf_defaults()
2576 testp->on_test_finish = iperf_on_test_finish; in iperf_defaults()
2578 TAILQ_INIT(&testp->server_output_list); in iperf_defaults()
2592 while (!SLIST_EMPTY(&test->streams)) { in iperf_free_test()
2593 sp = SLIST_FIRST(&test->streams); in iperf_free_test()
2594 SLIST_REMOVE_HEAD(&test->streams, streams); in iperf_free_test()
2597 if (test->server_hostname) in iperf_free_test()
2598 free(test->server_hostname); in iperf_free_test()
2599 if (test->tmp_template) in iperf_free_test()
2600 free(test->tmp_template); in iperf_free_test()
2601 if (test->bind_address) in iperf_free_test()
2602 free(test->bind_address); in iperf_free_test()
2603 if (!TAILQ_EMPTY(&test->xbind_addrs)) { in iperf_free_test()
2606 while (!TAILQ_EMPTY(&test->xbind_addrs)) { in iperf_free_test()
2607 xbe = TAILQ_FIRST(&test->xbind_addrs); in iperf_free_test()
2608 TAILQ_REMOVE(&test->xbind_addrs, xbe, link); in iperf_free_test()
2609 if (xbe->ai) in iperf_free_test()
2610 freeaddrinfo(xbe->ai); in iperf_free_test()
2611 free(xbe->name); in iperf_free_test()
2617 if (test->server_rsa_private_key) in iperf_free_test()
2618 EVP_PKEY_free(test->server_rsa_private_key); in iperf_free_test()
2619 test->server_rsa_private_key = NULL; in iperf_free_test()
2621 free(test->settings->authtoken); in iperf_free_test()
2622 test->settings->authtoken = NULL; in iperf_free_test()
2624 free(test->settings->client_username); in iperf_free_test()
2625 test->settings->client_username = NULL; in iperf_free_test()
2627 free(test->settings->client_password); in iperf_free_test()
2628 test->settings->client_password = NULL; in iperf_free_test()
2630 if (test->settings->client_rsa_pubkey) in iperf_free_test()
2631 EVP_PKEY_free(test->settings->client_rsa_pubkey); in iperf_free_test()
2632 test->settings->client_rsa_pubkey = NULL; in iperf_free_test()
2635 if (test->settings) in iperf_free_test()
2636 free(test->settings); in iperf_free_test()
2637 if (test->title) in iperf_free_test()
2638 free(test->title); in iperf_free_test()
2639 if (test->extra_data) in iperf_free_test()
2640 free(test->extra_data); in iperf_free_test()
2641 if (test->congestion) in iperf_free_test()
2642 free(test->congestion); in iperf_free_test()
2643 if (test->congestion_used) in iperf_free_test()
2644 free(test->congestion_used); in iperf_free_test()
2645 if (test->remote_congestion_used) in iperf_free_test()
2646 free(test->remote_congestion_used); in iperf_free_test()
2647 if (test->timestamp_format) in iperf_free_test()
2648 free(test->timestamp_format); in iperf_free_test()
2649 if (test->omit_timer != NULL) in iperf_free_test()
2650 tmr_cancel(test->omit_timer); in iperf_free_test()
2651 if (test->timer != NULL) in iperf_free_test()
2652 tmr_cancel(test->timer); in iperf_free_test()
2653 if (test->stats_timer != NULL) in iperf_free_test()
2654 tmr_cancel(test->stats_timer); in iperf_free_test()
2655 if (test->reporter_timer != NULL) in iperf_free_test()
2656 tmr_cancel(test->reporter_timer); in iperf_free_test()
2659 while (!SLIST_EMPTY(&test->protocols)) { in iperf_free_test()
2660 prot = SLIST_FIRST(&test->protocols); in iperf_free_test()
2661 SLIST_REMOVE_HEAD(&test->protocols, protocols); in iperf_free_test()
2665 if (test->logfile) { in iperf_free_test()
2666 free(test->logfile); in iperf_free_test()
2667 test->logfile = NULL; in iperf_free_test()
2668 if (test->outfile) { in iperf_free_test()
2669 fclose(test->outfile); in iperf_free_test()
2670 test->outfile = NULL; in iperf_free_test()
2674 if (test->server_output_text) { in iperf_free_test()
2675 free(test->server_output_text); in iperf_free_test()
2676 test->server_output_text = NULL; in iperf_free_test()
2679 if (test->json_output_string) { in iperf_free_test()
2680 free(test->json_output_string); in iperf_free_test()
2681 test->json_output_string = NULL; in iperf_free_test()
2686 while (!TAILQ_EMPTY(&test->server_output_list)) { in iperf_free_test()
2687 t = TAILQ_FIRST(&test->server_output_list); in iperf_free_test()
2688 TAILQ_REMOVE(&test->server_output_list, t, textlineentries); in iperf_free_test()
2689 free(t->line); in iperf_free_test()
2694 if (!TAILQ_EMPTY(&test->xbind_addrs)) { in iperf_free_test()
2697 TAILQ_FOREACH(xbe, &test->xbind_addrs, link) { in iperf_free_test()
2698 if (xbe->ai) { in iperf_free_test()
2699 freeaddrinfo(xbe->ai); in iperf_free_test()
2700 xbe->ai = NULL; in iperf_free_test()
2706 if (test->bitrate_limit_intervals_traffic_bytes != NULL) in iperf_free_test()
2707 free(test->bitrate_limit_intervals_traffic_bytes); in iperf_free_test()
2710 // test->streams = NULL; in iperf_free_test()
2711 test->stats_callback = NULL; in iperf_free_test()
2712 test->reporter_callback = NULL; in iperf_free_test()
2724 while (!SLIST_EMPTY(&test->streams)) { in iperf_reset_test()
2725 sp = SLIST_FIRST(&test->streams); in iperf_reset_test()
2726 SLIST_REMOVE_HEAD(&test->streams, streams); in iperf_reset_test()
2729 if (test->omit_timer != NULL) { in iperf_reset_test()
2730 tmr_cancel(test->omit_timer); in iperf_reset_test()
2731 test->omit_timer = NULL; in iperf_reset_test()
2733 if (test->timer != NULL) { in iperf_reset_test()
2734 tmr_cancel(test->timer); in iperf_reset_test()
2735 test->timer = NULL; in iperf_reset_test()
2737 if (test->stats_timer != NULL) { in iperf_reset_test()
2738 tmr_cancel(test->stats_timer); in iperf_reset_test()
2739 test->stats_timer = NULL; in iperf_reset_test()
2741 if (test->reporter_timer != NULL) { in iperf_reset_test()
2742 tmr_cancel(test->reporter_timer); in iperf_reset_test()
2743 test->reporter_timer = NULL; in iperf_reset_test()
2745 test->done = 0; in iperf_reset_test()
2747 SLIST_INIT(&test->streams); in iperf_reset_test()
2749 if (test->remote_congestion_used) in iperf_reset_test()
2750 free(test->remote_congestion_used); in iperf_reset_test()
2751 test->remote_congestion_used = NULL; in iperf_reset_test()
2752 test->role = 's'; in iperf_reset_test()
2753 test->mode = RECEIVER; in iperf_reset_test()
2754 test->sender_has_retransmits = 0; in iperf_reset_test()
2756 test->omit = OMIT; in iperf_reset_test()
2757 test->duration = DURATION; in iperf_reset_test()
2758 test->server_affinity = -1; in iperf_reset_test()
2760 CPU_ZERO(&test->cpumask); in iperf_reset_test()
2762 test->state = 0; in iperf_reset_test()
2764 test->ctrl_sck = -1; in iperf_reset_test()
2765 test->prot_listener = -1; in iperf_reset_test()
2767 test->bytes_sent = 0; in iperf_reset_test()
2768 test->blocks_sent = 0; in iperf_reset_test()
2770 test->bytes_received = 0; in iperf_reset_test()
2771 test->blocks_received = 0; in iperf_reset_test()
2773 test->other_side_has_retransmits = 0; in iperf_reset_test()
2775 test->bitrate_limit_stats_count = 0; in iperf_reset_test()
2776 test->bitrate_limit_last_interval_index = 0; in iperf_reset_test()
2777 test->bitrate_limit_exceeded = 0; in iperf_reset_test()
2780 test->bitrate_limit_intervals_traffic_bytes[i] = 0; in iperf_reset_test()
2782 test->reverse = 0; in iperf_reset_test()
2783 test->bidirectional = 0; in iperf_reset_test()
2784 test->no_delay = 0; in iperf_reset_test()
2786 FD_ZERO(&test->read_set); in iperf_reset_test()
2787 FD_ZERO(&test->write_set); in iperf_reset_test()
2789 test->num_streams = 1; in iperf_reset_test()
2790 test->settings->socket_bufsize = 0; in iperf_reset_test()
2791 test->settings->blksize = DEFAULT_TCP_BLKSIZE; in iperf_reset_test()
2792 test->settings->rate = 0; in iperf_reset_test()
2793 test->settings->burst = 0; in iperf_reset_test()
2794 test->settings->mss = 0; in iperf_reset_test()
2795 test->settings->tos = 0; in iperf_reset_test()
2798 if (test->settings->authtoken) { in iperf_reset_test()
2799 free(test->settings->authtoken); in iperf_reset_test()
2800 test->settings->authtoken = NULL; in iperf_reset_test()
2802 if (test->settings->client_username) { in iperf_reset_test()
2803 free(test->settings->client_username); in iperf_reset_test()
2804 test->settings->client_username = NULL; in iperf_reset_test()
2806 if (test->settings->client_password) { in iperf_reset_test()
2807 free(test->settings->client_password); in iperf_reset_test()
2808 test->settings->client_password = NULL; in iperf_reset_test()
2810 if (test->settings->client_rsa_pubkey) { in iperf_reset_test()
2811 EVP_PKEY_free(test->settings->client_rsa_pubkey); in iperf_reset_test()
2812 test->settings->client_rsa_pubkey = NULL; in iperf_reset_test()
2816 memset(test->cookie, 0, COOKIE_SIZE); in iperf_reset_test()
2817 test->multisend = 10; /* arbitrary */ in iperf_reset_test()
2818 test->udp_counters_64bit = 0; in iperf_reset_test()
2819 if (test->title) { in iperf_reset_test()
2820 free(test->title); in iperf_reset_test()
2821 test->title = NULL; in iperf_reset_test()
2823 if (test->extra_data) { in iperf_reset_test()
2824 free(test->extra_data); in iperf_reset_test()
2825 test->extra_data = NULL; in iperf_reset_test()
2830 while (!TAILQ_EMPTY(&test->server_output_list)) { in iperf_reset_test()
2831 t = TAILQ_FIRST(&test->server_output_list); in iperf_reset_test()
2832 TAILQ_REMOVE(&test->server_output_list, t, textlineentries); in iperf_reset_test()
2833 free(t->line); in iperf_reset_test()
2849 test->bytes_sent = 0; in iperf_reset_stats()
2850 test->blocks_sent = 0; in iperf_reset_stats()
2852 SLIST_FOREACH(sp, &test->streams, streams) { in iperf_reset_stats()
2853 sp->omitted_packet_count = sp->packet_count; in iperf_reset_stats()
2854 sp->omitted_cnt_error = sp->cnt_error; in iperf_reset_stats()
2855 sp->omitted_outoforder_packets = sp->outoforder_packets; in iperf_reset_stats()
2856 sp->jitter = 0; in iperf_reset_stats()
2857 rp = sp->result; in iperf_reset_stats()
2858 rp->bytes_sent_omit = rp->bytes_sent; in iperf_reset_stats()
2859 rp->bytes_received = 0; in iperf_reset_stats()
2860 rp->bytes_sent_this_interval = rp->bytes_received_this_interval = 0; in iperf_reset_stats()
2861 if (test->sender_has_retransmits == 1) { in iperf_reset_stats()
2864 rp->stream_prev_total_retrans = get_total_retransmits(&ir); in iperf_reset_stats()
2866 rp->stream_retrans = 0; in iperf_reset_stats()
2867 rp->start_time = now; in iperf_reset_stats()
2887 temp.omitted = test->omitting; in iperf_stats_callback()
2888 SLIST_FOREACH(sp, &test->streams, streams) { in iperf_stats_callback()
2889 rp = sp->result; in iperf_stats_callback()
2890 …temp.bytes_transferred = sp->sender ? rp->bytes_sent_this_interval : rp->bytes_received_this_inter… in iperf_stats_callback()
2893 …total_interval_bytes_transferred += rp->bytes_sent_this_interval + rp->bytes_received_this_interva… in iperf_stats_callback()
2895 irp = TAILQ_LAST(&rp->interval_results, irlisthead); in iperf_stats_callback()
2896 /* result->end_time contains timestamp of previous interval */ in iperf_stats_callback()
2898 memcpy(&temp.interval_start_time, &rp->end_time, sizeof(struct iperf_time)); in iperf_stats_callback()
2900 memcpy(&temp.interval_start_time, &rp->start_time, sizeof(struct iperf_time)); in iperf_stats_callback()
2902 iperf_time_now(&rp->end_time); in iperf_stats_callback()
2903 memcpy(&temp.interval_end_time, &rp->end_time, sizeof(struct iperf_time)); in iperf_stats_callback()
2906 if (test->protocol->id == Ptcp) { in iperf_stats_callback()
2909 if (test->sender_has_retransmits == 1) { in iperf_stats_callback()
2911 temp.interval_retrans = total_retrans - rp->stream_prev_total_retrans; in iperf_stats_callback()
2912 rp->stream_retrans += temp.interval_retrans; in iperf_stats_callback()
2913 rp->stream_prev_total_retrans = total_retrans; in iperf_stats_callback()
2916 if (temp.snd_cwnd > rp->stream_max_snd_cwnd) { in iperf_stats_callback()
2917 rp->stream_max_snd_cwnd = temp.snd_cwnd; in iperf_stats_callback()
2921 if (temp.rtt > rp->stream_max_rtt) { in iperf_stats_callback()
2922 rp->stream_max_rtt = temp.rtt; in iperf_stats_callback()
2924 if (rp->stream_min_rtt == 0 || in iperf_stats_callback()
2925 temp.rtt < rp->stream_min_rtt) { in iperf_stats_callback()
2926 rp->stream_min_rtt = temp.rtt; in iperf_stats_callback()
2928 rp->stream_sum_rtt += temp.rtt; in iperf_stats_callback()
2929 rp->stream_count_rtt++; in iperf_stats_callback()
2937 temp.interval_packet_count = sp->packet_count; in iperf_stats_callback()
2938 temp.interval_outoforder_packets = sp->outoforder_packets; in iperf_stats_callback()
2939 temp.interval_cnt_error = sp->cnt_error; in iperf_stats_callback()
2941 temp.interval_packet_count = sp->packet_count - irp->packet_count; in iperf_stats_callback()
2942 temp.interval_outoforder_packets = sp->outoforder_packets - irp->outoforder_packets; in iperf_stats_callback()
2943 temp.interval_cnt_error = sp->cnt_error - irp->cnt_error; in iperf_stats_callback()
2945 temp.packet_count = sp->packet_count; in iperf_stats_callback()
2946 temp.jitter = sp->jitter; in iperf_stats_callback()
2947 temp.outoforder_packets = sp->outoforder_packets; in iperf_stats_callback()
2948 temp.cnt_error = sp->cnt_error; in iperf_stats_callback()
2951 rp->bytes_sent_this_interval = rp->bytes_received_this_interval = 0; in iperf_stats_callback()
2955 if (test->role == 's') { in iperf_stats_callback()
2992 SLIST_FOREACH(sp, &test->streams, streams) { in iperf_print_intermediate()
2993 irp = TAILQ_LAST(&sp->result->interval_results, irlisthead); in iperf_print_intermediate()
2995 iperf_time_diff(&irp->interval_start_time, &irp->interval_end_time, &temp_time); in iperf_print_intermediate()
2997 if (test->debug) { in iperf_print_intermediate()
2998 printf("interval_len %f bytes_transferred %" PRIu64 "\n", interval_len, irp->bytes_transferred); in iperf_print_intermediate()
3006 if (interval_len >= test->stats_interval * 0.10 || in iperf_print_intermediate()
3007 irp->bytes_transferred > 0) { in iperf_print_intermediate()
3009 if (test->debug) { in iperf_print_intermediate()
3016 if (test->debug) { in iperf_print_intermediate()
3022 if (test->json_output) { in iperf_print_intermediate()
3026 cJSON_AddItemToArray(test->json_intervals, json_interval); in iperf_print_intermediate()
3045 if (test->mode == BIDIRECTIONAL) { in iperf_print_intermediate()
3046 if (test->role == 'c') { in iperf_print_intermediate()
3047 lower_mode = -1; in iperf_print_intermediate()
3054 lower_mode = test->mode; in iperf_print_intermediate()
3074 /* Print stream role just for bidirectional mode. */ in iperf_print_intermediate()
3076 if (test->mode == BIDIRECTIONAL) { in iperf_print_intermediate()
3077 sprintf(mbuf, "[%s-%s]", stream_must_be_sender?"TX":"RX", test->role == 'c'?"C":"S"); in iperf_print_intermediate()
3083 SLIST_FOREACH(sp, &test->streams, streams) { in iperf_print_intermediate()
3084 if (sp->sender == stream_must_be_sender) { in iperf_print_intermediate()
3087 irp = TAILQ_LAST(&sp->result->interval_results, irlisthead); in iperf_print_intermediate()
3093 bytes += irp->bytes_transferred; in iperf_print_intermediate()
3094 if (test->protocol->id == Ptcp) { in iperf_print_intermediate()
3095 if (test->sender_has_retransmits == 1) { in iperf_print_intermediate()
3096 retransmits += irp->interval_retrans; in iperf_print_intermediate()
3099 total_packets += irp->interval_packet_count; in iperf_print_intermediate()
3100 lost_packets += irp->interval_cnt_error; in iperf_print_intermediate()
3101 avg_jitter += irp->jitter; in iperf_print_intermediate()
3107 if (test->num_streams > 1 || test->json_output) { in iperf_print_intermediate()
3108 sp = SLIST_FIRST(&test->streams); /* reset back to 1st stream */ in iperf_print_intermediate()
3111 …irp = TAILQ_LAST(&sp->result->interval_results, irlisthead); /* use 1st stream for timing info … in iperf_print_intermediate()
3114 bandwidth = (double) bytes / (double) irp->interval_duration; in iperf_print_intermediate()
3115 unit_snprintf(nbuf, UNIT_LEN, bandwidth, test->settings->unit_format); in iperf_print_intermediate()
3117 iperf_time_diff(&sp->result->start_time,&irp->interval_start_time, &temp_time); in iperf_print_intermediate()
3119 iperf_time_diff(&sp->result->start_time,&irp->interval_end_time, &temp_time); in iperf_print_intermediate()
3121 if (test->protocol->id == Ptcp || test->protocol->id == Psctp) { in iperf_print_intermediate()
3122 if (test->sender_has_retransmits == 1 && stream_must_be_sender) { in iperf_print_intermediate()
3124 if (test->json_output) in iperf_print_intermediate()
3125seconds: %f bytes: %d bits_per_second: %f retransmits: %d omitted: %b sender: %b", (double) st… in iperf_print_intermediate()
3127 …rt_time, end_time, ubuf, nbuf, retransmits, irp->omitted?report_omitted:""); /* XXX irp->omitted o… in iperf_print_intermediate()
3130 if (test->json_output) in iperf_print_intermediate()
3131seconds: %f bytes: %d bits_per_second: %f omitted: %b sender: %b", (double) start_time, (double… in iperf_print_intermediate()
3133 …ntf(test, report_sum_bw_format, mbuf, start_time, end_time, ubuf, nbuf, test->omitting?report_omit… in iperf_print_intermediate()
3138 if (test->json_output) in iperf_print_intermediate()
3139seconds: %f bytes: %d bits_per_second: %f packets: %d omitted: %b sender: %b", (double) start_… in iperf_print_intermediate()
3141 …er_format, mbuf, start_time, end_time, ubuf, nbuf, zbuf, total_packets, test->omitting?report_omit… in iperf_print_intermediate()
3143 avg_jitter /= test->num_streams; in iperf_print_intermediate()
3150 if (test->json_output) in iperf_print_intermediate()
3151seconds: %f bytes: %d bits_per_second: %f jitter_ms: %f lost_packets: %d packets: %d lost_pe… in iperf_print_intermediate()
3153 …, nbuf, avg_jitter * 1000.0, lost_packets, total_packets, lost_percent, test->omitting?report_omit… in iperf_print_intermediate()
3173 int tmp_sender_has_retransmits = test->sender_has_retransmits; in iperf_print_results()
3177 if (test->json_output) { in iperf_print_results()
3181 cJSON_AddItemToObject(test->json_end, "streams", json_summary_streams); in iperf_print_results()
3184 if (test->verbose) in iperf_print_results()
3186 if (test->protocol->id == Ptcp || test->protocol->id == Psctp) { in iperf_print_results()
3187 if (test->sender_has_retransmits || test->other_side_has_retransmits) { in iperf_print_results()
3188 if (test->bidirectional) in iperf_print_results()
3194 if (test->bidirectional) in iperf_print_results()
3200 if (test->bidirectional) in iperf_print_results()
3216 if (test->mode == BIDIRECTIONAL) { in iperf_print_results()
3217 if (test->role == 'c') { in iperf_print_results()
3218 lower_mode = -1; in iperf_print_results()
3225 lower_mode = test->mode; in iperf_print_results()
3252 /* Print stream role just for bidirectional mode. */ in iperf_print_results()
3254 if (test->mode == BIDIRECTIONAL) { in iperf_print_results()
3255 sprintf(mbuf, "[%s-%s]", stream_must_be_sender?"TX":"RX", test->role == 'c'?"C":"S"); in iperf_print_results()
3261 if (test->mode == BIDIRECTIONAL && stream_must_be_sender) in iperf_print_results()
3262 test->sender_has_retransmits = tmp_sender_has_retransmits; in iperf_print_results()
3263 else if (test->mode == BIDIRECTIONAL && !stream_must_be_sender) in iperf_print_results()
3264 test->sender_has_retransmits = test->other_side_has_retransmits; in iperf_print_results()
3267 sp = SLIST_FIRST(&test->streams); in iperf_print_results()
3283 iperf_time_diff(&sp->result->start_time, &sp->result->end_time, &temp_time); in iperf_print_results()
3285 if (sp->sender) { in iperf_print_results()
3286 sp->result->sender_time = end_time; in iperf_print_results()
3287 if (sp->result->receiver_time == 0.0) { in iperf_print_results()
3288 sp->result->receiver_time = sp->result->sender_time; in iperf_print_results()
3292 sp->result->receiver_time = end_time; in iperf_print_results()
3293 if (sp->result->sender_time == 0.0) { in iperf_print_results()
3294 sp->result->sender_time = sp->result->receiver_time; in iperf_print_results()
3297 sender_time = sp->result->sender_time; in iperf_print_results()
3298 receiver_time = sp->result->receiver_time; in iperf_print_results()
3299 SLIST_FOREACH(sp, &test->streams, streams) { in iperf_print_results()
3300 if (sp->sender == stream_must_be_sender) { in iperf_print_results()
3301 if (test->json_output) { in iperf_print_results()
3308 bytes_sent = sp->result->bytes_sent - sp->result->bytes_sent_omit; in iperf_print_results()
3309 bytes_received = sp->result->bytes_received; in iperf_print_results()
3313 if (sp->sender) { in iperf_print_results()
3314 sender_packet_count = sp->packet_count; in iperf_print_results()
3315 receiver_packet_count = sp->peer_packet_count; in iperf_print_results()
3318 sender_packet_count = sp->peer_packet_count; in iperf_print_results()
3319 receiver_packet_count = sp->packet_count; in iperf_print_results()
3322 if (test->protocol->id == Ptcp || test->protocol->id == Psctp) { in iperf_print_results()
3323 if (test->sender_has_retransmits) { in iperf_print_results()
3324 total_retransmits += sp->result->stream_retrans; in iperf_print_results()
3332 total_packets += (packet_count - sp->omitted_packet_count); in iperf_print_results()
3333 sender_total_packets += (sender_packet_count - sp->omitted_packet_count); in iperf_print_results()
3334 receiver_total_packets += (receiver_packet_count - sp->omitted_packet_count); in iperf_print_results()
3335 lost_packets += (sp->cnt_error - sp->omitted_cnt_error); in iperf_print_results()
3336 avg_jitter += sp->jitter; in iperf_print_results()
3346 unit_snprintf(nbuf, UNIT_LEN, bandwidth, test->settings->unit_format); in iperf_print_results()
3347 if (test->protocol->id == Ptcp || test->protocol->id == Psctp) { in iperf_print_results()
3348 if (test->sender_has_retransmits) { in iperf_print_results()
3350 if (test->json_output) in iperf_print_results()
3351seconds: %f bytes: %d bits_per_second: %f retransmits: %d max_snd_cwnd: %d max_rtt: %d min… in iperf_print_results()
3353 if (test->role == 's' && !sp->sender) { in iperf_print_results()
3354 if (test->verbose) in iperf_print_results()
3355 … iperf_printf(test, report_sender_not_available_format, sp->socket); in iperf_print_results()
3358 …rf_printf(test, report_bw_retrans_format, sp->socket, mbuf, start_time, sender_time, ubuf, nbuf, s… in iperf_print_results()
3362 if (test->json_output) in iperf_print_results()
3363 …_printf("socket: %d start: %f end: %f seconds: %f bytes: %d bits_per_second: %f sender: %b", … in iperf_print_results()
3365 if (test->role == 's' && !sp->sender) { in iperf_print_results()
3366 if (test->verbose) in iperf_print_results()
3367 … iperf_printf(test, report_sender_not_available_format, sp->socket); in iperf_print_results()
3370 …iperf_printf(test, report_bw_format, sp->socket, mbuf, start_time, sender_time, ubuf, nbuf, report… in iperf_print_results()
3375 if (sender_packet_count - sp->omitted_packet_count > 0) { in iperf_print_results()
3376 …lost_percent = 100.0 * (sp->cnt_error - sp->omitted_cnt_error) / (sender_packet_count - sp->omitte… in iperf_print_results()
3381 if (test->json_output) { in iperf_print_results()
3394 * the client side for a reverse-mode test. If this in iperf_print_results()
3399seconds: %f bytes: %d bits_per_second: %f jitter_ms: %f lost_packets: %d packets: %d lost_pe… in iperf_print_results()
3404 * the server cannot report on client-side summary in iperf_print_results()
3409 if (test->role == 's' && !sp->sender) { in iperf_print_results()
3410 if (test->verbose) in iperf_print_results()
3411 iperf_printf(test, report_sender_not_available_format, sp->socket); in iperf_print_results()
3414 …tf(test, report_bw_udp_format, sp->socket, mbuf, start_time, sender_time, ubuf, nbuf, 0.0, 0, (sen… in iperf_print_results()
3416 if ((sp->outoforder_packets - sp->omitted_outoforder_packets) > 0) in iperf_print_results()
3417 …test, report_sum_outoforder, mbuf, start_time, sender_time, (sp->outoforder_packets - sp->omitted_… in iperf_print_results()
3421 if (sp->diskfile_fd >= 0) { in iperf_print_results()
3422 if (fstat(sp->diskfile_fd, &sb) == 0) { in iperf_print_results()
3423 … /* In the odd case that it's a zero-sized file, say it was all transferred. */ in iperf_print_results()
3430 if (test->json_output) in iperf_print_results()
3431 …d, (int64_t) sb.st_size, (int64_t) percent_sent, (int64_t) percent_received, test->diskfile_name)); in iperf_print_results()
3434 … iperf_printf(test, report_diskfile, ubuf, sbuf, percent_sent, test->diskfile_name); in iperf_print_results()
3438 … iperf_printf(test, report_diskfile, ubuf, sbuf, percent_received, test->diskfile_name); in iperf_print_results()
3450 unit_snprintf(nbuf, UNIT_LEN, bandwidth, test->settings->unit_format); in iperf_print_results()
3451 if (test->protocol->id == Ptcp || test->protocol->id == Psctp) { in iperf_print_results()
3453 if (test->json_output) in iperf_print_results()
3454 …_printf("socket: %d start: %f end: %f seconds: %f bytes: %d bits_per_second: %f sender: %b", … in iperf_print_results()
3456 if (test->role == 's' && sp->sender) { in iperf_print_results()
3457 if (test->verbose) in iperf_print_results()
3458 … iperf_printf(test, report_receiver_not_available_format, sp->socket); in iperf_print_results()
3461 …iperf_printf(test, report_bw_format, sp->socket, mbuf, start_time, receiver_time, ubuf, nbuf, repo… in iperf_print_results()
3467 * the sender summary, so we only deal with human-readable in iperf_print_results()
3470 if (! test->json_output) { in iperf_print_results()
3471 if (receiver_packet_count - sp->omitted_packet_count > 0) { in iperf_print_results()
3472 …lost_percent = 100.0 * (sp->cnt_error - sp->omitted_cnt_error) / (receiver_packet_count - sp->omit… in iperf_print_results()
3478 if (test->role == 's' && sp->sender) { in iperf_print_results()
3479 if (test->verbose) in iperf_print_results()
3480 … iperf_printf(test, report_receiver_not_available_format, sp->socket); in iperf_print_results()
3483 …, sp->socket, mbuf, start_time, receiver_time, ubuf, nbuf, sp->jitter * 1000.0, (sp->cnt_error - s… in iperf_print_results()
3491 if (test->num_streams > 1 || test->json_output) { in iperf_print_results()
3500 unit_snprintf(nbuf, UNIT_LEN, bandwidth, test->settings->unit_format); in iperf_print_results()
3501 if (test->protocol->id == Ptcp || test->protocol->id == Psctp) { in iperf_print_results()
3502 if (test->sender_has_retransmits) { in iperf_print_results()
3504 if (test->json_output) in iperf_print_results()
3505 …cJSON_AddItemToObject(test->json_end, "sum_sent", iperf_json_printf("start: %f end: %f seconds: … in iperf_print_results()
3507 if (test->role == 's' && !stream_must_be_sender) { in iperf_print_results()
3508 if (test->verbose) in iperf_print_results()
3516 if (test->json_output) in iperf_print_results()
3517 …cJSON_AddItemToObject(test->json_end, "sum_sent", iperf_json_printf("start: %f end: %f seconds: … in iperf_print_results()
3519 if (test->role == 's' && !stream_must_be_sender) { in iperf_print_results()
3520 if (test->verbose) in iperf_print_results()
3535 unit_snprintf(nbuf, UNIT_LEN, bandwidth, test->settings->unit_format); in iperf_print_results()
3536 if (test->json_output) in iperf_print_results()
3537 …cJSON_AddItemToObject(test->json_end, "sum_received", iperf_json_printf("start: %f end: %f secon… in iperf_print_results()
3539 if (test->role == 's' && stream_must_be_sender) { in iperf_print_results()
3540 if (test->verbose) in iperf_print_results()
3548 avg_jitter /= test->num_streams; in iperf_print_results()
3556 if (test->json_output) in iperf_print_results()
3557 …cJSON_AddItemToObject(test->json_end, "sum", iperf_json_printf("start: %f end: %f seconds: %f b… in iperf_print_results()
3564 if (! (test->role == 's' && !stream_must_be_sender) ) { in iperf_print_results()
3568 if (! (test->role == 's' && stream_must_be_sender) ) { in iperf_print_results()
3578 unit_snprintf(nbuf, UNIT_LEN, bandwidth, test->settings->unit_format); in iperf_print_results()
3585 if (test->json_output && current_mode == upper_mode) { in iperf_print_results()
3586->json_end, "cpu_utilization_percent", iperf_json_printf("host_total: %f host_user: %f host_syst… in iperf_print_results()
3587 if (test->protocol->id == Ptcp) { in iperf_print_results()
3590 snd_congestion = test->congestion_used; in iperf_print_results()
3591 rcv_congestion = test->remote_congestion_used; in iperf_print_results()
3594 snd_congestion = test->remote_congestion_used; in iperf_print_results()
3595 rcv_congestion = test->congestion_used; in iperf_print_results()
3598 … cJSON_AddStringToObject(test->json_end, "sender_tcp_congestion", snd_congestion); in iperf_print_results()
3601 … cJSON_AddStringToObject(test->json_end, "receiver_tcp_congestion", rcv_congestion); in iperf_print_results()
3606 if (test->verbose) { in iperf_print_results()
3608 if (test->bidirectional) { in iperf_print_results()
3609->cpu_util[0], test->cpu_util[1], test->cpu_util[2], report_remote, stream_must_be_sender?report_r… in iperf_print_results()
3610->cpu_util[0], test->cpu_util[1], test->cpu_util[2], report_remote, !stream_must_be_sender?report_… in iperf_print_results()
3612->cpu_util[0], test->cpu_util[1], test->cpu_util[2], report_remote, stream_must_be_sender?report_r… in iperf_print_results()
3614 if (test->protocol->id == Ptcp) { in iperf_print_results()
3617 snd_congestion = test->congestion_used; in iperf_print_results()
3618 rcv_congestion = test->remote_congestion_used; in iperf_print_results()
3621 snd_congestion = test->remote_congestion_used; in iperf_print_results()
3622 rcv_congestion = test->congestion_used; in iperf_print_results()
3634 if (test->role == 'c' && iperf_get_test_get_server_output(test) && !test->json_output) { in iperf_print_results()
3635 if (test->json_server_output) { in iperf_print_results()
3636 char *str = cJSON_Print(test->json_server_output); in iperf_print_results()
3639 cJSON_Delete(test->json_server_output); in iperf_print_results()
3640 test->json_server_output = NULL; in iperf_print_results()
3642 if (test->server_output_text) { in iperf_print_results()
3643 iperf_printf(test, "\nServer output:\n%s\n", test->server_output_text); in iperf_print_results()
3644 test->server_output_text = NULL; in iperf_print_results()
3651 if (test->mode == BIDIRECTIONAL) in iperf_print_results()
3652 test->sender_has_retransmits = tmp_sender_has_retransmits; in iperf_print_results()
3658 * Main report-printing callback.
3666 switch (test->state) { in iperf_reporter_callback()
3699 if (test->mode == BIDIRECTIONAL) { in print_interval_results()
3700 sprintf(mbuf, "[%s-%s]", sp->sender?"TX":"RX", test->role == 'c'?"C":"S"); in print_interval_results()
3706 irp = TAILQ_LAST(&sp->result->interval_results, irlisthead); /* get last entry in linked list */ in print_interval_results()
3711 if (!test->json_output) { in print_interval_results()
3713 if (sp == SLIST_FIRST(&test->streams)) { in print_interval_results()
3718 if (iperf_time_compare(&sp->result->start_time, &irp->interval_start_time) == 0) { in print_interval_results()
3719 if (test->protocol->id == Ptcp || test->protocol->id == Psctp) { in print_interval_results()
3720 if (test->sender_has_retransmits == 1) { in print_interval_results()
3721 if (test->bidirectional) in print_interval_results()
3727 if (test->bidirectional) in print_interval_results()
3733 if (test->mode == SENDER) { in print_interval_results()
3735 } else if (test->mode == RECEIVER){ in print_interval_results()
3742 } else if (test->num_streams > 1) in print_interval_results()
3747 unit_snprintf(ubuf, UNIT_LEN, (double) (irp->bytes_transferred), 'A'); in print_interval_results()
3748 if (irp->interval_duration > 0.0) { in print_interval_results()
3749 bandwidth = (double) irp->bytes_transferred / (double) irp->interval_duration; in print_interval_results()
3754 unit_snprintf(nbuf, UNIT_LEN, bandwidth, test->settings->unit_format); in print_interval_results()
3756 iperf_time_diff(&sp->result->start_time, &irp->interval_start_time, &temp_time); in print_interval_results()
3758 iperf_time_diff(&sp->result->start_time, &irp->interval_end_time, &temp_time); in print_interval_results()
3761 if (test->protocol->id == Ptcp || test->protocol->id == Psctp) { in print_interval_results()
3762 if (test->sender_has_retransmits == 1 && sp->sender) { in print_interval_results()
3764 if (test->json_output) in print_interval_results()
3765seconds: %f bytes: %d bits_per_second: %f retransmits: %d snd_cwnd: %d rtt: %d rttvar: %d … in print_interval_results()
3767 unit_snprintf(cbuf, UNIT_LEN, irp->snd_cwnd, 'A'); in print_interval_results()
3768 …tf(test, report_bw_retrans_cwnd_format, sp->socket, mbuf, st, et, ubuf, nbuf, irp->interval_retran… in print_interval_results()
3772 if (test->json_output) in print_interval_results()
3773seconds: %f bytes: %d bits_per_second: %f omitted: %b sender: %b", (int64_t) sp->socket, (doubl… in print_interval_results()
3775 …iperf_printf(test, report_bw_format, sp->socket, mbuf, st, et, ubuf, nbuf, irp->omitted?report_omi… in print_interval_results()
3779 if (sp->sender) { in print_interval_results()
3780 if (test->json_output) in print_interval_results()
3781seconds: %f bytes: %d bits_per_second: %f packets: %d omitted: %b sender: %b", (int64_t) sp->s… in print_interval_results()
3783 …f(test, report_bw_udp_sender_format, sp->socket, mbuf, st, et, ubuf, nbuf, zbuf, irp->interval_pac… in print_interval_results()
3785 if (irp->interval_packet_count > 0) { in print_interval_results()
3786 lost_percent = 100.0 * irp->interval_cnt_error / irp->interval_packet_count; in print_interval_results()
3791 if (test->json_output) in print_interval_results()
3792seconds: %f bytes: %d bits_per_second: %f jitter_ms: %f lost_packets: %d packets: %d lost_pe… in print_interval_results()
3794 …p_format, sp->socket, mbuf, st, et, ubuf, nbuf, irp->jitter * 1000.0, irp->interval_cnt_error, irp in print_interval_results()
3798 if (test->logfile || test->forceflush) in print_interval_results()
3809 munmap(sp->buffer, sp->test->settings->blksize); in iperf_free_stream()
3810 close(sp->buffer_fd); in iperf_free_stream()
3811 if (sp->diskfile_fd >= 0) in iperf_free_stream()
3812 close(sp->diskfile_fd); in iperf_free_stream()
3813 for (irp = TAILQ_FIRST(&sp->result->interval_results); irp != NULL; irp = nirp) { in iperf_free_stream()
3817 free(sp->result); in iperf_free_stream()
3818 if (sp->send_timer != NULL) in iperf_free_stream()
3819 tmr_cancel(sp->send_timer); in iperf_free_stream()
3831 if (test->tmp_template) { in iperf_new_stream()
3832 snprintf(template, sizeof(template) / sizeof(char), "%s", test->tmp_template); in iperf_new_stream()
3856 sp->sender = sender; in iperf_new_stream()
3857 sp->test = test; in iperf_new_stream()
3858 sp->settings = test->settings; in iperf_new_stream()
3859 sp->result = (struct iperf_stream_result *) malloc(sizeof(struct iperf_stream_result)); in iperf_new_stream()
3860 if (!sp->result) { in iperf_new_stream()
3866 memset(sp->result, 0, sizeof(struct iperf_stream_result)); in iperf_new_stream()
3867 TAILQ_INIT(&sp->result->interval_results); in iperf_new_stream()
3870 sp->buffer_fd = mkstemp(template); in iperf_new_stream()
3871 if (sp->buffer_fd == -1) { in iperf_new_stream()
3873 free(sp->result); in iperf_new_stream()
3879 free(sp->result); in iperf_new_stream()
3883 if (ftruncate(sp->buffer_fd, test->settings->blksize) < 0) { in iperf_new_stream()
3885 free(sp->result); in iperf_new_stream()
3889 …sp->buffer = (char *) mmap(NULL, test->settings->blksize, PROT_READ|PROT_WRITE, MAP_PRIVATE, sp->b… in iperf_new_stream()
3890 if (sp->buffer == MAP_FAILED) { in iperf_new_stream()
3892 free(sp->result); in iperf_new_stream()
3898 sp->socket = s; in iperf_new_stream()
3900 sp->snd = test->protocol->send; in iperf_new_stream()
3901 sp->rcv = test->protocol->recv; in iperf_new_stream()
3903 if (test->diskfile_name != (char*) 0) { in iperf_new_stream()
3904 …sp->diskfile_fd = open(test->diskfile_name, sender ? O_RDONLY : (O_WRONLY|O_CREAT|O_TRUNC), S_IRUS… in iperf_new_stream()
3905 if (sp->diskfile_fd == -1) { in iperf_new_stream()
3907 munmap(sp->buffer, sp->test->settings->blksize); in iperf_new_stream()
3908 free(sp->result); in iperf_new_stream()
3912 sp->snd2 = sp->snd; in iperf_new_stream()
3913 sp->snd = diskfile_send; in iperf_new_stream()
3914 sp->rcv2 = sp->rcv; in iperf_new_stream()
3915 sp->rcv = diskfile_recv; in iperf_new_stream()
3917 sp->diskfile_fd = -1; in iperf_new_stream()
3920 if (test->repeating_payload) in iperf_new_stream()
3921 fill_with_repeating_pattern(sp->buffer, test->settings->blksize); in iperf_new_stream()
3923 ret = readentropy(sp->buffer, test->settings->blksize); in iperf_new_stream()
3926 close(sp->buffer_fd); in iperf_new_stream()
3927 munmap(sp->buffer, sp->test->settings->blksize); in iperf_new_stream()
3928 free(sp->result); in iperf_new_stream()
3945 if (getsockname(sp->socket, (struct sockaddr *) &sp->local_addr, &len) < 0) { in iperf_init_stream()
3947 return -1; in iperf_init_stream()
3950 if (getpeername(sp->socket, (struct sockaddr *) &sp->remote_addr, &len) < 0) { in iperf_init_stream()
3952 return -1; in iperf_init_stream()
3956 if ((opt = test->settings->tos)) { in iperf_init_stream()
3957 if (getsockdomain(sp->socket) == AF_INET6) { in iperf_init_stream()
3959 if (setsockopt(sp->socket, IPPROTO_IPV6, IPV6_TCLASS, &opt, sizeof(opt)) < 0) { in iperf_init_stream()
3961 return -1; in iperf_init_stream()
3965 return -1; in iperf_init_stream()
3968 if (setsockopt(sp->socket, IPPROTO_IP, IP_TOS, &opt, sizeof(opt)) < 0) { in iperf_init_stream()
3970 return -1; in iperf_init_stream()
3985 if (SLIST_EMPTY(&test->streams)) { in iperf_add_stream()
3986 SLIST_INSERT_HEAD(&test->streams, sp, streams); in iperf_add_stream()
3987 sp->id = 1; in iperf_add_stream()
3989 // for (n = test->streams, i = 2; n->next; n = n->next, ++i); in iperf_add_stream()
3991 SLIST_FOREACH(n, &test->streams, streams) { in iperf_add_stream()
3996 sp->id = i; in iperf_add_stream()
4001 ** when there's a -F flag. They handle the file stuff and call the real
4005 ** case of no -F flag, there is zero extra overhead.
4015 if (sp->diskfile_left < sp->test->settings->blksize && !sp->test->done) { in diskfile_send()
4016 r = read(sp->diskfile_fd, sp->buffer, sp->test->settings->blksize - in diskfile_send()
4017 sp->diskfile_left); in diskfile_send()
4019 if (sp->test->debug) { in diskfile_send()
4021 if (r != sp->test->settings->blksize - sp->diskfile_left) in diskfile_send()
4025 if (r == 0 && sp->diskfile_left == 0) { in diskfile_send()
4026 sp->test->done = 1; in diskfile_send()
4027 if (sp->test->debug) in diskfile_send()
4032 r = sp->snd2(sp); in diskfile_send()
4042 sp->diskfile_left = sp->test->settings->blksize - r; in diskfile_send()
4043 if (sp->diskfile_left && sp->diskfile_left < sp->test->settings->blksize) { in diskfile_send()
4044 memcpy(sp->buffer, in diskfile_send()
4045 sp->buffer + (sp->test->settings->blksize - sp->diskfile_left), in diskfile_send()
4046 sp->diskfile_left); in diskfile_send()
4047 if (sp->test->debug) in diskfile_send()
4048 …printf("Shifting %d bytes by %d\n", sp->diskfile_left, (sp->test->settings->blksize - sp->diskfile… in diskfile_send()
4058 r = sp->rcv2(sp); in diskfile_recv()
4060 (void) write(sp->diskfile_fd, sp->buffer, r); in diskfile_recv()
4061 (void) fsync(sp->diskfile_fd); in diskfile_recv()
4083 * Depending on the current state of the test (and the role of this
4094 if (test->role == 'c' || in iperf_got_sigend()
4095 (test->role == 's' && test->state == TEST_RUNNING)) { in iperf_got_sigend()
4097 test->done = 1; in iperf_got_sigend()
4098 cpu_util(test->cpu_util); in iperf_got_sigend()
4099 test->stats_callback(test); in iperf_got_sigend()
4100 test->state = DISPLAY_RESULTS; /* change local state only */ in iperf_got_sigend()
4101 if (test->on_test_finish) in iperf_got_sigend()
4102 test->on_test_finish(test); in iperf_got_sigend()
4103 test->reporter_callback(test); in iperf_got_sigend()
4106 if (test->ctrl_sck >= 0) { in iperf_got_sigend()
4107 test->state = (test->role == 'c') ? CLIENT_TERMINATE : SERVER_TERMINATE; in iperf_got_sigend()
4108 (void) Nwrite(test->ctrl_sck, (char*) &test->state, sizeof(signed char), Ptcp); in iperf_got_sigend()
4110 i_errno = (test->role == 'c') ? IECLIENTTERM : IESERVERTERM; in iperf_got_sigend()
4111 iperf_errexit(test, "interrupt - %s", iperf_strerror(i_errno)); in iperf_got_sigend()
4114 /* Try to write a PID file if requested, return -1 on an error. */
4118 if (test->pidfile) { in iperf_create_pidfile()
4123 fd = open(test->pidfile, O_RDONLY, 0); in iperf_create_pidfile()
4125 if (read(fd, buf, sizeof(buf) - 1) >= 0) { in iperf_create_pidfile()
4139 free(test->pidfile); in iperf_create_pidfile()
4140 test->pidfile = NULL; in iperf_create_pidfile()
4151 fd = open(test->pidfile, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR|S_IWUSR); in iperf_create_pidfile()
4153 return -1; in iperf_create_pidfile()
4157 return -1; in iperf_create_pidfile()
4160 return -1; in iperf_create_pidfile()
4166 /* Get rid of a PID file, return -1 on error. */
4170 if (test->pidfile) { in iperf_delete_pidfile()
4171 if (unlink(test->pidfile) < 0) { in iperf_delete_pidfile()
4172 return -1; in iperf_delete_pidfile()
4181 test->json_top = cJSON_CreateObject(); in iperf_json_start()
4182 if (test->json_top == NULL) in iperf_json_start()
4183 return -1; in iperf_json_start()
4184 test->json_start = cJSON_CreateObject(); in iperf_json_start()
4185 if (test->json_start == NULL) in iperf_json_start()
4186 return -1; in iperf_json_start()
4187 cJSON_AddItemToObject(test->json_top, "start", test->json_start); in iperf_json_start()
4188 test->json_connected = cJSON_CreateArray(); in iperf_json_start()
4189 if (test->json_connected == NULL) in iperf_json_start()
4190 return -1; in iperf_json_start()
4191 cJSON_AddItemToObject(test->json_start, "connected", test->json_connected); in iperf_json_start()
4192 test->json_intervals = cJSON_CreateArray(); in iperf_json_start()
4193 if (test->json_intervals == NULL) in iperf_json_start()
4194 return -1; in iperf_json_start()
4195 cJSON_AddItemToObject(test->json_top, "intervals", test->json_intervals); in iperf_json_start()
4196 test->json_end = cJSON_CreateObject(); in iperf_json_start()
4197 if (test->json_end == NULL) in iperf_json_start()
4198 return -1; in iperf_json_start()
4199 cJSON_AddItemToObject(test->json_top, "end", test->json_end); in iperf_json_start()
4206 if (test->title) in iperf_json_finish()
4207 cJSON_AddStringToObject(test->json_top, "title", test->title); in iperf_json_finish()
4208 if (test->extra_data) in iperf_json_finish()
4209 cJSON_AddStringToObject(test->json_top, "extra_data", test->extra_data); in iperf_json_finish()
4211 if (test->json_server_output) { in iperf_json_finish()
4212 cJSON_AddItemToObject(test->json_top, "server_output_json", test->json_server_output); in iperf_json_finish()
4214 if (test->server_output_text) { in iperf_json_finish()
4215 cJSON_AddStringToObject(test->json_top, "server_output_text", test->server_output_text); in iperf_json_finish()
4217 test->json_output_string = cJSON_Print(test->json_top); in iperf_json_finish()
4218 if (test->json_output_string == NULL) in iperf_json_finish()
4219 return -1; in iperf_json_finish()
4220 fprintf(test->outfile, "%s\n", test->json_output_string); in iperf_json_finish()
4222 cJSON_free(test->json_output_string); in iperf_json_finish()
4223 test->json_output_string = NULL; in iperf_json_finish()
4224 cJSON_Delete(test->json_top); in iperf_json_finish()
4225 …test->json_top = test->json_start = test->json_connected = test->json_intervals = test->json_serve… in iperf_json_finish()
4230 /* CPU affinity stuff - Linux, FreeBSD, and Windows only. */
4242 return -1; in iperf_setaffinity()
4248 if(cpuset_getaffinity(CPU_LEVEL_WHICH, CPU_WHICH_PID, -1, in iperf_setaffinity()
4249 sizeof(cpuset_t), &test->cpumask) != 0) { in iperf_setaffinity()
4251 return -1; in iperf_setaffinity()
4257 if(cpuset_setaffinity(CPU_LEVEL_WHICH,CPU_WHICH_PID, -1, in iperf_setaffinity()
4260 return -1; in iperf_setaffinity()
4269 return -1; in iperf_setaffinity()
4274 return -1; in iperf_setaffinity()
4290 return -1; in iperf_clearaffinity()
4294 if(cpuset_setaffinity(CPU_LEVEL_WHICH,CPU_WHICH_PID, -1, in iperf_clearaffinity()
4295 sizeof(cpuset_t), &test->cpumask) != 0) { in iperf_clearaffinity()
4297 return -1; in iperf_clearaffinity()
4308 return -1; in iperf_clearaffinity()
4313 return -1; in iperf_clearaffinity()
4323 int r = -1; in iperf_printf()
4344 * of the server output with --get-server-output) that could in iperf_printf()
4348 if (test->role == 'c') { in iperf_printf()
4350 fprintf(test->outfile, "%s", ct); in iperf_printf()
4352 if (test->title) in iperf_printf()
4353 fprintf(test->outfile, "%s: ", test->title); in iperf_printf()
4355 r = vfprintf(test->outfile, format, argp); in iperf_printf()
4358 else if (test->role == 's') { in iperf_printf()
4367 fprintf(test->outfile, "%s", linebuffer); in iperf_printf()
4369 if (test->role == 's' && iperf_get_test_get_server_output(test)) { in iperf_printf()
4371 l->line = strdup(linebuffer); in iperf_printf()
4372 TAILQ_INSERT_TAIL(&(test->server_output_list), l, textlineentries); in iperf_printf()
4381 return fflush(test->outfile); in iflush()