X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/93c8beeb914dc3624c3818b21f17567345b4d36c..f9e6853d2c5b7b867211700bc12f0ee57f640b30:/src/surf/network_interface.cpp?ds=sidebyside diff --git a/src/surf/network_interface.cpp b/src/surf/network_interface.cpp index a7767aaf60..49e4c6d248 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,20 @@ 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; @@ -34,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() @@ -44,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_ */