+ XBT_DEBUG("Communicate from %s to %s", src->get_cname(), dst->get_cname());
+
+ static int port_number = 1025; // Port number is limited from 1025 to 65 000
+
+ unsigned int node1 = src->get_netpoint()->extension<NetPointNs3>()->node_num;
+ unsigned int node2 = dst->get_netpoint()->extension<NetPointNs3>()->node_num;
+
+ ns3::Ptr<ns3::Node> src_node = src->get_netpoint()->extension<NetPointNs3>()->ns3_node_;
+ ns3::Ptr<ns3::Node> dst_node = dst->get_netpoint()->extension<NetPointNs3>()->ns3_node_;
+
+ xbt_assert(node2 < IPV4addr.size(), "Element %s is unknown to ns-3. Is it connected to any one-hop link?",
+ dst->get_netpoint()->get_cname());
+ std::string& addr = IPV4addr[node2];
+ xbt_assert(not addr.empty(), "Element %s is unknown to ns-3. Is it connected to any one-hop link?",
+ dst->get_netpoint()->get_cname());
+
+ XBT_DEBUG("ns3: Create flow of %.0f Bytes from %u to %u with Interface %s", totalBytes, node1, node2, addr.c_str());
+ ns3::PacketSinkHelper sink("ns3::TcpSocketFactory", ns3::InetSocketAddress(ns3::Ipv4Address::GetAny(), port_number));
+ ns3::ApplicationContainer apps = sink.Install(dst_node);
+
+ ns3::Ptr<ns3::Socket> sock = ns3::Socket::CreateSocket(src_node, ns3::TcpSocketFactory::GetTypeId());
+
+ flow_from_sock.insert({transform_socket_ptr(sock), new SgFlow(totalBytes, this)});
+ sink_from_sock.insert({transform_socket_ptr(sock), apps});
+
+ sock->Bind(ns3::InetSocketAddress(port_number));
+
+ ns3::Simulator::ScheduleNow(&start_flow, sock, addr.c_str(), port_number);
+
+ port_number++;
+ if(port_number > 65000){
+ port_number = 1025;
+ XBT_WARN("Too many connections! Port number is saturated. Trying to use the oldest ports.");
+ }
+ xbt_assert(port_number <= 65000, "Too many connections! Port number is saturated.");