Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add debug on topology.
[simgrid.git] / src / surf / gtnets / gtnets_simulator.cc
index 4b30324..dafa668 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.
@@ -156,13 +157,16 @@ void GTSim::create_gtnets_topology(){
   node_connect();
 }
 
+void GTSim::print_topology(){
+  topo_->print_topology();
+}
+
 // Add a route that includes more than one hop. All one hop
 // routes must have been added. When this function is called
 // for the first time, all gtnets nodes are generated.
 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;
   }  
 
@@ -234,7 +238,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;
   }
 
@@ -249,26 +252,16 @@ 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()));
-  //added by arnaud in order to avoid TCPServer duplicates.
-  //It is not needed since we create a new TCPServer for
-  //each flow. Also we need to control this variable
-  //to proper set the value of remaining communication amount.
-  //See functions:
-  gtnets_servers_[nflow_]->copyOnConnect=false;
-  gtnets_servers_[nflow_]->BindAndListen(80);
+  gtnets_servers_[nflow_]->BindAndListen(1000+nflow_);
 
   gtnets_clients_[nflow_] = (TCPSend*)gtnets_nodes_[src_node]->
     AddApplication(TCPSend(metadata, gtnets_nodes_[dst_node]->GetIPAddr(), 
-                          80, Constant(datasize), TCPReno()));
-  gtnets_clients_[nflow_]->copyOnConnect=false;
+                          1000+nflow_, Constant(datasize), TCPReno()));
   gtnets_clients_[nflow_]->SetSendCallBack(tcp_sent_callback);
   gtnets_clients_[nflow_]->Start(0);
 
-  //added by pedro in order to get statistics
-  //map an action from a gtnets flow id
-  //metadata is the action and flow is the id to gtnets
   gtnets_action_to_flow_[metadata] = nflow_;
   nflow_++;
 
@@ -279,17 +272,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();
@@ -301,11 +296,12 @@ Time_t GTSim::get_time_to_next_flow_completion(){
 }
 
 double GTSim::gtnets_get_flow_rx(void *metadata){
-  int flow = gtnets_action_to_flow_[metadata];
-  return ((TCPServer *)gtnets_servers_[flow])->totRx;//action_remain[flow]
+  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;
@@ -335,3 +331,4 @@ void static tcp_sent_callback(void* action, double completion_time){
   }
 }
 
+