+ /** @brief Public interface */
+ s4u::Link piface_;
+
+ /** @brief Get the bandwidth in bytes per second of current Link */
+ virtual double bandwidth();
+
+ /** @brief Update the bandwidth in bytes per second of current Link */
+ virtual void setBandwidth(double value) = 0;
+
+ /** @brief Get the latency in seconds of current Link */
+ virtual double latency();
+
+ /** @brief Update the latency in seconds of current Link */
+ virtual void setLatency(double value) = 0;
+
+ /** @brief The sharing policy is a @{link e_surf_link_sharing_policy_t::EType} (0: FATPIPE, 1: SHARED, 2:
+ * FULLDUPLEX) */
+ virtual int sharingPolicy();
+
+ /** @brief Check if the Link is used */
+ bool isUsed() override;
+
+ void turnOn() override;
+ void turnOff() override;
+
+ virtual void setStateTrace(tmgr_trace_t trace); /*< setup the trace file with states events (ON or OFF).
+ Trace must contain boolean values. */
+ virtual void setBandwidthTrace(
+ tmgr_trace_t trace); /*< setup the trace file with bandwidth events (peak speed changes due to external load).
+ Trace must contain percentages (value between 0 and 1). */
+ virtual void setLatencyTrace(
+ tmgr_trace_t trace); /*< setup the trace file with latency events (peak latency changes due to external load).
+ Trace must contain absolute values */
+
+ tmgr_trace_event_t stateEvent_ = nullptr;
+ s_surf_metric_t latency_ = {1.0, 0, nullptr};
+ s_surf_metric_t bandwidth_ = {1.0, 0, nullptr};
+
+ /* User data */
+ void* getData() { return userData; }
+ void setData(void* d) { userData = d; }
+private:
+ void* userData = nullptr;
+
+ /* List of all links. FIXME: should move to the Engine */
+ static std::unordered_map<std::string, LinkImpl*>* links;
+
+public:
+ static LinkImpl* byName(std::string name);
+ static int linksCount();
+ static LinkImpl** linksList();
+ static void linksList(std::vector<s4u::Link*>* linkList);
+ static void linksExit();