Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Adapted to the new get total received interface.
[simgrid.git] / src / surf / gtnets / gtnets_simulator.cc
index eac36f4..a21ba16 100644 (file)
@@ -15,6 +15,7 @@ static vector<void*> meta_flows;
 static int* meta_nflow;
 static int meta_flg = 0;
 
+
 void static tcp_sent_callback(void* action, double completion_time);
 
 // Constructor.
@@ -26,6 +27,7 @@ GTSim::GTSim(){
   sim_ = new Simulator();
   topo_ = new GTNETS_Topology();
 
+  sim_->verbose=false;
   // Set default values.
   TCP::DefaultAdvWin(wsize);
   TCP::DefaultSegSize(1000);
@@ -161,7 +163,6 @@ void GTSim::create_gtnets_topology(){
 int GTSim::add_route(int src, int dst, int* links, int nlink){
   if (is_topology_ == 0){
     create_gtnets_topology();
-    //    topo_->print_topology();
     is_topology_ = 1;
   }  
 
@@ -233,7 +234,6 @@ int GTSim::create_flow(int src, int dst, long datasize, void* metadata){
   //generate it here.
   if (is_topology_ == 0){
     create_gtnets_topology();
-    //    topo_->print_topology();
     is_topology_ = 1;
   }
 
@@ -248,7 +248,7 @@ int GTSim::create_flow(int src, int dst, long datasize, void* metadata){
     return -1;
   }
 
-  gtnets_servers_[nflow_] = (TCPServer*)gtnets_nodes_[dst_node]->
+  gtnets_servers_[nflow_] = (TCPServer*) gtnets_nodes_[dst_node]->
        AddApplication(TCPServer(TCPReno()));
   gtnets_servers_[nflow_]->BindAndListen(80);
 
@@ -257,6 +257,8 @@ int GTSim::create_flow(int src, int dst, long datasize, void* metadata){
                           80, Constant(datasize), TCPReno()));
   gtnets_clients_[nflow_]->SetSendCallBack(tcp_sent_callback);
   gtnets_clients_[nflow_]->Start(0);
+
+  gtnets_action_to_flow_[metadata] = nflow_;
   nflow_++;
 
   return 0;
@@ -266,14 +268,19 @@ Time_t GTSim::get_time_to_next_flow_completion(){
   int status;
   Time_t t1;
   int pfds[2];
+  int soon_pid=-1;
   meta_flg=0;
+
+  //remain needs to be updated in the future
+  Count_t remain;
   
   pipe(pfds);
   
   t1 = 0;
-  if (fork() != 0){
+
+  if ( (soon_pid=fork()) != 0){
     read(pfds[0], &t1, sizeof(Time_t));
-    waitpid(-1, &status, 0);      
+    waitpid(soon_pid, &status, 0);      
   }else{
     Time_t t;
     t = sim_->RunUntilNextCompletion();
@@ -284,7 +291,13 @@ Time_t GTSim::get_time_to_next_flow_completion(){
   return t1;
 }
 
+double GTSim::gtnets_get_flow_rx(void *metadata){
+  int flow_id = gtnets_action_to_flow_[metadata];
+  return gtnets_servers_[flow_id]->GetTotRx(); 
+}
+
 int GTSim::run_until_next_flow_completion(void ***metadata, int *number_of_flows){
+
   meta_flows.clear();
   meta_nflow = number_of_flows;
   meta_flg = 1;
@@ -314,3 +327,4 @@ void static tcp_sent_callback(void* action, double completion_time){
   }
 }
 
+