X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/b4e4d734420d18937b9550d50fcaed5700ec68cb..4c13ae49e3c558dd6c83e0e1a479c189f57aec45:/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 333c2e7f28..a363d6c14a 100644 --- a/src/surf/xml/surfxml_sax_cb.cpp +++ b/src/surf/xml/surfxml_sax_cb.cpp @@ -6,6 +6,8 @@ #include "simgrid/kernel/routing/NetPoint.hpp" #include "simgrid/s4u/Engine.hpp" #include "simgrid/sg_config.hpp" +#include "src/kernel/resource/profile/FutureEvtSet.hpp" +#include "src/kernel/resource/profile/Profile.hpp" #include "src/surf/network_interface.hpp" #include "src/surf/surf_interface.hpp" #include "src/surf/xml/platf_private.hpp" @@ -53,7 +55,7 @@ void surf_parse_error(const std::string& msg) void surf_parse_assert_netpoint(const std::string& hostname, const std::string& pre, const std::string& post) { - if (sg_netpoint_by_name_or_null(hostname.c_str()) != nullptr) // found + if (simgrid::s4u::Engine::get_instance()->netpoint_by_name_or_null(hostname) != nullptr) // found return; std::string msg = pre + hostname + post + " Existing netpoints: \n"; @@ -86,9 +88,8 @@ double surf_parse_get_double(const std::string& s) { try { return std::stod(s); - } catch (std::invalid_argument& ia) { + } catch (const std::invalid_argument&) { surf_parse_error(s + " is not a double"); - return -1; } } @@ -96,9 +97,8 @@ int surf_parse_get_int(const std::string& s) { try { return std::stoi(s); - } catch (std::invalid_argument& ia) { + } catch (const std::invalid_argument&) { surf_parse_error(s + " is not a double"); - return -1; } } @@ -127,7 +127,6 @@ std::vector* explodesRadical(const std::string& radicals) break; default: surf_parse_error(std::string("Malformed radical: ") + group); - break; } for (int i = start; i <= end; i++) exploded->push_back(i); @@ -174,23 +173,23 @@ unit_scale::unit_scale(std::initializer_list surf_parse_get_bandwidths(const char* string, const char* entity_kind, const std::string& name) +{ + static const unit_scale units{std::make_tuple("bps", 0.125, 2, true), std::make_tuple("bps", 0.125, 10, true), + std::make_tuple("Bps", 1.0, 2, true), std::make_tuple("Bps", 1.0, 10, true)}; + + std::vector bandwidths; + std::vector tokens; + boost::split(tokens, string, boost::is_any_of(";")); + for (auto token : tokens) { + bandwidths.push_back(surf_parse_get_value_with_unit( + token.c_str(), units, entity_kind, name, + "Append 'Bps' to get bytes per second (or 'bps' for bits but 1Bps = 8bps)", "Bps")); + } + + return bandwidths; +} + double surf_parse_get_speed(const char* string, const char* entity_kind, const std::string& name) { static const unit_scale units{std::make_tuple("f", 1.0, 10, true), std::make_tuple("flops", 1.0, 10, false)}; @@ -499,7 +515,6 @@ void ETag_surfxml_cluster(){ break; default: surf_parse_error(std::string("Invalid cluster topology for cluster ") + cluster.id); - break; } cluster.topo_parameters = A_surfxml_cluster_topo___parameters; cluster.router_id = A_surfxml_cluster_router___id; @@ -520,7 +535,6 @@ void ETag_surfxml_cluster(){ break; default: surf_parse_error(std::string("Invalid cluster sharing policy for cluster ") + cluster.id); - break; } switch (AX_surfxml_cluster_bb___sharing___policy) { case A_surfxml_cluster_bb___sharing___policy_FATPIPE: @@ -531,7 +545,6 @@ void ETag_surfxml_cluster(){ break; default: surf_parse_error(std::string("Invalid bb sharing policy in cluster ") + cluster.id); - break; } sg_platf_new_cluster(&cluster); @@ -593,7 +606,7 @@ void ETag_surfxml_link(){ current_property_set = nullptr; link.id = std::string(A_surfxml_link_id); - link.bandwidth = surf_parse_get_bandwidth(A_surfxml_link_bandwidth, "bandwidth of link", link.id.c_str()); + link.bandwidths = surf_parse_get_bandwidths(A_surfxml_link_bandwidth, "bandwidth of link", link.id.c_str()); link.bandwidth_trace = A_surfxml_link_bandwidth___file[0] ? simgrid::kernel::profile::Profile::from_file(A_surfxml_link_bandwidth___file) : nullptr; @@ -619,9 +632,11 @@ void ETag_surfxml_link(){ case A_surfxml_link_sharing___policy_SPLITDUPLEX: link.policy = simgrid::s4u::Link::SharingPolicy::SPLITDUPLEX; break; + case A_surfxml_link_sharing___policy_WIFI: + link.policy = simgrid::s4u::Link::SharingPolicy::WIFI; + break; default: surf_parse_error(std::string("Invalid sharing policy in link ") + link.id); - break; } sg_platf_new_link(&link); @@ -643,7 +658,6 @@ void STag_surfxml_link___ctn() break; default: surf_parse_error(std::string("Invalid direction for link ") + A_surfxml_link___ctn_id); - break; } const char* dirname = ""; @@ -666,7 +680,8 @@ void ETag_surfxml_backbone(){ link.properties = nullptr; link.id = std::string(A_surfxml_backbone_id); - link.bandwidth = surf_parse_get_bandwidth(A_surfxml_backbone_bandwidth, "bandwidth of backbone", link.id.c_str()); + link.bandwidths.push_back( + surf_parse_get_bandwidth(A_surfxml_backbone_bandwidth, "bandwidth of backbone", link.id.c_str())); link.latency = surf_parse_get_time(A_surfxml_backbone_latency, "latency of backbone", link.id.c_str()); link.policy = simgrid::s4u::Link::SharingPolicy::SHARED; @@ -836,7 +851,6 @@ void STag_surfxml_trace___connect() break; default: surf_parse_error("Invalid trace kind"); - break; } sg_platf_trace_connect(&trace_connect); } @@ -950,7 +964,6 @@ void ETag_surfxml_actor() break; default: surf_parse_error("Invalid on failure behavior"); - break; } sg_platf_new_actor(&actor);