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/peermanagement.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_pm_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 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_pm_group_new("bandwidth");
76 INFO0("Wait for peers for 5 sec");
77 gras_msg_handleall(5); /* 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));
83 amok_pm_group_shutdown("bandwidth");
86 h1 = *(xbt_peer_t*) xbt_dynar_get_ptr(group, 0);
87 h2 = *(xbt_peer_t*)xbt_dynar_get_ptr(group, 1);
89 INFO2("Contact %s:%d",h1->name, h1->port);
90 peer = gras_socket_client(h1->name, h1->port);
92 INFO0("Test the BW between me and one of the sensors");
93 amok_bw_test(peer,buf_size,msg_size,msg_amount,min_duration,&sec,&bw);
94 INFO7("Experience between me and %s:%d (initially %d msgs of %d bytes, maybe modified to fill the pipe at least %.1fs) took %f sec, achieving %f kb/s",
96 msg_amount,msg_size,min_duration,
97 sec,((double)bw)/1024.0);
99 INFO4("Test the BW between %s:%d and %s:%d", h1->name, h1->port, h2->name, h2->port);
100 amok_bw_request(h1->name, h1->port, h2->name, h2->port,
101 buf_size,msg_size,msg_amount,min_duration,&sec,&bw);
102 INFO6("Experience between %s:%d and %s:%d took took %f sec, achieving %f kb/s",
103 h1->name, h1->port, h2->name, h2->port,
104 sec,((double)bw)/1024.0);
106 /* Game is over, friends */
107 amok_pm_group_shutdown ("bandwidth");
109 gras_socket_close(mysock);