/* 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 "xbt/log.h"
-
+#include "src/kernel/routing/NetZoneImpl.hpp"
+#include "simgrid/s4u/engine.hpp"
#include "simgrid/s4u/host.hpp"
#include "src/kernel/routing/NetCard.hpp"
-#include "src/kernel/routing/NetZoneImpl.hpp"
#include "src/surf/cpu_interface.hpp"
#include "src/surf/network_interface.hpp"
+#include "xbt/log.h"
+
XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(surf_route);
namespace simgrid {
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 AS called '%s'.", name);
+ xbt_assert(nullptr == simgrid::s4u::Engine::instance()->netcardByNameOrNull(name),
+ "Refusing to create a second NetZone called '%s'.", name);
- netcard_ = new NetCard(name, NetCard::Type::As, static_cast<NetZoneImpl*>(father));
- xbt_lib_set(as_router_lib, name, ROUTING_ASR_LEVEL, static_cast<void*>(netcard_));
- XBT_DEBUG("AS '%s' created with the id '%d'", name, netcard_->id());
+ netcard_ = new NetCard(name, NetCard::Type::NetZone, static_cast<NetZoneImpl*>(father));
+ XBT_DEBUG("NetZone '%s' created with the id '%d'", name, netcard_->id());
}
NetZoneImpl::~NetZoneImpl()
{
for (auto& kv : bypassRoutes_)
delete kv.second;
+
+ simgrid::s4u::Engine::instance()->netcardUnregister(netcard_);
}
simgrid::s4u::Host* NetZoneImpl::createHost(const char* name, std::vector<double>* speedPerPstate, int coreAmount)
* / \
* src_ancestor dst_ancestor <- must be different in the recursive case
* | |
- * ... ... <-- possibly long pathes (one hop or more)
+ * ... ... <-- possibly long paths (one hop or more)
* | |
* src dst
* @endverbatim
NetZoneImpl** dst_ancestor)
{
/* Deal with the easy base case */
- if (src->containingAS() == dst->containingAS()) {
- *common_ancestor = src->containingAS();
+ if (src->netzone() == dst->netzone()) {
+ *common_ancestor = src->netzone();
*src_ancestor = *common_ancestor;
*dst_ancestor = *common_ancestor;
return;
/* engage the full recursive search */
/* (1) find the path to root of src and dst*/
- NetZoneImpl* src_as = src->containingAS();
- NetZoneImpl* dst_as = dst->containingAS();
+ NetZoneImpl* src_as = src->netzone();
+ NetZoneImpl* dst_as = dst->netzone();
xbt_assert(src_as, "Host %s must be in an AS", src->cname());
xbt_assert(dst_as, "Host %s must be in an AS", dst->cname());
/* (2) find the path to the root routing component */
std::vector<NetZoneImpl*> path_src;
- NetZoneImpl* current = src->containingAS();
+ NetZoneImpl* current = src->netzone();
while (current != nullptr) {
path_src.push_back(current);
current = static_cast<NetZoneImpl*>(current->father());
}
std::vector<NetZoneImpl*> path_dst;
- current = dst->containingAS();
+ current = dst->netzone();
while (current != nullptr) {
path_dst.push_back(current);
current = static_cast<NetZoneImpl*>(current->father());
*
* This works because all SimGrid platform have a unique root element (that is the last element of both paths).
*/
- NetZoneImpl* father = nullptr; // the AS we dropped on the previous loop iteration
+ NetZoneImpl* father = nullptr; // the netzone we dropped on the previous loop iteration
while (path_src.size() > 1 && path_dst.size() > 1 &&
path_src.at(path_src.size() - 1) == path_dst.at(path_dst.size() - 1)) {
father = path_src.at(path_src.size() - 1);
return false;
/* Base case, no recursion is needed */
- if (dst->containingAS() == this && src->containingAS() == this) {
+ if (dst->netzone() == this && src->netzone() == this) {
if (bypassRoutes_.find({src, dst}) != bypassRoutes_.end()) {
BypassRoute* bypassedRoute = bypassRoutes_.at({src, dst});
for (surf::Link* link : bypassedRoute->links) {
/* (1) find the path to the root routing component */
std::vector<NetZoneImpl*> path_src;
- NetZone* current = src->containingAS();
+ NetZone* current = src->netzone();
while (current != nullptr) {
path_src.push_back(static_cast<NetZoneImpl*>(current));
current = current->father_;
}
std::vector<NetZoneImpl*> path_dst;
- current = dst->containingAS();
+ current = dst->netzone();
while (current != nullptr) {
path_dst.push_back(static_cast<NetZoneImpl*>(current));
current = current->father_;