Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Export functions in SURF to indicate whether a link is shared or not.
[simgrid.git] / src / surf / workstation.c
index 5bcf287..78e3360 100644 (file)
 #include "portable.h"
 #include "workstation_private.h"
 #include "cpu_private.h"
-#include "network_private.h"
+#include "network_common.h"
+
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_workstation, surf,
+                               "Logging specific to the SURF workstation module");
 
 surf_workstation_model_t surf_workstation_model = NULL;
 xbt_dict_t workstation_set = NULL;
@@ -34,7 +37,7 @@ static void workstation_free(void *workstation)
   free(workstation);
 }
 
-static void create_workstations(void)
+void create_workstations(void)
 {
   xbt_dict_cursor_t cursor = NULL;
   char *name = NULL;
@@ -63,7 +66,6 @@ static const char *get_resource_name(void *resource_id)
 static int resource_used(void *resource_id)
 {
   THROW_IMPOSSIBLE;  /* This model does not implement parallel tasks */
-  return 0;
 }
 
 static void parallel_action_cancel(surf_action_t action)
@@ -74,7 +76,6 @@ static void parallel_action_cancel(surf_action_t action)
 static int parallel_action_free(surf_action_t action)
 {
   THROW_UNIMPLEMENTED;  /* This model does not implement parallel tasks */
-  return 0;
 }
 
 static void parallel_action_use(surf_action_t action)
@@ -158,10 +159,9 @@ static void update_actions_state(double now, double delta)
 
 static void update_resource_state(void *id,
                                  tmgr_trace_event_t event_type,
-                                 double value)
+                                 double value, double date)
 {
   THROW_IMPOSSIBLE; /* This model does not implement parallel tasks */
-  return;
 }
 
 static surf_action_t execute(void *workstation, double size)
@@ -254,6 +254,12 @@ static double get_available_speed(void *workstation)
       get_available_speed(((workstation_CLM03_t) workstation)->cpu);
 }
 
+static xbt_dict_t get_properties(void *workstation)
+{
+  return surf_cpu_model->common_public->
+      get_properties(((workstation_CLM03_t) workstation)->cpu);
+}
+
 static surf_action_t execute_parallel_task(int workstation_nb,
                                           void **workstation_list,
                                           double *computation_amount,
@@ -262,7 +268,6 @@ static surf_action_t execute_parallel_task(int workstation_nb,
                                           double rate)
 {
   THROW_UNIMPLEMENTED;  /* This model does not implement parallel tasks */
-  return NULL;
 }
 
 
@@ -300,6 +305,11 @@ static double get_link_latency(const void *link)
   return surf_network_model->extension_public->get_link_latency(link);
 }
 
+static int link_shared(const void *link)
+{
+  return surf_network_model->extension_public->get_link_latency(link);
+}
+
 static void finalize(void)
 {
   xbt_dict_free(&workstation_set);
@@ -387,6 +397,10 @@ static void surf_workstation_model_init_internal(void)
   surf_workstation_model->extension_public->get_speed = get_speed;
   surf_workstation_model->extension_public->get_available_speed =
       get_available_speed;
+
+  /*manage the properties of the workstation*/
+  surf_workstation_model->common_public->get_properties = get_properties;
+
   surf_workstation_model->extension_public->communicate = communicate;
   surf_workstation_model->extension_public->execute_parallel_task =
       execute_parallel_task;
@@ -399,6 +413,9 @@ static void surf_workstation_model_init_internal(void)
       get_link_bandwidth;
   surf_workstation_model->extension_public->get_link_latency =
       get_link_latency;
+  surf_workstation_model->extension_public->link_shared =
+      link_shared;
+
   workstation_set = xbt_dict_new();
 }
 
@@ -418,11 +435,9 @@ void surf_workstation_model_init_CLM03(const char *filename)
   surf_workstation_model_init_internal();
   surf_cpu_model_init_Cas01(filename);
   surf_network_model_init_CM02(filename);
-  create_workstations();
   update_model_description(surf_workstation_model_description,
-                             surf_workstation_model_description_size,
-                             "CLM03",
-                             (surf_model_t) surf_workstation_model);
+                          "CLM03",
+                          (surf_model_t) surf_workstation_model);
   xbt_dynar_push(model_list, &surf_workstation_model);
 }
 
@@ -432,12 +447,10 @@ void surf_workstation_model_init_compound(const char *filename)
   xbt_assert0(surf_cpu_model, "No CPU model defined yet!");
   xbt_assert0(surf_network_model, "No network model defined yet!");
   surf_workstation_model_init_internal();
-  create_workstations();
 
   update_model_description(surf_workstation_model_description,
-                             surf_workstation_model_description_size,
-                             "compound",
-                             (surf_model_t) surf_workstation_model);
+                          "compound",
+                          (surf_model_t) surf_workstation_model);
 
   xbt_dynar_push(model_list, &surf_workstation_model);
 }