X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/0f00f7d4a510cd0126ba153d83bda2269acc16f0..9453a72a7bca10ac53797ce67f9310c800541934:/src/surf/network_ns3.cpp diff --git a/src/surf/network_ns3.cpp b/src/surf/network_ns3.cpp index 76f53b9005..bcdfb57d48 100644 --- a/src/surf/network_ns3.cpp +++ b/src/surf/network_ns3.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2007-2017. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2007-2018. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -10,8 +10,13 @@ #include "xbt/string.hpp" #include "xbt/utility.hpp" -#include "ns3/core-module.h" -#include "ns3/node.h" +#include +#include +#include +#include +#include +#include +#include #include "network_ns3.hpp" #include "ns3/ns3_simulator.hpp" @@ -42,7 +47,6 @@ static int number_of_nodes = 0; static int number_of_clusters_nodes = 0; static int number_of_links = 1; static int number_of_networks = 1; -static int port_number = 1025; //Port number is limited from 1025 to 65 000 simgrid::xbt::Extension NetPointNs3::EXTENSION_ID; @@ -285,14 +289,41 @@ void LinkNS3::setLatencyTrace(tmgr_trace_t trace) { * Action * **********/ -NetworkNS3Action::NetworkNS3Action(Model* model, double size, s4u::Host* src, s4u::Host* dst) - : NetworkAction(model, size, false) +NetworkNS3Action::NetworkNS3Action(Model* model, double totalBytes, s4u::Host* src, s4u::Host* dst) + : NetworkAction(model, totalBytes, false) { XBT_DEBUG("Communicate from %s to %s", src->getCname(), dst->getCname()); src_ = src; dst_ = dst; - ns3_create_flow(src, dst, size, this); + static int port_number = 1025; // Port number is limited from 1025 to 65 000 + + unsigned int node1 = src->pimpl_netpoint->extension()->node_num; + unsigned int node2 = dst->pimpl_netpoint->extension()->node_num; + + ns3::Ptr src_node = src->pimpl_netpoint->extension()->ns3Node_; + ns3::Ptr dst_node = dst->pimpl_netpoint->extension()->ns3Node_; + + xbt_assert(node2 < IPV4addr.size(), "Element %s is unknown to NS3. Is it connected to any one-hop link?", + dst->pimpl_netpoint->getCname()); + std::string& addr = IPV4addr[node2]; + xbt_assert(not addr.empty(), "Element %s is unknown to NS3. Is it connected to any one-hop link?", + dst->pimpl_netpoint->getCname()); + + 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)); + sink.Install(dst_node); + + ns3::Ptr sock = ns3::Socket::CreateSocket(src_node, ns3::TcpSocketFactory::GetTypeId()); + + flowFromSock.insert({transformSocketPtr(sock), new SgFlow(totalBytes, this)}); + + sock->Bind(ns3::InetSocketAddress(port_number)); + + ns3::Simulator::ScheduleNow(&StartFlow, sock, addr.c_str(), port_number); + + port_number++; + xbt_assert(port_number <= 65000, "Too many connections! Port number is saturated."); s4u::Link::onCommunicate(this, src, dst); } @@ -340,36 +371,6 @@ void ns3_simulator(double maxSeconds) ns3::Simulator::Run (); } -void ns3_create_flow(simgrid::s4u::Host* src, simgrid::s4u::Host* dst, - u_int32_t TotalBytes, - simgrid::surf::NetworkNS3Action* action) { - unsigned int node1 = src->pimpl_netpoint->extension()->node_num; - unsigned int node2 = dst->pimpl_netpoint->extension()->node_num; - - ns3::Ptr src_node = src->pimpl_netpoint->extension()->ns3Node_; - ns3::Ptr dst_node = dst->pimpl_netpoint->extension()->ns3Node_; - - xbt_assert(node2 < IPV4addr.size(), "Element %s is unknown to NS3. Is it connected to any one-hop link?", - dst->pimpl_netpoint->getCname()); - std::string& addr = IPV4addr[node2]; - xbt_assert(not addr.empty(), "Element %s is unknown to NS3. Is it connected to any one-hop link?", - dst->pimpl_netpoint->getCname()); - - XBT_DEBUG("ns3_create_flow %u 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)); - sink.Install (dst_node); - - ns3::Ptr sock = ns3::Socket::CreateSocket(src_node, ns3::TcpSocketFactory::GetTypeId()); - - flowFromSock.insert({transformSocketPtr(sock), new SgFlow(TotalBytes, action)}); - - sock->Bind(ns3::InetSocketAddress(port_number)); - - ns3::Simulator::ScheduleNow(&StartFlow, sock, addr.c_str(), port_number); - - port_number++; - xbt_assert(port_number <= 65000, "Too many connections! Port number is saturated."); -} // initialize the NS3 interface and environment void ns3_initialize(std::string TcpProtocol)