X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f512dd4db06628537e631d87f7c72b417a0a4adf..0c07b616d38841a028f8a34fe66394e232008b5e:/src/kernel/routing/AsVivaldi.cpp
diff --git a/src/kernel/routing/AsVivaldi.cpp b/src/kernel/routing/AsVivaldi.cpp
index f54e508fd3..216b7880a6 100644
--- a/src/kernel/routing/AsVivaldi.cpp
+++ b/src/kernel/routing/AsVivaldi.cpp
@@ -57,6 +57,22 @@ AsVivaldi::AsVivaldi(As* father, const char* name) : AsCluster(father, name)
{
}
+void AsVivaldi::setPeerLink(NetCard* netcard, double bw_in, double bw_out, double latency, const char* coord)
+{
+ xbt_assert(netcard->containingAS() == this, "Cannot add a peer link to a netcard that is not in this AS");
+
+ new simgrid::kernel::routing::vivaldi::Coords(netcard, coord);
+
+ char* link_up = bprintf("link_%s_UP", netcard->cname());
+ char* link_down = bprintf("link_%s_DOWN", netcard->cname());
+ Link* linkUp = surf_network_model->createLink(link_up, bw_out, latency, SURF_LINK_SHARED);
+ Link* linkDown = surf_network_model->createLink(link_down, bw_in, latency, SURF_LINK_SHARED);
+ privateLinks_.insert({netcard->id(), {linkUp, linkDown}});
+
+ free(link_up);
+ free(link_down);
+}
+
void AsVivaldi::getLocalRoute(NetCard* src, NetCard* dst, sg_platf_route_cbarg_t route, double* lat)
{
XBT_DEBUG("vivaldi getLocalRoute from '%s'[%d] '%s'[%d]", src->cname(), src->id(), dst->cname(), dst->id());
@@ -71,20 +87,20 @@ void AsVivaldi::getLocalRoute(NetCard* src, NetCard* dst, sg_platf_route_cbarg_t
}
/* Retrieve the private links */
- if (privateLinks_.size() > src->id()) {
- s_surf_parsing_link_up_down_t info = privateLinks_.at(src->id());
- if (info.linkUp) {
- route->link_list->push_back(info.linkUp);
+ if (privateLinks_.find(src->id()) != privateLinks_.end()) {
+ std::pair info = privateLinks_.at(src->id());
+ if (info.first) {
+ route->link_list->push_back(info.first);
if (lat)
- *lat += info.linkUp->latency();
+ *lat += info.first->latency();
}
}
- if (privateLinks_.size() > dst->id()) {
- s_surf_parsing_link_up_down_t info = privateLinks_.at(dst->id());
- if (info.linkDown) {
- route->link_list->push_back(info.linkDown);
+ if (privateLinks_.find(dst->id()) != privateLinks_.end()) {
+ std::pair info = privateLinks_.at(dst->id());
+ if (info.second) {
+ route->link_list->push_back(info.second);
if (lat)
- *lat += info.linkDown->latency();
+ *lat += info.second->latency();
}
}