-/* Copyright (c) 2006-2021. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2006-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. */
-#include "simgrid/kernel/routing/NetZoneImpl.hpp"
-#include "simgrid/kernel/routing/NetPoint.hpp"
-#include "simgrid/s4u/Engine.hpp"
-#include "simgrid/s4u/Host.hpp"
+#include <simgrid/kernel/routing/NetPoint.hpp>
+#include <simgrid/kernel/routing/NetZoneImpl.hpp>
+#include <simgrid/s4u/Engine.hpp>
+#include <simgrid/s4u/Host.hpp>
+
#include "src/include/simgrid/sg_config.hpp"
#include "src/kernel/EngineImpl.hpp"
+#include "src/kernel/resource/CpuImpl.hpp"
#include "src/kernel/resource/DiskImpl.hpp"
+#include "src/kernel/resource/SplitDuplexLinkImpl.hpp"
#include "src/surf/HostImpl.hpp"
-#include "src/surf/SplitDuplexLinkImpl.hpp"
-#include "src/surf/cpu_interface.hpp"
-#include "src/surf/network_interface.hpp"
-#include "surf/surf.hpp"
-XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(surf_route);
+#include "src/kernel/resource/StandardLinkImpl.hpp"
+
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(ker_routing, kernel, "Kernel routing-related information");
namespace simgrid {
namespace kernel {
xbt::signal<void(bool symmetrical, kernel::routing::NetPoint* src, kernel::routing::NetPoint* dst,
kernel::routing::NetPoint* gw_src, kernel::routing::NetPoint* gw_dst,
- std::vector<kernel::resource::LinkImpl*> const& link_list)>
+ std::vector<kernel::resource::StandardLinkImpl*> const& link_list)>
NetZoneImpl::on_route_creation;
NetZoneImpl::NetZoneImpl(const std::string& name) : piface_(this), name_(name)
simgrid::s4u::Engine::on_platform_creation();
/* Initialize the surf models. That must be done after we got all config, and before we need the models.
- * That is, after the last <config> tag, if any, and before the first of cluster|peer|zone|trace|trace_connect
+ * That is, after the last <config> tag, if any, and before the first of cluster|peer|zone|trace|trace_cb
*
- * I'm not sure for <trace> and <trace_connect>, there may be a bug here
+ * I'm not sure for <trace> and <trace_cb>, there may be a bug here
* (FIXME: check it out by creating a file beginning with one of these tags)
* but cluster and peer come down to zone creations, so putting this verification here is correct.
*/
xbt_assert(cpu_model_pm_,
"Impossible to create host: %s. Invalid CPU model: nullptr. Have you set the parent of this NetZone: %s?",
name.c_str(), get_cname());
- auto* res = (new surf::HostImpl(name))->get_iface();
+ xbt_assert(not sealed_, "Impossible to create host: %s. NetZone %s already sealed", name.c_str(), get_cname());
+ auto* res = (new resource::HostImpl(name))->get_iface();
res->set_netpoint((new NetPoint(name, NetPoint::Type::Host))->set_englobing_zone(this));
cpu_model_pm_->create_cpu(res, speed_per_pstate);
network_model_,
"Impossible to create link: %s. Invalid network model: nullptr. Have you set the parent of this NetZone: %s?",
name.c_str(), get_cname());
+ xbt_assert(not sealed_, "Impossible to create link: %s. NetZone %s already sealed", name.c_str(), get_cname());
return network_model_->create_link(name, bandwidths)->get_iface();
}
s4u::SplitDuplexLink* NetZoneImpl::create_split_duplex_link(const std::string& name,
const std::vector<double>& bandwidths)
{
+ xbt_assert(
+ network_model_,
+ "Impossible to create link: %s. Invalid network model: nullptr. Have you set the parent of this NetZone: %s?",
+ name.c_str(), get_cname());
+ xbt_assert(not sealed_, "Impossible to create link: %s. NetZone %s already sealed", name.c_str(), get_cname());
+
auto* link_up = network_model_->create_link(name + "_UP", bandwidths);
auto* link_down = network_model_->create_link(name + "_DOWN", bandwidths);
auto link = std::make_unique<resource::SplitDuplexLinkImpl>(name, link_up, link_down);
xbt_assert(disk_model_,
"Impossible to create disk: %s. Invalid disk model: nullptr. Have you set the parent of this NetZone: %s?",
name.c_str(), get_cname());
+ xbt_assert(not sealed_, "Impossible to create disk: %s. NetZone %s already sealed", name.c_str(), get_cname());
auto* l = disk_model_->create_disk(name, read_bandwidth, write_bandwidth);
return l->get_iface();
{
xbt_assert(nullptr == s4u::Engine::get_instance()->netpoint_by_name_or_null(name),
"Refusing to create a router named '%s': this name already describes a node.", name.c_str());
+ xbt_assert(not sealed_, "Impossible to create router: %s. NetZone %s already sealed", name.c_str(), get_cname());
return (new NetPoint(name, NetPoint::Type::Router))->set_englobing_zone(this);
}
return vertices_.size() - 1; // The rank of the newly created object
}
-std::vector<resource::LinkImpl*> NetZoneImpl::get_link_list_impl(const std::vector<s4u::LinkInRoute>& link_list,
- bool backroute) const
+std::vector<resource::StandardLinkImpl*> NetZoneImpl::get_link_list_impl(const std::vector<s4u::LinkInRoute>& link_list,
+ bool backroute) const
{
- std::vector<resource::LinkImpl*> links;
+ std::vector<resource::StandardLinkImpl*> links;
for (const auto& link : link_list) {
if (link.get_link()->get_sharing_policy() != s4u::Link::SharingPolicy::SPLITDUPLEX) {
const auto* sd_link = dynamic_cast<const s4u::SplitDuplexLink*>(link.get_link());
xbt_assert(sd_link,
"Add_route: cast to SpliDuplexLink impossible. This should not happen, please contact SimGrid team");
- resource::LinkImpl* link_impl;
+ resource::StandardLinkImpl* link_impl;
switch (link.get_direction()) {
case s4u::LinkInRoute::Direction::UP:
if (backroute)
/* PRECONDITION: this is the common ancestor of src and dst */
bool NetZoneImpl::get_bypass_route(const NetPoint* src, const NetPoint* dst,
- /* OUT */ std::vector<resource::LinkImpl*>& links, double* latency,
+ /* OUT */ std::vector<resource::StandardLinkImpl*>& links, double* latency,
std::unordered_set<NetZoneImpl*>& netzones)
{
// If never set a bypass route return nullptr without any further computations
}
void NetZoneImpl::get_global_route(const NetPoint* src, const NetPoint* dst,
- /* OUT */ std::vector<resource::LinkImpl*>& links, double* latency)
+ /* OUT */ std::vector<resource::StandardLinkImpl*>& links, double* latency)
{
std::unordered_set<NetZoneImpl*> netzones;
get_global_route_with_netzones(src, dst, links, latency, netzones);
}
void NetZoneImpl::get_global_route_with_netzones(const NetPoint* src, const NetPoint* dst,
- /* OUT */ std::vector<resource::LinkImpl*>& links, double* latency,
- std::unordered_set<NetZoneImpl*>& netzones)
+ /* OUT */ std::vector<resource::StandardLinkImpl*>& links,
+ double* latency, std::unordered_set<NetZoneImpl*>& netzones)
{
Route route;
disk_model_ = std::move(disk_model);
}
-void NetZoneImpl::set_host_model(std::shared_ptr<surf::HostModel> host_model)
+void NetZoneImpl::set_host_model(std::shared_ptr<resource::HostModel> host_model)
{
xbt_assert(not sealed_, "Impossible to set host model to an already sealed NetZone(%s)", this->get_cname());
host_model_ = std::move(host_model);