|
|
Jump to this file's LXR Page |
|
|
File: [CENS] / emstar / fusd / test / ping_udp.c
(download)
/
(as text)
Revision: 1.1, Wed Apr 28 18:11:52 2004 UTC (5 years, 6 months ago) by nithya Branch: MAIN CVS Tags: scale_radio_channel, rdd_alpha_version_1, pregeonet, nims-lab-Sep07-2004, nims-jr-Sep05-04, mote, lessgps_release, kiss_release, bp_scale_radio_channel, acoustic-05-18-06, PRE_TOSNIC_FIX, PRE_NOMEGA_MOTENIC, PRE_MOTENIC_CLEANUP, PRE_CEILING_FIX, PRE_64BIT, MOTENIC_PRE_BUGFIX_20050415, LESSGPS_1_00, LAURA_CALIBRATION_EXPERIMENTS, KISS_1_0, HOSTMOTE_V_6_EXPERIMENTAL, HOSTMOTE_PROTOCOL_VERSION_7, HOSTMOTE_PROTOCOL_VERSION_6_WITH_HOSTMOAP, HOSTMOTE_PROTOCOL_VERSION_5_WITH_HOSTMOAP, HOSTMOTE_PROTOCOL_VERSION_5, HOSTMOTE_PROTOCOL_VERSION_4, HOSTMOTE_PROTOCOL_VERSION_3, HEAD, ESS_RELEASE_3_5, ESS_RELEASE_3_4, ESS_RELEASE_3_3, ESS_RELEASE_3_2, ESS_RELEASE_3_1, ESS_RELEASE_3_0, ESS_RELEASE_2_0, ESS_CONNECTIVITY, ESS_CENTROUTE_TESTING, ESS2-CMS-V1_5_pretest, ESS2-CMS-V1_4cMergeSympathy_2, ESS2-CMS-V1_4c, ESS2-CMS-V1_4b, ESS2-CMS-V1_4a, ESS2-CMS-V1_3, ESS2-CMS-V1_2, ESS2-CMS-V1_1, ESS2-CMS-V1_0, EMSTAR_RELEASE_2_5, EMSTAR_RELEASE_2_1_BRANCH, EMSTAR_RELEASE_2_1, EMSTAR_RELEASE_2_0, EMSTAR_PRE_HTML, CYCLOPS_RELEASE_CANDIDATE_2_0, CYCLOPS_PRERELEASE_STABLE, CENTROUTE_EMSTAR_SOCKETS, BG_1_0, BANGLADESH_ARSENIC_1_2, BANGLADESH_ARSENIC_1_1, AMARSS_JR_DEPLOYMENT_6_05_07 ping_udp used to test udp-raw for usenix 04 paper |
#include "libmisc/misc.h"
#include <sys/socket.h>
#include "glib.h"
#include "libmisc/file.h"
#define CLIENT_LISTEN_PORT 6234
#define CLIENT_WRITE_PORT 8349
#define SERVER_WRITE_PORT 6234
#define SERVER_LISTEN_PORT 8349
#define LOCAL_HOST_ADDR_LO "127.0.0.1"
#define LOCAL_HOST_ADDR_ETH "eth0"
#define NUM_MESSAGES 1050
#define NUM_MESSAGES_QUEUED 50
#define BLOCKING
int convert(int num)
{
if (num == 64)
return 6;
if (num == 128)
return 7;
else if (num == 256)
return 8;
else if (num == 512)
return 9;
else if (num == 1024)
return 10;
else if (num == 2048)
return 11;
else if (num == 4096)
return 12;
else if (num == 8192)
return 13;
else if (num == 16384)
return 14;
else if (num == 32768)
return 15;
else
return -1;
}
int main(int argc, char **argv)
{
int i,write_sock,listen_port, write_port;
float pktsPSec, bytesPSec;
char snd_buf[65535];
struct in_addr bcast_addr = {
};
struct in_addr local_addr = {
};
struct sockaddr_in addr = {
sin_family: AF_INET
};
char interface[15];
char type[10];
struct timeval tvi;
int pkt_size, nonblock, client = 0;
int64_t timeT;
struct timeval tvs;
int t_fd;
char buf[255];
if (argc < 5) {
printf("ERROR, argc: %d < 4\n",argc);
printf("USAGE: ping_udp <server/client> <lo/eth> <pkt_size> <nonblocking>\n");
printf("\t\tOptional: <write_port> <read_port>\n");
exit(1);
}
/* Read parameters */
sprintf(type,argv[1]);
sprintf(interface,argv[2]);
pkt_size = atoi(argv[3]);
nonblock = atoi(argv[4]);
/* Assign ports */
if (argc >= 7) {
write_port = atoi(argv[5]);
listen_port = atoi(argv[6]);
} else {
if (strcmp(type,"client") == 0) {
write_port = CLIENT_WRITE_PORT;
listen_port = CLIENT_LISTEN_PORT;
} else if (strcmp(type,"server") == 0) {
listen_port = SERVER_LISTEN_PORT;
write_port = SERVER_WRITE_PORT;
}
}
/* Assign interface address */
if ((get_ifaddr_by_name(LOCAL_HOST_ADDR_ETH, &local_addr, &bcast_addr)) < 0) {
printf("Can't get intf address for: %s\n", LOCAL_HOST_ADDR_ETH);
exit(1);
}
if (strcmp(interface,"lo") == 0)
addr.sin_addr = local_addr;
else
addr.sin_addr = bcast_addr;
write_sock = udp_listen_if(write_port, &addr.sin_addr);
addr.sin_port = htons(write_port);
if (write_sock < 0) {
printf("ERROR, Couldn't open listen socket\n");
goto fail;
}
if (strcmp(type,"client") == 0) {
if ((t_fd = open("/tmp/throughput.out",O_CREAT|O_APPEND|O_RDWR, S_IRWXU|S_IRWXG|S_IRWXO)) < 0)
printf("ERROR, unable to open throughput.out output file!\n");
client = 1;
}
else if (strcmp(type,"server") != 0) {
printf("ERROR: unrecognized argument!\n");
goto fail;
}
/* Open socket for writing */
/* Send and read ping packets */
i = 0;
while ( i < NUM_MESSAGES) {
if (sendto(write_sock, snd_buf, pkt_size, 0,
(struct sockaddr *) &addr, sizeof(addr)) == pkt_size) {
i++;
sprintf(buf, "%d successful msgs\n", i);
}
else {
printf("ERROR sending!\n");
}
if (i == NUM_MESSAGES_QUEUED) {
gettimeofday(&tvi,NULL);
printf("Getting time: %s\n", misc_tv_to_str(&tvi));
}
}
gettimeofday(&tvs,NULL);
printf("Getting final time: %s\n", misc_tv_to_str(&tvs));
if (client > 0) {
misc_tv_sub(&tvs,&tvi);
timeT = misc_timeval_to_int64(&tvs);
printf("diff in usec: %lld\n", timeT);
/* Calculate overall throughput: pkts / sec
* timeT is in usec, convert to seconds */
if (timeT > 0) {
pktsPSec = (NUM_MESSAGES - NUM_MESSAGES_QUEUED) / ((float)timeT/ 1000000.0);
bytesPSec = pkt_size * pktsPSec;
printf("pkt_size: %d * pktsPSec: %f = %f\n", pkt_size, pktsPSec, bytesPSec);
}
sprintf(snd_buf, "%s", "#h log2pkt Pkts-sec Bytes-sec\n");
write(t_fd, snd_buf, strlen(snd_buf));
sprintf(snd_buf, "%d\t%d\t%d\n",convert(pkt_size), (int) pktsPSec, (int) bytesPSec);
write(t_fd, snd_buf, strlen(snd_buf));
}
printf("done\n");
fail:
close(write_sock);
close(t_fd);
printf("Closing files\n");
return 0;
}
| CENS CVS Mailing List |
Powered by ViewCVS 0.9.2 |