3 /* bandwidth - bandwidth test demo of GRAS features */
5 /* Copyright (c) 2003, 2004 Martin Quinson. All rights reserved. */
7 /* This program is free software; you can redistribute it and/or modify it
8 * under the terms of the license (GNU LGPL) which comes with this package. */
12 #include "amok/bandwidth.h"
14 XBT_LOG_NEW_DEFAULT_CATEGORY(Bandwidth,"Messages specific to this example");
16 /* **********************************************************************
18 * **********************************************************************/
20 /* Global private data */
24 } s_sensor_data_t,*sensor_data_t;
26 static int sensor_cb_quit(gras_socket_t expeditor,
28 sensor_data_t globals=(sensor_data_t)gras_userdata_get();
34 /* Function prototypes */
35 int sensor (int argc,char *argv[]);
37 int sensor (int argc,char *argv[]) {
41 gras_init(&argc, argv, NULL);
42 g=gras_userdata_new(s_sensor_data_t);
46 if ((errcode=gras_socket_server(atoi(argv[1]),&(g->sock)))) {
47 ERROR1("Sensor: Error %s encountered while opening the server socket",xbt_error_name(errcode));
52 gras_msgtype_declare("quit",NULL);
53 gras_cb_register(gras_msgtype_by_name("quit"),&sensor_cb_quit);
56 errcode=gras_msg_handle(60.0);
57 if (errcode != no_error) {
58 ERROR1("Sensor: Error '%s' while handling message",xbt_error_name(errcode));
59 gras_socket_close(g->sock);
64 gras_socket_close(g->sock);
68 /* **********************************************************************
70 * **********************************************************************/
72 /* Global private data */
75 } s_maestro_data_t,*maestro_data_t;
77 /* Function prototypes */
78 int maestro (int argc,char *argv[]);
80 int maestro(int argc,char *argv[]) {
89 gras_init(&argc, argv, NULL);
90 g=gras_userdata_new(s_maestro_data_t);
93 if ((errcode=gras_socket_server(6000,&(g->sock)))) {
94 ERROR1("Maestro: Error %s encountered while opening the server socket",xbt_error_name(errcode));
100 ERROR0("Usage: maestro host port host port\n");
104 /* wait to ensure that all server sockets are there before starting the experiment */
107 if ((errcode=gras_socket_client(argv[1],atoi(argv[2]),&peer))) {
108 ERROR3("Client: Unable to connect to my peer on %s:%s. Got %s",
109 argv[1],argv[2],xbt_error_name(errcode));
113 INFO0("Test the BW between me and one of the sensors");
114 TRY(amok_bw_test(peer,buf_size,exp_size,msg_size,&sec,&bw));
115 INFO6("maestro: Experience between me and %s:%d (%d kb in msgs of %d kb) took %f sec, achieving %f kb/s",
116 argv[1],atoi(argv[2]),
120 INFO0("Test the BW between the two sensors");
121 TRY(amok_bw_request(argv[1],atoi(argv[2]),argv[3],atoi(argv[4]),
122 buf_size,exp_size,msg_size,&sec,&bw));
124 /* ask sensors to quit */
125 gras_msgtype_declare("quit",NULL);
126 TRY(gras_msg_send(peer,gras_msgtype_by_name("quit"), NULL));
127 gras_socket_close(peer);
128 TRY(gras_socket_client(argv[3],atoi(argv[4]),&peer));
129 TRY(gras_msg_send(peer,gras_msgtype_by_name("quit"), NULL));
130 gras_socket_close(peer);
132 gras_socket_close(g->sock);