Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
small cleanups in routing
[simgrid.git] / src / surf / surf_routing.cpp
index 5ad4254..08b1614 100644 (file)
@@ -43,12 +43,24 @@ namespace surf {
       delete netcard_;
   }
 
+  sg_platf_route_cbarg_t As::getBypassRoute(NetCard * /*src*/, NetCard * /*dst*/, double * /*lat*/) {
+    return NULL;
+  }
+
+
   int As::addComponent(NetCard *elm) {
-    XBT_DEBUG("Load component \"%s\"", elm->getName());
+    XBT_DEBUG("Load component \"%s\"", elm->name());
     xbt_dynar_push_as(vertices_, NetCard*, elm);
     return xbt_dynar_length(vertices_)-1;
   }
 
+  void As::parseRoute(sg_platf_route_cbarg_t /*route*/){
+    THROW_IMPOSSIBLE; /* No. */
+  }
+  void As::parseBypassroute(sg_platf_route_cbarg_t /*e_route*/){
+    THROW_IMPOSSIBLE;
+  }
+
 }} // namespace simgrid::surf
 
 /**
@@ -111,12 +123,12 @@ void sg_platf_new_hostlink(sg_platf_host_link_cbarg_t netcard_arg)
   xbt_assert(link_up_down.link_down, "Link '%s' not found!",netcard_arg->link_down);
 
   // If dynar is is greater than netcard id and if the host_link is already defined
-  if((int)xbt_dynar_length(current_routing->upDownLinks) > netcard->getId() &&
-      xbt_dynar_get_as(current_routing->upDownLinks, netcard->getId(), void*))
+  if((int)xbt_dynar_length(current_routing->upDownLinks) > netcard->id() &&
+      xbt_dynar_get_as(current_routing->upDownLinks, netcard->id(), void*))
   surf_parse_error("Host_link for '%s' is already defined!",netcard_arg->id);
 
-  XBT_DEBUG("Push Host_link for host '%s' to position %d", netcard->getName(), netcard->getId());
-  xbt_dynar_set_as(current_routing->upDownLinks, netcard->getId(), s_surf_parsing_link_up_down_t, link_up_down);
+  XBT_DEBUG("Push Host_link for host '%s' to position %d", netcard->name(), netcard->id());
+  xbt_dynar_set_as(current_routing->upDownLinks, netcard->id(), s_surf_parsing_link_up_down_t, link_up_down);
 }
 
 void sg_platf_new_trace(sg_platf_trace_cbarg_t trace)
@@ -174,12 +186,12 @@ void routing_AS_begin(sg_platf_AS_cbarg_t AS)
   /* make a new routing component */
   simgrid::surf::NetCard *netcard = new simgrid::surf::NetCardImpl(new_as->name_, SURF_NETWORK_ELEMENT_AS, current_routing);
 
