From ccf4decc97e1f1a947231167a1d68394bea2c843 Mon Sep 17 00:00:00 2001 From: Fred Suter Date: Thu, 21 Sep 2023 13:06:00 -0400 Subject: [PATCH] simpler way to define routes between zones (and between host and anything) --- include/simgrid/s4u/NetZone.hpp | 18 ++++++++++++++++++ src/s4u/s4u_Netzone.cpp | 32 +++++++++++++++++++++++++++++--- 2 files changed, 47 insertions(+), 3 deletions(-) diff --git a/include/simgrid/s4u/NetZone.hpp b/include/simgrid/s4u/NetZone.hpp index 967f348ce6..00430d2811 100644 --- a/include/simgrid/s4u/NetZone.hpp +++ b/include/simgrid/s4u/NetZone.hpp @@ -70,6 +70,24 @@ public: /* Add content to the netzone, at parsing time. It should be sealed afterward. */ unsigned long add_component(kernel::routing::NetPoint* elm); /* A host, a router or a netzone, whatever */ + +/** + * @brief Add a route between 2 netzones, and same in other direction + * @param src Source netzone + * @param dst Destination netzone + * @param link_list List of links + */ + void add_route(NetZone* src, NetZone* dst, const std::vector& links); + +/** + * @brief Add a route between 2 netzones, and same in other direction + * @param src Source netzone + * @param dst Destination netzone + * @param link_list List of links and their direction used in this communication + * @param symmetrical Bi-directional communication + */ + void add_route(NetZone* src, NetZone* dst, const std::vector& link_list, bool symmetrical = true); + /** * @brief Add a route between 2 netpoints * diff --git a/src/s4u/s4u_Netzone.cpp b/src/s4u/s4u_Netzone.cpp index c6008494a3..c2772192bf 100644 --- a/src/s4u/s4u_Netzone.cpp +++ b/src/s4u/s4u_Netzone.cpp @@ -85,12 +85,33 @@ unsigned long NetZone::add_component(kernel::routing::NetPoint* elm) return pimpl_->add_component(elm); } +void NetZone::add_route(NetZone* src, NetZone* dst, const std::vector& links) +{ + std::vector links_direct; + std::vector links_reverse; + for (auto* l : links) { + links_direct.emplace_back(LinkInRoute(l, LinkInRoute::Direction::UP)); + links_reverse.emplace_back(LinkInRoute(l, LinkInRoute::Direction::DOWN)); + } + pimpl_->add_route(src->get_netpoint(), dst->get_netpoint(), src->get_gateway(), dst->get_gateway(), links_direct, + false); + pimpl_->add_route(dst->get_netpoint(), src->get_netpoint(), dst->get_gateway(), src->get_gateway(), links_reverse, + false); +} + +void NetZone::add_route(NetZone* src, NetZone* dst, const std::vector& link_list, bool symmetrical) +{ + pimpl_->add_route(src->get_netpoint(), dst->get_netpoint(), src->get_gateway(), dst->get_gateway(), link_list, + symmetrical); +} + void NetZone::add_route(kernel::routing::NetPoint* src, kernel::routing::NetPoint* dst, kernel::routing::NetPoint* gw_src, kernel::routing::NetPoint* gw_dst, const std::vector& link_list, bool symmetrical) { pimpl_->add_route(src, dst, gw_src, gw_dst, link_list, symmetrical); } + void NetZone::add_route(kernel::routing::NetPoint* src, kernel::routing::NetPoint* dst, kernel::routing::NetPoint* gw_src, kernel::routing::NetPoint* gw_dst, const std::vector& links) @@ -107,8 +128,11 @@ void NetZone::add_route(kernel::routing::NetPoint* src, kernel::routing::NetPoin void NetZone::add_route(const Host* src, const Host* dst, const std::vector& link_list, bool symmetrical) { - pimpl_->add_route(src->get_netpoint(), dst->get_netpoint(), nullptr, nullptr, link_list, symmetrical); + pimpl_->add_route(src ? src->get_netpoint(): nullptr, dst ? dst->get_netpoint(): nullptr, nullptr, nullptr, + link_list, symmetrical); + } + void NetZone::add_route(const Host* src, const Host* dst, const std::vector& links) { std::vector links_direct; @@ -117,8 +141,10 @@ void NetZone::add_route(const Host* src, const Host* dst, const std::vectoradd_route(src->get_netpoint(), dst->get_netpoint(), nullptr, nullptr, links_direct, false); - pimpl_->add_route(dst->get_netpoint(), src->get_netpoint(), nullptr, nullptr, links_reverse, false); + pimpl_->add_route(src ? src->get_netpoint(): nullptr, dst ? dst->get_netpoint(): nullptr, nullptr, nullptr, + links_direct, false); + pimpl_->add_route(dst ? dst->get_netpoint(): nullptr, src ? src->get_netpoint(): nullptr, nullptr, nullptr, + links_reverse, false); } void NetZone::add_bypass_route(kernel::routing::NetPoint* src, kernel::routing::NetPoint* dst, -- 2.20.1