1 /* Copyright (c) 2013-2015. The SimGrid Team.
2 * All rights reserved. */
4 /* This program is free software; you can redistribute it and/or modify it
5 * under the terms of the license (GNU LGPL) which comes with this package. */
9 #include "simgrid/s4u/link.hpp"
10 #include "simgrid/sg_config.h"
11 #include "simgrid/simix.hpp"
12 #include "src/surf/network_interface.hpp"
15 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(s4u_link, s4u, "Logging specific to the S4U links");
23 const char* sg_link_name(Link* link)
27 Link* sg_link_by_name(const char* name)
29 return Link::byName(name);
32 int sg_link_is_shared(Link* link)
34 return link->sharingPolicy();
36 double sg_link_bandwidth(Link* link)
38 return link->bandwidth();
40 double sg_link_latency(Link* link)
42 return link->latency();
44 void* sg_link_data(Link* link)
46 return link->getData();
48 void sg_link_data_set(Link* link, void* data)
54 return simgrid::surf::LinkImpl::linksCount();
58 simgrid::surf::LinkImpl** list = simgrid::surf::LinkImpl::linksList();
59 Link** res = (Link**)list; // Use the same memory area
61 int size = sg_link_count();
62 for (int i = 0; i < size; i++)
63 res[i] = &(list[i]->piface_); // Convert each entry into its interface
69 simgrid::surf::LinkImpl::linksExit();
79 Link* Link::byName(const char* name)
81 surf::LinkImpl* res = surf::LinkImpl::byName(name);
86 const char* Link::name()
88 return pimpl_->getName();
92 return pimpl_->isUsed();
95 double Link::latency()
97 return pimpl_->latency();
100 double Link::bandwidth()
102 return pimpl_->bandwidth();
105 int Link::sharingPolicy()
107 return pimpl_->sharingPolicy();
112 simgrid::simix::kernelImmediate([this]() {
113 this->pimpl_->turnOn();
118 simgrid::simix::kernelImmediate([this]() {
119 this->pimpl_->turnOff();
123 void* Link::getData()
125 return pimpl_->getData();
127 void Link::setData(void* d)
129 simgrid::simix::kernelImmediate([this, d]() {
130 this->pimpl_->setData(d);
134 void Link::setStateTrace(tmgr_trace_t trace)
136 simgrid::simix::kernelImmediate([this, trace]() {
137 this->pimpl_->setStateTrace(trace);
140 void Link::setBandwidthTrace(tmgr_trace_t trace)
142 simgrid::simix::kernelImmediate([this, trace]() {
143 this->pimpl_->setBandwidthTrace(trace);
146 void Link::setLatencyTrace(tmgr_trace_t trace)
148 simgrid::simix::kernelImmediate([this, trace]() {
149 this->pimpl_->setLatencyTrace(trace);