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
// our content, as known to our graph routing algorithm (maps vertex_id -> vertex)
std::vector<kernel::routing::NetPoint*> 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);
std::vector<s4u::Host*> 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<s4u::Link*> 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<s4u::Link*> get_filtered_links(const std::function<bool(s4u::Link*)>& filter) const;
+ /** @brief Get total number of links declared in this netzone (and its children) */
size_t get_link_count() const;
/**
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);
#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 <fstream>
#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"
#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 <list>
-#include <unordered_map>
-
-/***********
- * 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<double> cfg_tcp_gamma;
- static config::Flag<bool> 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<double>& bandwidths) = 0;
-
- virtual StandardLinkImpl* create_wifi_link(const std::string& name, const std::vector<double>& 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<NetworkFactorCb>& cb) override { THROW_UNIMPLEMENTED; }
- void set_bw_factor_cb(const std::function<NetworkFactorCb>& cb) override { THROW_UNIMPLEMENTED; }
-
- StandardLinkImpl* loopback_ = nullptr;
-};
-
/************
* Resource *
************/
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<StandardLinkImpl*> 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<StandardLinkImpl*>& result, StandardLinkImpl* link, double* latency);
-void add_link_latency(std::vector<StandardLinkImpl*>& result, const std::vector<StandardLinkImpl*>& links,
- double* latency);
-void insert_link_latency(std::vector<StandardLinkImpl*>& result, const std::vector<StandardLinkImpl*>& links,
- double* latency);
-
} // namespace resource
} // namespace kernel
} // namespace simgrid
#include <simgrid/s4u/Engine.hpp>
#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"
--- /dev/null
+/* 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 <list>
+
+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<double> cfg_tcp_gamma;
+ static config::Flag<bool> 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<double>& bandwidths) = 0;
+
+ virtual StandardLinkImpl* create_wifi_link(const std::string& name, const std::vector<double>& 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<NetworkFactorCb>& cb) override { THROW_UNIMPLEMENTED; }
+ void set_bw_factor_cb(const std::function<NetworkFactorCb>& cb) override { THROW_UNIMPLEMENTED; }
+
+ std::unique_ptr<StandardLinkImpl, StandardLinkImpl::Deleter> 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<StandardLinkImpl*> 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<StandardLinkImpl*>& result, StandardLinkImpl* link, double* latency);
+void add_link_latency(std::vector<StandardLinkImpl*>& result, const std::vector<StandardLinkImpl*>& links,
+ double* latency);
+void insert_link_latency(std::vector<StandardLinkImpl*>& result, const std::vector<StandardLinkImpl*>& links,
+ double* latency);
+
+} // namespace resource
+} // namespace kernel
+} // namespace simgrid
+
+#endif /* SIMGRID_KERNEL_RESOURCE_NETWORKMODEL_HPP */
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.
public:
void destroy(); // Must be called instead of the destructor
+ class Deleter {
+ public:
+ void operator()(StandardLinkImpl* link);
+ };
void latency_check(double latency) const;
#include <simgrid/kernel/routing/NetPoint.hpp>
#include <xbt/string.hpp>
-#include "src/kernel/resource/StandardLinkImpl.hpp"
+#include "src/kernel/resource/NetworkModel.hpp"
#include <climits>
#include <queue>
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);
}
}
#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 <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/split.hpp>
#include <simgrid/kernel/routing/FatTreeZone.hpp>
#include <simgrid/kernel/routing/NetPoint.hpp>
-#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 <fstream>
#include <simgrid/kernel/routing/NetPoint.hpp>
#include <xbt/string.hpp>
-#include "src/kernel/resource/StandardLinkImpl.hpp"
+#include "src/kernel/resource/NetworkModel.hpp"
#include <climits>
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;
}
#include <simgrid/kernel/routing/FullZone.hpp>
#include <simgrid/kernel/routing/NetPoint.hpp>
-#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");
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());
}
}
}
#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"
#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");
#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 <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/split.hpp>
#include <simgrid/kernel/routing/NetPoint.hpp>
#include <simgrid/kernel/routing/WifiZone.hpp>
-#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");
#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"
#include <simgrid/s4u/Engine.hpp>
#include "src/kernel/activity/CommImpl.hpp"
-#include "src/kernel/resource/StandardLinkImpl.hpp"
+#include "src/kernel/resource/NetworkModel.hpp"
#include <limits>
#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"
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
{
#include <simgrid/zone.h>
#include <xbt/parse_units.hpp>
-#include "src/kernel/resource/LinkImpl.hpp"
-#include "src/kernel/resource/StandardLinkImpl.hpp"
+#include "src/kernel/resource/NetworkModel.hpp"
namespace simgrid {
namespace s4u {
#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 <xbt/PropertyHolder.hpp>
#include <vector>
#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);
set_maxmin_system(lmm::System::build(cfg_network_solver, select));
- loopback_ = create_link("__loopback__", {config::get_value<double>("network/loopback-bw")});
+ loopback_.reset(create_link("__loopback__", {config::get_value<double>("network/loopback-bw")}));
loopback_->set_sharing_policy(s4u::Link::SharingPolicy::FATPIPE, {});
loopback_->set_latency(config::get_value<double>("network/loopback-lat"));
loopback_->get_iface()->seal();
#include <xbt/base.h>
-#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"
#ifndef NETWORK_CONSTANT_HPP_
#define NETWORK_CONSTANT_HPP_
-#include "src/kernel/resource/LinkImpl.hpp"
+#include "src/kernel/resource/NetworkModel.hpp"
namespace simgrid {
namespace kernel {
#include "xbt/base.h"
+#include "src/kernel/resource/NetworkModel.hpp"
#include "src/kernel/resource/StandardLinkImpl.hpp"
namespace simgrid {
: NetworkModel(name), hostModel_(hmodel)
{
set_maxmin_system(sys);
- loopback_ = create_link("__loopback__", {simgrid::config::get_value<double>("network/loopback-bw")});
+ loopback_.reset(create_link("__loopback__", {simgrid::config::get_value<double>("network/loopback-bw")}));
loopback_->set_sharing_policy(s4u::Link::SharingPolicy::FATPIPE, {});
loopback_->set_latency(simgrid::config::get_value<double>("network/loopback-lat"));
- loopback_->seal();
+ loopback_->get_iface()->seal();
}
NetworkL07Model::~NetworkL07Model()
/* 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 <cstdlib>
#include <vector>
#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");
#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"
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
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