X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/25d34d789f74dc5c9f1ef9db363384deb624283b..e0d012a5fe6be526b6062eb17bbe23cc71771f84:/src/surf/network_interface.cpp diff --git a/src/surf/network_interface.cpp b/src/surf/network_interface.cpp index e36d472a27..39195ef072 100644 --- a/src/surf/network_interface.cpp +++ b/src/surf/network_interface.cpp @@ -1,24 +1,33 @@ -/* - * network_interface.cpp - * - * Created on: Nov 29, 2013 - * Author: bedaride - */ +/* Copyright (c) 2013-2014. The SimGrid Team. + * All rights reserved. */ + +/* 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 "network_interface.hpp" #include "simgrid/sg_config.h" #ifndef NETWORK_INTERFACE_CPP_ #define NETWORK_INTERFACE_CPP_ +XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_network, surf, + "Logging specific to the SURF network module"); -NetworkModelPtr surf_network_model = NULL; +/************* + * Callbacks * + *************/ -xbt_dynar_t NetworkModel::getRoute(RoutingEdgePtr src, RoutingEdgePtr dst) -{ - xbt_dynar_t route = NULL; - routing_platf->getRouteAndLatency(src, dst, &route, NULL); - return route; -} +surf_callback(void, NetworkLinkPtr) networkLinkCreatedCallbacks; +surf_callback(void, NetworkLinkPtr) networkLinkDestructedCallbacks; +surf_callback(void, NetworkLinkPtr, e_surf_resource_state_t, e_surf_resource_state_t) networkLinkStateChangedCallbacks; +surf_callback(void, NetworkActionPtr, e_surf_action_state_t, e_surf_action_state_t) networkActionStateChangedCallbacks; +surf_callback(void, NetworkActionPtr, RoutingEdgePtr src, RoutingEdgePtr dst, double size, double rate) networkCommunicateCallbacks; + +/********* + * Model * + *********/ + +NetworkModelPtr surf_network_model = NULL; double NetworkModel::latencyFactor(double /*size*/) { return sg_latency_factor; @@ -32,9 +41,37 @@ double NetworkModel::bandwidthConstraint(double rate, double /*bound*/, double / return rate; } -bool NetworkLinkLmm::isUsed() +/************ + * Resource * + ************/ + +NetworkLink::NetworkLink(NetworkModelPtr model, const char *name, xbt_dict_t props) +: Resource(model, name, props) +, p_latEvent(NULL) +{ + surf_callback_emit(networkLinkCreatedCallbacks, this); +} + +NetworkLink::NetworkLink(NetworkModelPtr model, const char *name, xbt_dict_t props, + lmm_constraint_t constraint, + tmgr_history_t history, + tmgr_trace_t state_trace) +: Resource(model, name, props, constraint), + p_latEvent(NULL) { - return lmm_constraint_used(p_model->p_maxminSystem, p_constraint); + surf_callback_emit(networkLinkCreatedCallbacks, this); + if (state_trace) + p_stateEvent = tmgr_history_add_trace(history, state_trace, 0.0, 0, static_cast(this)); +} + +NetworkLink::~NetworkLink() +{ + surf_callback_emit(networkLinkDestructedCallbacks, this); +} + +bool NetworkLink::isUsed() +{ + return lmm_constraint_used(getModel()->getMaxminSystem(), getConstraint()); } double NetworkLink::getLatency() @@ -42,14 +79,30 @@ double NetworkLink::getLatency() return m_latCurrent; } -double NetworkLinkLmm::getBandwidth() +double NetworkLink::getBandwidth() { return p_power.peak * p_power.scale; } -bool NetworkLinkLmm::isShared() +bool NetworkLink::isShared() { - return lmm_constraint_is_shared(p_constraint); + return lmm_constraint_is_shared(getConstraint()); +} + +void NetworkLink::setState(e_surf_resource_state_t state){ + e_surf_resource_state_t old = Resource::getState(); + Resource::setState(state); + surf_callback_emit(networkLinkStateChangedCallbacks, this, old, state); +} + +/********** + * Action * + **********/ + +void NetworkAction::setState(e_surf_action_state_t state){ + e_surf_action_state_t old = getState(); + Action::setState(state); + surf_callback_emit(networkActionStateChangedCallbacks, this, old, state); } #endif /* NETWORK_INTERFACE_CPP_ */