+int ns3_create_flow(const char* a,const char *b,double start,u_int32_t TotalBytes,void * action)
+{
+ ns3_nodes_t node1 = (ns3_nodes_t) xbt_lib_get_or_null(host_lib,a,NS3_HOST_LEVEL);
+ ns3_nodes_t node2 = (ns3_nodes_t) xbt_lib_get_or_null(host_lib,b,NS3_HOST_LEVEL);
+
+ Ptr<Node> src_node = nodes.Get(node1->node_num);
+ Ptr<Node> dst_node = nodes.Get(node2->node_num);
+
+ char* addr = (char*)xbt_dynar_get_as(IPV4addr,node2->node_num,char*);
+
+ XBT_DEBUG("ns3_create_flow %d Bytes from %d to %d with Interface %s",TotalBytes, node1->node_num, node2->node_num,addr);
+ ns3_sim->create_flow_NS3(src_node,
+ dst_node,
+ port_number,
+ start,
+ addr,
+ TotalBytes,
+ action);
+
+ port_number++;
+ if(port_number >= 65001 ) xbt_die("Too many connections! Port number is saturated.");
+ return 0;
+}
+
+// clean up
+int ns3_finalize(void){
+ if (!ns3_sim) return -1;
+ delete ns3_sim;
+ ns3_sim = 0;
+ return 0;
+}
+
+// initialize the NS3 interface and environment
+int ns3_initialize(const char* TcpProtocol){
+ xbt_assert(!ns3_sim, "ns3 already initialized");
+ ns3_sim = new NS3Sim();
+
+// tcpModel are:
+// "ns3::TcpNewReno"
+// "ns3::TcpReno"
+// "ns3::TcpTahoe"
+
+ Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (1024)); // 1024-byte packet for easier reading
+ Config::SetDefault ("ns3::TcpSocket::DelAckCount", UintegerValue (1));
+
+ if(!strcmp(TcpProtocol,"default")){
+ return 0;
+ }
+ if(!strcmp(TcpProtocol,"Reno")){
+ XBT_INFO("Switching Tcp protocol to '%s'",TcpProtocol);
+ Config::SetDefault ("ns3::TcpL4Protocol::SocketType", StringValue("ns3::TcpReno"));
+ return 0;
+ }
+ if(!strcmp(TcpProtocol,"NewReno")){
+ XBT_INFO("Switching Tcp protocol to '%s'",TcpProtocol);
+ Config::SetDefault ("ns3::TcpL4Protocol::SocketType", StringValue("ns3::TcpNewReno"));
+ return 0;
+ }
+ if(!strcmp(TcpProtocol,"Tahoe")){
+ XBT_INFO("Switching Tcp protocol to '%s'",TcpProtocol);
+ Config::SetDefault ("ns3::TcpL4Protocol::SocketType", StringValue("ns3::TcpTahoe"));
+ return 0;
+ }
+
+ XBT_ERROR("The ns3/TcpModel must be : NewReno or Reno or Tahoe");
+}
+
+void * ns3_add_host(const char * id)