X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/25d34d789f74dc5c9f1ef9db363384deb624283b..662f44287e3fd62ebdf93b4c8173603dde9693b7:/src/surf/network_interface.cpp diff --git a/src/surf/network_interface.cpp b/src/surf/network_interface.cpp index e36d472a27..49e4c6d248 100644 --- a/src/surf/network_interface.cpp +++ b/src/surf/network_interface.cpp @@ -1,24 +1,32 @@ -/* - * 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) networkLinkStateChangedCallbacks; +surf_callback(void, NetworkActionPtr) networkActionStateChangedCallbacks; + +/********* + * Model * + *********/ + +NetworkModelPtr surf_network_model = NULL; double NetworkModel::latencyFactor(double /*size*/) { return sg_latency_factor; @@ -32,9 +40,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 +78,28 @@ 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){ + Resource::setState(state); + surf_callback_emit(networkLinkStateChangedCallbacks, this); +} + +/********** + * Action * + **********/ + +void NetworkAction::setState(e_surf_action_state_t state){ + Action::setState(state); + surf_callback_emit(networkActionStateChangedCallbacks, this); } #endif /* NETWORK_INTERFACE_CPP_ */