#include "simgrid/platf_interface.h" // platform creation API internal interface
#include "simgrid/sg_config.h"
+#include "storage_interface.hpp"
#include "surf/surfxml_parse_values.h"
+
/**
* @ingroup SURF_build_api
* @brief A library containing all known workstations
int SIMIX_STORAGE_LEVEL; //Simix storage level
int MSG_HOST_LEVEL; //Msg host level
int MSG_STORAGE_LEVEL; //Msg storage level
+int MSG_FILE_LEVEL; //Msg file level
int SD_HOST_LEVEL; //Simdag host level
int SD_STORAGE_LEVEL; //Simdag storage level
int COORD_HOST_LEVEL=0; //Coordinates level
// If dynar is is greater than edge id and if the host_link is already defined
if((int)xbt_dynar_length(current_routing->p_linkUpDownList) > info->getId() &&
xbt_dynar_get_as(current_routing->p_linkUpDownList, info->getId(), void*))
- xbt_die("Host_link for '%s' is already defined!",host->id);
+ surf_parse_error("Host_link for '%s' is already defined!",host->id);
XBT_DEBUG("Push Host_link for host '%s' to position %d", info->getName(), info->getId());
xbt_dynar_set_as(current_routing->p_linkUpDownList, info->getId(), s_surf_parsing_link_up_down_t, link_up_down);
xbt_strdup(trace_connect->element), NULL);
break;
default:
- xbt_die("Cannot connect trace %s to %s: kind of trace unknown",
+ surf_parse_error("Cannot connect trace %s to %s: kind of trace unknown",
trace_connect->trace, trace_connect->element);
break;
}
// }
// }
+static void check_disk_attachment()
+{
+ xbt_lib_cursor_t cursor;
+ char *key;
+ void **data;
+ RoutingEdgePtr host_elm;
+ xbt_lib_foreach(storage_lib, cursor, key, data) {
+ if(xbt_lib_get_level(xbt_lib_get_elm_or_null(storage_lib, key), SURF_STORAGE_LEVEL) != NULL) {
+ StoragePtr storage = static_cast<StoragePtr>(xbt_lib_get_level(xbt_lib_get_elm_or_null(storage_lib, key), SURF_STORAGE_LEVEL));
+ host_elm = sg_routing_edge_by_name_or_null(storage->p_attach);
+ if(!host_elm)
+ surf_parse_error("Enable to attach storage %s: host %s doesn't exist.", storage->getName(), storage->p_attach);
+ }
+ }
+}
+
void routing_register_callbacks()
{
sg_platf_host_add_cb(parse_S_host);
sg_platf_peer_add_cb(routing_parse_peer);
sg_platf_postparse_add_cb(routing_parse_postparse);
+ sg_platf_postparse_add_cb(check_disk_attachment);
/* we care about the ASes while parsing the platf. Incredible, isnt it? */
sg_platf_AS_end_add_cb(routing_AS_end);