X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/18d23a87c23647366cfffbc61d3f7c632301159c..20bb321a5cf8f244e33b5562b9dd1d8fb5d4864a:/src/surf/network_interface.cpp diff --git a/src/surf/network_interface.cpp b/src/surf/network_interface.cpp index 6bc4328dfd..39195ef072 100644 --- a/src/surf/network_interface.cpp +++ b/src/surf/network_interface.cpp @@ -1,9 +1,9 @@ -/* - * 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" @@ -13,14 +13,21 @@ 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; @@ -34,18 +41,37 @@ double NetworkModel::bandwidthConstraint(double rate, double /*bound*/, double / return rate; } -NetworkLinkLmm::NetworkLinkLmm(lmm_constraint_t constraint, - tmgr_history_t history, - tmgr_trace_t state_trace) -: ResourceLmm(constraint) +/************ + * 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) { + surf_callback_emit(networkLinkCreatedCallbacks, this); if (state_trace) p_stateEvent = tmgr_history_add_trace(history, state_trace, 0.0, 0, static_cast(this)); } -bool NetworkLinkLmm::isUsed() +NetworkLink::~NetworkLink() +{ + surf_callback_emit(networkLinkDestructedCallbacks, this); +} + +bool NetworkLink::isUsed() { - return lmm_constraint_used(getModel()->getMaxminSystem(), constraint()); + return lmm_constraint_used(getModel()->getMaxminSystem(), getConstraint()); } double NetworkLink::getLatency() @@ -53,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(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_ */