current_routing->hierarchy_ = simgrid::surf::AsImpl::RoutingMode::base;
simgrid::surf::NetCard *netcard =
- new simgrid::surf::NetCardImpl(host->id, SURF_NETWORK_ELEMENT_HOST, current_routing);
+ new simgrid::surf::NetCardImpl(host->id, simgrid::surf::NetCard::Type::Host, current_routing);
- netcard->setId(current_routing->addComponent(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);
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");
+ xbt_assert(COORD_HOST_LEVEL, "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);
"Refusing to create a router named '%s': this name already describes a node.", router->id);
simgrid::surf::NetCard *netcard =
- new simgrid::surf::NetCardImpl(router->id, SURF_NETWORK_ELEMENT_ROUTER, current_routing);
- netcard->setId(current_routing->addComponent(netcard));
+ new simgrid::surf::NetCardImpl(router->id, simgrid::surf::NetCard::Type::Router, current_routing);
xbt_lib_set(as_router_lib, router->id, ROUTING_ASR_LEVEL, (void *) netcard);
XBT_DEBUG("Having set name '%s' id '%d'", router->id, netcard->id());
- simgrid::surf::netcardCreatedCallbacks(netcard);
if (router->coord && strcmp(router->coord, "")) {
unsigned int cursor;
}
void sg_platf_new_link(sg_platf_link_cbarg_t link){
+ std::vector<char*> names;
+
+ if (link->policy == SURF_LINK_FULLDUPLEX) {
+ names.push_back(bprintf("%s_UP", link->id));
+ names.push_back(bprintf("%s_DOWN", link->id));
+ } else {
+ names.push_back(xbt_strdup(link->id));
+ }
+ for (auto link_name : names) {
+ Link *l = surf_network_model->createLink(link_name, link->bandwidth, link->latency, link->policy, link->properties);
+
+ if (link->latency_trace)
+ l->setLatencyTrace(link->latency_trace);
+ if (link->bandwidth_trace)
+ l->setBandwidthTrace(link->bandwidth_trace);
+ if (link->state_trace)
+ l->setStateTrace(link->state_trace);
+
+ xbt_free(link_name);
+ }
+
simgrid::surf::on_link(link);
}
info_loop.link_up = Link::byName(tmp_link);
info_loop.link_down = info_loop.link_up;
free(tmp_link);
- xbt_dynar_set(current_routing->upDownLinks, rankId*(static_cast<AsCluster*>(current_routing))->nb_links_per_node_, &info_loop);
+ auto as_cluster = static_cast<AsCluster*>(current_routing);
+ xbt_dynar_set(as_cluster->privateLinks_, rankId*as_cluster->nb_links_per_node_, &info_loop);
}
//add a limiter link (shared link to account for maximal bandwidth of the node)
info_lim.link_down = info_lim.link_up;
free(tmp_link);
auto as_cluster = static_cast<AsCluster*>(current_routing);
- xbt_dynar_set(current_routing->upDownLinks, rankId*(as_cluster)->nb_links_per_node_ + as_cluster->has_loopback_ , &info_lim);
+ xbt_dynar_set(as_cluster->privateLinks_, rankId*(as_cluster)->nb_links_per_node_ + as_cluster->has_loopback_ , &info_lim);
}
ROUTING_STORAGE_TYPE_LEVEL,
(void *) stype);
}
-void sg_platf_new_mstorage(sg_platf_mstorage_cbarg_t mstorage)
-{
- THROW_UNIMPLEMENTED;
-}
static void mount_free(void *p)
{
}
void sg_platf_new_mount(sg_platf_mount_cbarg_t mount){
- // Verification of an existing storage
xbt_assert(xbt_lib_get_or_null(storage_lib, mount->storageId, ROUTING_STORAGE_LEVEL),
"Cannot mount non-existent disk \"%s\"", mount->storageId);
using simgrid::surf::NetCard;
using simgrid::surf::AsCluster;
- char *host_id = NULL;
- char *link_id = NULL;
- char *router_id = NULL;
+ char *host_id = bprintf("peer_%s", peer->id);
+ char *router_id = bprintf("router_%s", peer->id);
XBT_DEBUG(" ");
- host_id = bprintf("peer_%s", peer->id);
- link_id = bprintf("link_%s", peer->id);
- router_id = bprintf("router_%s", peer->id);
XBT_DEBUG("<AS id=\"%s\"\trouting=\"Cluster\">", peer->id);
s_sg_platf_AS_cbarg_t AS = SG_PLATF_AS_INITIALIZER;
host.speed_per_pstate = xbt_dynar_new(sizeof(double), NULL);
xbt_dynar_push(host.speed_per_pstate,&peer->speed);
host.pstate = 0;
- //host.power_peak = peer->power;
host.speed_trace = peer->availability_trace;
host.state_trace = peer->state_trace;
host.core_amount = 1;
link.policy = SURF_LINK_SHARED;
link.latency = peer->lat;
- char* link_up = bprintf("%s_UP",link_id);
+ char* link_up = bprintf("link_%s_UP",peer->id);
XBT_DEBUG("<link\tid=\"%s\"\tbw=\"%f\"\tlat=\"%f\"/>", link_up, peer->bw_out, peer->lat);
link.id = link_up;
link.bandwidth = peer->bw_out;
sg_platf_new_link(&link);
- char* link_down = bprintf("%s_DOWN",link_id);
+ char* link_down = bprintf("link_%s_DOWN",peer->id);
XBT_DEBUG("<link\tid=\"%s\"\tbw=\"%f\"\tlat=\"%f\"/>", link_down, peer->bw_in, peer->lat);
link.id = link_down;
link.bandwidth = peer->bw_in;
host_link.link_up = link_up;
host_link.link_down = link_down;
sg_platf_new_hostlink(&host_link);
+ free(link_up);
+ free(link_down);
XBT_DEBUG("<router id=\"%s\"/>", router_id);
s_sg_platf_router_cbarg_t router = SG_PLATF_ROUTER_INITIALIZER;
sg_platf_new_AS_end();
XBT_DEBUG(" ");
- //xbt_dynar_free(&tab_elements_num);
free(router_id);
free(host_id);
- free(link_id);
- free(link_up);
- free(link_down);
}
void sg_platf_begin() { /* Do nothing: just for symmetry of user code */ }
}
/* make a new routing component */
- simgrid::surf::NetCard *netcard = new simgrid::surf::NetCardImpl(new_as->name(), SURF_NETWORK_ELEMENT_AS, current_routing);
+ simgrid::surf::NetCard *netcard = new simgrid::surf::NetCardImpl(new_as->name(), simgrid::surf::NetCard::Type::As, current_routing);
- if (current_routing == NULL && routing_platf->root_ == NULL) {
- /* it is the first one */
+ if (current_routing == NULL && routing_platf->root_ == NULL) { /* it is the first one */
routing_platf->root_ = new_as;
- netcard->setId(-1);
} else if (current_routing != NULL && routing_platf->root_ != NULL) {
xbt_assert(!xbt_dict_get_or_null(current_routing->children(), AS->id),
current_routing->hierarchy_ = simgrid::surf::AsImpl::RoutingMode::recursive;
/* add to the sons dictionary */
xbt_dict_set(current_routing->children(), AS->id, (void *) new_as, NULL);
- /* add to the father element list */
- netcard->setId(current_routing->addComponent(netcard));
} else {
THROWF(arg_error, 0, "All defined components must belong to a AS");
}
current_routing = new_as;
current_routing->netcard_ = netcard;
- simgrid::surf::netcardCreatedCallbacks(netcard);
simgrid::surf::asCreatedCallbacks(new_as);
if (TRACE_is_enabled())
sg_instr_AS_begin(AS);
}
/** @brief Add a link connecting an host to the rest of its AS (which must be cluster or vivaldi) */
-void sg_platf_new_hostlink(sg_platf_host_link_cbarg_t netcard_arg)
+void sg_platf_new_hostlink(sg_platf_host_link_cbarg_t hostlink)
{
- simgrid::surf::NetCard *netcard = sg_host_by_name(netcard_arg->id)->pimpl_netcard;
- xbt_assert(netcard, "Host '%s' not found!", netcard_arg->id);
- xbt_assert(dynamic_cast<simgrid::surf::AsCluster*>(current_routing) ||
- dynamic_cast<simgrid::surf::AsVivaldi*>(current_routing),
- "Only hosts from Cluster and Vivaldi ASes can get a host_link.");
+ simgrid::surf::NetCard *netcard = sg_host_by_name(hostlink->id)->pimpl_netcard;
+ xbt_assert(netcard, "Host '%s' not found!", hostlink->id);
+ xbt_assert(dynamic_cast<simgrid::surf::AsCluster*>(current_routing),
+ "Only hosts from Cluster and Vivaldi ASes can get an host_link.");
s_surf_parsing_link_up_down_t link_up_down;
- link_up_down.link_up = Link::byName(netcard_arg->link_up);
- link_up_down.link_down = Link::byName(netcard_arg->link_down);
+ link_up_down.link_up = Link::byName(hostlink->link_up);
+ link_up_down.link_down = Link::byName(hostlink->link_down);
- xbt_assert(link_up_down.link_up, "Link '%s' not found!",netcard_arg->link_up);
- xbt_assert(link_up_down.link_down, "Link '%s' not found!",netcard_arg->link_down);
+ xbt_assert(link_up_down.link_up, "Link '%s' not found!",hostlink->link_up);
+ xbt_assert(link_up_down.link_down, "Link '%s' not found!",hostlink->link_down);
// If dynar is is greater than netcard id and if the host_link is already defined
- if((int)xbt_dynar_length(current_routing->upDownLinks) > netcard->id() &&
- xbt_dynar_get_as(current_routing->upDownLinks, netcard->id(), void*))
- surf_parse_error("Host_link for '%s' is already defined!",netcard_arg->id);
+ auto as_cluster = static_cast<simgrid::surf::AsCluster*>(current_routing);
+ if((int)xbt_dynar_length(as_cluster->privateLinks_) > netcard->id() &&
+ xbt_dynar_get_as(as_cluster->privateLinks_, netcard->id(), void*))
+ surf_parse_error("Host_link for '%s' is already defined!",hostlink->id);
XBT_DEBUG("Push Host_link for host '%s' to position %d", netcard->name(), netcard->id());
- xbt_dynar_set_as(current_routing->upDownLinks, netcard->id(), s_surf_parsing_link_up_down_t, link_up_down);
+ xbt_dynar_set_as(as_cluster->privateLinks_, netcard->id(), s_surf_parsing_link_up_down_t, link_up_down);
}