+ if (current_routing->p_hierarchy == SURF_ROUTING_NULL)
+ current_routing->p_hierarchy = SURF_ROUTING_BASE;
+
+ simgrid::surf::NetCard *netcard =
+ new simgrid::surf::NetCardImpl(xbt_strdup(host->id), -1, SURF_NETWORK_ELEMENT_HOST, current_routing);
+
+ netcard->setId(current_routing->parsePU(netcard));
+ sg_host_t h = simgrid::s4u::Host::by_name_or_create(host->id);
+ h->pimpl_netcard = netcard;
+ simgrid::surf::netcardCreatedCallbacks(netcard);
+
+ if(mount_list){
+ xbt_lib_set(storage_lib, host->id, ROUTING_STORAGE_HOST_LEVEL, (void *) mount_list);
+ mount_list = NULL;
+ }
+
+ if (host->coord && strcmp(host->coord, "")) {
+ unsigned int cursor;
+ char*str;
+
+ if (!COORD_HOST_LEVEL)
+ xbt_die ("To use host coordinates, please add --cfg=network/coordinates:yes to your command line");
+ /* Pre-parse the host coordinates -- FIXME factorize with routers by overloading the routing->parse_PU function*/
+ xbt_dynar_t ctn_str = xbt_str_split_str(host->coord, " ");
+ xbt_dynar_t ctn = xbt_dynar_new(sizeof(double),NULL);
+ xbt_dynar_foreach(ctn_str,cursor, str) {
+ double val = xbt_str_parse_double(str, "Invalid coordinate: %s");
+ xbt_dynar_push(ctn,&val);
+ }
+ xbt_dynar_shrink(ctn, 0);
+ xbt_dynar_free(&ctn_str);
+ h->extension_set(COORD_HOST_LEVEL, (void *) ctn);
+ XBT_DEBUG("Having set host coordinates for '%s'",host->id);
+ }
+
+
+ simgrid::surf::Cpu *cpu = surf_cpu_model_pm->createCpu( h,
+ host->speed_peak,
+ host->pstate,
+ host->speed_scale, host->speed_trace,
+ host->core_amount,
+ host->initiallyOn, host->state_trace);
+ surf_host_model->createHost(host->id, netcard, cpu, host->properties)->attach(h);
+ simgrid::s4u::Host::onCreation(*h);