X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/8c354c48ec90c997cc7213ce96ca97d882934166..62638966a33659c83f42d3a2169bd3dfa3f313f6:/examples/bandwidth/bandwidth.c diff --git a/examples/bandwidth/bandwidth.c b/examples/bandwidth/bandwidth.c index 508c0a1874..59033b68fb 100644 --- a/examples/bandwidth/bandwidth.c +++ b/examples/bandwidth/bandwidth.c @@ -2,7 +2,7 @@ /* bandwidth - bandwidth test demo of GRAS features */ -/* Copyright (c) 2004 Martin Quinson. All rights reserved. */ +/* 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. */ @@ -20,8 +20,17 @@ XBT_LOG_NEW_DEFAULT_CATEGORY(Bandwidth,"Messages specific to this example"); /* Global private data */ typedef struct { 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[]); @@ -29,7 +38,7 @@ int sensor (int argc,char *argv[]) { xbt_error_t errcode; sensor_data_t g; - xbt_init(&argc,argv); + gras_init(&argc, argv, NULL); g=gras_userdata_new(s_sensor_data_t); amok_bw_init(); @@ -38,13 +47,19 @@ int sensor (int argc,char *argv[]) { ERROR1("Sensor: Error %s encountered while opening the server socket",xbt_error_name(errcode)); return 1; } - - 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; - } + 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; @@ -67,14 +82,13 @@ int maestro(int argc,char *argv[]) { maestro_data_t g; double sec, bw; int buf_size=32; - int exp_size=64; - int msg_size=64; + int exp_size=1024*50; + int msg_size=1024; gras_socket_t peer; - xbt_init(&argc,argv); + gras_init(&argc, argv, NULL); g=gras_userdata_new(s_maestro_data_t); amok_bw_init(); - gras_os_sleep(1,0); if ((errcode=gras_socket_server(6000,&(g->sock)))) { ERROR1("Maestro: Error %s encountered while opening the server socket",xbt_error_name(errcode)); @@ -87,25 +101,34 @@ int maestro(int argc,char *argv[]) { 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; } -/* if ((errcode=amok_bw_request(argv[1],atoi(argv[2]),argv[3],atoi(argv[4]), - buf_size,exp_size,msg_size,&sec,&bw))) {*/ - - if ((errcode=amok_bw_test(peer,buf_size,exp_size,msg_size,&sec,&bw))) { - ERROR1("maestro: Error %s encountered while doing the test",xbt_error_name(errcode)); - return 1; - } - - INFO6("maestro: Experience between me and %s:%d (%d ko in msgs of %d ko) took %f sec, achieving %f Mb/s", + 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; }