Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Simplified methods to add routes
authorBruno Donassolo <bruno.donassolo@inria.fr>
Fri, 2 Apr 2021 15:21:23 +0000 (17:21 +0200)
committerBruno Donassolo <bruno.donassolo@inria.fr>
Fri, 2 Apr 2021 16:50:39 +0000 (18:50 +0200)
Avoid using LinkImpl in s4u interface.
Add method that raises and exception if netpoint isn't found

Allows the implementation of a platform like small_platform.xml without
using "internal" structures.

include/simgrid/s4u/Engine.hpp
include/simgrid/s4u/NetZone.hpp
src/s4u/s4u_Engine.cpp
src/s4u/s4u_Netzone.cpp

index 9013733..a608f2e 100644 (file)
@@ -125,6 +125,13 @@ public:
 
   std::vector<kernel::routing::NetPoint*> get_all_netpoints() const;
   kernel::routing::NetPoint* netpoint_by_name_or_null(const std::string& name) const;
+  /**
+   * @brief Get netpoint by its name
+   *
+   * @param name Netpoint name
+   * @throw std::invalid_argument if netpoint doesn't exist
+   */
+  kernel::routing::NetPoint* netpoint_by_name(const std::string& name) const;
 
   NetZone* get_netzone_root() const;
   void set_netzone_root(const NetZone* netzone);
index 1fc5dc8..2e23d7c 100644 (file)
@@ -63,6 +63,36 @@ public:
 
   /* Add content to the netzone, at parsing time. It should be sealed afterward. */
   int add_component(kernel::routing::NetPoint* elm); /* A host, a router or a netzone, whatever */
+
+  /**
+   * @brief Add a route between 2 netpoints
+   *
+   * Create a regular route between 2 netpoints. A netpoint can be a host
+   * or a router.
+   *
+   * @param src Source netpoint
+   * @param dst Destination netpoint
+   * @param link_list List of links used in this communication
+   * @param symmetrical Bi-directional communication
+   */
+  void add_regular_route(kernel::routing::NetPoint* src, kernel::routing::NetPoint* dst,
+                         const std::vector<Link*>& link_list, bool symmetrical = true);
+  /**
+   * @brief Add a route between 2 netzones
+   *
+   * Create a route between 2 netzones, connecting 2 gateways.
+   *
+   * @param src Source netzone's netpoint
+   * @param dst Destination netzone' netpoint
+   * @param src_gw Netpoint of the gateway in the source netzone
+   * @param dst_gw Netpoint of the gateway in the destination netzone
+   * @param link_list List of links used in this communication
+   * @param symmetrical Bi-directional communication
+   */
+  void add_netzone_route(kernel::routing::NetPoint* src, kernel::routing::NetPoint* dst,
+                         kernel::routing::NetPoint* gw_src, kernel::routing::NetPoint* gw_dst,
+                         const std::vector<Link*>& link_list, bool symmetrical = true);
+
   void add_route(kernel::routing::NetPoint* src, kernel::routing::NetPoint* dst, kernel::routing::NetPoint* gw_src,
                  kernel::routing::NetPoint* gw_dst, std::vector<kernel::resource::LinkImpl*>& link_list,
                  bool symmetrical);
@@ -106,6 +136,10 @@ public:
   /** @brief Create a link (string version) */
   s4u::Link* create_link(const std::string& name, const std::vector<std::string>& bandwidths,
                          Link::SharingPolicy policy = Link::SharingPolicy::SHARED);
+
+private:
+  /** @brief Auxiliary function to get list of LinkImpl */
+  static std::vector<kernel::resource::LinkImpl*> get_link_list_impl(const std::vector<Link*> link_list);
 };
 
 // External constructors so that the types (and the types of their content) remain hidden
index e904859..2d94c66 100644 (file)
@@ -346,6 +346,15 @@ kernel::routing::NetPoint* Engine::netpoint_by_name_or_null(const std::string& n
   return netp == pimpl->netpoints_.end() ? nullptr : netp->second;
 }
 
+kernel::routing::NetPoint* Engine::netpoint_by_name(const std::string& name) const
+{
+  auto netp = netpoint_by_name_or_null(name);
+  if (netp == nullptr) {
+    throw std::invalid_argument(std::string("Netpoint not found: %s") + name);
+  }
+  return netp;
+}
+
 std::vector<kernel::routing::NetPoint*> Engine::get_all_netpoints() const
 {
   std::vector<kernel::routing::NetPoint*> res;
index 2de7941..0866435 100644 (file)
@@ -99,6 +99,30 @@ int NetZone::add_component(kernel::routing::NetPoint* elm)
   return pimpl_->add_component(elm);
 }
 
+std::vector<kernel::resource::LinkImpl*> NetZone::get_link_list_impl(const std::vector<Link*> link_list)
+{
+  std::vector<kernel::resource::LinkImpl*> links;
+  for (const auto& link : link_list) {
+    links.push_back(link->get_impl());
+  }
+  return links;
+}
+
+void NetZone::add_regular_route(kernel::routing::NetPoint* src, kernel::routing::NetPoint* dst,
+                                const std::vector<Link*>& link_list, bool symmetrical)
+{
+  auto links = NetZone::get_link_list_impl(link_list);
+  add_route(src, dst, nullptr, nullptr, links, symmetrical);
+}
+
+void NetZone::add_netzone_route(kernel::routing::NetPoint* src, kernel::routing::NetPoint* dst,
+                                kernel::routing::NetPoint* gw_src, kernel::routing::NetPoint* gw_dst,
+                                const std::vector<Link*>& link_list, bool symmetrical)
+{
+  auto links = NetZone::get_link_list_impl(link_list);
+  add_route(src, dst, gw_src, gw_dst, links, symmetrical);
+}
+
 void NetZone::add_route(kernel::routing::NetPoint* src, kernel::routing::NetPoint* dst,
                         kernel::routing::NetPoint* gw_src, kernel::routing::NetPoint* gw_dst,
                         std::vector<kernel::resource::LinkImpl*>& link_list, bool symmetrical)