X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/cdf6a962eb4e88efbed3df9c41343adabcf09e6c..94cbd8cc35e9e5da49e598878e756691875d6147:/src/surf/network_ns3.cpp diff --git a/src/surf/network_ns3.cpp b/src/surf/network_ns3.cpp index d5a4eccfec..acc764a20e 100644 --- a/src/surf/network_ns3.cpp +++ b/src/surf/network_ns3.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2007-2019. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2007-2020. 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. */ @@ -55,9 +55,8 @@ static int number_of_networks = 1; simgrid::xbt::Extension NetPointNs3::EXTENSION_ID; -NetPointNs3::NetPointNs3() +NetPointNs3::NetPointNs3() : ns3_node_(ns3::CreateObject(0)) { - ns3_node_ = ns3::CreateObject(0); stack.Install(ns3_node_); nodes.Add(ns3_node_); node_num = number_of_nodes++; @@ -76,7 +75,7 @@ static void clusterCreation_cb(simgrid::kernel::routing::ClusterCreationArgs con // Create private link std::string host_id = cluster.prefix + std::to_string(i) + cluster.suffix; - auto* host_src = simgrid::s4u::Host::by_name(host_id)->pimpl_netpoint->extension(); + auto* host_src = simgrid::s4u::Host::by_name(host_id)->get_netpoint()->extension(); xbt_assert(host_src, "Cannot find a ns-3 host of name %s", host_id.c_str()); // Any ns-3 route is symmetrical @@ -90,8 +89,8 @@ static void clusterCreation_cb(simgrid::kernel::routing::ClusterCreationArgs con } static void routeCreation_cb(bool symmetrical, simgrid::kernel::routing::NetPoint* src, - simgrid::kernel::routing::NetPoint* dst, simgrid::kernel::routing::NetPoint* gw_src, - simgrid::kernel::routing::NetPoint* gw_dst, + simgrid::kernel::routing::NetPoint* dst, simgrid::kernel::routing::NetPoint* /*gw_src*/, + simgrid::kernel::routing::NetPoint* /*gw_dst*/, std::vector const& link_list) { if (link_list.size() == 1) { @@ -166,7 +165,7 @@ NetworkNS3Model::NetworkNS3Model() : NetworkModel(Model::UpdateAlgo::FULL) pt.extension_set(new NetPointNs3()); XBT_VERB("SimGrid's %s is known as node %d within ns-3", pt.get_cname(), pt.extension()->node_num); }); - surf::on_cluster.connect(&clusterCreation_cb); + routing::on_cluster_creation.connect(&clusterCreation_cb); s4u::Engine::on_platform_created.connect(&postparse_cb); s4u::NetZone::on_route_creation.connect(&routeCreation_cb); @@ -191,10 +190,10 @@ Action* NetworkNS3Model::communicate(s4u::Host* src, s4u::Host* dst, double size return new NetworkNS3Action(this, size, src, dst); } -double NetworkNS3Model::next_occuring_event(double now) +double NetworkNS3Model::next_occurring_event(double now) { double time_to_next_flow_completion = 0.0; - XBT_DEBUG("ns3_next_occuring_event"); + XBT_DEBUG("ns3_next_occurring_event"); //get the first relevant value from the running_actions list @@ -231,8 +230,8 @@ void NetworkNS3Model::update_actions_state(double now, double delta) SgFlow* sgFlow = elm.second; NetworkNS3Action * action = sgFlow->action_; XBT_DEBUG("Processing socket %p (action %p)",sgFlow,action); - // Because NS3 stops as soon as a flow is finished, the other flows that ends at the same time may remains in an inconsistant state - // (i.e. remains_ == 0 but finished_ == false). + // Because NS3 stops as soon as a flow is finished, the other flows that ends at the same time may remains in an + // inconsistent state (i.e. remains_ == 0 but finished_ == false). // However, SimGrid considers sometimes that an action with remains_ == 0 is finished. // Thus, to avoid inconsistencies between SimGrid and NS3, set remains to 0 only when the flow is finished in NS3 int remains = action->get_cost() - sgFlow->sent_bytes_; @@ -244,10 +243,10 @@ void NetworkNS3Model::update_actions_state(double now, double delta) std::vector route = std::vector(); - action->src_->route_to(action->dst_, route, nullptr); + action->get_src().route_to(&action->get_dst(), route, nullptr); for (auto const& link : route) - TRACE_surf_resource_set_utilization("LINK", "bandwidth_used", link->get_cname(), action->get_category(), - (data_delta_sent) / delta, now - delta, delta); + instr::resource_set_utilization("LINK", "bandwidth_used", link->get_cname(), action->get_category(), + (data_delta_sent) / delta, now - delta, delta); action->last_sent_ = sgFlow->sent_bytes_; } @@ -256,7 +255,7 @@ void NetworkNS3Model::update_actions_state(double now, double delta) socket_to_destroy.push_back(ns3_socket); XBT_DEBUG("Destroy socket %p of action %p", ns3_socket.c_str(), action); action->set_remains(0); - action->finish(kernel::resource::Action::State::FINISHED); + action->finish(Action::State::FINISHED); } else { XBT_DEBUG("Socket %p sent %u bytes out of %u (%u remaining)", ns3_socket.c_str(), sgFlow->sent_bytes_, sgFlow->total_bytes_, sgFlow->remaining_); @@ -286,7 +285,7 @@ LinkNS3::LinkNS3(NetworkNS3Model* model, const std::string& name, double bandwid bandwidth_.peak = bandwidth; latency_.peak = latency; - s4u::Link::on_creation(this->piface_); + s4u::Link::on_creation(*this->get_iface()); } LinkNS3::~LinkNS3() = default; @@ -309,9 +308,8 @@ void LinkNS3::set_latency_profile(profile::Profile*) **********/ NetworkNS3Action::NetworkNS3Action(Model* model, double totalBytes, s4u::Host* src, s4u::Host* dst) - : NetworkAction(model, totalBytes, false), src_(src), dst_(dst) + : NetworkAction(model, *src, *dst, totalBytes, false) { - // If there is no other started actions, we need to move NS-3 forward to be sync with SimGrid if (model->get_started_action_set()->size()==1){ while(double_positive(surf_get_clock() - ns3::Simulator::Now().GetSeconds(), sg_surf_precision)){ @@ -324,17 +322,17 @@ NetworkNS3Action::NetworkNS3Action(Model* model, double totalBytes, s4u::Host* s 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; + unsigned int node1 = src->get_netpoint()->extension()->node_num; + unsigned int node2 = dst->get_netpoint()->extension()->node_num; - ns3::Ptr src_node = src->pimpl_netpoint->extension()->ns3_node_; - ns3::Ptr dst_node = dst->pimpl_netpoint->extension()->ns3_node_; + ns3::Ptr src_node = src->get_netpoint()->extension()->ns3_node_; + ns3::Ptr dst_node = dst->get_netpoint()->extension()->ns3_node_; xbt_assert(node2 < IPV4addr.size(), "Element %s is unknown to ns-3. Is it connected to any one-hop link?", - dst->pimpl_netpoint->get_cname()); + 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->pimpl_netpoint->get_cname()); + 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)); @@ -356,7 +354,7 @@ NetworkNS3Action::NetworkNS3Action(Model* model, double totalBytes, s4u::Host* s } xbt_assert(port_number <= 65000, "Too many connections! Port number is saturated."); - s4u::Link::on_communicate(*this, src, dst); + s4u::Link::on_communicate(*this); } void NetworkNS3Action::suspend() { @@ -367,7 +365,7 @@ void NetworkNS3Action::resume() { THROW_UNIMPLEMENTED; } -std::list NetworkNS3Action::links() const +std::list NetworkNS3Action::get_links() const { THROW_UNIMPLEMENTED; } @@ -426,7 +424,8 @@ void ns3_initialize(std::string TcpProtocol) } } -void ns3_add_cluster(const char* id, double bw, double lat) { +void ns3_add_cluster(const char* /*id*/, double bw, double lat) +{ ns3::NodeContainer Nodes; for (unsigned int i = number_of_clusters_nodes; i < Cluster_nodes.GetN(); i++) {