Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
move one method higher in As hierarchy
[simgrid.git] / src / surf / surf_routing_generic.cpp
index 7d8b5d8..526b4d2 100644 (file)
@@ -36,9 +36,8 @@ namespace simgrid {
 namespace surf {
   
 AsGeneric::AsGeneric(const char*name)
-  : AsNone(name)
+  : As(name)
 {
-  bypassRoutes_ = xbt_dict_new_homogeneous((void (*)(void *)) routing_route_free);
 }
 
 AsGeneric::~AsGeneric()
@@ -387,7 +386,7 @@ void AsGeneric::getRouteCheckParams(NetCard *src, NetCard *dst)
       "Internal error: route destination %s@%s is not in AS %s as expected (route source: %s@%s). Please report that bug.",
         src->name(), dst->name(),  src_as->name_, dst_as->name_,  name_);
 }
-void AsGeneric::parseRouteCheckParams(sg_platf_route_cbarg_t route) {
+void AsGeneric::addRouteCheckParams(sg_platf_route_cbarg_t route) {
   const char *srcName = route->src;
   const char *dstName = route->dst;
   NetCard *src = sg_netcard_by_name_or_null(srcName);
@@ -398,8 +397,24 @@ void AsGeneric::parseRouteCheckParams(sg_platf_route_cbarg_t route) {
     xbt_assert(src, "Cannot add a route from %s to %s: %s does not exist.", srcName, dstName, srcName);
     xbt_assert(dst, "Cannot add a route from %s to %s: %s does not exist.", srcName, dstName, dstName);
     xbt_assert(!xbt_dynar_is_empty(route->link_list), "Empty route (between %s and %s) forbidden.", srcName, dstName);
+    xbt_assert(src->getRcType()==SURF_NETWORK_ELEMENT_HOST || src->getRcType()==SURF_NETWORK_ELEMENT_ROUTER,
+        "When defining a route, src must be an host or a router but '%s' is not. Did you meant to have an ASroute?", srcName);
+    xbt_assert(dst->getRcType()==SURF_NETWORK_ELEMENT_HOST || dst->getRcType()==SURF_NETWORK_ELEMENT_ROUTER,
+        "When defining a route, dst must be an host or a router but '%s' is not. Did you meant to have an ASroute?", dstName);
   } else {
     XBT_DEBUG("Load ASroute from %s@%s to %s@%s", srcName, route->gw_src->name(), dstName, route->gw_dst->name());
+    xbt_assert(src->getRcType()==SURF_NETWORK_ELEMENT_AS,
+        "When defining an ASroute, src must be an AS but '%s' is not", srcName);
+    xbt_assert(dst->getRcType()==SURF_NETWORK_ELEMENT_AS,
+        "When defining an ASroute, dst must be an AS but '%s' is not", dstName);
+
+    xbt_assert(route->gw_src->getRcType()==SURF_NETWORK_ELEMENT_HOST || route->gw_src->getRcType()==SURF_NETWORK_ELEMENT_ROUTER,
+        "When defining an ASroute, gw_src must be an host or a router but '%s' is not.", srcName);
+    xbt_assert(route->gw_dst->getRcType()==SURF_NETWORK_ELEMENT_HOST || route->gw_dst->getRcType()==SURF_NETWORK_ELEMENT_ROUTER,
+        "When defining an ASroute, gw_dst must be an host or a router but '%s' is not.", dstName);
+
+    xbt_assert(route->gw_src != route->gw_dst, "Cannot define an ASroute from '%s' to itself", route->gw_src->name());
+
     xbt_assert(src, "Cannot add a route from %s@%s to %s@%s: %s does not exist.",
         srcName,route->gw_src->name(), dstName,route->gw_dst->name(), srcName);
     xbt_assert(dst, "Cannot add a route from %s@%s to %s@%s: %s does not exist.",