implemented code review changes from r81 -r87
This commit is contained in:
parent
c5826da269
commit
d70a792d6c
106
src/iperf_api.c
106
src/iperf_api.c
@ -30,7 +30,7 @@ enum {
|
|||||||
Pudp = SOCK_DGRAM,
|
Pudp = SOCK_DGRAM,
|
||||||
|
|
||||||
uS_TO_NS = 1000,
|
uS_TO_NS = 1000,
|
||||||
|
RATE = 1000000,
|
||||||
MAX_BUFFER_SIZE =10,
|
MAX_BUFFER_SIZE =10,
|
||||||
DEFAULT_UDP_BUFSIZE = 1470,
|
DEFAULT_UDP_BUFSIZE = 1470,
|
||||||
DEFAULT_TCP_BUFSIZE = 8192
|
DEFAULT_TCP_BUFSIZE = 8192
|
||||||
@ -113,8 +113,8 @@ void Display(struct iperf_test *test)
|
|||||||
int iperf_tcp_recv(struct iperf_stream *sp)
|
int iperf_tcp_recv(struct iperf_stream *sp)
|
||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
int size = ((struct iperf_settings *)(sp->settings))->bufsize;
|
int size = ((struct iperf_settings *) sp->settings)->bufsize;
|
||||||
char* buf = (char *)malloc(sizeof(size));
|
char* buf = (char *) malloc(size);
|
||||||
if(!buf)
|
if(!buf)
|
||||||
{
|
{
|
||||||
perror("malloc: unable to allocate receive buffer");
|
perror("malloc: unable to allocate receive buffer");
|
||||||
@ -135,8 +135,8 @@ int iperf_udp_recv(struct iperf_stream *sp)
|
|||||||
{
|
{
|
||||||
|
|
||||||
int result;
|
int result;
|
||||||
int size = ((struct iperf_settings *)(sp->settings))->bufsize;
|
int size = ((struct iperf_settings *) sp->settings)->bufsize;
|
||||||
char* buf = (char *)malloc(sizeof(size));
|
char* buf = (char *) malloc(size);
|
||||||
|
|
||||||
if(!buf)
|
if(!buf)
|
||||||
{
|
{
|
||||||
@ -156,7 +156,7 @@ int iperf_udp_recv(struct iperf_stream *sp)
|
|||||||
int iperf_tcp_send(struct iperf_stream *sp)
|
int iperf_tcp_send(struct iperf_stream *sp)
|
||||||
{
|
{
|
||||||
int result,i;
|
int result,i;
|
||||||
int size = ((struct iperf_settings *)(sp->settings))->bufsize;
|
int size = ((struct iperf_settings *) sp->settings)->bufsize;
|
||||||
|
|
||||||
char *buf = (char *) malloc(size);
|
char *buf = (char *) malloc(size);
|
||||||
if(!buf)
|
if(!buf)
|
||||||
@ -175,7 +175,7 @@ int iperf_tcp_send(struct iperf_stream *sp)
|
|||||||
int iperf_udp_send(struct iperf_stream *sp)
|
int iperf_udp_send(struct iperf_stream *sp)
|
||||||
{
|
{
|
||||||
int result,i;
|
int result,i;
|
||||||
int size = ((struct iperf_settings *)(sp->settings))->bufsize;
|
int size = ((struct iperf_settings *) sp->settings)->bufsize;
|
||||||
char *buf = (char *) malloc(size);
|
char *buf = (char *) malloc(size);
|
||||||
if(!buf)
|
if(!buf)
|
||||||
{
|
{
|
||||||
@ -231,7 +231,7 @@ void iperf_defaults(struct iperf_test *testp)
|
|||||||
|
|
||||||
testp->default_settings->socket_bufsize = 1024*1024;
|
testp->default_settings->socket_bufsize = 1024*1024;
|
||||||
testp->default_settings->bufsize = DEFAULT_TCP_BUFSIZE;
|
testp->default_settings->bufsize = DEFAULT_TCP_BUFSIZE;
|
||||||
testp->default_settings->rate = 1000000;
|
testp->default_settings->rate = RATE;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -272,8 +272,8 @@ void iperf_init_test(struct iperf_test *test)
|
|||||||
|
|
||||||
else if( test->role == 'c')
|
else if( test->role == 'c')
|
||||||
{
|
{
|
||||||
FD_ZERO(&(test->write_set));
|
FD_ZERO(&test->write_set);
|
||||||
FD_SET(s, &(test->write_set));
|
FD_SET(s, &test->write_set);
|
||||||
|
|
||||||
inet_ntop(AF_INET, &((struct sockaddr_in *)(test->remote_addr))->sin_addr, client, sizeof(client));
|
inet_ntop(AF_INET, &((struct sockaddr_in *)(test->remote_addr))->sin_addr, client, sizeof(client));
|
||||||
port = ntohs(((struct sockaddr_in *)(test->remote_addr))->sin_port);
|
port = ntohs(((struct sockaddr_in *)(test->remote_addr))->sin_port);
|
||||||
@ -288,8 +288,8 @@ void iperf_init_test(struct iperf_test *test)
|
|||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
FD_SET(s, &(test->write_set));
|
FD_SET(s, &test->write_set);
|
||||||
test->max_fd = (test->max_fd < s)?s:test->max_fd;
|
test->max_fd = (test->max_fd < s) ? s : test->max_fd;
|
||||||
|
|
||||||
set_tcp_windowsize(sp->socket, test->default_settings->socket_bufsize, SO_SNDBUF);
|
set_tcp_windowsize(sp->socket, test->default_settings->socket_bufsize, SO_SNDBUF);
|
||||||
|
|
||||||
@ -317,8 +317,6 @@ void iperf_free_test(struct iperf_test *test)
|
|||||||
free(test);
|
free(test);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// MAY BE WE NEED TO PASS STREAM AS PARAM
|
|
||||||
void *iperf_stats_callback(struct iperf_test *test)
|
void *iperf_stats_callback(struct iperf_test *test)
|
||||||
{
|
{
|
||||||
char ubuf[UNIT_LEN];
|
char ubuf[UNIT_LEN];
|
||||||
@ -340,11 +338,10 @@ void iperf_free_stream(struct iperf_test *test, struct iperf_stream *sp)
|
|||||||
prev = test->streams;
|
prev = test->streams;
|
||||||
start = test->streams;
|
start = test->streams;
|
||||||
|
|
||||||
if(test->streams->socket == sp->socket){
|
if(test->streams->socket == sp->socket)
|
||||||
|
{
|
||||||
test->streams = test->streams->next;
|
test->streams = test->streams->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
start= test->streams->next;
|
start= test->streams->next;
|
||||||
@ -353,11 +350,7 @@ void iperf_free_stream(struct iperf_test *test, struct iperf_stream *sp)
|
|||||||
{
|
{
|
||||||
if(start->socket == sp->socket){
|
if(start->socket == sp->socket){
|
||||||
|
|
||||||
prev->next = sp->next;
|
prev->next = sp->next;
|
||||||
|
|
||||||
free(sp->settings);
|
|
||||||
free(sp->result);
|
|
||||||
free(sp);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -366,11 +359,11 @@ void iperf_free_stream(struct iperf_test *test, struct iperf_stream *sp)
|
|||||||
start=start->next;
|
start=start->next;
|
||||||
prev=prev->next;
|
prev=prev->next;
|
||||||
}
|
}
|
||||||
if(start->next == NULL)
|
}
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
sp->settings = NULL;
|
||||||
|
free(sp->result);
|
||||||
|
free(sp);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -460,15 +453,12 @@ int iperf_udp_accept(struct iperf_test *test)
|
|||||||
char *buf;
|
char *buf;
|
||||||
socklen_t len;
|
socklen_t len;
|
||||||
int sz;
|
int sz;
|
||||||
|
|
||||||
|
|
||||||
buf = (char *) malloc(test->default_settings->bufsize);
|
buf = (char *) malloc(test->default_settings->bufsize);
|
||||||
sp = test->new_stream(test);
|
|
||||||
len = sizeof sa_peer;
|
len = sizeof sa_peer;
|
||||||
|
|
||||||
sz = recvfrom(test->listener_sock, buf, test->default_settings->bufsize, 0, (struct sockaddr *) &sa_peer, &len);
|
sz = recvfrom(test->listener_sock, buf, test->default_settings->bufsize, 0, (struct sockaddr *) &sa_peer, &len);
|
||||||
|
|
||||||
|
|
||||||
if(!sz)
|
if(!sz)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@ -478,10 +468,11 @@ int iperf_udp_accept(struct iperf_test *test)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
sp->result->bytes_sent+=sz;
|
sp = test->new_stream(test);
|
||||||
|
|
||||||
sp->socket = test->listener_sock;
|
sp->socket = test->listener_sock;
|
||||||
|
|
||||||
iperf_init_stream(sp, test);
|
iperf_init_stream(sp, test);
|
||||||
|
sp->result->bytes_received+= sz;
|
||||||
iperf_add_stream(test, sp);
|
iperf_add_stream(test, sp);
|
||||||
|
|
||||||
test->listener_sock = netannounce(test->protocol, NULL, test->listener_port);
|
test->listener_sock = netannounce(test->protocol, NULL, test->listener_port);
|
||||||
@ -489,8 +480,8 @@ int iperf_udp_accept(struct iperf_test *test)
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
|
||||||
FD_SET(test->listener_sock, &(test->read_set));
|
FD_SET(test->listener_sock, &test->read_set);
|
||||||
test->max_fd = (test->max_fd < test->listener_sock)?test->listener_sock:test->max_fd;
|
test->max_fd = (test->max_fd < test->listener_sock) ? test->listener_sock : test->max_fd;
|
||||||
|
|
||||||
printf("%d socket created for new UDP stream \n", sp->socket);
|
printf("%d socket created for new UDP stream \n", sp->socket);
|
||||||
|
|
||||||
@ -509,7 +500,7 @@ int iperf_tcp_accept(struct iperf_test *test)
|
|||||||
struct iperf_stream *sp;
|
struct iperf_stream *sp;
|
||||||
|
|
||||||
len = sizeof(addr);
|
len = sizeof(addr);
|
||||||
peersock = accept(test->listener_sock,(struct sockaddr *) &addr, &len);
|
peersock = accept(test->listener_sock, (struct sockaddr *) &addr, &len);
|
||||||
if (peersock < 0)
|
if (peersock < 0)
|
||||||
{
|
{
|
||||||
printf("Error in accept(): %s\n", strerror(errno));
|
printf("Error in accept(): %s\n", strerror(errno));
|
||||||
@ -520,8 +511,8 @@ int iperf_tcp_accept(struct iperf_test *test)
|
|||||||
sp = test->new_stream(test);
|
sp = test->new_stream(test);
|
||||||
//setnonblocking(peersock);
|
//setnonblocking(peersock);
|
||||||
|
|
||||||
FD_SET(peersock,&(test->read_set));
|
FD_SET(peersock, &test->read_set);
|
||||||
test->max_fd = (test->max_fd < peersock)?peersock:test->max_fd;
|
test->max_fd = (test->max_fd < peersock) ? peersock : test->max_fd;
|
||||||
|
|
||||||
sp->socket = peersock;
|
sp->socket = peersock;
|
||||||
iperf_init_stream(sp, test);
|
iperf_init_stream(sp, test);
|
||||||
@ -540,8 +531,8 @@ void iperf_init_stream(struct iperf_stream *sp, struct iperf_test *testp)
|
|||||||
int x;
|
int x;
|
||||||
len = sizeof(struct sockaddr_in);
|
len = sizeof(struct sockaddr_in);
|
||||||
|
|
||||||
sp->local_port = (((struct sockaddr_in *)(testp->local_addr))->sin_port);
|
sp->local_port = ((struct sockaddr_in *) (testp->local_addr))->sin_port;
|
||||||
sp->remote_port = (((struct sockaddr_in *)(testp->remote_addr))->sin_port);
|
sp->remote_port = ((struct sockaddr_in *) (testp->remote_addr))->sin_port;
|
||||||
|
|
||||||
sp->protocol = testp->protocol;
|
sp->protocol = testp->protocol;
|
||||||
|
|
||||||
@ -599,9 +590,7 @@ struct iperf_stream * update_stream(struct iperf_test *test, int j, int add)
|
|||||||
{
|
{
|
||||||
struct iperf_stream *n;
|
struct iperf_stream *n;
|
||||||
n=test->streams;
|
n=test->streams;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//find the correct stream for update
|
//find the correct stream for update
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
@ -629,18 +618,19 @@ void iperf_run_server(struct iperf_test *test)
|
|||||||
int j;
|
int j;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
FD_ZERO(&(test->read_set));
|
FD_ZERO(&test->read_set);
|
||||||
FD_SET(test->listener_sock,&(test->read_set));
|
FD_SET(test->listener_sock, &test->read_set);
|
||||||
|
|
||||||
test->max_fd = test->listener_sock;
|
test->max_fd = test->listener_sock;
|
||||||
|
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
memcpy(&(test->temp_set), &(test->read_set),sizeof(test->temp_set));
|
memcpy(&test->temp_set, &test->read_set,sizeof(test->temp_set));
|
||||||
tv.tv_sec = 50;
|
tv.tv_sec = 50;
|
||||||
tv.tv_usec = 0;
|
tv.tv_usec = 0;
|
||||||
|
|
||||||
// using select to check on multiple descriptors.
|
// using select to check on multiple descriptors.
|
||||||
result = select(test->max_fd + 1, &(test->temp_set), NULL, NULL, &tv);
|
result = select(test->max_fd + 1, &test->temp_set, NULL, NULL, &tv);
|
||||||
|
|
||||||
if (result == 0)
|
if (result == 0)
|
||||||
{
|
{
|
||||||
@ -653,11 +643,11 @@ void iperf_run_server(struct iperf_test *test)
|
|||||||
// Accept a new connection
|
// Accept a new connection
|
||||||
else if(result >0)
|
else if(result >0)
|
||||||
{
|
{
|
||||||
if (FD_ISSET(test->listener_sock, &(test->temp_set)))
|
if (FD_ISSET(test->listener_sock, &test->temp_set))
|
||||||
{
|
{
|
||||||
test->accept(test);
|
test->accept(test);
|
||||||
|
|
||||||
FD_CLR(test->listener_sock, &(test->temp_set));
|
FD_CLR(test->listener_sock, &test->temp_set);
|
||||||
}
|
}
|
||||||
|
|
||||||
// test end message ?
|
// test end message ?
|
||||||
@ -667,7 +657,7 @@ void iperf_run_server(struct iperf_test *test)
|
|||||||
//Process the sockets for read operation
|
//Process the sockets for read operation
|
||||||
for (j=0; j< test->max_fd+1; j++)
|
for (j=0; j< test->max_fd+1; j++)
|
||||||
{
|
{
|
||||||
if (FD_ISSET(j, &(test->temp_set)))
|
if (FD_ISSET(j, &test->temp_set))
|
||||||
{
|
{
|
||||||
// find the correct stream
|
// find the correct stream
|
||||||
n = update_stream(test,j,0);
|
n = update_stream(test,j,0);
|
||||||
@ -680,7 +670,7 @@ void iperf_run_server(struct iperf_test *test)
|
|||||||
printf("%llu bytes received %s/sec for stream %d\n\n",n->result->bytes_received, ubuf,(int)n);
|
printf("%llu bytes received %s/sec for stream %d\n\n",n->result->bytes_received, ubuf,(int)n);
|
||||||
close(j);
|
close(j);
|
||||||
iperf_free_stream(test, n);
|
iperf_free_stream(test, n);
|
||||||
FD_CLR(j, &(test->read_set));
|
FD_CLR(j, &test->read_set);
|
||||||
}
|
}
|
||||||
else if(result < 0)
|
else if(result < 0)
|
||||||
{
|
{
|
||||||
@ -736,7 +726,7 @@ void iperf_run_client(struct iperf_test *test)
|
|||||||
// send data till the timer expires
|
// send data till the timer expires
|
||||||
while(!timer->expired(timer))
|
while(!timer->expired(timer))
|
||||||
{
|
{
|
||||||
ret = select(test->max_fd+1, NULL, &(test->write_set), NULL, &tv);
|
ret = select(test->max_fd+1, NULL, &test->write_set, NULL, &tv);
|
||||||
if(ret<0)
|
if(ret<0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -744,7 +734,7 @@ void iperf_run_client(struct iperf_test *test)
|
|||||||
|
|
||||||
for(i=0;i<test->num_streams;i++)
|
for(i=0;i<test->num_streams;i++)
|
||||||
{
|
{
|
||||||
if(FD_ISSET(sp->socket, &(test->write_set)))
|
if(FD_ISSET(sp->socket, &test->write_set))
|
||||||
{
|
{
|
||||||
result = sp->snd(sp);
|
result = sp->snd(sp);
|
||||||
|
|
||||||
@ -781,8 +771,6 @@ void iperf_run_client(struct iperf_test *test)
|
|||||||
//reset the interval timer
|
//reset the interval timer
|
||||||
interval = new_timer(test->stats_interval,0);
|
interval = new_timer(test->stats_interval,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}// while outer timer
|
}// while outer timer
|
||||||
|
|
||||||
@ -879,9 +867,9 @@ main(int argc, char **argv)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("role = %s\n", (test->role == 's')?"Server":"Client");
|
printf("role = %s\n", (test->role == 's') ? "Server" : "Client");
|
||||||
printf("duration = %d\n", test->duration);
|
printf("duration = %d\n", test->duration);
|
||||||
printf("protocol = %s\n", (test->protocol == Ptcp)?"TCP":"UDP");
|
printf("protocol = %s\n", (test->protocol == Ptcp) ? "TCP" : "UDP");
|
||||||
printf("interval = %d\n", test->stats_interval);
|
printf("interval = %d\n", test->stats_interval);
|
||||||
printf("Parallel streams = %d\n", test->num_streams);
|
printf("Parallel streams = %d\n", test->num_streams);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user