Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Canceled RPC are a pain right now (until we move to a N/1-port model, they are likely...
[simgrid.git] / src / surf / workstation.c
index fc6a97e..5d6120c 100644 (file)
@@ -11,9 +11,6 @@
 #include "cpu_private.h"
 #include "network_private.h"
 
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(workstation, surf,
-                               "Logging specific to the SURF workstation module");
-
 surf_workstation_resource_t surf_workstation_resource = NULL;
 
 xbt_dict_t workstation_set = NULL;
@@ -293,6 +290,12 @@ static double get_speed(void *workstation, double load)
       get_speed(((workstation_CLM03_t) workstation)->cpu, load);
 }
 
+static double get_available_speed(void *workstation)
+{
+  return surf_cpu_resource->extension_public->
+      get_available_speed(((workstation_CLM03_t) workstation)->cpu);
+}
+
 static surf_action_t execute_parallel_task (int workstation_nb,
                                            void **workstation_list,
                                            double *computation_amount,
@@ -384,6 +387,31 @@ static surf_action_t execute_parallel_task (int workstation_nb,
   return (surf_action_t) action;
 }
 
+/* returns an array of network_link_CM02_t */
+static const void** get_route(void *src, void *dst) {
+  workstation_CLM03_t workstation_src = (workstation_CLM03_t) src;
+  workstation_CLM03_t workstation_dst = (workstation_CLM03_t) dst;
+  return surf_network_resource->extension_public->get_route(workstation_src->network_card, workstation_dst->network_card);
+}
+
+static int get_route_size(void *src, void *dst) {
+  workstation_CLM03_t workstation_src = (workstation_CLM03_t) src;
+  workstation_CLM03_t workstation_dst = (workstation_CLM03_t) dst;
+  return surf_network_resource->extension_public->get_route_size(workstation_src->network_card, workstation_dst->network_card);
+}
+
+static const char *get_link_name(const void *link) {
+  return surf_network_resource->extension_public->get_link_name(link);
+}
+
+static double get_link_bandwidth(const void *link) {
+  return surf_network_resource->extension_public->get_link_bandwidth(link);
+}
+
+static double get_link_latency(const void *link) {
+  return surf_network_resource->extension_public->get_link_latency(link); 
+}
+
 static void finalize(void)
 {
   xbt_dict_free(&workstation_set);
@@ -459,10 +487,15 @@ static void surf_workstation_resource_init_internal(void)
   surf_workstation_resource->extension_public->sleep = action_sleep;
   surf_workstation_resource->extension_public->get_state = get_state;
   surf_workstation_resource->extension_public->get_speed = get_speed;
+  surf_workstation_resource->extension_public->get_available_speed = get_available_speed;
   surf_workstation_resource->extension_public->communicate = communicate;
   surf_workstation_resource->extension_public->execute_parallel_task = 
     execute_parallel_task;
-
+  surf_workstation_resource->extension_public->get_route = get_route;
+  surf_workstation_resource->extension_public->get_route_size = get_route_size;
+  surf_workstation_resource->extension_public->get_link_name = get_link_name;
+  surf_workstation_resource->extension_public->get_link_bandwidth = get_link_bandwidth;
+  surf_workstation_resource->extension_public->get_link_latency = get_link_latency;
   workstation_set = xbt_dict_new();
 
   xbt_assert0(maxmin_system, "surf_init has to be called first!");