+Link* Link::set_bandwidth(double value)
+{
+ kernel::actor::simcall([this, value] { pimpl_->set_bandwidth(value); });
+ return this;
+}
+
+Link* Link::set_sharing_policy(Link::SharingPolicy policy, const NonLinearResourceCb& cb)
+{
+ if (policy == SharingPolicy::SPLITDUPLEX || policy == SharingPolicy::WIFI)
+ throw std::invalid_argument(std::string("Impossible to set wifi or split-duplex for the link: ") + get_name() +
+ std::string(". Use appropriate create function in NetZone."));
+
+ kernel::actor::simcall([this, policy, &cb] { pimpl_->set_sharing_policy(policy, cb); });
+ return this;
+}
+Link::SharingPolicy Link::get_sharing_policy() const
+{
+ return this->pimpl_->get_sharing_policy();
+}
+
+void Link::set_host_wifi_rate(const s4u::Host* host, int level) const
+{
+ auto* wlink = dynamic_cast<kernel::resource::NetworkWifiLink*>(pimpl_);
+ xbt_assert(wlink != nullptr, "Link %s does not seem to be a wifi link.", get_cname());
+ wlink->set_host_rate(host, level);
+}
+
+Link* Link::set_concurrency_limit(int limit)
+{
+ kernel::actor::simcall([this, limit] { pimpl_->set_concurrency_limit(limit); });
+ return this;
+}
+
+double Link::get_usage() const