diff --git a/tun/src/tokio/mod.rs b/tun/src/tokio/mod.rs index ae99b73..97b587e 100644 --- a/tun/src/tokio/mod.rs +++ b/tun/src/tokio/mod.rs @@ -31,4 +31,84 @@ impl TunInterface { } } } + + pub async fn mtu(&self) -> io::Result { + loop { + let mut guard = self.inner.readable().await?; + match guard.try_io(|inner| inner.get_ref().mtu()) { + Ok(result) => return result, + Err(_would_block) => continue, + } + } + } + + pub async fn set_mtu(&self, mtu: i32) -> io::Result<()> { + loop { + let mut guard = self.inner.readable().await?; + match guard.try_io(|inner| inner.get_ref().set_mtu(mtu)) { + Ok(result) => return result, + Err(_would_block) => continue, + } + } + } + + pub async fn name(&self) -> io::Result { + loop { + let mut guard = self.inner.readable().await?; + match guard.try_io(|inner| inner.get_ref().name()) { + Ok(result) => return result, + Err(_would_block) => continue, + } + } + } + + pub async fn set_name(&self, name: &str) -> io::Result<()> { + loop { + let mut guard = self.inner.readable().await?; + match guard.try_io(|inner| inner.get_ref().set_name(name)) { + Ok(result) => return result, + Err(_would_block) => continue, + } + } + } + + pub async fn netmask(&self) -> io::Result { + loop { + let mut guard = self.inner.readable().await?; + match guard.try_io(|inner| inner.get_ref().netmask()) { + Ok(result) => return result, + Err(_would_block) => continue, + } + } + } + + pub async fn set_netmask(&self, netmask: std::net::Ipv4Addr) -> io::Result<()> { + loop { + let mut guard = self.inner.readable().await?; + match guard.try_io(|inner| inner.get_ref().set_netmask(netmask)) { + Ok(result) => return result, + Err(_would_block) => continue, + } + } + } + + pub async fn ipv4_addr(&self) -> io::Result { + loop { + let mut guard = self.inner.readable().await?; + match guard.try_io(|inner| inner.get_ref().ipv4_addr()) { + Ok(result) => return result, + Err(_would_block) => continue, + } + } + } + + pub async fn set_ipv4_addr(&self, addr: std::net::Ipv4Addr) -> io::Result<()> { + loop { + let mut guard = self.inner.readable().await?; + match guard.try_io(|inner| inner.get_ref().set_ipv4_addr(addr)) { + Ok(result) => return result, + Err(_would_block) => continue, + } + } + } }