Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Shut down the gtnets verbose output when advancing simulation clock to a given amount.
[simgrid.git] / src / surf / gtnets / gtnets_interface.cc
index 4207edb..0d366a4 100644 (file)
@@ -4,18 +4,35 @@
 /* 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 "gtnets_simulator.h"
 #include "gtnets_interface.h"
+#ifdef XBT_DEBUG
+       #undef XBT_DEBUG
+#endif
+#include "xbt/log.h"
+#include "xbt/asserts.h"
 
 static GTSim* gtnets_sim = 0;
 
+
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_network_gtnets_interface, surf_network_gtnets,
+                                "Logging specific to the SURF network GTNetS interface");
+
+
+
 // initialize the GTNetS interface and environment
-int gtnets_initialize(){
-  if (gtnets_sim){
-    fprintf(stderr, "gtnets already initialized.\n");
-    return -1;
+int gtnets_initialize(int wsize){
+  XBT_DEBUG("Using logging.");
+  xbt_assert(!gtnets_sim, "gtnets already initialized");
+
+  if(wsize > 0){
+       XBT_INFO("TCP window maximum size : %d", wsize);
+       gtnets_sim = new GTSim(wsize);
+  }else{
+       gtnets_sim = new GTSim(wsize);
   }
-  gtnets_sim = new GTSim();
+
   return 0;
 }
 
@@ -54,31 +71,49 @@ int gtnets_create_flow(int src, int dst, long datasize, void* metadata){
 // if no flows exist, return -1.0
 double gtnets_get_time_to_next_flow_completion(){
   ofstream file;
+  streambuf* sbuf;
   double value;
-  file.open ("/dev/null");
-  streambuf* sbuf = cout.rdbuf();
-  cout.rdbuf(file.rdbuf());
 
-  value = gtnets_sim->get_time_to_next_flow_completion();
+  if (!XBT_LOG_ISENABLED(surf_network_gtnets_interface, xbt_log_priority_debug)) {
+         file.open ("/dev/null");
+         sbuf = cout.rdbuf();
+         cout.rdbuf(file.rdbuf());
+         XBT_DEBUG("Enable GTNetS library quite mode");
+  }else {
+         XBT_DEBUG("Disable GTNetS library quite mode");
+  }
 
-  cout.rdbuf(sbuf);
+  value = gtnets_sim->get_time_to_next_flow_completion();
 
+  if (!XBT_LOG_ISENABLED(surf_network_gtnets_interface, xbt_log_priority_debug)) {
+         cout.rdbuf(sbuf);
+         file.close();
+  }
   return value;
 }
 
 // run until a flow completes (returns that flow's metadata)
-int gtnets_run_until_next_flow_completion(void ***metadata, int *number_of_flows){
+double gtnets_run_until_next_flow_completion(void ***metadata, int *number_of_flows){
   ofstream file;
+  streambuf* sbuf;
   double value;
-  file.open ("/dev/null");
-  streambuf* sbuf = cout.rdbuf();
-  cout.rdbuf(file.rdbuf());
 
-  value = gtnets_sim->run_until_next_flow_completion(metadata, number_of_flows);
+  if (!XBT_LOG_ISENABLED(surf_network_gtnets_interface, xbt_log_priority_debug)) {
+         file.open ("/dev/null");
+         sbuf = cout.rdbuf();
+         cout.rdbuf(file.rdbuf());
+         XBT_DEBUG("Enable GTNetS library quite mode");
+  }else {
+         XBT_DEBUG("Disable GTNetS library quite mode");
+  }
 
-  cout.rdbuf(sbuf);
+  value = gtnets_sim->run_until_next_flow_completion(metadata, number_of_flows);
 
-  return value;
+  if (!XBT_LOG_ISENABLED(surf_network_gtnets_interface, xbt_log_priority_debug)) {
+         cout.rdbuf(sbuf);
+         file.close();
+  }
+  return (double) value;
 }
 
 // get the total received in bytes using the TCPServer object totRx field
@@ -89,7 +124,26 @@ double gtnets_get_flow_rx(void *metadata){
 
 // run for a given time (double)
 int gtnets_run(Time_t deltat){
+  ofstream file;
+  streambuf* sbuf;
+  double value;
+
+  if (!XBT_LOG_ISENABLED(surf_network_gtnets_interface, xbt_log_priority_debug)) {
+          file.open ("/dev/null");
+          sbuf = cout.rdbuf();
+          cout.rdbuf(file.rdbuf());
+          XBT_DEBUG("Enable GTNetS library quite mode");
+  }else {
+          XBT_DEBUG("Disable GTNetS library quite mode");
+  }
+
   gtnets_sim->run(deltat);
+
+
+  if (!XBT_LOG_ISENABLED(surf_network_gtnets_interface, xbt_log_priority_debug)) {
+          cout.rdbuf(sbuf);
+          file.close();
+  }
   return 0;
 }
 
@@ -106,3 +160,14 @@ void gtnets_print_topology(void){
   gtnets_sim->print_topology();
 }
 
+// set jitter
+void gtnets_set_jitter(double d){
+  gtnets_sim->set_jitter(d);
+}
+
+// set jitter seed
+void gtnets_set_jitter_seed(int seed){
+  gtnets_sim->set_jitter_seed(seed);
+}
+
+