diff --git a/src/iperf_api.c b/src/iperf_api.c index 7f94129..eacf666 100644 --- a/src/iperf_api.c +++ b/src/iperf_api.c @@ -143,6 +143,8 @@ iperf_init_test(struct iperf_test *test) { char *prot; struct iperf_stream *sp; + int64_t dtargus; + /* XXX: These variables were used in the old UDP code int64_t delayus, adjustus, dtargus; @@ -150,8 +152,7 @@ iperf_init_test(struct iperf_test *test) if (test->protocol == Pudp) { prot = "UDP"; - -/* XXX: This code isn't currently used and will most likely be changed +/* XXX: Trying my own implementation dtargus = (int64_t) (test->default_settings->blksize) * SEC_TO_US * 8; dtargus /= test->default_settings->rate; @@ -165,7 +166,13 @@ iperf_init_test(struct iperf_test *test) for (sp = test->streams; sp != NULL; sp = sp->next) sp->send_timer = new_timer(0, dtargus); */ + dtargus = (int64_t) test->default_settings->blksize * SEC_TO_US * 8; + dtargus /= test->default_settings->rate; + assert(dtargus != 0); + + for (sp = test->streams; sp; sp = sp->next) + sp->send_timer = new_timer(dtargus / SEC_TO_US, dtargus % SEC_TO_US); } else { prot = "TCP"; } @@ -219,6 +226,11 @@ package_parameters(struct iperf_test *test) strncat(pstring, optbuf, sizeof(pstring)); } + if (test->default_settings->rate) { + snprintf(optbuf, sizeof(optbuf), "-b %llu ", test->default_settings->rate); + strncat(pstring, optbuf, sizeof(pstring)); + } + if (test->default_settings->mss) { snprintf(optbuf, sizeof(optbuf), "-m %d ", test->default_settings->mss); strncat(pstring, optbuf, sizeof(pstring)); @@ -284,7 +296,7 @@ parse_parameters(struct iperf_test *test) n++; } - while ((ch = getopt(n, params, "pt:n:m:uP:Rw:l:")) != -1) { + while ((ch = getopt(n, params, "pt:n:m:uP:Rw:l:b:")) != -1) { switch (ch) { case 'p': test->protocol = Ptcp; @@ -314,6 +326,9 @@ parse_parameters(struct iperf_test *test) case 'l': test->default_settings->blksize = atoi(optarg); break; + case 'b': + test->default_settings->rate = atoll(optarg); + break; } } #ifdef __APPLE__ diff --git a/src/iperf_udp.c b/src/iperf_udp.c index eb33eda..ad7a936 100644 --- a/src/iperf_udp.c +++ b/src/iperf_udp.c @@ -59,11 +59,6 @@ iperf_udp_recv(struct iperf_stream *sp) double transit = 0, d = 0; struct timeval sent_time, arrival_time; - // XXX: Is this necessary? We've already checked the buffer to see if it's allocated. - if (!sp->buffer) { - fprintf(stderr, "receive buffer not allocated \n"); - exit(0); - } #ifdef USE_SEND do { result = recv(sp->socket, sp->buffer, size, 0); @@ -127,18 +122,13 @@ iperf_udp_send(struct iperf_stream *sp) int size = sp->settings->blksize; struct timeval before, after; - /* - * the || part ensures that last packet is sent to server - the - * STREAM_END MESSAGE - */ -// if (sp->send_timer->expired(sp->send_timer) || sp->settings->state == STREAM_END) { + if (timer_expired(sp->send_timer)) { -/* dtargus = (int64_t) (sp->settings->blksize) * SEC_TO_US * 8; dtargus /= sp->settings->rate; assert(dtargus != 0); -*/ + if (gettimeofday(&before, 0) < 0) perror("gettimeofday"); ++sp->packet_count; @@ -161,17 +151,10 @@ iperf_udp_send(struct iperf_stream *sp) sp->result->bytes_sent += result; sp->result->bytes_sent_this_interval += result; -/* + if (gettimeofday(&after, 0) < 0) perror("gettimeofday"); - // - // CHECK: Packet length and ID if(sp->settings->state == - // STREAM_RUNNING) printf("State = %d Outgoing packet = %d AND SP = - // %d\n",sp->settings->state, sp->packet_count, sp->socket); - // - - adjustus = dtargus; adjustus += (before.tv_sec - after.tv_sec) * SEC_TO_US; adjustus += (before.tv_usec - after.tv_usec); @@ -179,10 +162,10 @@ iperf_udp_send(struct iperf_stream *sp) if (adjustus > 0) { dtargus = adjustus; } - // RESET THE TIMER + update_timer(sp->send_timer, 0, dtargus); -// } // timer_expired_micro -*/ + } + return result; }