XBT_PUBLIC_DATA(int) SIMIX_STORAGE_LEVEL; //Simix storage level
-XBT_PUBLIC_DATA(xbt_lib_t) as_router_lib;
-XBT_PUBLIC_DATA(int) ROUTING_ASR_LEVEL; //Routing level
+XBT_PUBLIC_DATA(xbt_dict_t) netcards_dict;
XBT_PUBLIC_DATA(xbt_lib_t) storage_lib;
XBT_PUBLIC_DATA(int) ROUTING_STORAGE_LEVEL; //Routing storage level
xbt_assert(newContainer->netcard, "Element '%s' not found",name);
break;
case INSTR_ROUTER:
- newContainer->netcard = static_cast<sg_netcard_t>(xbt_lib_get_or_null(as_router_lib,name,ROUTING_ASR_LEVEL));
+ newContainer->netcard = static_cast<sg_netcard_t>(xbt_dict_get_or_null(netcards_dict, name));
xbt_assert(newContainer->netcard, "Element '%s' not found",name);
break;
case INSTR_AS:
- newContainer->netcard = static_cast<sg_netcard_t>(xbt_lib_get_or_null(as_router_lib,name,ROUTING_ASR_LEVEL));
+ newContainer->netcard = static_cast<sg_netcard_t>(xbt_dict_get_or_null(netcards_dict, name));
xbt_assert(newContainer->netcard, "Element '%s' not found",name);
break;
default:
{
sg_host_t host = sg_host_by_name(name);
return (host != nullptr) ? host->pimpl_netcard
- : static_cast<simgrid::kernel::routing::NetCard*>(xbt_lib_get_or_null(as_router_lib, name, ROUTING_ASR_LEVEL));
+ : static_cast<simgrid::kernel::routing::NetCard*>(xbt_dict_get_or_null(netcards_dict, name));
}
NetZoneImpl::NetZoneImpl(NetZone* father, const char* name) : NetZone(father, name)
{
- xbt_assert(nullptr == xbt_lib_get_or_null(as_router_lib, name, ROUTING_ASR_LEVEL),
- "Refusing to create a second NetZone called '%s'.", name);
+ xbt_assert(nullptr == xbt_dict_get_or_null(netcards_dict, name), "Refusing to create a second NetZone called '%s'.",
+ name);
netcard_ = new NetCard(name, NetCard::Type::NetZone, static_cast<NetZoneImpl*>(father));
- xbt_lib_set(as_router_lib, name, ROUTING_ASR_LEVEL, static_cast<void*>(netcard_));
+ xbt_dict_set(netcards_dict, name, static_cast<void*>(netcard_), nullptr);
XBT_DEBUG("NetZone '%s' created with the id '%d'", name, netcard_->id());
}
NetZoneImpl::~NetZoneImpl()
if (src->isNetZone()) {
char* srcName = bprintf("router_%s", src->cname());
char* dstName = bprintf("router_%s", dst->cname());
- route->gw_src = (sg_netcard_t)xbt_lib_get_or_null(as_router_lib, srcName, ROUTING_ASR_LEVEL);
- route->gw_dst = (sg_netcard_t)xbt_lib_get_or_null(as_router_lib, dstName, ROUTING_ASR_LEVEL);
+ route->gw_src = (sg_netcard_t)xbt_dict_get_or_null(netcards_dict, srcName);
+ route->gw_dst = (sg_netcard_t)xbt_dict_get_or_null(netcards_dict, dstName);
xbt_free(srcName);
xbt_free(dstName);
}
if (current_routing->hierarchy_ == simgrid::kernel::routing::NetZoneImpl::RoutingMode::unset)
current_routing->hierarchy_ = simgrid::kernel::routing::NetZoneImpl::RoutingMode::base;
- xbt_assert(nullptr == xbt_lib_get_or_null(as_router_lib, router->id, ROUTING_ASR_LEVEL),
+ xbt_assert(nullptr == xbt_dict_get_or_null(netcards_dict, router->id),
"Refusing to create a router named '%s': this name already describes a node.", router->id);
simgrid::kernel::routing::NetCard* netcard =
new simgrid::kernel::routing::NetCard(router->id, simgrid::kernel::routing::NetCard::Type::Router, current_routing);
- xbt_lib_set(as_router_lib, router->id, ROUTING_ASR_LEVEL, netcard);
+ xbt_dict_set(netcards_dict, router->id, netcard, nullptr);
XBT_DEBUG("Router '%s' has the id %d", router->id, netcard->id());
if (router->coord && strcmp(router->coord, ""))
auto cluster = dynamic_cast<simgrid::kernel::routing::ClusterZone*>(current_routing);
if(cluster != nullptr)
- cluster->router_ = static_cast<simgrid::kernel::routing::NetCard*>(xbt_lib_get_or_null(as_router_lib, router->id, ROUTING_ASR_LEVEL));
+ cluster->router_ = static_cast<simgrid::kernel::routing::NetCard*>(xbt_dict_get_or_null(netcards_dict, router->id));
if (TRACE_is_enabled() && TRACE_needs_platform())
sg_instr_new_router(router);
if (!router.id || !strcmp(router.id, ""))
router.id = newid = bprintf("%s%s_router%s", cluster->prefix, cluster->id, cluster->suffix);
sg_platf_new_router(&router);
- current_as->router_ = (simgrid::kernel::routing::NetCard*) xbt_lib_get_or_null(as_router_lib, router.id, ROUTING_ASR_LEVEL);
+ current_as->router_ = (simgrid::kernel::routing::NetCard*)xbt_dict_get_or_null(netcards_dict, router.id);
free(newid);
//Make the backbone
XBT_DEBUG("Create all Libs");
USER_HOST_LEVEL = simgrid::s4u::Host::extension_create(nullptr);
- as_router_lib = xbt_lib_new();
+ netcards_dict = xbt_dict_new_homogeneous([](void* p) {
+ delete static_cast<simgrid::kernel::routing::NetCard*>(p);
+ });
storage_lib = xbt_lib_new();
storage_type_lib = xbt_lib_new();
file_lib = xbt_lib_new();
watched_hosts_lib = xbt_dict_new_homogeneous(nullptr);
- XBT_DEBUG("Add routing levels");
- ROUTING_ASR_LEVEL = xbt_lib_add_level(as_router_lib, [](void* p) {
- delete static_cast<simgrid::kernel::routing::NetCard*>(p);
- });
-
XBT_DEBUG("Add SURF levels");
SURF_STORAGE_LEVEL = xbt_lib_add_level(storage_lib,surf_storage_free);
xbt_dynar_free(&surf_path);
sg_host_exit();
- xbt_lib_free(&as_router_lib);
+ xbt_dict_free(&netcards_dict);
xbt_lib_free(&storage_lib);
sg_link_exit();
xbt_lib_free(&storage_type_lib);
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
-#include "simgrid/msg.h"
+#include "xbt/dict.h"
-xbt_lib_t as_router_lib;
-int ROUTING_ASR_LEVEL = -1; //Routing level
+xbt_dict_t netcards_dict;
}
// Routers
- xbt_lib_foreach(as_router_lib, cursor_src, key, value1) {
- value1 = (sg_netcard_t)xbt_lib_get_or_null(as_router_lib, key, ROUTING_ASR_LEVEL);
+ xbt_dict_foreach (netcards_dict, cursor_src, key, value1) {
if(value1->isRouter()) {
std::printf(" <router id=\"%s\"/>\n",key);
}
}
delete route;
}
- xbt_lib_foreach(as_router_lib, cursor_dst, dst, value2){ //to router
- value2 = (sg_netcard_t)xbt_lib_get_or_null(as_router_lib,dst,ROUTING_ASR_LEVEL);
+ xbt_dict_foreach (netcards_dict, cursor_dst, dst, value2) { // to router
if(value2->isRouter()){
std::printf(" <route src=\"%s\" dst=\"%s\">\n ", host1->cname(), dst);
std::vector<Link*> *route = new std::vector<Link*>();
}
}
- xbt_lib_foreach(as_router_lib, cursor_src, src, value1){ // Routes from router
- value1 = (sg_netcard_t)xbt_lib_get_or_null(as_router_lib,src,ROUTING_ASR_LEVEL);
+ xbt_dict_foreach (netcards_dict, cursor_src, src, value1) { // Routes from router
if (value1->isRouter()){
- xbt_lib_foreach(as_router_lib, cursor_dst, dst, value2){ //to router
- value2 = (sg_netcard_t)xbt_lib_get_or_null(as_router_lib,dst,ROUTING_ASR_LEVEL);
+ xbt_dict_foreach (netcards_dict, cursor_dst, dst, value2) { // to router
if(value2->isRouter()){
std::printf(" <route src=\"%s\" dst=\"%s\">\n ", src, dst);
std::vector<Link*> *route = new std::vector<Link*>();
SD_create_environment(argv[1]);
xbt_dynar_t hosts = sg_hosts_as_dynar();
- int size = sg_host_count() + xbt_lib_length(as_router_lib);
+ int size = sg_host_count() + xbt_dict_length(netcards_dict);
printf("Host number: %zu, link number: %d, elmts number: %d\n", sg_host_count(), sg_link_count(), size);
xbt_lib_cursor_t cursor = nullptr;
char* key;
void *ignored;
- xbt_lib_foreach(as_router_lib, cursor, key, ignored) {
+ xbt_dict_foreach (netcards_dict, cursor, key, ignored) {
simgrid::kernel::routing::NetCard * nc = sg_netcard_by_name_or_null(key);
printf(" - Seen: \"%s\". Type: %s\n", key, nc->isRouter() ? "router" : (nc->isNetZone() ? "netzone" : "host"));
}