X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/8ba65b25e98c8241e28fef5266584d47bdd4c0ed..dd22867177c86db2e9d0b76852cb09e044b1c0c8:/src/surf/workstation.c diff --git a/src/surf/workstation.c b/src/surf/workstation.c index 6003226215..22e7953481 100644 --- a/src/surf/workstation.c +++ b/src/surf/workstation.c @@ -268,6 +268,17 @@ void ws_action_set_priority(surf_action_t action, double priority) DIE_IMPOSSIBLE; } +void ws_action_set_bound(surf_action_t action, double bound) +{ + /* FIXME: only for CPU model object? */ + if (action->model_obj->type == SURF_MODEL_TYPE_NETWORK) + surf_network_model->set_bound(action, bound); + else if (action->model_obj->type == SURF_MODEL_TYPE_CPU) + action->model_obj->set_bound(action, bound); + else + DIE_IMPOSSIBLE; +} + #ifdef HAVE_TRACING static void ws_action_set_category(surf_action_t action, const char *category) { @@ -290,7 +301,7 @@ static int ws_get_latency_limited(surf_action_t action) } #endif -static double ws_action_get_remains(surf_action_t action) +double ws_action_get_remains(surf_action_t action) { if (action->model_obj->type == SURF_MODEL_TYPE_NETWORK) return surf_network_model->get_remains(action); @@ -317,7 +328,7 @@ e_surf_resource_state_t ws_get_state(void *workstation) return cpu->model->extension.cpu.get_state(workstation); } -static double ws_get_speed(void *workstation, double load) +double ws_get_speed(void *workstation, double load) { surf_resource_t cpu = ((surf_resource_t) surf_cpu_resource_priv(workstation)); return cpu->model->extension.cpu.get_speed(workstation, load); @@ -485,6 +496,32 @@ void ws_set_params(void *ws, ws_params_t params) memcpy(&ws_clm03->params, params, sizeof(s_ws_params_t)); } +static xbt_dynar_t ws_get_vms(void *pm) +{ + xbt_dynar_t dyn = xbt_dynar_new(sizeof(smx_host_t), NULL); + + /* iterate for all hosts including virtual machines */ + xbt_lib_cursor_t cursor; + char *key; + void **ind_host; + xbt_lib_foreach(host_lib, cursor, key, ind_host) { + workstation_CLM03_t ws_clm03 = ind_host[SURF_WKS_LEVEL]; + if (!ws_clm03) + continue; + /* skip if it is not a virtual machine */ + if (ws_clm03->generic_resource.model != surf_vm_workstation_model) + continue; + + /* It is a virtual machine, so we can cast it to workstation_VM2013_t */ + workstation_VM2013_t ws_vm2013 = (workstation_VM2013_t) ws_clm03; + if (pm == ws_vm2013->sub_ws) + xbt_dynar_push(dyn, &ws_vm2013->sub_ws); + } + + return dyn; +} + + static void surf_workstation_model_init_internal(void) { surf_model_t model = surf_model_init(); @@ -506,6 +543,7 @@ static void surf_workstation_model_init_internal(void) model->is_suspended = ws_action_is_suspended; model->set_max_duration = ws_action_set_max_duration; model->set_priority = ws_action_set_priority; + model->set_bound = ws_action_set_bound; #ifdef HAVE_TRACING model->set_category = ws_action_set_category; #endif @@ -544,6 +582,7 @@ static void surf_workstation_model_init_internal(void) model->extension.workstation.get_params = ws_get_params; model->extension.workstation.set_params = ws_set_params; + model->extension.workstation.get_vms = ws_get_vms; surf_workstation_model = model; }