+ return this->pimpl_->get_properties();
+}
+
+Link* Link::set_properties(const std::unordered_map<std::string, std::string>& properties)
+{
+ kernel::actor::simcall_object_access(pimpl_, [this, &properties] { this->pimpl_->set_properties(properties); });
+ return this;
+}
+
+Link* SplitDuplexLink::get_link_up() const
+{
+ const auto* pimpl = dynamic_cast<kernel::resource::SplitDuplexLinkImpl*>(pimpl_);
+ xbt_assert(pimpl, "Requesting link_up from a non split-duplex link: %s", get_cname());
+ return pimpl->get_link_up();
+}
+
+Link* SplitDuplexLink::get_link_down() const
+{
+ const auto* pimpl = dynamic_cast<kernel::resource::SplitDuplexLinkImpl*>(pimpl_);
+ xbt_assert(pimpl, "Requesting link_down from a non split-duplex link: %s", get_cname());
+ return pimpl->get_link_down();