#include <unordered_map>
+#include "simgrid/s4u/engine.hpp"
+#include "simgrid/s4u/host.hpp"
+#include "simgrid/s4u/storage.hpp"
#include "simgrid/simix.hpp"
-#include "src/surf/HostImpl.hpp"
-#include "xbt/log.h"
+#include "src/kernel/routing/NetPoint.hpp"
#include "src/msg/msg_private.h"
#include "src/simix/ActorImpl.hpp"
#include "src/simix/smx_private.h"
+#include "src/surf/HostImpl.hpp"
#include "src/surf/cpu_interface.hpp"
-#include "simgrid/s4u/host.hpp"
-#include "simgrid/s4u/storage.hpp"
+#include "xbt/log.h"
XBT_LOG_EXTERNAL_CATEGORY(surf_route);
Host::Host(const char* name)
: name_(name)
{
- xbt_assert(sg_host_by_name(name) == nullptr, "Refusing to create a second host named '%s'.", name);
+ xbt_assert(Host::by_name_or_null(name) == nullptr, "Refusing to create a second host named '%s'.", name);
host_list[name_] = this;
+ new simgrid::surf::HostImpl(this);
}
Host::~Host()
xbt_assert(currentlyDestroying_, "Please call h->destroy() instead of manually deleting it.");
delete pimpl_;
+ if (pimpl_netpoint != nullptr) // not removed yet by a children class
+ simgrid::s4u::Engine::instance()->netcardUnregister(pimpl_netpoint);
delete pimpl_cpu;
- delete pimpl_netcard;
delete mounts;
}
simgrid::simix::kernelImmediate([&]{
this->extension<simgrid::simix::Host>()->turnOn();
this->pimpl_cpu->turnOn();
+ onStateChange(*this);
});
}
}
void Host::turnOff() {
if (isOn()) {
- simgrid::simix::kernelImmediate(std::bind(SIMIX_host_off, this, SIMIX_process_self()));
+ smx_actor_t self = SIMIX_process_self();
+ simgrid::simix::kernelImmediate([&] {
+ SIMIX_host_off(this, self);
+ onStateChange(*this);
+ });
}
}
* \brief Find a route toward another host
*
* \param dest [IN] where to
- * \param route [OUT] where to store the list of links (must exist, cannot be nullptr).
+ * \param links [OUT] where to store the list of links (must exist, cannot be nullptr).
* \param latency [OUT] where to store the latency experienced on the path (or nullptr if not interested)
* It is the caller responsibility to initialize latency to 0 (we add to provided route)
- * \pre route!=nullptr
+ * \pre links!=nullptr
*
* walk through the routing components tree and find a route between hosts
* by calling each "get_route" function in each routing component.
*/
void Host::routeTo(Host* dest, std::vector<Link*>* links, double* latency)
{
- simgrid::kernel::routing::AsImpl::getGlobalRoute(pimpl_netcard, dest->pimpl_netcard, links, latency);
+ simgrid::kernel::routing::NetZoneImpl::getGlobalRoute(pimpl_netpoint, dest->pimpl_netpoint, links, latency);
if (XBT_LOG_ISENABLED(surf_route, xbt_log_priority_debug)) {
XBT_CDEBUG(surf_route, "Route from '%s' to '%s' (latency: %f):", cname(), dest->cname(),
(latency == nullptr ? -1 : *latency));