Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
simpler way to define routes between zones (and between host and anything)
authorFred Suter <suterf@ornl.gov>
Thu, 21 Sep 2023 17:06:00 +0000 (13:06 -0400)
committerFred Suter <suterf@ornl.gov>
Thu, 21 Sep 2023 17:06:00 +0000 (13:06 -0400)
include/simgrid/s4u/NetZone.hpp
src/s4u/s4u_Netzone.cpp

index 967f348..00430d2 100644 (file)
@@ -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<const Link*>& 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<LinkInRoute>& link_list, bool symmetrical = true);
+
   /**
    * @brief Add a route between 2 netpoints
    *
index c600849..c277219 100644 (file)
@@ -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<const Link*>& links)
+{
+  std::vector<LinkInRoute> links_direct;
+  std::vector<LinkInRoute> 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<LinkInRoute>& 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<LinkInRoute>& 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<const Link*>& 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<LinkInRoute>& 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<const Link*>& links)
 {
   std::vector<LinkInRoute> links_direct;
@@ -117,8 +141,10 @@ void NetZone::add_route(const Host* src, const Host* dst, const std::vector<cons
     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(), 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,