X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/558cfc9fc06c8d1a7206b5995d3736cc11319529..30aca4d4af004d1ec899d12f0a9fe3997e9be15e:/src/surf/network_interface.cpp diff --git a/src/surf/network_interface.cpp b/src/surf/network_interface.cpp index 6034eaeea1..5a2e56d3c6 100644 --- a/src/surf/network_interface.cpp +++ b/src/surf/network_interface.cpp @@ -31,10 +31,10 @@ extern "C" { return link->sharingPolicy(); } double sg_link_bandwidth(Link *link){ - return link->getBandwidth(); + return link->bandwidth(); } double sg_link_latency(Link *link){ - return link->getLatency(); + return link->latency(); } void* sg_link_data(Link *link) { return link->getData(); @@ -42,13 +42,13 @@ extern "C" { void sg_link_data_set(Link *link,void *data) { link->setData(data); } - int sg_link_count(void) { + int sg_link_count() { return Link::linksCount(); } - Link** sg_link_list(void) { + Link** sg_link_list() { return Link::linksList(); } - void sg_link_exit(void) { + void sg_link_exit() { Link::linksExit(); } @@ -61,10 +61,10 @@ extern "C" { namespace simgrid { namespace surf { - boost::unordered_map *Link::links = new boost::unordered_map(); + std::unordered_map *Link::links = new std::unordered_map(); Link *Link::byName(const char* name) { if (links->find(name) == links->end()) - return NULL; + return nullptr; return links->at(name); } /** @brief Returns the amount of links in the platform */ @@ -91,36 +91,12 @@ namespace simgrid { * Callbacks * *************/ - simgrid::xbt::signal Link::onCreation; - simgrid::xbt::signal Link::onDestruction; - simgrid::xbt::signal Link::onStateChange; - - simgrid::xbt::signal networkActionStateChangedCallbacks; - simgrid::xbt::signal networkCommunicateCallbacks; + simgrid::xbt::signal Link::onCreation; + simgrid::xbt::signal Link::onDestruction; + simgrid::xbt::signal Link::onStateChange; - } -} - -void netlink_parse_init(sg_platf_link_cbarg_t link){ - std::vector names; - - if (link->policy == SURF_LINK_FULLDUPLEX) { - names.push_back(bprintf("%s_UP", link->id)); - names.push_back(bprintf("%s_DOWN", link->id)); - } else { - names.push_back(xbt_strdup(link->id)); - } - for (auto link_name : names) { - Link *l = surf_network_model->createLink(link_name, link->bandwidth, link->latency, link->policy, link->properties); - - if (link->latency_trace) - l->setLatencyTrace(link->latency_trace); - if (link->bandwidth_trace) - l->setBandwidthTrace(link->bandwidth_trace); - if (link->state_trace) - l->setStateTrace(link->state_trace); - - xbt_free(link_name); + simgrid::xbt::signal networkActionStateChangedCallbacks; + simgrid::xbt::signal Link::onCommunicate; } } @@ -128,11 +104,18 @@ void netlink_parse_init(sg_platf_link_cbarg_t link){ * Model * *********/ -simgrid::surf::NetworkModel *surf_network_model = NULL; +simgrid::surf::NetworkModel *surf_network_model = nullptr; namespace simgrid { namespace surf { + NetworkModel::~NetworkModel() + { + lmm_system_free(maxminSystem_); + xbt_heap_free(actionHeap_); + delete modifiedSet_; + } + double NetworkModel::latencyFactor(double /*size*/) { return sg_latency_factor; } @@ -145,20 +128,14 @@ namespace simgrid { return rate; } - double NetworkModel::next_occuring_event_full(double now) + double NetworkModel::nextOccuringEventFull(double now) { - NetworkAction *action = NULL; - ActionList *runningActions = surf_network_model->getRunningActionSet(); - double minRes; - - minRes = shareResourcesMaxMin(runningActions, surf_network_model->maxminSystem_, surf_network_model->f_networkSolve); - - for(ActionList::iterator it(runningActions->begin()), itend(runningActions->end()) - ; it != itend ; ++it) { - action = static_cast(&*it); - if (action->m_latency > 0) { - minRes = (minRes < 0) ? action->m_latency : std::min(minRes, action->m_latency); - } + double minRes = Model::nextOccuringEventFull(now); + + for(auto it(getRunningActionSet()->begin()), itend(getRunningActionSet()->end()); it != itend ; it++) { + NetworkAction *action = static_cast(&*it); + if (action->latency_ > 0) + minRes = (minRes < 0) ? action->latency_ : std::min(minRes, action->latency_); } XBT_DEBUG("Min of share resources %f", minRes); @@ -170,23 +147,14 @@ namespace simgrid { * Resource * ************/ - Link::Link(simgrid::surf::NetworkModel *model, const char *name, xbt_dict_t props) - : Resource(model, name), - PropertyHolder(props) + Link::Link(simgrid::surf::NetworkModel* model, const char* name, lmm_constraint_t constraint) + : Resource(model, name, constraint) { - links->insert({name, this}); + if (strcmp(name,"__loopback__")) + xbt_assert(!Link::byName(name), "Link '%s' declared several times in the platform.", name); - m_latency.scale = 1; - m_bandwidth.scale = 1; - XBT_DEBUG("Create link '%s'",name); - } - - Link::Link(simgrid::surf::NetworkModel *model, const char *name, xbt_dict_t props, lmm_constraint_t constraint) - : Resource(model, name, constraint), - PropertyHolder(props) - { - m_latency.scale = 1; - m_bandwidth.scale = 1; + latency_.scale = 1; + bandwidth_.scale = 1; links->insert({name, this}); XBT_DEBUG("Create link '%s'",name); @@ -197,9 +165,9 @@ namespace simgrid { Link::~Link() { xbt_assert(currentlyDestroying_, "Don't delete Links directly. Call destroy() instead."); } - /** @brief Fire the require callbacks and destroy the object + /** @brief Fire the required callbacks and destroy the object * - * Don't delete directly an Link, call l->destroy() instead. + * Don't delete directly a Link, call l->destroy() instead. */ void Link::destroy() { @@ -215,14 +183,14 @@ namespace simgrid { return lmm_constraint_used(getModel()->getMaxminSystem(), getConstraint()); } - double Link::getLatency() + double Link::latency() { - return m_latency.peak * m_latency.scale; + return latency_.peak * latency_.scale; } - double Link::getBandwidth() + double Link::bandwidth() { - return m_bandwidth.peak * m_bandwidth.scale; + return bandwidth_.peak * bandwidth_.scale; } int Link::sharingPolicy() @@ -243,18 +211,18 @@ namespace simgrid { } } void Link::setStateTrace(tmgr_trace_t trace) { - xbt_assert(m_stateEvent==NULL,"Cannot set a second state trace to Link %s", getName()); - m_stateEvent = future_evt_set->add_trace(trace, 0.0, this); + xbt_assert(stateEvent_ == nullptr, "Cannot set a second state trace to Link %s", getName()); + stateEvent_ = future_evt_set->add_trace(trace, 0.0, this); } void Link::setBandwidthTrace(tmgr_trace_t trace) { - xbt_assert(m_bandwidth.event==NULL,"Cannot set a second bandwidth trace to Link %s", getName()); - m_bandwidth.event = future_evt_set->add_trace(trace, 0.0, this); + xbt_assert(bandwidth_.event == nullptr, "Cannot set a second bandwidth trace to Link %s", getName()); + bandwidth_.event = future_evt_set->add_trace(trace, 0.0, this); } void Link::setLatencyTrace(tmgr_trace_t trace) { - xbt_assert(m_latency.event==NULL,"Cannot set a second latency trace to Link %s", getName()); - m_latency.event = future_evt_set->add_trace(trace, 0.0, this); + xbt_assert(latency_.event == nullptr, "Cannot set a second latency trace to Link %s", getName()); + latency_.event = future_evt_set->add_trace(trace, 0.0, this); } @@ -262,8 +230,8 @@ namespace simgrid { * Action * **********/ - void NetworkAction::setState(e_surf_action_state_t state){ - e_surf_action_state_t old = getState(); + void NetworkAction::setState(Action::State state){ + Action::State old = getState(); Action::setState(state); networkActionStateChangedCallbacks(this, old, state); }