X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/83eed53fd4d95fd1fa0532da3c071f66000f1a6b..aa4d38e3b08665ded92cafb9e3dd45af78491d5d:/src/kernel/routing/AsCluster.cpp diff --git a/src/kernel/routing/AsCluster.cpp b/src/kernel/routing/AsCluster.cpp index 9782f36747..6170c5949f 100644 --- a/src/kernel/routing/AsCluster.cpp +++ b/src/kernel/routing/AsCluster.cpp @@ -4,6 +4,7 @@ * under the terms of the license (GNU LGPL) which comes with this package. */ #include "src/kernel/routing/AsCluster.hpp" +#include "src/kernel/routing/NetCard.hpp" #include "src/surf/network_interface.hpp" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_route_cluster, surf, "Routing part of surf"); @@ -18,34 +19,33 @@ AsCluster::AsCluster(As* father, const char* name) : AsImpl(father, name) { } -void AsCluster::getRouteAndLatency(NetCard *src, NetCard *dst, sg_platf_route_cbarg_t route, double *lat) +void AsCluster::getLocalRoute(NetCard* src, NetCard* dst, sg_platf_route_cbarg_t route, double* lat) { - s_surf_parsing_link_up_down_t info; - XBT_VERB("cluster_get_route_and_latency from '%s'[%d] to '%s'[%d]", src->name().c_str(), src->id(), - dst->name().c_str(), dst->id()); + XBT_VERB("cluster getLocalRoute from '%s'[%d] to '%s'[%d]", src->cname(), src->id(), dst->cname(), dst->id()); xbt_assert(!privateLinks_.empty(), "Cluster routing: no links attached to the source node - did you use host_link tag?"); if (! src->isRouter()) { // No specific link for router if((src->id() == dst->id()) && hasLoopback_ ){ - info = privateLinks_.at(src->id() * linkCountPerNode_); - route->link_list->push_back(info.linkUp); + std::pair info = privateLinks_.at(src->id() * linkCountPerNode_); + route->link_list->push_back(info.first); if (lat) - *lat += info.linkUp->latency(); + *lat += info.first->latency(); return; } if (hasLimiter_){ // limiter for sender - info = privateLinks_.at(src->id() * linkCountPerNode_ + (hasLoopback_?1:0)); - route->link_list->push_back(info.linkUp); + std::pair info = privateLinks_.at(src->id() * linkCountPerNode_ + (hasLoopback_ ? 1 : 0)); + route->link_list->push_back(info.first); } - info = privateLinks_.at(src->id() * linkCountPerNode_ + (hasLoopback_?1:0) + (hasLimiter_?1:0)); - if (info.linkUp) { // link up - route->link_list->push_back(info.linkUp); + std::pair info = + privateLinks_.at(src->id() * linkCountPerNode_ + (hasLoopback_ ? 1 : 0) + (hasLimiter_ ? 1 : 0)); + if (info.first) { // link up + route->link_list->push_back(info.first); if (lat) - *lat += info.linkUp->latency(); + *lat += info.first->latency(); } } @@ -57,46 +57,41 @@ void AsCluster::getRouteAndLatency(NetCard *src, NetCard *dst, sg_platf_route_cb } if (! dst->isRouter()) { // No specific link for router - info = privateLinks_.at(dst->id() * linkCountPerNode_ + hasLoopback_ + hasLimiter_); + std::pair info = privateLinks_.at(dst->id() * linkCountPerNode_ + hasLoopback_ + hasLimiter_); - if (info.linkDown) { // link down - route->link_list->push_back(info.linkDown); + if (info.second) { // link down + route->link_list->push_back(info.second); if (lat) - *lat += info.linkDown->latency(); + *lat += info.second->latency(); } if (hasLimiter_){ // limiter for receiver info = privateLinks_.at(dst->id() * linkCountPerNode_ + hasLoopback_); - route->link_list->push_back(info.linkUp); + route->link_list->push_back(info.first); } } } void AsCluster::getGraph(xbt_graph_t graph, xbt_dict_t nodes, xbt_dict_t edges) { - xbt_node_t current, previous, backboneNode = nullptr; - s_surf_parsing_link_up_down_t info; - xbt_assert(router_,"Malformed cluster. This may be because your platform file is a hypergraph while it must be a graph."); /* create the router */ - xbt_node_t routerNode = new_xbt_graph_node(graph, router_->name().c_str(), nodes); + xbt_node_t routerNode = new_xbt_graph_node(graph, router_->cname(), nodes); + xbt_node_t backboneNode = nullptr; if(backbone_) { - const char *link_nameR = backbone_->getName(); - backboneNode = new_xbt_graph_node(graph, link_nameR, nodes); - + backboneNode = new_xbt_graph_node(graph, backbone_->getName(), nodes); new_xbt_graph_edge(graph, routerNode, backboneNode, edges); } for (auto src: vertices_){ if (! src->isRouter()) { - previous = new_xbt_graph_node(graph, src->name().c_str(), nodes); + xbt_node_t previous = new_xbt_graph_node(graph, src->cname(), nodes); - info = privateLinks_.at(src->id()); + std::pair info = privateLinks_.at(src->id()); - if (info.linkUp) { // link up - const char *link_name = static_cast(info.linkUp)->getName(); - current = new_xbt_graph_node(graph, link_name, nodes); + if (info.first) { // link up + xbt_node_t current = new_xbt_graph_node(graph, info.first->getName(), nodes); new_xbt_graph_edge(graph, previous, current, edges); if (backbone_) { @@ -106,10 +101,8 @@ void AsCluster::getGraph(xbt_graph_t graph, xbt_dict_t nodes, xbt_dict_t edges) } } - if (info.linkDown) { // link down - const char *link_name = static_cast( - info.linkDown)->getName(); - current = new_xbt_graph_node(graph, link_name, nodes); + if (info.second) { // link down + xbt_node_t current = new_xbt_graph_node(graph, info.second->getName(), nodes); new_xbt_graph_edge(graph, previous, current, edges); if (backbone_) { @@ -145,7 +138,7 @@ void AsCluster::create_links_for_node(sg_platf_cluster_cbarg_t cluster, int id, info.linkUp = Link::byName(link_id); info.linkDown = info.linkUp; } - privateLinks_.insert({position, info}); + privateLinks_.insert({position, {info.linkUp, info.linkDown}}); xbt_free(link_id); }