Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Added the feature of getting remaining communication from gtnets flows.
[simgrid.git] / src / surf / gtnets / gtnets_simulator.cc
index eac36f4..4b30324 100644 (file)
@@ -26,6 +26,7 @@ GTSim::GTSim(){
   sim_ = new Simulator();
   topo_ = new GTNETS_Topology();
 
+  sim_->verbose=false;
   // Set default values.
   TCP::DefaultAdvWin(wsize);
   TCP::DefaultSegSize(1000);
@@ -250,13 +251,25 @@ int GTSim::create_flow(int src, int dst, long datasize, void* metadata){
 
   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_clients_[nflow_] = (TCPSend*)gtnets_nodes_[src_node]->
     AddApplication(TCPSend(metadata, gtnets_nodes_[dst_node]->GetIPAddr(), 
                           80, Constant(datasize), TCPReno()));
+  gtnets_clients_[nflow_]->copyOnConnect=false;
   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_++;
 
   return 0;
@@ -267,6 +280,9 @@ Time_t GTSim::get_time_to_next_flow_completion(){
   Time_t t1;
   int pfds[2];
   meta_flg=0;
+  //remain needs to be updated in the future
+  Count_t remain;
   
   pipe(pfds);
   
@@ -284,6 +300,11 @@ Time_t GTSim::get_time_to_next_flow_completion(){
   return t1;
 }
 
+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 GTSim::run_until_next_flow_completion(void ***metadata, int *number_of_flows){
   meta_flows.clear();
   meta_nflow = number_of_flows;