diff options
-rw-r--r-- | src/blocking.rs | 2 | ||||
-rw-r--r-- | src/link.rs | 24 |
2 files changed, 26 insertions, 0 deletions
diff --git a/src/blocking.rs b/src/blocking.rs index f78f24a..71483ef 100644 --- a/src/blocking.rs +++ b/src/blocking.rs @@ -82,6 +82,8 @@ pub mod link { blockify!(link_add_vlan, link: String, parent: String, vlan_id: u16); #[cfg(feature = "link")] blockify!(link_add_wireguard, link: String); + #[cfg(feature = "link")] + blockify!(link_delete, link: String); blockify!(link_is_up -> bool, link: String); blockify!(link_wait_up, link: String); diff --git a/src/link.rs b/src/link.rs index 9ada813..b2f0348 100644 --- a/src/link.rs +++ b/src/link.rs @@ -118,6 +118,30 @@ impl Connection { Ok(()) } + /// Deletes an interface. Fails if the interface doesn't exist. + /// + /// # Arguments + /// + /// * `link` - The name of the interface to be deleted. + #[cfg(feature = "link")] + pub async fn link_delete(&self, link: String) -> Result<()> { + let link = self + .handle() + .link() + .get() + .match_name(link.clone()) + .execute() + .try_next() + .await? + .ok_or(Error::LinkNotFound(link))?; + + let id = link.header.index; + + self.handle().link().del(id).execute().await?; + + Ok(()) + } + /// Waits for an interface to come up, including waiting for its creation. pub async fn link_wait_up(&self, link: String) -> Result<()> { while !self.link_exists(link.clone()).await? || !self.link_is_up(link.clone()).await? { |