Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
more checks on the parameters of addRoute()
authorMartin Quinson <martin.quinson@loria.fr>
Fri, 19 Feb 2016 21:22:29 +0000 (22:22 +0100)
committerMartin Quinson <martin.quinson@loria.fr>
Fri, 19 Feb 2016 21:22:29 +0000 (22:22 +0100)
src/bindings/lua/lua_platf.cpp
src/surf/sg_platf.cpp
src/surf/surf_routing_generic.cpp

index 1200309..67f5162 100644 (file)
@@ -456,13 +456,6 @@ int console_add_ASroute(lua_State *L) {
   ASroute.gw_dst = sg_netcard_by_name_or_null(lua_tostring(L, -1));
   lua_pop(L, 1);
 
-  /*if (A_surfxml_ASroute_gw___src && !ASroute.gw_src)*/
-    /*surf_parse_error("gw_src=\"%s\" not found for ASroute from \"%s\" to \"%s\"",*/
-                     /*A_surfxml_ASroute_gw___src, ASroute.src, ASroute.dst);*/
-  /*if (A_surfxml_ASroute_gw___dst && !ASroute.gw_dst)*/
-    /*surf_parse_error("gw_dst=\"%s\" not found for ASroute from \"%s\" to \"%s\"",*/
-                     /*A_surfxml_ASroute_gw___dst, ASroute.src, ASroute.dst);*/
-
   lua_pushstring(L,"links");
   lua_gettable(L,-2);
   ASroute.link_list = xbt_str_split(lua_tostring(L, -1), ", \t\r\n");
index 33b714a..be65755 100644 (file)
@@ -520,8 +520,7 @@ void sg_platf_new_bypassRoute(sg_platf_route_cbarg_t bypassRoute)
 
 void sg_platf_new_process(sg_platf_process_cbarg_t process)
 {
-  if (!simix_global)
-    xbt_die("Cannot create process without SIMIX.");
+  xbt_assert(simix_global,"Cannot create process without SIMIX.");
 
   sg_host_t host = sg_host_by_name(process->host);
   if (!host) {
index 7d8b5d8..031f460 100644 (file)
@@ -398,8 +398,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.",