- }
- if (found)
- return to_find;
- return NULL;
-}
-
-routing_component_t
-generic_autonomous_system_exist(routing_component_t rc, char *element)
-{
- //return rc; // FIXME: BYPASSERROR OF FOREACH WITH BREAK
- routing_component_t element_as, result, elem;
- xbt_dict_cursor_t cursor = NULL;
- char *key;
- element_as = ((network_element_info_t)
- xbt_lib_get_or_null(as_router_lib, element, ROUTING_ASR_LEVEL))->rc_component;
- result = ((routing_component_t) - 1);
- if (element_as != rc)
- result = generic_as_exist(rc, element_as);
-
- int found = 0;
- if (result) {
- xbt_dict_foreach(element_as->routing_sons, cursor, key, elem) {
- found = !strcmp(elem->name, element);
- if (found)
- break;
- }
- if (found)
- return element_as;
- }
- return NULL;
-}
-
-routing_component_t
-generic_processing_units_exist(routing_component_t rc, char *element)
-{
- routing_component_t element_as;
- element_as = ((network_element_info_t)
- xbt_lib_get_or_null(host_lib,
- element, ROUTING_HOST_LEVEL))->rc_component;
- if (element_as == rc)
- return element_as;
- return generic_as_exist(rc, element_as);
-}
-
-void generic_src_dst_check(routing_component_t rc, const char *src,
- const char *dst)
-{
-
- void * src_data = xbt_lib_get_or_null(host_lib,src, ROUTING_HOST_LEVEL);
- void * dst_data = xbt_lib_get_or_null(host_lib,dst, ROUTING_HOST_LEVEL);
- if(!src_data) src_data = xbt_lib_get_or_null(as_router_lib,src, ROUTING_ASR_LEVEL);
- if(!dst_data) dst_data = xbt_lib_get_or_null(as_router_lib,dst, ROUTING_ASR_LEVEL);
-
- if(src_data == NULL || dst_data == NULL)
- xbt_die("Ask for route \"from\"(%s) or \"to\"(%s) no found at AS \"%s\"",
- src, dst, rc->name);
-
- routing_component_t src_as = ((network_element_info_t)src_data)->rc_component;
- routing_component_t dst_as = ((network_element_info_t)dst_data)->rc_component;
-
- if(src_as != dst_as)
- xbt_die("The src(%s in %s) and dst(%s in %s) are in differents AS",
- src, src_as->name, dst, dst_as->name);
- if(rc != dst_as)
- xbt_die("The routing component of src'%s' and dst'%s' is not the same as the network elements belong (%s?=%s?=%s)",
- src,dst,src_as->name, dst_as->name,rc->name);
-}
-
-static void routing_parse_Sconfig(void)
-{
- XBT_DEBUG("START configuration name = %s",A_surfxml_config_id);
-}
-
-static void routing_parse_Econfig(void)
-{
- xbt_dict_cursor_t cursor = NULL;
- char *key;
- char *elem;
- char *cfg;
- xbt_dict_foreach(current_property_set, cursor, key, elem) {
- cfg = bprintf("%s:%s",key,elem);
- if(xbt_cfg_is_default_value(_surf_cfg_set, key))
- xbt_cfg_set_parse(_surf_cfg_set, cfg);
- else
- XBT_INFO("The custom configuration '%s' is already defined by user!",key);
- free(cfg);
- }
- XBT_DEBUG("End configuration name = %s",A_surfxml_config_id);
-}
-
-void routing_parse_Scluster(void)
-{
- static int AX_ptr = 0;
- char *host_id, *groups, *link_id = NULL;
- char *availability_file = xbt_strdup(A_surfxml_cluster_availability_file);
- char *state_file = xbt_strdup(A_surfxml_cluster_state_file);
-
- if(xbt_dict_size(patterns)==0)
- patterns = xbt_dict_new();
-
- xbt_dict_set(patterns,"id",struct_cluster->V_cluster_id,NULL);
- xbt_dict_set(patterns,"prefix",struct_cluster->V_cluster_prefix,NULL);
- xbt_dict_set(patterns,"suffix",struct_cluster->V_cluster_suffix,NULL);
-
- char *route_src_dst;
- unsigned int iter;
- int start, end, i;
- xbt_dynar_t radical_elements;
- xbt_dynar_t radical_ends;
- int cluster_sharing_policy = AX_surfxml_cluster_sharing_policy;
- int cluster_bb_sharing_policy = AX_surfxml_cluster_bb_sharing_policy;
-
- static unsigned int surfxml_buffer_stack_stack_ptr = 1;
- static unsigned int surfxml_buffer_stack_stack[1024];
-
- surfxml_buffer_stack_stack[0] = 0;
-
- surfxml_bufferstack_push(1);
-
- SURFXML_BUFFER_SET(AS_id, struct_cluster->V_cluster_id);
- SURFXML_BUFFER_SET(AS_routing, "RuleBased");
- XBT_DEBUG("<AS id=\"%s\"\trouting=\"RuleBased\">", struct_cluster->V_cluster_id);
- SURFXML_START_TAG(AS);
-
- radical_elements = xbt_str_split(struct_cluster->V_cluster_radical, ",");
- xbt_dynar_foreach(radical_elements, iter, groups) {
- radical_ends = xbt_str_split(groups, "-");
- switch (xbt_dynar_length(radical_ends)) {
- case 1:
- surf_parse_get_int(&start, xbt_dynar_get_as(radical_ends, 0, char *));
- host_id = bprintf("%s%d%s", struct_cluster->V_cluster_prefix, start, struct_cluster->V_cluster_suffix);
- link_id = bprintf("%s_link_%d", struct_cluster->V_cluster_id, start);
- xbt_dict_set(patterns, "radical", bprintf("%d", start), xbt_free);
- A_surfxml_host_state = A_surfxml_host_state_ON;
-
- XBT_DEBUG("<host\tid=\"%s\"\tpower=\"%s\">", host_id, struct_cluster->S_cluster_power);
- SURFXML_BUFFER_SET(host_id, host_id);
- SURFXML_BUFFER_SET(host_power, struct_cluster->S_cluster_power);
-
- if(!strcmp(A_surfxml_cluster_availability_file,"")){
- char* tmp_availability_file = xbt_strdup(availability_file);
- xbt_str_varsubst(tmp_availability_file,patterns);
- XBT_DEBUG("\tavailability_file=\"%s\"",tmp_availability_file);
- SURFXML_BUFFER_SET(host_availability_file, tmp_availability_file);
- xbt_free(tmp_availability_file);