X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/ff021a73f0cd26b2f27ca729783aa486393f9b3a..62638966a33659c83f42d3a2169bd3dfa3f313f6:/examples/bandwidth/bandwidth.c?ds=sidebyside diff --git a/examples/bandwidth/bandwidth.c b/examples/bandwidth/bandwidth.c index 6019be2081..59033b68fb 100644 --- a/examples/bandwidth/bandwidth.c +++ b/examples/bandwidth/bandwidth.c @@ -2,17 +2,16 @@ /* bandwidth - bandwidth test demo of GRAS features */ -/* Authors: Martin Quinson */ -/* Copyright (C) 2003 the OURAGAN project. */ +/* Copyright (c) 2003, 2004 Martin Quinson. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it - under the terms of the license (GNU LGPL) which comes with this package. */ + * under the terms of the license (GNU LGPL) which comes with this package. */ -#include -#include -#include -#include +#include "gras.h" +#include "amok/bandwidth.h" + +XBT_LOG_NEW_DEFAULT_CATEGORY(Bandwidth,"Messages specific to this example"); /* ********************************************************************** * Sensor code @@ -20,38 +19,50 @@ /* Global private data */ typedef struct { - gras_sock_t *sock; -} sensor_data_t; + gras_socket_t sock; + int done; +} s_sensor_data_t,*sensor_data_t; + +static int sensor_cb_quit(gras_socket_t expeditor, + void *payload_data) { + sensor_data_t globals=(sensor_data_t)gras_userdata_get(); + + globals->done = 1; + return 1; +} /* Function prototypes */ int sensor (int argc,char *argv[]); int sensor (int argc,char *argv[]) { - gras_error_t errcode; - sensor_data_t *g=gras_userdata_new(sensor_data_t); + xbt_error_t errcode; + sensor_data_t g; - if ((errcode=gras_sock_server_open(4000,4000,&(g->sock)))) { - fprintf(stderr,"Sensor: Error %s encountered while opening the server socket\n",gras_error_name(errcode)); - return 1; - } + gras_init(&argc, argv, NULL); + g=gras_userdata_new(s_sensor_data_t); - if (grasbw_register_messages()) { - gras_sock_close(g->sock); + amok_bw_init(); + + if ((errcode=gras_socket_server(atoi(argv[1]),&(g->sock)))) { + ERROR1("Sensor: Error %s encountered while opening the server socket",xbt_error_name(errcode)); return 1; } - - while (1) { - if ((errcode=gras_msg_handle(60.0)) && errcode != timeout_error) { - fprintf(stderr,"Sensor: Error '%s' while handling message\n",gras_error_name(errcode)); - gras_sock_close(g->sock); - return errcode; - } - if (errcode==no_error) - break; - } - - gras_sleep(5,0); - return gras_sock_close(g->sock); + g->done = 0; + + gras_msgtype_declare("quit",NULL); + gras_cb_register(gras_msgtype_by_name("quit"),&sensor_cb_quit); + + while (! g->done ) { + errcode=gras_msg_handle(60.0); + if (errcode != no_error) { + ERROR1("Sensor: Error '%s' while handling message",xbt_error_name(errcode)); + gras_socket_close(g->sock); + return errcode; + } + } + + gras_socket_close(g->sock); + return 0; } /* ********************************************************************** @@ -60,45 +71,64 @@ int sensor (int argc,char *argv[]) { /* Global private data */ typedef struct { - gras_sock_t *sock; -} maestro_data_t; + gras_socket_t sock; +} s_maestro_data_t,*maestro_data_t; /* Function prototypes */ int maestro (int argc,char *argv[]); int maestro(int argc,char *argv[]) { - gras_error_t errcode; - maestro_data_t *g=gras_userdata_new(maestro_data_t); + xbt_error_t errcode; + maestro_data_t g; double sec, bw; - int bufSize=32 * 1024; - int expSize=64 * 1024; - int msgSize=64 * 1024; - - if ((errcode=gras_sock_server_open(4000,5000,&(g->sock)))) { - fprintf(stderr,"Maestro: Error %s encountered while opening the server socket\n",gras_error_name(errcode)); - return 1; - } - - if (grasbw_register_messages()) { - gras_sock_close(g->sock); + int buf_size=32; + int exp_size=1024*50; + int msg_size=1024; + gras_socket_t peer; + + gras_init(&argc, argv, NULL); + g=gras_userdata_new(s_maestro_data_t); + amok_bw_init(); + + if ((errcode=gras_socket_server(6000,&(g->sock)))) { + ERROR1("Maestro: Error %s encountered while opening the server socket",xbt_error_name(errcode)); return 1; } - + + if (argc != 5) { - fprintf(stderr,"Usage: maestro host port host port\n"); + ERROR0("Usage: maestro host port host port\n"); return 1; } - - if ((errcode=grasbw_request(argv[1],atoi(argv[2]),argv[3],atoi(argv[4]), - bufSize,expSize,msgSize,&sec,&bw))) { - fprintf(stderr,"maestro: Error %s encountered while doing the test\n",gras_error_name(errcode)); - return 1; + + /* wait to ensure that all server sockets are there before starting the experiment */ + gras_os_sleep(1.0); + + if ((errcode=gras_socket_client(argv[1],atoi(argv[2]),&peer))) { + ERROR3("Client: Unable to connect to my peer on %s:%s. Got %s", + argv[1],argv[2],xbt_error_name(errcode)); + return 1; } - - fprintf(stderr,"maestro: Experience (%d ko in msgs of %d ko) took %f sec, achieving %f Mb/s\n", - expSize/1024,msgSize/1024, - sec,bw); - gras_sleep(5,0); - return gras_sock_close(g->sock); + INFO0("Test the BW between me and one of the sensors"); + TRY(amok_bw_test(peer,buf_size,exp_size,msg_size,&sec,&bw)); + INFO6("maestro: Experience between me and %s:%d (%d kb in msgs of %d kb) took %f sec, achieving %f kb/s", + argv[1],atoi(argv[2]), + exp_size,msg_size, + sec,bw); + + INFO0("Test the BW between the two sensors"); + TRY(amok_bw_request(argv[1],atoi(argv[2]),argv[3],atoi(argv[4]), + buf_size,exp_size,msg_size,&sec,&bw)); + + /* ask sensors to quit */ + gras_msgtype_declare("quit",NULL); + TRY(gras_msg_send(peer,gras_msgtype_by_name("quit"), NULL)); + gras_socket_close(peer); + TRY(gras_socket_client(argv[3],atoi(argv[4]),&peer)); + TRY(gras_msg_send(peer,gras_msgtype_by_name("quit"), NULL)); + gras_socket_close(peer); + + gras_socket_close(g->sock); + return 0; }