return &coords->coords;
}
-VivaldiZone::VivaldiZone(NetZoneImpl* father, const std::string& name, resource::NetworkModel* netmodel)
- : ClusterZone(father, name, netmodel)
-{
-}
-
-void VivaldiZone::set_peer_link(NetPoint* netpoint, double bw_in, double bw_out, const std::string& coord)
+void VivaldiZone::set_peer_link(NetPoint* netpoint, double bw_in, double bw_out)
{
xbt_assert(netpoint->get_englobing_zone() == this,
"Cannot add a peer link to a netpoint that is not in this netzone");
- new vivaldi::Coords(netpoint, coord);
-
- std::string link_up = "link_" + netpoint->get_name() + "_UP";
- std::string link_down = "link_" + netpoint->get_name() + "_DOWN";
- resource::LinkImpl* linkUp =
- network_model_->create_link(link_up, std::vector<double>(1, bw_out), s4u::Link::SharingPolicy::SHARED);
- linkUp->seal();
- resource::LinkImpl* linkDown =
- network_model_->create_link(link_down, std::vector<double>(1, bw_in), s4u::Link::SharingPolicy::SHARED);
- linkDown->seal();
- private_links_.insert({netpoint->id(), {linkUp, linkDown}});
+ std::string link_up = "link_" + netpoint->get_name() + "_UP";
+ std::string link_down = "link_" + netpoint->get_name() + "_DOWN";
+ auto* linkUp = create_link(link_up, std::vector<double>{bw_out})->seal();
+ auto* linkDown = create_link(link_down, std::vector<double>{bw_in})->seal();
+ add_route(netpoint, nullptr, nullptr, nullptr, {linkUp->get_impl()}, false);
+ add_route(nullptr, netpoint, nullptr, nullptr, {linkDown->get_impl()}, false);
}
void VivaldiZone::get_local_route(NetPoint* src, NetPoint* dst, RouteCreationArgs* route, double* lat)
route->gw_dst = s4u::Engine::get_instance()->netpoint_by_name_or_null(dstName);
}
- /* Retrieve the private links */
- auto src_link = private_links_.find(src->id());
- if (src_link != private_links_.end()) {
- std::pair<resource::LinkImpl*, resource::LinkImpl*> info = src_link->second;
- if (info.first) {
- route->link_list.push_back(info.first);
- if (lat)
- *lat += info.first->get_latency();
- }
- } else {
- XBT_DEBUG("Source of private link (%u) doesn't exist", src->id());
- }
-
- auto dst_link = private_links_.find(dst->id());
- if (dst_link != private_links_.end()) {
- std::pair<resource::LinkImpl*, resource::LinkImpl*> info = dst_link->second;
- if (info.second) {
- route->link_list.push_back(info.second);
- if (lat)
- *lat += info.second->get_latency();
- }
- } else {
- XBT_DEBUG("Destination of private link (%u) doesn't exist", dst->id());
- }
-
+ StarZone::get_local_route(src, dst, route, lat);
/* Compute the extra latency due to the euclidean distance if needed */
if (lat) {
std::vector<double>* srcCoords = netpoint_get_coords(src);
*lat += euclidean_dist / 1000.0; // From .ms to .s
}
}
+
} // namespace routing
} // namespace kernel
+
+namespace s4u {
+NetZone* create_vivaldi_zone(const std::string& name)
+{
+ return (new kernel::routing::VivaldiZone(name))->get_iface();
+}
+} // namespace s4u
+
} // namespace simgrid