X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/120a17a595bd3d7636a031ddaa5dc372826dba66..e50b221720063e905ae82431786e26edaf4fda0d:/src/surf/xml/surfxml_sax_cb.cpp diff --git a/src/surf/xml/surfxml_sax_cb.cpp b/src/surf/xml/surfxml_sax_cb.cpp index d59eeb0523..186b559b94 100644 --- a/src/surf/xml/surfxml_sax_cb.cpp +++ b/src/surf/xml/surfxml_sax_cb.cpp @@ -31,7 +31,7 @@ std::vector parsed_link_list; /* temporary store of cu * Helping functions */ void surf_parse_assert(bool cond, const char *fmt, ...) { - if (!cond ) { + if (not cond) { va_list va; va_start(va,fmt); int lineno = surf_parse_lineno; @@ -54,6 +54,40 @@ void surf_parse_error(const char *fmt, ...) { surf_exit(); xbt_die("Exiting now"); } +void surf_parse_assert_netpoint(char* hostname, const char* pre, const char* post) +{ + if (sg_netpoint_by_name_or_null(hostname) != nullptr) // found + return; + + std::string msg = std::string(pre); + msg += hostname; + msg += post; + msg += " Existing netpoints: \n"; + + std::vector list; + simgrid::s4u::Engine::instance()->netpointList(&list); + std::sort(list.begin(), list.end(), + [](simgrid::kernel::routing::NetPoint* a, simgrid::kernel::routing::NetPoint* b) { + return a->name() < b->name(); + }); + bool first = true; + for (auto np : list) { + if (np->isNetZone()) + continue; + + if (not first) + msg += ","; + first = false; + msg += "'" + np->name() + "'"; + if (msg.length() > 4096) { + msg.pop_back(); // remove trailing quote + msg += "...(list truncated)......"; + break; + } + } + surf_parse_error("%s", msg.c_str()); +} + void surf_parse_warn(const char *fmt, ...) { va_list va; va_start(va,fmt); @@ -315,7 +349,7 @@ void ETag_surfxml_storage() storage.id = A_surfxml_storage_id; storage.type_id = A_surfxml_storage_typeId; storage.content = A_surfxml_storage_content; - storage.content_type = A_surfxml_storage_content___type; + storage.attach = A_surfxml_storage_attach; sg_platf_new_storage(&storage); } @@ -338,7 +372,6 @@ void ETag_surfxml_storage___type() current_model_property_set = nullptr; storage_type.content = A_surfxml_storage___type_content; - storage_type.content_type = A_surfxml_storage___type_content___type; storage_type.id = A_surfxml_storage___type_id; storage_type.model = A_surfxml_storage___type_model; storage_type.size = surf_parse_get_size(A_surfxml_storage___type_size, @@ -491,7 +524,7 @@ void STag_surfxml_prop() netzone->setProperty(A_surfxml_prop_id, A_surfxml_prop_value); } else{ - if (!current_property_set) + if (not current_property_set) current_property_set = xbt_dict_new_homogeneous(&xbt_free_f); // Maybe, it should raise an error xbt_dict_set(current_property_set, A_surfxml_prop_id, xbt_strdup(A_surfxml_prop_value), nullptr); XBT_DEBUG("add prop %s=%s into current property set %p", A_surfxml_prop_id, A_surfxml_prop_value, @@ -703,6 +736,9 @@ void STag_surfxml_link___ctn(){ link_name = bprintf("%s_DOWN", A_surfxml_link___ctn_id); link = simgrid::surf::LinkImpl::byName(link_name); break; + default: + surf_parse_error("Invalid direction for link %s", link_name); + break; } xbt_free(link_name); // no-op if it's already nullptr @@ -735,61 +771,40 @@ void ETag_surfxml_backbone(){ } void STag_surfxml_route(){ - surf_parse_assert(sg_netpoint_by_name_or_null(A_surfxml_route_src), "Route src='%s' does name a node.", - A_surfxml_route_src); - surf_parse_assert(sg_netpoint_by_name_or_null(A_surfxml_route_dst), "Route dst='%s' does name a node.", - A_surfxml_route_dst); + surf_parse_assert_netpoint(A_surfxml_route_src, "Route src='", "' does name a node."); + surf_parse_assert_netpoint(A_surfxml_route_dst, "Route dst='", "' does name a node."); } void STag_surfxml_ASroute(){ - surf_parse_assert(sg_netpoint_by_name_or_null(A_surfxml_ASroute_src), "ASroute src='%s' does name a node.", - A_surfxml_ASroute_src); - surf_parse_assert(sg_netpoint_by_name_or_null(A_surfxml_ASroute_dst), "ASroute dst='%s' does name a node.", - A_surfxml_ASroute_dst); + surf_parse_assert_netpoint(A_surfxml_ASroute_src, "ASroute src='", "' does name a node."); + surf_parse_assert_netpoint(A_surfxml_ASroute_dst, "ASroute dst='", "' does name a node."); - surf_parse_assert(sg_netpoint_by_name_or_null(A_surfxml_ASroute_gw___src), "ASroute gw_src='%s' does name a node.", - A_surfxml_ASroute_gw___src); - surf_parse_assert(sg_netpoint_by_name_or_null(A_surfxml_ASroute_gw___dst), "ASroute gw_dst='%s' does name a node.", - A_surfxml_ASroute_gw___dst); + surf_parse_assert_netpoint(A_surfxml_ASroute_gw___src, "ASroute gw_src='", "' does name a node."); + surf_parse_assert_netpoint(A_surfxml_ASroute_gw___dst, "ASroute gw_dst='", "' does name a node."); } void STag_surfxml_zoneRoute(){ - surf_parse_assert(sg_netpoint_by_name_or_null(A_surfxml_zoneRoute_src), "zoneRoute src='%s' does name a node.", - A_surfxml_zoneRoute_src); - surf_parse_assert(sg_netpoint_by_name_or_null(A_surfxml_zoneRoute_dst), "zoneRoute dst='%s' does name a node.", - A_surfxml_zoneRoute_dst); - - surf_parse_assert(sg_netpoint_by_name_or_null(A_surfxml_zoneRoute_gw___src), "zoneRoute gw_src='%s' does name a node.", - A_surfxml_zoneRoute_gw___src); - surf_parse_assert(sg_netpoint_by_name_or_null(A_surfxml_zoneRoute_gw___dst), "zoneRoute gw_dst='%s' does name a node.", - A_surfxml_zoneRoute_gw___dst); + surf_parse_assert_netpoint(A_surfxml_zoneRoute_src, "zoneRoute src='", "' does name a node."); + surf_parse_assert_netpoint(A_surfxml_zoneRoute_dst, "zoneRoute dst='", "' does name a node."); + surf_parse_assert_netpoint(A_surfxml_zoneRoute_gw___src, "zoneRoute gw_src='", "' does name a node."); + surf_parse_assert_netpoint(A_surfxml_zoneRoute_gw___dst, "zoneRoute gw_dst='", "' does name a node."); } void STag_surfxml_bypassRoute(){ - surf_parse_assert(sg_netpoint_by_name_or_null(A_surfxml_bypassRoute_src), "bypassRoute src='%s' does name a node.", - A_surfxml_bypassRoute_src); - surf_parse_assert(sg_netpoint_by_name_or_null(A_surfxml_bypassRoute_dst), "bypassRoute dst='%s' does name a node.", - A_surfxml_bypassRoute_dst); + surf_parse_assert_netpoint(A_surfxml_bypassRoute_src, "bypassRoute src='", "' does name a node."); + surf_parse_assert_netpoint(A_surfxml_bypassRoute_dst, "bypassRoute dst='", "' does name a node."); } void STag_surfxml_bypassASroute(){ - surf_parse_assert(sg_netpoint_by_name_or_null(A_surfxml_bypassASroute_src), - "bypassASroute src='%s' does name a node.", A_surfxml_bypassASroute_src); - surf_parse_assert(sg_netpoint_by_name_or_null(A_surfxml_bypassASroute_dst), - "bypassASroute dst='%s' does name a node.", A_surfxml_bypassASroute_dst); - surf_parse_assert(sg_netpoint_by_name_or_null(A_surfxml_bypassASroute_gw___src), - "bypassASroute gw_src='%s' does name a node.", A_surfxml_bypassASroute_gw___src); - surf_parse_assert(sg_netpoint_by_name_or_null(A_surfxml_bypassASroute_gw___dst), - "bypassASroute gw_dst='%s' does name a node.", A_surfxml_bypassASroute_gw___dst); + surf_parse_assert_netpoint(A_surfxml_bypassASroute_src, "bypassASroute src='", "' does name a node."); + surf_parse_assert_netpoint(A_surfxml_bypassASroute_dst, "bypassASroute dst='", "' does name a node."); + surf_parse_assert_netpoint(A_surfxml_bypassASroute_gw___src, "bypassASroute gw_src='", "' does name a node."); + surf_parse_assert_netpoint(A_surfxml_bypassASroute_gw___dst, "bypassASroute gw_dst='", "' does name a node."); } void STag_surfxml_bypassZoneRoute(){ - surf_parse_assert(sg_netpoint_by_name_or_null(A_surfxml_bypassZoneRoute_src), - "bypassASroute src='%s' does name a node.", A_surfxml_bypassZoneRoute_src); - surf_parse_assert(sg_netpoint_by_name_or_null(A_surfxml_bypassZoneRoute_dst), - "bypassASroute dst='%s' does name a node.", A_surfxml_bypassZoneRoute_dst); - surf_parse_assert(sg_netpoint_by_name_or_null(A_surfxml_bypassZoneRoute_gw___src), - "bypassASroute gw_src='%s' does name a node.", A_surfxml_bypassZoneRoute_gw___src); - surf_parse_assert(sg_netpoint_by_name_or_null(A_surfxml_bypassZoneRoute_gw___dst), - "bypassASroute gw_dst='%s' does name a node.", A_surfxml_bypassZoneRoute_gw___dst); + surf_parse_assert_netpoint(A_surfxml_bypassZoneRoute_src, "bypassZoneRoute src='", "' does name a node."); + surf_parse_assert_netpoint(A_surfxml_bypassZoneRoute_dst, "bypassZoneRoute dst='", "' does name a node."); + surf_parse_assert_netpoint(A_surfxml_bypassZoneRoute_gw___src, "bypassZoneRoute gw_src='", "' does name a node."); + surf_parse_assert_netpoint(A_surfxml_bypassZoneRoute_gw___dst, "bypassZoneRoute gw_dst='", "' does name a node."); } void ETag_surfxml_route(){ @@ -911,7 +926,8 @@ void ETag_surfxml_trace(){ sg_platf_new_trace(&trace); } -void STag_surfxml_trace___connect(){ +void STag_surfxml_trace___connect() +{ parse_after_config(); s_sg_platf_trace_connect_cbarg_t trace_connect; memset(&trace_connect,0,sizeof(trace_connect)); @@ -936,30 +952,41 @@ void STag_surfxml_trace___connect(){ case A_surfxml_trace___connect_kind_LINK___AVAIL: trace_connect.kind = SURF_TRACE_CONNECT_KIND_LINK_AVAIL; break; + default: + surf_parse_error("Invalid trace kind"); + break; } sg_platf_trace_connect(&trace_connect); } -void STag_surfxml_AS(){ +void STag_surfxml_AS() +{ AX_surfxml_zone_id = AX_surfxml_AS_id; AX_surfxml_zone_routing = (AT_surfxml_zone_routing)AX_surfxml_AS_routing; STag_surfxml_zone(); } -void ETag_surfxml_AS(){ + +void ETag_surfxml_AS() +{ ETag_surfxml_zone(); } -void STag_surfxml_zone(){ + +void STag_surfxml_zone() +{ parse_after_config(); ZONE_TAG = 1; - s_sg_platf_AS_cbarg_t AS = { A_surfxml_zone_id, (int)A_surfxml_zone_routing}; + s_sg_platf_AS_cbarg_t AS = {A_surfxml_zone_id, (int)A_surfxml_zone_routing}; sg_platf_new_AS_begin(&AS); } -void ETag_surfxml_zone(){ + +void ETag_surfxml_zone() +{ sg_platf_new_AS_seal(); } -void STag_surfxml_config(){ +void STag_surfxml_config() +{ ZONE_TAG = 0; xbt_assert(current_property_set == nullptr, "Someone forgot to reset the property set to nullptr in its closing tag (or XML malformed)"); XBT_DEBUG("START configuration name = %s",A_surfxml_config_id); @@ -968,15 +995,16 @@ void STag_surfxml_config(){ ", etc)."); } } -void ETag_surfxml_config(){ + +void ETag_surfxml_config() +{ xbt_dict_cursor_t cursor = nullptr; char *key; char *elem; xbt_dict_foreach(current_property_set, cursor, key, elem) { if (xbt_cfg_is_default_value(key)) { - char* cfg = bprintf("%s:%s", key, elem); - xbt_cfg_set_parse(cfg); - free(cfg); + std::string cfg = std::string(key) + ":" + elem; + xbt_cfg_set_parse(cfg.c_str()); } else XBT_INFO("The custom configuration '%s' is already defined by user!",key); } @@ -1033,6 +1061,9 @@ void ETag_surfxml_actor() case A_surfxml_actor_on___failure_RESTART: actor.on_failure = SURF_ACTOR_ON_FAILURE_RESTART; break; + default: + surf_parse_error("Invalid on failure behavior"); + break; } sg_platf_new_process(&actor); @@ -1052,7 +1083,7 @@ void STag_surfxml_argument(){ } void STag_surfxml_model___prop(){ - if (!current_model_property_set) + if (not current_model_property_set) current_model_property_set = new std::map(); current_model_property_set->insert( @@ -1084,7 +1115,7 @@ void surf_parse_open(const char *file) xbt_free(dir); surf_file_to_parse = surf_fopen(file, "r"); - xbt_assert((surf_file_to_parse), "Unable to open \"%s\"\n", file); + xbt_assert(surf_file_to_parse != nullptr, "Unable to open '%s'\n", file); surf_input_buffer = surf_parse__create_buffer(surf_file_to_parse, YY_BUF_SIZE); surf_parse__switch_to_buffer(surf_input_buffer); surf_parse_lineno = 1; @@ -1111,6 +1142,6 @@ static int _surf_parse() { return surf_parse_lex(); } -int_f_void_t surf_parse = _surf_parse; +int_f_void_t surf_parse = &_surf_parse; SG_END_DECL()