+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)
+{
+ if (policy == SharingPolicy::SPLITDUPLEX)
+ throw std::invalid_argument(std::string("Impossible to set split-duplex for the link: ") + get_name() +
+ std::string(". Use NetZone::create_split_duplex_link."));
+
+ kernel::actor::simcall([this, policy] { pimpl_->set_sharing_policy(policy); });
+ 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