#define SIMGRID_ROUTING_NETZONEIMPL_HPP
#include <simgrid/forward.h>
+#include <simgrid/s4u/Link.hpp>
#include <simgrid/s4u/NetZone.hpp>
#include <xbt/PropertyHolder.hpp>
#include <xbt/graph.h>
/** @brief Make a host within that NetZone */
s4u::Host* create_host(const std::string& name, const std::vector<double>& speed_per_pstate, int core_count,
- const std::map<std::string, std::string>* props);
+ const std::unordered_map<std::string, std::string>* props);
+ /** @brief Make a link within that NetZone */
+ virtual s4u::Link* create_link(const std::string& name, const std::vector<double>& bandwidths, double latency,
+ s4u::Link::SharingPolicy policy,
+ const std::unordered_map<std::string, std::string>* props);
/** @brief Creates a new route in this NetZone */
virtual void add_bypass_route(NetPoint* src, NetPoint* dst, NetPoint* gw_src, NetPoint* gw_dst,
std::vector<resource::LinkImpl*>& link_list, bool symmetrical);
const char* get_property(const std::string& key) const;
void set_property(const std::string& key, const std::string& value);
const std::unordered_map<std::string, std::string>* get_properties() const;
- void set_properties(const std::map<std::string, std::string>& properties);
+ void set_properties(const std::unordered_map<std::string, std::string>& properties);
void set_state_profile(kernel::profile::Profile* p);
void set_speed_profile(kernel::profile::Profile* p);
return count;
}
+s4u::Link* NetZoneImpl::create_link(const std::string& name, const std::vector<double>& bandwidths, double latency,
+ s4u::Link::SharingPolicy policy,
+ const std::unordered_map<std::string, std::string>* props)
+{
+ static double last_warned_latency = sg_surf_precision;
+ if (latency != 0.0 && latency < last_warned_latency) {
+ XBT_WARN("Latency for link %s is smaller than surf/precision (%g < %g)."
+ " For more accuracy, consider setting \"--cfg=surf/precision:%g\".",
+ name.c_str(), latency, sg_surf_precision, latency);
+ last_warned_latency = latency;
+ }
+
+ simgrid::kernel::resource::LinkImpl* l = surf_network_model->create_link(name, bandwidths, latency, policy);
+
+ if (props)
+ l->set_properties(*props);
+
+ return l->get_iface();
+}
s4u::Host* NetZoneImpl::create_host(const std::string& name, const std::vector<double>& speed_per_pstate,
- int coreAmount, const std::map<std::string, std::string>* props)
+ int coreAmount, const std::unordered_map<std::string, std::string>* props)
{
auto* res = new s4u::Host(name);
kernel::actor::simcall([this, &key, &value] { this->pimpl_->set_property(key, value); });
}
-void Host::set_properties(const std::map<std::string, std::string>& properties)
+void Host::set_properties(const std::unordered_map<std::string, std::string>& properties)
{
kernel::actor::simcall([this, &properties] { this->pimpl_->set_properties(properties); });
}
/** @brief Add a host to the current AS */
void sg_platf_new_host(const simgrid::kernel::routing::HostCreationArgs* args)
{
- std::map<std::string, std::string> props;
+ std::unordered_map<std::string, std::string> props;
if (args->properties) {
for (auto const& elm : *args->properties)
props.insert({elm.first, elm.second});
return netpoint;
}
-static void sg_platf_new_link(const simgrid::kernel::routing::LinkCreationArgs* link, const std::string& link_name)
+static void sg_platf_new_link(const simgrid::kernel::routing::LinkCreationArgs* args, const std::string& link_name)
{
- static double last_warned_latency = sg_surf_precision;
- if (link->latency != 0.0 && link->latency < last_warned_latency) {
- XBT_WARN("Latency for link %s is smaller than surf/precision (%g < %g)."
- " For more accuracy, consider setting \"--cfg=surf/precision:%g\".",
- link_name.c_str(), link->latency, sg_surf_precision, link->latency);
- last_warned_latency = link->latency;
- }
- simgrid::kernel::resource::LinkImpl* l =
- surf_network_model->create_link(link_name, link->bandwidths, link->latency, link->policy);
-
- if (link->properties)
- l->set_properties(*link->properties);
-
- if (link->latency_trace)
- l->set_latency_profile(link->latency_trace);
- if (link->bandwidth_trace)
- l->set_bandwidth_profile(link->bandwidth_trace);
- if (link->state_trace)
- l->set_state_profile(link->state_trace);
+ std::unordered_map<std::string, std::string> props;
+ if (args->properties)
+ for (auto const& elm : *args->properties)
+ props.insert({elm.first, elm.second});
+
+ simgrid::s4u::Link* link =
+ routing_get_current()->create_link(link_name, args->bandwidths, args->latency, args->policy, &props);
+
+ simgrid::kernel::resource::LinkImpl* l = link->get_impl();
+ if (args->latency_trace)
+ l->set_latency_profile(args->latency_trace);
+ if (args->bandwidth_trace)
+ l->set_bandwidth_profile(args->bandwidth_trace);
+ if (args->state_trace)
+ l->set_state_profile(args->state_trace);
}
void sg_platf_new_link(const simgrid::kernel::routing::LinkCreationArgs* link)