Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Initial revision
[simgrid.git] / examples / bandwidth / bandwidth.c
diff --git a/examples/bandwidth/bandwidth.c b/examples/bandwidth/bandwidth.c
new file mode 100644 (file)
index 0000000..6019be2
--- /dev/null
@@ -0,0 +1,104 @@
+/* $Id$ */
+
+/* bandwidth - bandwidth test demo of GRAS features                         */
+
+/* Authors: Martin Quinson                                                  */
+/* Copyright (C) 2003 the OURAGAN project.                                  */
+
+/* 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. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <signal.h>
+
+#include <gras.h>
+
+/* **********************************************************************
+ * Sensor code
+ * **********************************************************************/
+
+/* Global private data */
+typedef struct {
+  gras_sock_t *sock;
+} sensor_data_t;
+
+/* 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);  
+
+  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;
+  }
+
+  if (grasbw_register_messages()) {
+    gras_sock_close(g->sock);
+    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);
+}
+
+/* **********************************************************************
+ * Maestro code
+ * **********************************************************************/
+
+/* Global private data */
+typedef struct {
+  gras_sock_t *sock;
+} 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);
+  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);
+    return 1;
+  }
+
+  if (argc != 5) {
+     fprintf(stderr,"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;
+  }
+   
+  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);
+}