From: Bruno Donassolo Date: Sat, 2 Apr 2022 16:28:59 +0000 (+0200) Subject: Separate NetworkModel from LinkImpl. X-Git-Tag: v3.32~334 X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/81d7cef8216e2de0c091d47b34c404047fa8f183 Separate NetworkModel from LinkImpl. Fix memleak in internal loopback link --- diff --git a/MANIFEST.in b/MANIFEST.in index 7f28604642..aa2f7fa162 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -2216,9 +2216,10 @@ include src/kernel/resource/CpuImpl.cpp include src/kernel/resource/CpuImpl.hpp include src/kernel/resource/DiskImpl.cpp include src/kernel/resource/DiskImpl.hpp -include src/kernel/resource/LinkImpl.cpp include src/kernel/resource/LinkImpl.hpp include src/kernel/resource/Model.cpp +include src/kernel/resource/NetworkModel.cpp +include src/kernel/resource/NetworkModel.hpp include src/kernel/resource/NetworkModelIntf_test.cpp include src/kernel/resource/Resource.hpp include src/kernel/resource/SplitDuplexLinkImpl.cpp diff --git a/include/simgrid/kernel/routing/NetZoneImpl.hpp b/include/simgrid/kernel/routing/NetZoneImpl.hpp index 047fd61765..97563dabbb 100644 --- a/include/simgrid/kernel/routing/NetZoneImpl.hpp +++ b/include/simgrid/kernel/routing/NetZoneImpl.hpp @@ -77,6 +77,8 @@ class XBT_PUBLIC NetZoneImpl : public xbt::PropertyHolder { // our content, as known to our graph routing algorithm (maps vertex_id -> vertex) std::vector vertices_; + // would like to use the one defined in the StandardLinkImpl file, but for some reason + // this hpp is exported to the users and so cannot include the other internal hpp. class LinkDeleter { public: void operator()(resource::StandardLinkImpl* link); @@ -161,8 +163,23 @@ public: std::vector get_all_hosts() const; size_t get_host_count() const; + /** + * @brief Recursively gets all links declared in this netzone + * + * Include children netzones. + * @return List of links + */ std::vector get_all_links() const; + /** + * @brief Recursively gets all links declared in this netzone. + * + * Using a filter function + * Include children netzones. + * @param filter Select links based on this filter + * @return List of links + */ std::vector get_filtered_links(const std::function& filter) const; + /** @brief Get total number of links declared in this netzone (and its children) */ size_t get_link_count() const; /** diff --git a/include/simgrid/s4u/Engine.hpp b/include/simgrid/s4u/Engine.hpp index 87e18151b3..d20ae12114 100644 --- a/include/simgrid/s4u/Engine.hpp +++ b/include/simgrid/s4u/Engine.hpp @@ -107,8 +107,6 @@ protected: friend kernel::resource::StandardLinkImpl; void host_register(const std::string& name, Host* host); void host_unregister(const std::string& name); - void link_register(const std::string& name, const Link* link); - void link_unregister(const std::string& name); void netpoint_register(simgrid::kernel::routing::NetPoint* card); void netpoint_unregister(simgrid::kernel::routing::NetPoint* card); void set_netzone_root(const NetZone* netzone); diff --git a/src/instr/instr_platform.cpp b/src/instr/instr_platform.cpp index d1a1a98fbc..deaa01a13d 100644 --- a/src/instr/instr_platform.cpp +++ b/src/instr/instr_platform.cpp @@ -15,7 +15,7 @@ #include "src/instr/instr_private.hpp" #include "src/kernel/resource/CpuImpl.hpp" -#include "src/kernel/resource/StandardLinkImpl.hpp" +#include "src/kernel/resource/NetworkModel.hpp" #include "src/surf/surf_interface.hpp" #include diff --git a/src/kernel/activity/CommImpl.cpp b/src/kernel/activity/CommImpl.cpp index 1e6483d66b..b73d706425 100644 --- a/src/kernel/activity/CommImpl.cpp +++ b/src/kernel/activity/CommImpl.cpp @@ -15,7 +15,7 @@ #include "src/kernel/activity/MailboxImpl.hpp" #include "src/kernel/actor/SimcallObserver.hpp" #include "src/kernel/resource/CpuImpl.hpp" -#include "src/kernel/resource/LinkImpl.hpp" +#include "src/kernel/resource/NetworkModel.hpp" #include "src/kernel/resource/StandardLinkImpl.hpp" #include "src/mc/mc_replay.hpp" diff --git a/src/kernel/resource/LinkImpl.hpp b/src/kernel/resource/LinkImpl.hpp index 1f07f85199..0f2c36acdb 100644 --- a/src/kernel/resource/LinkImpl.hpp +++ b/src/kernel/resource/LinkImpl.hpp @@ -6,95 +6,14 @@ #ifndef SIMGRID_KERNEL_RESOURCE_LINKIMPL_HPP #define SIMGRID_KERNEL_RESOURCE_LINKIMPL_HPP -#include "simgrid/kernel/resource/Model.hpp" -#include "simgrid/kernel/resource/NetworkModelIntf.hpp" #include "simgrid/s4u/Link.hpp" -#include "src/kernel/lmm/maxmin.hpp" #include "src/kernel/resource/Resource.hpp" #include "xbt/PropertyHolder.hpp" -#include -#include - -/*********** - * Classes * - ***********/ -class StandardLinkImpl; - namespace simgrid { namespace kernel { namespace resource { -/********* - * Model * - *********/ - -/** @ingroup SURF_network_interface - * @brief SURF network model interface class - * @details A model is an object which handles the interactions between its Resources and its Actions - */ -class NetworkModel : public Model, public NetworkModelIntf { -public: - static config::Flag cfg_tcp_gamma; - static config::Flag cfg_crosstraffic; - - using Model::Model; - NetworkModel(const NetworkModel&) = delete; - NetworkModel& operator=(const NetworkModel&) = delete; - ~NetworkModel() override; - - /** - * @brief Create a [WiFi]Link - * - * @param name The name of the Link - * @param bandwidths The vector of bandwidths of the Link in bytes per second - */ - virtual StandardLinkImpl* create_link(const std::string& name, const std::vector& bandwidths) = 0; - - virtual StandardLinkImpl* create_wifi_link(const std::string& name, const std::vector& bandwidths) = 0; - - /** - * @brief Create a communication between two hosts. - * @details It makes calls to the routing part, and execute the communication between the two end points. - * - * @param src The source of the communication - * @param dst The destination of the communication - * @param size The size of the communication in bytes - * @param rate Allows to limit the transfer rate. Negative value means unlimited. - * @return The action representing the communication - */ - virtual Action* communicate(s4u::Host* src, s4u::Host* dst, double size, double rate) = 0; - - /** - * @brief Get the right multiplicative factor for the latency. - * @details Depending on the model, the effective latency when sending a message might be different from the - * theoretical latency of the link, in function of the message size. In order to account for this, this function gets - * this factor. - * - * @param size The size of the message. - * @return The latency factor. - */ - virtual double get_latency_factor(double /* size */) { return sg_latency_factor; } - - /** - * @brief Get the right multiplicative factor for the bandwidth. - * @details Depending on the model, the effective bandwidth when sending a message might be different from the - * theoretical bandwidth of the link, in function of the message size. In order to account for this, this function - * gets this factor. - * - * @param size The size of the message. - * @return The bandwidth factor. - */ - virtual double get_bandwidth_factor(double /* size*/) { return sg_bandwidth_factor; } - - double next_occurring_event_full(double now) override; - - void set_lat_factor_cb(const std::function& cb) override { THROW_UNIMPLEMENTED; } - void set_bw_factor_cb(const std::function& cb) override { THROW_UNIMPLEMENTED; } - - StandardLinkImpl* loopback_ = nullptr; -}; - /************ * Resource * ************/ @@ -125,60 +44,6 @@ public: virtual void set_concurrency_limit(int limit) const = 0; }; -/********** - * Action * - **********/ -/** @ingroup SURF_network_interface - * @brief SURF network action interface class - * @details A NetworkAction represents a communication between two [hosts](@ref HostImpl) - */ -class NetworkAction : public Action { - s4u::Host& src_; - s4u::Host& dst_; - -public: - /** @brief Constructor - * - * @param model The NetworkModel associated to this NetworkAction - * @param cost The cost of this NetworkAction in [TODO] - * @param failed [description] - */ - NetworkAction(Model* model, s4u::Host& src, s4u::Host& dst, double cost, bool failed) - : Action(model, cost, failed), src_(src), dst_(dst) - { - } - - /** - * @brief NetworkAction constructor - * - * @param model The NetworkModel associated to this NetworkAction - * @param cost The cost of this NetworkAction in bytes - * @param failed Actions can be created in a failed state - * @param var The lmm variable associated to this Action if it is part of a LMM component - */ - NetworkAction(Model* model, s4u::Host& src, s4u::Host& dst, double cost, bool failed, lmm::Variable* var) - : Action(model, cost, failed, var), src_(src), dst_(dst){}; - - void set_state(Action::State state) override; - virtual std::list get_links() const; - - double latency_ = 0.; // Delay before the action starts - double lat_current_ = 0.; // Used to compute the communication RTT, and accordingly limit the communication rate - double sharing_penalty_ = {}; - - s4u::Host& get_src() const { return src_; } - s4u::Host& get_dst() const { return dst_; } -}; - -/* Insert link(s) at the end of vector `result' (at the beginning, and reversed, for insert_link_latency()), and add - * link->get_latency() to *latency when latency is not null - */ -void add_link_latency(std::vector& result, StandardLinkImpl* link, double* latency); -void add_link_latency(std::vector& result, const std::vector& links, - double* latency); -void insert_link_latency(std::vector& result, const std::vector& links, - double* latency); - } // namespace resource } // namespace kernel } // namespace simgrid diff --git a/src/kernel/resource/LinkImpl.cpp b/src/kernel/resource/NetworkModel.cpp similarity index 97% rename from src/kernel/resource/LinkImpl.cpp rename to src/kernel/resource/NetworkModel.cpp index 53693587e0..354489e754 100644 --- a/src/kernel/resource/LinkImpl.cpp +++ b/src/kernel/resource/NetworkModel.cpp @@ -6,8 +6,7 @@ #include #include "simgrid/sg_config.hpp" -#include "src/kernel/resource/LinkImpl.hpp" -#include "src/kernel/resource/StandardLinkImpl.hpp" +#include "src/kernel/resource/NetworkModel.hpp" #include "src/kernel/resource/profile/Profile.hpp" #include "src/surf/surf_interface.hpp" diff --git a/src/kernel/resource/NetworkModel.hpp b/src/kernel/resource/NetworkModel.hpp new file mode 100644 index 0000000000..bfe6aa3201 --- /dev/null +++ b/src/kernel/resource/NetworkModel.hpp @@ -0,0 +1,147 @@ +/* Copyright (c) 2004-2022. 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. */ + +#ifndef SIMGRID_KERNEL_RESOURCE_NETWORKMODEL_HPP +#define SIMGRID_KERNEL_RESOURCE_NETWORKMODEL_HPP + +#include "simgrid/kernel/resource/Model.hpp" +#include "simgrid/kernel/resource/NetworkModelIntf.hpp" +#include "src/kernel/resource/StandardLinkImpl.hpp" + +#include + +namespace simgrid { +namespace kernel { +namespace resource { + +/********* + * Model * + *********/ + +/** @ingroup SURF_network_interface + * @brief SURF network model interface class + * @details A model is an object which handles the interactions between its Resources and its Actions + */ +class NetworkModel : public Model, public NetworkModelIntf { +public: + static config::Flag cfg_tcp_gamma; + static config::Flag cfg_crosstraffic; + + using Model::Model; + NetworkModel(const NetworkModel&) = delete; + NetworkModel& operator=(const NetworkModel&) = delete; + ~NetworkModel() override; + + /** + * @brief Create a [WiFi]Link + * + * @param name The name of the Link + * @param bandwidths The vector of bandwidths of the Link in bytes per second + */ + virtual StandardLinkImpl* create_link(const std::string& name, const std::vector& bandwidths) = 0; + + virtual StandardLinkImpl* create_wifi_link(const std::string& name, const std::vector& bandwidths) = 0; + + /** + * @brief Create a communication between two hosts. + * @details It makes calls to the routing part, and execute the communication between the two end points. + * + * @param src The source of the communication + * @param dst The destination of the communication + * @param size The size of the communication in bytes + * @param rate Allows to limit the transfer rate. Negative value means unlimited. + * @return The action representing the communication + */ + virtual Action* communicate(s4u::Host* src, s4u::Host* dst, double size, double rate) = 0; + + /** + * @brief Get the right multiplicative factor for the latency. + * @details Depending on the model, the effective latency when sending a message might be different from the + * theoretical latency of the link, in function of the message size. In order to account for this, this function gets + * this factor. + * + * @param size The size of the message. + * @return The latency factor. + */ + virtual double get_latency_factor(double /* size */) { return sg_latency_factor; } + + /** + * @brief Get the right multiplicative factor for the bandwidth. + * @details Depending on the model, the effective bandwidth when sending a message might be different from the + * theoretical bandwidth of the link, in function of the message size. In order to account for this, this function + * gets this factor. + * + * @param size The size of the message. + * @return The bandwidth factor. + */ + virtual double get_bandwidth_factor(double /* size*/) { return sg_bandwidth_factor; } + + double next_occurring_event_full(double now) override; + + void set_lat_factor_cb(const std::function& cb) override { THROW_UNIMPLEMENTED; } + void set_bw_factor_cb(const std::function& cb) override { THROW_UNIMPLEMENTED; } + + std::unique_ptr loopback_; +}; + +/********** + * Action * + **********/ +/** @ingroup SURF_network_interface + * @brief SURF network action interface class + * @details A NetworkAction represents a communication between two [hosts](@ref HostImpl) + */ +class NetworkAction : public Action { + s4u::Host& src_; + s4u::Host& dst_; + +public: + /** @brief Constructor + * + * @param model The NetworkModel associated to this NetworkAction + * @param cost The cost of this NetworkAction in [TODO] + * @param failed [description] + */ + NetworkAction(Model* model, s4u::Host& src, s4u::Host& dst, double cost, bool failed) + : Action(model, cost, failed), src_(src), dst_(dst) + { + } + + /** + * @brief NetworkAction constructor + * + * @param model The NetworkModel associated to this NetworkAction + * @param cost The cost of this NetworkAction in bytes + * @param failed Actions can be created in a failed state + * @param var The lmm variable associated to this Action if it is part of a LMM component + */ + NetworkAction(Model* model, s4u::Host& src, s4u::Host& dst, double cost, bool failed, lmm::Variable* var) + : Action(model, cost, failed, var), src_(src), dst_(dst){}; + + void set_state(Action::State state) override; + virtual std::list get_links() const; + + double latency_ = 0.; // Delay before the action starts + double lat_current_ = 0.; // Used to compute the communication RTT, and accordingly limit the communication rate + double sharing_penalty_ = {}; + + s4u::Host& get_src() const { return src_; } + s4u::Host& get_dst() const { return dst_; } +}; + +/* Insert link(s) at the end of vector `result' (at the beginning, and reversed, for insert_link_latency()), and add + * link->get_latency() to *latency when latency is not null + */ +void add_link_latency(std::vector& result, StandardLinkImpl* link, double* latency); +void add_link_latency(std::vector& result, const std::vector& links, + double* latency); +void insert_link_latency(std::vector& result, const std::vector& links, + double* latency); + +} // namespace resource +} // namespace kernel +} // namespace simgrid + +#endif /* SIMGRID_KERNEL_RESOURCE_NETWORKMODEL_HPP */ diff --git a/src/kernel/resource/StandardLinkImpl.cpp b/src/kernel/resource/StandardLinkImpl.cpp index 8e046826c0..cf3dfbbdd2 100644 --- a/src/kernel/resource/StandardLinkImpl.cpp +++ b/src/kernel/resource/StandardLinkImpl.cpp @@ -24,10 +24,14 @@ StandardLinkImpl::StandardLinkImpl(const std::string& name) : LinkImpl(name), pi if (name != "__loopback__") xbt_assert(not s4u::Link::by_name_or_null(name), "Link '%s' declared several times in the platform.", name.c_str()); - s4u::Engine::get_instance()->link_register(name, &piface_); XBT_DEBUG("Create link '%s'", name.c_str()); } +void StandardLinkImpl::Deleter::operator()(resource::StandardLinkImpl* link) +{ + link->destroy(); +} + /** @brief Fire the required callbacks and destroy the object * * Don't delete directly a Link, call l->destroy() instead. diff --git a/src/kernel/resource/StandardLinkImpl.hpp b/src/kernel/resource/StandardLinkImpl.hpp index f63b892abc..818df95e3d 100644 --- a/src/kernel/resource/StandardLinkImpl.hpp +++ b/src/kernel/resource/StandardLinkImpl.hpp @@ -34,6 +34,10 @@ protected: public: void destroy(); // Must be called instead of the destructor + class Deleter { + public: + void operator()(StandardLinkImpl* link); + }; void latency_check(double latency) const; diff --git a/src/kernel/routing/DijkstraZone.cpp b/src/kernel/routing/DijkstraZone.cpp index c46b5f3976..e8d23aeb19 100644 --- a/src/kernel/routing/DijkstraZone.cpp +++ b/src/kernel/routing/DijkstraZone.cpp @@ -7,7 +7,7 @@ #include #include -#include "src/kernel/resource/StandardLinkImpl.hpp" +#include "src/kernel/resource/NetworkModel.hpp" #include #include @@ -53,7 +53,7 @@ void DijkstraZone::do_seal() if (not found) { auto* route = new Route(); - route->link_list_.push_back(get_network_model()->loopback_); + route->link_list_.push_back(get_network_model()->loopback_.get()); xbt_graph_new_edge(route_graph_.get(), node, node, route); } } diff --git a/src/kernel/routing/DragonflyZone.cpp b/src/kernel/routing/DragonflyZone.cpp index 8273672eab..de5aa5806a 100644 --- a/src/kernel/routing/DragonflyZone.cpp +++ b/src/kernel/routing/DragonflyZone.cpp @@ -5,7 +5,7 @@ #include "simgrid/kernel/routing/DragonflyZone.hpp" #include "simgrid/kernel/routing/NetPoint.hpp" -#include "src/kernel/resource/StandardLinkImpl.hpp" +#include "src/kernel/resource/NetworkModel.hpp" #include #include diff --git a/src/kernel/routing/FatTreeZone.cpp b/src/kernel/routing/FatTreeZone.cpp index 2183e2f2da..3c24baa761 100644 --- a/src/kernel/routing/FatTreeZone.cpp +++ b/src/kernel/routing/FatTreeZone.cpp @@ -6,7 +6,7 @@ #include #include -#include "src/kernel/resource/StandardLinkImpl.hpp" +#include "src/kernel/resource/NetworkModel.hpp" #include "src/surf/xml/platf.hpp" // surf_parse_error() and surf_parse_assert() #include diff --git a/src/kernel/routing/FloydZone.cpp b/src/kernel/routing/FloydZone.cpp index 0fea4c0db9..867c140153 100644 --- a/src/kernel/routing/FloydZone.cpp +++ b/src/kernel/routing/FloydZone.cpp @@ -7,7 +7,7 @@ #include #include -#include "src/kernel/resource/StandardLinkImpl.hpp" +#include "src/kernel/resource/NetworkModel.hpp" #include @@ -135,7 +135,7 @@ void FloydZone::do_seal() auto& route = link_table_[i][i]; if (not route) { route.reset(new Route()); - route->link_list_.push_back(get_network_model()->loopback_); + route->link_list_.push_back(get_network_model()->loopback_.get()); predecessor_table_[i][i] = i; cost_table_[i][i] = 1; } diff --git a/src/kernel/routing/FullZone.cpp b/src/kernel/routing/FullZone.cpp index c716b8f791..8112081b19 100644 --- a/src/kernel/routing/FullZone.cpp +++ b/src/kernel/routing/FullZone.cpp @@ -6,7 +6,7 @@ #include #include -#include "src/kernel/resource/StandardLinkImpl.hpp" +#include "src/kernel/resource/NetworkModel.hpp" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(ker_routing_full, ker_routing, "Kernel Full Routing"); @@ -35,7 +35,7 @@ void FullZone::do_seal() auto& route = routing_table_[i][i]; if (not route) { route.reset(new Route()); - route->link_list_.push_back(get_network_model()->loopback_); + route->link_list_.push_back(get_network_model()->loopback_.get()); } } } diff --git a/src/kernel/routing/NetZoneImpl.cpp b/src/kernel/routing/NetZoneImpl.cpp index 0df9d7411c..917f96bc32 100644 --- a/src/kernel/routing/NetZoneImpl.cpp +++ b/src/kernel/routing/NetZoneImpl.cpp @@ -12,6 +12,7 @@ #include "src/kernel/EngineImpl.hpp" #include "src/kernel/resource/CpuImpl.hpp" #include "src/kernel/resource/DiskImpl.hpp" +#include "src/kernel/resource/NetworkModel.hpp" #include "src/kernel/resource/SplitDuplexLinkImpl.hpp" #include "src/kernel/resource/StandardLinkImpl.hpp" #include "src/surf/HostImpl.hpp" diff --git a/src/kernel/routing/StarZone.cpp b/src/kernel/routing/StarZone.cpp index ddbbd509d1..489ecd9c88 100644 --- a/src/kernel/routing/StarZone.cpp +++ b/src/kernel/routing/StarZone.cpp @@ -6,7 +6,7 @@ #include "simgrid/kernel/routing/StarZone.hpp" #include "simgrid/kernel/routing/NetPoint.hpp" #include "simgrid/kernel/routing/RoutedZone.hpp" -#include "src/kernel/resource/StandardLinkImpl.hpp" +#include "src/kernel/resource/NetworkModel.hpp" #include "xbt/string.hpp" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(ker_routing_star, ker_routing, "Kernel Star Routing"); diff --git a/src/kernel/routing/TorusZone.cpp b/src/kernel/routing/TorusZone.cpp index 4e1927735b..33454a5f83 100644 --- a/src/kernel/routing/TorusZone.cpp +++ b/src/kernel/routing/TorusZone.cpp @@ -6,7 +6,7 @@ #include "simgrid/kernel/routing/TorusZone.hpp" #include "simgrid/kernel/routing/NetPoint.hpp" #include "simgrid/s4u/Host.hpp" -#include "src/kernel/resource/LinkImpl.hpp" +#include "src/kernel/resource/NetworkModel.hpp" #include #include diff --git a/src/kernel/routing/WifiZone.cpp b/src/kernel/routing/WifiZone.cpp index e193b8b22d..a9b941cf57 100644 --- a/src/kernel/routing/WifiZone.cpp +++ b/src/kernel/routing/WifiZone.cpp @@ -6,7 +6,7 @@ #include #include -#include "src/kernel/resource/StandardLinkImpl.hpp" +#include "src/kernel/resource/NetworkModel.hpp" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(ker_routing_wifi, ker_routing, "Kernel Wifi Routing"); diff --git a/src/plugins/host_dvfs.cpp b/src/plugins/host_dvfs.cpp index db1af095e7..c6cf779144 100644 --- a/src/plugins/host_dvfs.cpp +++ b/src/plugins/host_dvfs.cpp @@ -13,7 +13,7 @@ #include "src/internal_config.h" // HAVE_SMPI #include "src/kernel/activity/CommImpl.hpp" -#include "src/kernel/resource/StandardLinkImpl.hpp" +#include "src/kernel/resource/NetworkModel.hpp" #if HAVE_SMPI #include "src/smpi/include/smpi_request.hpp" #include "src/smpi/plugins/ampi/ampi.hpp" diff --git a/src/plugins/link_load.cpp b/src/plugins/link_load.cpp index d29e70861e..f6089c93fd 100644 --- a/src/plugins/link_load.cpp +++ b/src/plugins/link_load.cpp @@ -7,7 +7,7 @@ #include #include "src/kernel/activity/CommImpl.hpp" -#include "src/kernel/resource/StandardLinkImpl.hpp" +#include "src/kernel/resource/NetworkModel.hpp" #include diff --git a/src/s4u/s4u_Engine.cpp b/src/s4u/s4u_Engine.cpp index ef3c17e871..74d9f867cc 100644 --- a/src/s4u/s4u_Engine.cpp +++ b/src/s4u/s4u_Engine.cpp @@ -15,6 +15,7 @@ #include "mc/mc.h" #include "src/instr/instr_private.hpp" #include "src/kernel/EngineImpl.hpp" +#include "src/kernel/resource/NetworkModel.hpp" #include "src/kernel/resource/SplitDuplexLinkImpl.hpp" #include "src/kernel/resource/StandardLinkImpl.hpp" #include "src/mc/mc_replay.hpp" @@ -279,16 +280,6 @@ Mailbox* Engine::mailbox_by_name_or_create(const std::string& name) const return mbox->get_iface(); } -void Engine::link_register(const std::string& name, const Link* link) -{ - // pimpl->links_[name] = link->get_impl(); //FIXME -} - -void Engine::link_unregister(const std::string& name) -{ - // pimpl->links_.erase(name); FIXME -} - /** @brief Returns the amount of links in the platform */ size_t Engine::get_link_count() const { diff --git a/src/s4u/s4u_Netzone.cpp b/src/s4u/s4u_Netzone.cpp index 699116c9ed..8f01821a0b 100644 --- a/src/s4u/s4u_Netzone.cpp +++ b/src/s4u/s4u_Netzone.cpp @@ -12,8 +12,7 @@ #include #include -#include "src/kernel/resource/LinkImpl.hpp" -#include "src/kernel/resource/StandardLinkImpl.hpp" +#include "src/kernel/resource/NetworkModel.hpp" namespace simgrid { namespace s4u { diff --git a/src/surf/HostImpl.hpp b/src/surf/HostImpl.hpp index e9a291ce91..c5de6ece95 100644 --- a/src/surf/HostImpl.hpp +++ b/src/surf/HostImpl.hpp @@ -9,7 +9,6 @@ #include "src/kernel/actor/ActorImpl.hpp" #include "src/kernel/resource/CpuImpl.hpp" #include "src/kernel/resource/DiskImpl.hpp" -#include "src/kernel/resource/LinkImpl.hpp" #include #include diff --git a/src/surf/host_clm03.cpp b/src/surf/host_clm03.cpp index d7353cf68d..87e1ec3650 100644 --- a/src/surf/host_clm03.cpp +++ b/src/surf/host_clm03.cpp @@ -9,6 +9,7 @@ #include "simgrid/sg_config.hpp" #include "src/kernel/EngineImpl.hpp" +#include "src/kernel/resource/NetworkModel.hpp" #include "src/surf/host_clm03.hpp" XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(res_host); diff --git a/src/surf/network_cm02.cpp b/src/surf/network_cm02.cpp index 2da2664ed0..e981df7484 100644 --- a/src/surf/network_cm02.cpp +++ b/src/surf/network_cm02.cpp @@ -97,7 +97,7 @@ NetworkCm02Model::NetworkCm02Model(const std::string& name) : NetworkModel(name) set_maxmin_system(lmm::System::build(cfg_network_solver, select)); - loopback_ = create_link("__loopback__", {config::get_value("network/loopback-bw")}); + loopback_.reset(create_link("__loopback__", {config::get_value("network/loopback-bw")})); loopback_->set_sharing_policy(s4u::Link::SharingPolicy::FATPIPE, {}); loopback_->set_latency(config::get_value("network/loopback-lat")); loopback_->get_iface()->seal(); diff --git a/src/surf/network_cm02.hpp b/src/surf/network_cm02.hpp index 8cabad50ae..eb93747649 100644 --- a/src/surf/network_cm02.hpp +++ b/src/surf/network_cm02.hpp @@ -8,8 +8,7 @@ #include -#include "simgrid/kernel/resource/NetworkModelIntf.hpp" -#include "src/kernel/resource/LinkImpl.hpp" +#include "src/kernel/resource/NetworkModel.hpp" #include "src/kernel/resource/StandardLinkImpl.hpp" #include "xbt/graph.h" #include "xbt/string.hpp" diff --git a/src/surf/network_constant.hpp b/src/surf/network_constant.hpp index 2a8c70fc60..5828d69691 100644 --- a/src/surf/network_constant.hpp +++ b/src/surf/network_constant.hpp @@ -6,7 +6,7 @@ #ifndef NETWORK_CONSTANT_HPP_ #define NETWORK_CONSTANT_HPP_ -#include "src/kernel/resource/LinkImpl.hpp" +#include "src/kernel/resource/NetworkModel.hpp" namespace simgrid { namespace kernel { diff --git a/src/surf/network_ns3.hpp b/src/surf/network_ns3.hpp index 02036a39b5..275d45d274 100644 --- a/src/surf/network_ns3.hpp +++ b/src/surf/network_ns3.hpp @@ -8,6 +8,7 @@ #include "xbt/base.h" +#include "src/kernel/resource/NetworkModel.hpp" #include "src/kernel/resource/StandardLinkImpl.hpp" namespace simgrid { diff --git a/src/surf/ptask_L07.cpp b/src/surf/ptask_L07.cpp index a7030b9d40..e89e762674 100644 --- a/src/surf/ptask_L07.cpp +++ b/src/surf/ptask_L07.cpp @@ -76,10 +76,10 @@ NetworkL07Model::NetworkL07Model(const std::string& name, HostL07Model* hmodel, : NetworkModel(name), hostModel_(hmodel) { set_maxmin_system(sys); - loopback_ = create_link("__loopback__", {simgrid::config::get_value("network/loopback-bw")}); + loopback_.reset(create_link("__loopback__", {simgrid::config::get_value("network/loopback-bw")})); loopback_->set_sharing_policy(s4u::Link::SharingPolicy::FATPIPE, {}); loopback_->set_latency(simgrid::config::get_value("network/loopback-lat")); - loopback_->seal(); + loopback_->get_iface()->seal(); } NetworkL07Model::~NetworkL07Model() diff --git a/src/surf/ptask_L07.hpp b/src/surf/ptask_L07.hpp index fa57e85674..9c0cbf26be 100644 --- a/src/surf/ptask_L07.hpp +++ b/src/surf/ptask_L07.hpp @@ -3,6 +3,7 @@ /* 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. */ +#include "src/kernel/resource/NetworkModel.hpp" #include "src/surf/HostImpl.hpp" #include #include diff --git a/teshsuite/surf/surf_usage/surf_usage.cpp b/teshsuite/surf/surf_usage/surf_usage.cpp index b241ca6358..ff7c14a7e7 100644 --- a/teshsuite/surf/surf_usage/surf_usage.cpp +++ b/teshsuite/surf/surf_usage/surf_usage.cpp @@ -11,7 +11,7 @@ #include "simgrid/zone.h" #include "src/kernel/EngineImpl.hpp" #include "src/kernel/resource/CpuImpl.hpp" -#include "src/kernel/resource/LinkImpl.hpp" +#include "src/kernel/resource/NetworkModel.hpp" #include "xbt/config.hpp" XBT_LOG_NEW_DEFAULT_CATEGORY(surf_test, "Messages specific for surf example"); diff --git a/teshsuite/surf/surf_usage2/surf_usage2.cpp b/teshsuite/surf/surf_usage2/surf_usage2.cpp index 4354c4aef1..1af5762e9b 100644 --- a/teshsuite/surf/surf_usage2/surf_usage2.cpp +++ b/teshsuite/surf/surf_usage2/surf_usage2.cpp @@ -11,7 +11,7 @@ #include "simgrid/zone.h" #include "src/kernel/EngineImpl.hpp" #include "src/kernel/resource/CpuImpl.hpp" -#include "src/kernel/resource/LinkImpl.hpp" +#include "src/kernel/resource/NetworkModel.hpp" #include "src/surf/surf_interface.hpp" #include "xbt/config.hpp" diff --git a/tools/cmake/DefinePackages.cmake b/tools/cmake/DefinePackages.cmake index 1332be4f01..b1f7bf77a3 100644 --- a/tools/cmake/DefinePackages.cmake +++ b/tools/cmake/DefinePackages.cmake @@ -14,6 +14,7 @@ set(EXTRA_DIST src/include/xxhash.hpp src/kernel/actor/Simcall.hpp src/kernel/resource/LinkImpl.hpp + src/kernel/resource/NetworkModel.hpp src/kernel/resource/SplitDuplexLinkImpl.hpp src/kernel/resource/StandardLinkImpl.hpp src/kernel/resource/WifiLinkImpl.hpp @@ -305,8 +306,8 @@ set(SURF_SRC src/kernel/resource/DiskImpl.cpp src/kernel/resource/DiskImpl.hpp src/kernel/resource/Model.cpp + src/kernel/resource/NetworkModel.cpp src/kernel/resource/Resource.hpp - src/kernel/resource/LinkImpl.cpp src/kernel/resource/SplitDuplexLinkImpl.cpp src/kernel/resource/StandardLinkImpl.cpp src/kernel/resource/VirtualMachineImpl.hpp