use crate::{
Result,
netlink::{Connection, Route, link::BridgeLink},
};
use super::LabNamespace;
pub struct LabBridge<'a> {
ns: &'a LabNamespace,
name: String,
}
impl<'a> LabBridge<'a> {
pub fn new(ns: &'a LabNamespace, name: impl Into<String>) -> Self {
Self {
ns,
name: name.into(),
}
}
pub fn name(&self) -> &str {
&self.name
}
pub async fn create(self) -> Result<Self> {
let conn: Connection<Route> = self.ns.connection()?;
conn.add_link(BridgeLink::new(&self.name)).await?;
Ok(self)
}
pub async fn add_port(self, port: &str) -> Result<Self> {
let conn: Connection<Route> = self.ns.connection()?;
conn.enslave(port, self.name.as_str()).await?;
Ok(self)
}
pub async fn up(self) -> Result<Self> {
let conn: Connection<Route> = self.ns.connection()?;
conn.set_link_up(self.name.as_str()).await?;
Ok(self)
}
}