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"
13 #include "amok/hostmanagement.h"
15 XBT_LOG_NEW_DEFAULT_CATEGORY(Bandwidth,"Messages specific to this example");
17 /* **********************************************************************
19 * **********************************************************************/
21 /* Function prototypes */
22 int sensor (int argc,char *argv[]);
24 int sensor (int argc,char *argv[]) {
28 gras_init(&argc, argv);
32 mysock = gras_socket_server_range(3000,9999,0,0);
33 INFO1("Sensor starting (on port %d)",gras_os_myport());
34 gras_os_sleep(0.5); /* let the master get ready */
35 master = gras_socket_client_from_string(argv[1]);
37 amok_hm_group_join(master,"bandwidth");
40 gras_socket_close(mysock);
41 gras_socket_close(master);
46 /* **********************************************************************
48 * **********************************************************************/
50 /* Function prototypes */
51 int maestro (int argc,char *argv[]);
53 int maestro(int argc,char *argv[]) {
55 int buf_size=32 *1024;
56 int exp_size=512 *1024;
57 int msg_size=512 *1024;
58 double min_duration = 1;
65 gras_init(&argc, argv);
69 INFO0("Maestro starting");
71 ERROR0("Usage: maestro port\n");
74 mysock=gras_socket_server(atoi(argv[1]));
75 group=amok_hm_group_new("bandwidth");
76 INFO0("Wait for peers");
77 gras_msg_handleall(10); /* friends, we're ready. Come and play */
79 if (xbt_dynar_length(group) < 2) {
81 asprintf(&msg,"Not enough peers arrived. Expected 2 got %ld",
82 xbt_dynar_length(group));
85 h1 = *(xbt_host_t*) xbt_dynar_get_ptr(group, 0);
86 h2 = *(xbt_host_t*)xbt_dynar_get_ptr(group, 1);
88 INFO2("Contact %s:%d",h1->name, h1->port);
89 peer = gras_socket_client(h1->name, h1->port);
91 INFO0("Test the BW between me and one of the sensors");
92 amok_bw_test(peer,buf_size,exp_size,msg_size,min_duration,&sec,&bw);
93 INFO6("Experience between me and %s:%d (%d bytes in msgs of %d bytes) took %f sec, achieving %f kb/s",
96 sec,((double)bw)/1024.0);
98 INFO4("Test the BW between %s:%d and %s:%d", h1->name, h1->port, h2->name, h2->port);
99 amok_bw_request(h1->name, h1->port, h2->name, h2->port,
100 buf_size,exp_size,msg_size,min_duration,&sec,&bw);
101 INFO6("Experience between %s:%d and %s:%d took took %f sec, achieving %f kb/s",
102 h1->name, h1->port, h2->name, h2->port,
103 sec,((double)bw)/1024.0);
105 /* Game is over, friends */
106 amok_hm_group_shutdown ("bandwidth");
108 gras_socket_close(mysock);