sim_ = new Simulator();
topo_ = new GTNETS_Topology();
+ sim_->verbose=false;
// Set default values.
TCP::DefaultAdvWin(wsize);
TCP::DefaultSegSize(1000);
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;
Time_t t1;
int pfds[2];
meta_flg=0;
+
+ //remain needs to be updated in the future
+ Count_t remain;
pipe(pfds);
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;