Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add model Reno, NewReno and Tahoe with ns3
[simgrid.git] / src / surf / surf_config.c
index 6e5b341..4cc63c8 100644 (file)
@@ -9,6 +9,7 @@
 #include "xbt/config.h"
 #include "xbt/str.h"
 #include "surf/surf_private.h"
+#include "surf/surf_routing.h" /* COORD_HOST_LEVEL and COORD_ASR_LEVEL */
 #include "simix/context.h"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_config, surf,
@@ -192,6 +193,14 @@ static void _surf_cfg_cb_model_check(const char *name, int pos)
   }
 }
 
+extern int _surf_do_verbose_exit;
+
+static void _surf_cfg_cb_verbose_exit(const char *name, int pos)
+{
+  _surf_do_verbose_exit = xbt_cfg_get_int(_surf_cfg_set, name);
+}
+
+
 static void _surf_cfg_cb_context_factory(const char *name, int pos)
 {
   smx_context_factory_name = xbt_cfg_get_string(_surf_cfg_set, name);
@@ -212,6 +221,23 @@ static void _surf_cfg_cb_contexts_parallel_threshold(const char *name, int pos)
   SIMIX_context_set_parallel_threshold(xbt_cfg_get_int(_surf_cfg_set, name));
 }
 
+static void _surf_cfg_cb__surf_network_coordinates(const char *name,
+                                                   int pos)
+{
+  char *val = xbt_cfg_get_string(_surf_cfg_set, name);
+  if (!strcmp(val, "yes")) {
+    if (!COORD_HOST_LEVEL) {
+      COORD_HOST_LEVEL = xbt_lib_add_level(host_lib,xbt_dynar_free_voidp);
+      COORD_ASR_LEVEL  = xbt_lib_add_level(as_router_lib,xbt_dynar_free_voidp);
+    }
+  } else if (!strcmp(val, "no")) {
+    if (COORD_HOST_LEVEL)
+      XBT_WARN("Cannot disable CMD prop coordinates, once set.");
+  } else {
+    XBT_WARN("Setting CMD prop coordinates must be \"yes\" or \"no\"");
+  }
+}
+
 static void _surf_cfg_cb__surf_network_fullduplex(const char *name,
                                                   int pos)
 {
@@ -347,12 +373,21 @@ void surf_config_init(int *argc, char **argv)
                      "Activate the model-checking of the \"simulated\" system (EXPERIMENTAL -- msg only for now)",
                      xbt_cfgelm_int, &default_value_int, 0, 1,
                      _surf_cfg_cb_model_check, NULL);
+    
     /*
        FIXME: this function is not setting model-check to it's default value because
        internally it calls to variable->cb_set that in this case is the function 
-       _surf_cfg_cb_model_check which sets it's value to 1 (instead of the defalut value 0)
+       _surf_cfg_cb_model_check which sets it's value to 1 (instead of the default value 0)
        xbt_cfg_set_int(_surf_cfg_set, "model-check", default_value_int); */
 
+    /* do verbose-exit */
+    default_value_int = 0;
+    xbt_cfg_register(&_surf_cfg_set, "verbose-exit",
+                     "Activate the \"do nothing\" mode in Ctrl-C",
+                     xbt_cfgelm_int, &default_value_int, 0, 1,
+                     _surf_cfg_cb_verbose_exit, NULL);
+    
+    
     /* context factory */
     default_value = xbt_strdup("ucontext");
     xbt_cfg_register(&_surf_cfg_set, "contexts/factory",
@@ -380,6 +415,13 @@ void surf_config_init(int *argc, char **argv)
         xbt_cfgelm_int, &default_value_int, 1, 1,
         _surf_cfg_cb_contexts_parallel_threshold, NULL);
 
+    default_value = xbt_strdup("no");
+    xbt_cfg_register(&_surf_cfg_set, "coordinates",
+                     "\"yes\" or \"no\" (FIXME: document)",
+                     xbt_cfgelm_string, &default_value, 1, 1,
+                     _surf_cfg_cb__surf_network_coordinates, NULL);
+    xbt_cfg_setdefault_string(_surf_cfg_set, "coordinates", default_value);
+
     default_value_int = 0;
     xbt_cfg_register(&_surf_cfg_set, "fullduplex",
                      "Activate the interferences between uploads and downloads for fluid max-min models (LV08, CM03)",
@@ -400,7 +442,13 @@ void surf_config_init(int *argc, char **argv)
                      xbt_cfgelm_int, &default_value_int, 0, 1,
                      _surf_cfg_cb__gtnets_jitter_seed, NULL);
 #endif
-
+#ifdef HAVE_NS3
+    xbt_cfg_register(&_surf_cfg_set, "ns3/TcpModel",
+                     "The ns3 tcp model can be : NewReno or Reno or Tahoe",
+                     xbt_cfgelm_string, NULL, 1, 1,
+                     NULL, NULL);
+    xbt_cfg_setdefault_string(_surf_cfg_set, "ns3/TcpModel", "default");
+#endif
     if (!surf_path) {
       /* retrieves the current directory of the        current process */
       const char *initial_path = __surf_get_initial_path();
@@ -443,14 +491,16 @@ void surf_config_models_setup(const char *platform_file)
    * we should switch to the "compound" workstation model to correctly dispatch stuff to
    * the right net/cpu models.
    */
-  if ((strcmp(network_model_name, "LV08")
-       || strcmp(cpu_model_name, "Cas01"))
-      && !strcmp(workstation_model_name, "CLM03")) {
-    const char *val = "compound";
-    XBT_INFO
-        ("Switching workstation model to compound since you changed the network and/or cpu model(s)");
-    xbt_cfg_set_string(_surf_cfg_set, "workstation/model", val);
-    workstation_model_name = (char *) "compound";
+
+  if((!xbt_cfg_is_default_value(_surf_cfg_set, "network/model") ||
+         !xbt_cfg_is_default_value(_surf_cfg_set, "cpu/model")) &&
+         xbt_cfg_is_default_value(_surf_cfg_set, "workstation/model"))
+  {
+           const char *val = "compound";
+           XBT_INFO
+               ("Switching workstation model to compound since you changed the network and/or cpu model(s)");
+           xbt_cfg_set_string(_surf_cfg_set, "workstation/model", val);
+           workstation_model_name = (char *) "compound";
   }
 
   XBT_DEBUG("Workstation model: %s", workstation_model_name);