+ /** @ingroup SURF_network_interface
+ * @brief SURF network link interface class
+ * @details A Link represents the link between two [hosts](\ref Host)
+ */
+class Link :
+ public simgrid::surf::Resource,
+ public simgrid::surf::PropertyHolder {
+public:
+ /**
+ * @brief Link constructor
+ *
+ * @param model The NetworkModel associated to this Link
+ * @param name The name of the Link
+ * @param props Dictionary of properties associated to this Link
+ */
+ Link(simgrid::surf::NetworkModel *model, const char *name, xbt_dict_t props);
+
+ /**
+ * @brief Link constructor
+ *
+ * @param model The NetworkModel associated to this Link
+ * @param name The name of the Link
+ * @param props Dictionary of properties associated to this Link
+ * @param constraint The lmm constraint associated to this Cpu if it is part of a LMM component
+ * @param fes Future Event Set in which our events must be registered
+ * @param state_trace [TODO]
+ */
+ Link(simgrid::surf::NetworkModel *model, const char *name, xbt_dict_t props,
+ lmm_constraint_t constraint,
+ sg_future_evt_set_t fes,
+ tmgr_trace_t state_trace);
+
+ /* Link destruction logic */
+ /**************************/
+protected:
+ ~Link();
+public:
+ void destroy(); // Must be called instead of the destructor
+private:
+ bool currentlyDestroying_ = false;