aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/blocking.rs2
-rw-r--r--src/link.rs24
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? {