-  if (current_routing == NULL && routing_platf->p_root == NULL) {
+  if (current_routing == NULL && routing_platf->root_ == NULL) {
     /* it is the first one */
     new_as->father_ = NULL;
-    routing_platf->p_root = new_as;
+    routing_platf->root_ = new_as;
     netcard->setId(-1);
-  } else if (current_routing != NULL && routing_platf->p_root != NULL) {
+  } else if (current_routing != NULL && routing_platf->root_ != NULL) {
 
     xbt_assert(!xbt_dict_get_or_null(current_routing->sons_, AS->id),
                "The AS \"%s\" already exists", AS->id);
@@ -197,9 +209,9 @@ void routing_AS_begin(sg_platf_AS_cbarg_t AS)
     THROWF(arg_error, 0, "All defined components must belong to a AS");
   }
 
-  xbt_lib_set(as_router_lib, netcard->getName(), ROUTING_ASR_LEVEL,
+  xbt_lib_set(as_router_lib, netcard->name(), ROUTING_ASR_LEVEL,
               (void *) netcard);
-  XBT_DEBUG("Having set name '%s' id '%d'", new_as->name_, netcard->getId());
+  XBT_DEBUG("Having set name '%s' id '%d'", new_as->name_, netcard->id());
 
   /* set the new current component of the tree */
   current_routing = new_as;
@@ -258,11 +270,11 @@ static void elements_father(sg_netcard_t src, sg_netcard_t dst,
   /* (1) find the as where the src and dst are located */
   sg_netcard_t src_data = src;
   sg_netcard_t dst_data = dst;
-  src_as = src_data->getRcComponent();
-  dst_as = dst_data->getRcComponent();
+  src_as = src_data->containingAS();
+  dst_as = dst_data->containingAS();
 #ifndef NDEBUG
-  char* src_name = src_data->getName();
-  char* dst_name = dst_data->getName();
+  char* src_name = src_data->name();
+  char* dst_name = dst_data->name();
 #endif
 
   xbt_assert(src_as && dst_as,
@@ -300,18 +312,15 @@ static void elements_father(sg_netcard_t src, sg_netcard_t dst,
 #undef ELEMENTS_FATHER_MAXDEPTH
 }
 
-/* Global Business methods */
-
 /**
- * \brief Recursive function for get_route_latency
+ * \brief Recursive function for get_route_and_latency
  *
  * \param src the source host name
  * \param dst the destination host name
  * \param *route the route where the links are stored. It is either NULL or a ready to use dynar
  * \param *latency the latency, if needed
  *
- * This function is called by "get_route" and "get_latency". It allows to walk
- * recursively through the ASes tree.
+ * This function is called by "get_route" and "get_latency". It allows to walk recursively through the ASes tree.
  */
 static void _get_route_and_latency(
   simgrid::surf::NetCard *src, simgrid::surf::NetCard *dst,
@@ -321,7 +330,7 @@ static void _get_route_and_latency(
   memset(&route,0,sizeof(route));
 
   xbt_assert(src && dst, "bad parameters for \"_get_route_latency\" method");
-  XBT_DEBUG("Solve route/latency  \"%s\" to \"%s\"", src->getName(), dst->getName());
+  XBT_DEBUG("Solve route/latency  \"%s\" to \"%s\"", src->name(), dst->name());
 
   /* Find how src and dst are interconnected */
   simgrid::surf::As *common_father, *src_father, *dst_father;
@@ -329,16 +338,11 @@ static void _get_route_and_latency(
   XBT_DEBUG("elements_father: common father '%s' src_father '%s' dst_father '%s'",
       common_father->name_, src_father->name_, dst_father->name_);
 
-  /* Check whether a direct bypass is defined */
-  sg_platf_route_cbarg_t e_route_bypass = NULL;
-  //FIXME:REMOVE:if (common_father->get_bypass_route)
-
-  e_route_bypass = common_father->getBypassRoute(src, dst, latency);
-
-  /* Common ancestor is kind enough to declare a bypass route from src to dst -- use it and bail out */
-  if (e_route_bypass) {
-    xbt_dynar_merge(links, &e_route_bypass->link_list);
-    routing_route_free(e_route_bypass);
+  /* Check whether a direct bypass is defined. If so, use it and bail out */
+  sg_platf_route_cbarg_t bypassed_route = common_father->getBypassRoute(src, dst, latency);
+  if (bypassed_route) {
+    xbt_dynar_merge(links, &bypassed_route->link_list);
+    routing_route_free(bypassed_route);
     return;
   }
 
@@ -346,13 +350,12 @@ static void _get_route_and_latency(
   if (src_father == dst_father) {       /* SURF_ROUTING_BASE */
     route.link_list = *links;
     common_father->getRouteAndLatency(src, dst, &route, latency);
-    // if vivaldi latency+=vivaldi(src,dst)
     return;
   }
 
   /* Not in the same AS, no bypass. We'll have to find our path between the ASes recursively*/
 
-  route.link_list = xbt_dynar_new(sizeof(sg_routing_link_t), NULL);
+  route.link_list = xbt_dynar_new(sizeof(Link*), NULL);
   // Find the net_card corresponding to father
   simgrid::surf::NetCard *src_father_netcard = src_father->netcard_;
   simgrid::surf::NetCard *dst_father_netcard = dst_father->netcard_;
@@ -361,7 +364,7 @@ static void _get_route_and_latency(
                                     &route, latency);
 
   xbt_assert((route.gw_src != NULL) && (route.gw_dst != NULL),
-      "bad gateways for route from \"%s\" to \"%s\"", src->getName(), dst->getName());
+      "bad gateways for route from \"%s\" to \"%s\"", src->name(), dst->name());
 
   sg_netcard_t src_gateway_net_elm = route.gw_src;
   sg_netcard_t dst_gateway_net_elm = route.gw_dst;
@@ -378,7 +381,7 @@ static void _get_route_and_latency(
 }
 
 AS_t surf_platf_get_root(routing_platf_t platf){
-  return platf->p_root;
+  return platf->root_;
 }
 
 e_surf_network_element_type_t surf_routing_edge_get_rc_type(sg_netcard_t netcard){
@@ -404,23 +407,16 @@ namespace surf {
  */
 void RoutingPlatf::getRouteAndLatency(NetCard *src, NetCard *dst, xbt_dynar_t* route, double *latency)
 {
-  XBT_DEBUG("getRouteAndLatency from %s to %s", src->getName(), dst->getName());
+  XBT_DEBUG("getRouteAndLatency from %s to %s", src->name(), dst->name());
   if (NULL == *route) {
-    xbt_dynar_reset(routing_platf->p_lastRoute);
-    *route = routing_platf->p_lastRoute;
+    xbt_dynar_reset(routing_platf->lastRoute_);
+    *route = routing_platf->lastRoute_;
   }
 
   _get_route_and_latency(src, dst, route, latency);
-
-  xbt_assert(!latency || *latency >= 0.0,
-             "negative latency on route between \"%s\" and \"%s\"", src->getName(), dst->getName());
-}
-
-xbt_dynar_t RoutingPlatf::getOneLinkRoutes(){
-  return recursiveGetOneLinkRoutes(p_root);
 }
 
-xbt_dynar_t RoutingPlatf::recursiveGetOneLinkRoutes(As *rc)
+static xbt_dynar_t _recursiveGetOneLinkRoutes(As *rc)
 {
   xbt_dynar_t ret = xbt_dynar_new(sizeof(Onelink*), xbt_free_f);
 
@@ -434,13 +430,17 @@ xbt_dynar_t RoutingPlatf::recursiveGetOneLinkRoutes(As *rc)
   xbt_dict_cursor_t cursor = NULL;
   AS_t rc_child;
   xbt_dict_foreach(rc->sons_, cursor, key, rc_child) {
-    xbt_dynar_t onelink_child = recursiveGetOneLinkRoutes(rc_child);
+    xbt_dynar_t onelink_child = _recursiveGetOneLinkRoutes(rc_child);
     if (onelink_child)
       xbt_dynar_merge(&ret,&onelink_child);
   }
   return ret;
 }
 
+xbt_dynar_t RoutingPlatf::getOneLinkRoutes(){
+  return _recursiveGetOneLinkRoutes(root_);
+}
+
 }
 }
 
@@ -466,9 +466,9 @@ void routing_cluster_add_backbone(simgrid::surf::Link* bb) {
   simgrid::surf::AsCluster *cluster = dynamic_cast<simgrid::surf::AsCluster*>(current_routing);
 
   xbt_assert(cluster, "Only hosts from Cluster can get a backbone.");
-  xbt_assert(nullptr == cluster->p_backbone, "Cluster %s already has a backbone link!", cluster->name_);
+  xbt_assert(nullptr == cluster->backbone_, "Cluster %s already has a backbone link!", cluster->name_);
 
-  cluster->p_backbone = bb;
+  cluster->backbone_ = bb;
   XBT_DEBUG("Add a backbone to AS '%s'", current_routing->name_);
 }
 
@@ -615,7 +615,7 @@ void sg_platf_new_peer(sg_platf_peer_cbarg_t peer)
   router.id = router_id;
   router.coord = peer->coord;
   sg_platf_new_router(&router);
-  static_cast<AsCluster*>(current_routing)->p_router = static_cast<NetCard*>(xbt_lib_get_or_null(as_router_lib, router.id, ROUTING_ASR_LEVEL));
+  static_cast<AsCluster*>(current_routing)->router_ = static_cast<NetCard*>(xbt_lib_get_or_null(as_router_lib, router.id, ROUTING_ASR_LEVEL));
 
   XBT_DEBUG("</AS>");
   sg_platf_new_AS_end();
@@ -801,20 +801,20 @@ namespace simgrid {
 namespace surf {
 
   RoutingPlatf::RoutingPlatf(void *loopback)
-  : p_loopback(loopback)
+  : loopback_(loopback)
   {
   }
   RoutingPlatf::~RoutingPlatf()
   {
-    xbt_dynar_free(&p_lastRoute);
-    finalize_rec(p_root);
+    xbt_dynar_free(&lastRoute_);
+    finalize_rec(root_);
   }
 
 }
 }
 
 AS_t surf_AS_get_routing_root() {
-  return routing_platf->p_root;
+  return routing_platf->root_;
 }
 
 const char *surf_AS_get_name(simgrid::surf::As *as) {
@@ -843,7 +843,7 @@ static simgrid::surf::As *surf_AS_recursive_get_by_name(
 
 simgrid::surf::As *surf_AS_get_by_name(const char * name)
 {
-  simgrid::surf::As *as = surf_AS_recursive_get_by_name(routing_platf->p_root, name);
+  simgrid::surf::As *as = surf_AS_recursive_get_by_name(routing_platf->root_, name);
   if(as == NULL)
     XBT_WARN("Impossible to find an AS with name %s, please check your input", name);
   return as;
@@ -862,7 +862,7 @@ xbt_dynar_t surf_AS_get_hosts(simgrid::surf::As *as)
   for (int index = 0; index < count; index++) {
      sg_netcard_t relm =
       xbt_dynar_get_as(elms, index, simgrid::surf::NetCard*);
-     sg_host_t delm = simgrid::s4u::Host::by_name_or_null(relm->getName());
+     sg_host_t delm = simgrid::s4u::Host::by_name_or_null(relm->name());
      if (delm!=NULL) {
        xbt_dynar_push(res, &delm);
      }