-/* Copyright (c) 2006-2021. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2006-2023. The SimGrid Team. All rights reserved. */
/* 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. */
* @param root Root netzone
* @param name Cabinet name
* @param radicals IDs of nodes inside the cabinet
- * @return netzone,router the created netzone and its router
+ * @return netzone the created netzone
*/
-static std::pair<sg4::NetZone*, simgrid::kernel::routing::NetPoint*>
-create_cabinet(sg4::NetZone* root, const std::string& name, const std::vector<int>& radicals)
+static sg4::NetZone*
+create_cabinet(const sg4::NetZone* root, const std::string& name, const std::vector<int>& radicals)
{
- auto* cluster = sg4::create_star_zone(name);
- std::string prefix = "griffon-", suffix = ".nancy.grid5000.fr";
- cluster->set_parent(root);
+ auto* cluster = sg4::create_star_zone(name)->set_parent(root);
+ std::string prefix = "griffon-";
+ std::string suffix = ".nancy.grid5000.fr";
/* create the backbone link */
- sg4::Link* l_bb = cluster->create_link("backbone-" + name, "1.25GBps")->seal();
+ const sg4::Link* l_bb = cluster->create_link("backbone-" + name, "1.25GBps");
+ sg4::LinkInRoute backbone(l_bb);
/* create all hosts and connect them to outside world */
for (const auto& id : radicals) {
std::string hostname = prefix + std::to_string(id) + suffix;
/* create host */
- sg4::Host* host = cluster->create_host(hostname, "286.087kf");
+ const sg4::Host* host = cluster->create_host(hostname, "286.087kf");
/* create UP/DOWN link */
- sg4::Link* l_up = cluster->create_link(hostname + "_up", "125MBps")->set_latency("24us")->seal();
- sg4::Link* l_down = cluster->create_link(hostname + "_down", "125MBps")->set_latency("24us")->seal();
+ const sg4::Link* link = cluster->create_split_duplex_link(hostname, "125MBps")->set_latency("24us");
- /* add link UP and backbone for communications from the host */
- cluster->add_route(host->get_netpoint(), nullptr, nullptr, nullptr, std::vector<sg4::Link*>{l_up, l_bb}, false);
- /* add backbone and link DOWN for communications to the host */
- cluster->add_route(nullptr, host->get_netpoint(), nullptr, nullptr, std::vector<sg4::Link*>{l_bb, l_down}, false);
+ /* add link and backbone for communications from the host */
+ cluster->add_route(host, nullptr, {{link, sg4::LinkInRoute::Direction::UP}, backbone}, true);
}
- /* create router */
- auto* router = cluster->create_router(prefix + name + "-router" + suffix);
+ /* create gateway */
+ cluster->set_gateway(cluster->create_router(prefix + name + "-router" + suffix));
cluster->seal();
- return std::make_pair(cluster, router);
+ return cluster;
}
/** @brief Programmatic version of griffon.xml */
extern "C" void load_platform(const sg4::Engine& e);
-void load_platform(const sg4::Engine& e)
+void load_platform(const sg4::Engine& /*e*/)
{
/**
* C++ version of griffon.xml
auto* root = sg4::create_star_zone("AS_griffon");
sg4::NetZone* cab_zone;
- simgrid::kernel::routing::NetPoint* router;
/* create top link */
- sg4::Link* link = root->create_link("backbone", "1.25GBps")->set_latency("24us")->seal();
+ const sg4::Link* l_bb = root->create_link("backbone", "1.25GBps")->set_latency("24us")->seal();
+ sg4::LinkInRoute backbone{l_bb};
/* create cabinet1 */
std::vector<int> rad(32);
std::iota(rad.begin(), rad.end(), 1); // 1-29,58,59,60
- rad[rad.size() - 1] = 60;
- rad[rad.size() - 2] = 59;
- rad[rad.size() - 3] = 58;
- std::tie(cab_zone, router) = create_cabinet(root, "cabinet1", rad);
- root->add_route(cab_zone->get_netpoint(), nullptr, router, nullptr, {link});
+ rad[rad.size() - 1] = 60;
+ rad[rad.size() - 2] = 59;
+ rad[rad.size() - 3] = 58;
+ cab_zone = create_cabinet(root, "cabinet1", rad);
+ root->add_route(cab_zone, nullptr, {backbone});
/* create cabinet2 */
rad.resize(28);
std::iota(rad.begin(), rad.end(), 30); // 30-57
- std::tie(cab_zone, router) = create_cabinet(root, "cabinet2", rad);
- root->add_route(cab_zone->get_netpoint(), nullptr, router, nullptr, {link});
+ cab_zone = create_cabinet(root, "cabinet2", rad);
+ root->add_route(cab_zone, nullptr, {backbone});
/* create cabinet3 */
rad.resize(32);
std::iota(rad.begin(), rad.end(), 61); // 61-92
- std::tie(cab_zone, router) = create_cabinet(root, "cabinet3", rad);
- root->add_route(cab_zone->get_netpoint(), nullptr, router, nullptr, {link});
+ cab_zone = create_cabinet(root, "cabinet3", rad);
+ root->add_route(cab_zone, nullptr, {backbone});
root->seal();
-}
\ No newline at end of file
+}