void NetZoneImpl::add_child(NetZoneImpl* new_zone)
{
xbt_assert(not sealed_, "Cannot add a new child to the sealed zone %s", get_cname());
+ /* set the father behavior */
+ hierarchy_ = RoutingMode::recursive;
children_.push_back(new_zone);
}
return l->get_iface();
}
-s4u::Link* NetZoneImpl::create_link(const std::string& name, const std::vector<double>& bandwidths,
- s4u::Link::SharingPolicy policy)
+s4u::Link* NetZoneImpl::create_link(const std::string& name, const std::vector<double>& bandwidths)
{
- auto* l = network_model_->create_link(name, bandwidths, policy);
-
- return l->get_iface();
+ return network_model_->create_link(name, bandwidths)->get_iface();
}
-s4u::Host* NetZoneImpl::create_host(const std::string& name, const std::vector<double>& speed_per_pstate,
- int core_amount)
+s4u::Host* NetZoneImpl::create_host(const std::string& name, const std::vector<double>& speed_per_pstate)
{
- if (hierarchy_ == RoutingMode::unset)
- hierarchy_ = RoutingMode::base;
-
auto* res = (new surf::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)->set_core_count(core_amount)->seal();
+ cpu_model_pm_->create_cpu(res, speed_per_pstate);
return res;
}
}
void NetZoneImpl::add_route(NetPoint* /*src*/, NetPoint* /*dst*/, NetPoint* /*gw_src*/, NetPoint* /*gw_dst*/,
- std::vector<resource::LinkImpl*>& /*link_list*/, bool /*symmetrical*/)
+ const std::vector<resource::LinkImpl*>& /*link_list*/, bool /*symmetrical*/)
{
xbt_die("NetZone '%s' does not accept new routes (wrong class).", get_cname());
}
void NetZoneImpl::seal()
{
+ /* already sealed netzone */
+ if (sealed_)
+ return;
do_seal(); // derived class' specific sealing procedure
+
+ /* seals sub-netzones and hosts */
+ for (auto* host : get_all_hosts()) {
+ host->seal();
+ }
+ for (auto* sub_net : *get_children()) {
+ sub_net->seal();
+ }
sealed_ = true;
}
void NetZoneImpl::set_parent(NetZoneImpl* parent)
{
- xbt_assert(sealed_ == false, "Impossible to set parent to an already sealed NetZone(%s)", this->get_cname());
+ xbt_assert(not sealed_, "Impossible to set parent to an already sealed NetZone(%s)", this->get_cname());
parent_ = parent;
netpoint_->set_englobing_zone(parent_);
+ if (parent) {
+ /* adding this class as child */
+ parent->add_child(this);
+ /* copying models from parent host, to be reviewed when we allow multi-models */
+ set_network_model(parent->get_network_model());
+ set_cpu_pm_model(parent->get_cpu_pm_model());
+ set_cpu_vm_model(parent->get_cpu_vm_model());
+ set_disk_model(parent->get_disk_model());
+ set_host_model(parent->get_host_model());
+ }
}
void NetZoneImpl::set_network_model(std::shared_ptr<resource::NetworkModel> netmodel)
{
- xbt_assert(sealed_ == false, "Impossible to set network model to an already sealed NetZone(%s)", this->get_cname());
+ xbt_assert(not sealed_, "Impossible to set network model to an already sealed NetZone(%s)", this->get_cname());
network_model_ = std::move(netmodel);
}
void NetZoneImpl::set_cpu_vm_model(std::shared_ptr<resource::CpuModel> cpu_model)
{
- xbt_assert(sealed_ == false, "Impossible to set CPU model to an already sealed NetZone(%s)", this->get_cname());
+ xbt_assert(not sealed_, "Impossible to set CPU model to an already sealed NetZone(%s)", this->get_cname());
cpu_model_vm_ = std::move(cpu_model);
}
void NetZoneImpl::set_cpu_pm_model(std::shared_ptr<resource::CpuModel> cpu_model)
{
- xbt_assert(sealed_ == false, "Impossible to set CPU model to an already sealed NetZone(%s)", this->get_cname());
+ xbt_assert(not sealed_, "Impossible to set CPU model to an already sealed NetZone(%s)", this->get_cname());
cpu_model_pm_ = std::move(cpu_model);
}
void NetZoneImpl::set_disk_model(std::shared_ptr<resource::DiskModel> disk_model)
{
- xbt_assert(sealed_ == false, "Impossible to set disk model to an already sealed NetZone(%s)", this->get_cname());
+ xbt_assert(not sealed_, "Impossible to set disk model to an already sealed NetZone(%s)", this->get_cname());
disk_model_ = std::move(disk_model);
}
void NetZoneImpl::set_host_model(std::shared_ptr<surf::HostModel> host_model)
{
- xbt_assert(sealed_ == false, "Impossible to set host model to an already sealed NetZone(%s)", this->get_cname());
+ xbt_assert(not sealed_, "Impossible to set host model to an already sealed NetZone(%s)", this->get_cname());
host_model_ = std::move(host_model);
}