aboutsummaryrefslogtreecommitdiff
path: root/embassy-net-tuntap/src/lib.rs
diff options
context:
space:
mode:
authorGerhard de Clercq <[email protected]>2025-12-16 15:52:56 +0100
committerGitHub <[email protected]>2025-12-16 15:52:56 +0100
commitcf2bbdd9138430fe401a3bcef1a3c9afef851652 (patch)
tree7da65fd63def40aa20c9e5bcdb1a3d3e68962bee /embassy-net-tuntap/src/lib.rs
parentc283ba36eb5516cdedc46acf6f9f234859161e2a (diff)
Merge pull request #5082 from Gerharddc/tuntap-update
embassy-net-tuntap: update async-io
Diffstat (limited to 'embassy-net-tuntap/src/lib.rs')
-rw-r--r--embassy-net-tuntap/src/lib.rs12
1 files changed, 10 insertions, 2 deletions
diff --git a/embassy-net-tuntap/src/lib.rs b/embassy-net-tuntap/src/lib.rs
index 2ff23f462..33a251248 100644
--- a/embassy-net-tuntap/src/lib.rs
+++ b/embassy-net-tuntap/src/lib.rs
@@ -2,7 +2,9 @@
2#![doc = include_str!("../README.md")] 2#![doc = include_str!("../README.md")]
3use std::io; 3use std::io;
4use std::io::{Read, Write}; 4use std::io::{Read, Write};
5use std::os::fd::AsFd;
5use std::os::unix::io::{AsRawFd, RawFd}; 6use std::os::unix::io::{AsRawFd, RawFd};
7use std::os::unix::prelude::BorrowedFd;
6use std::task::Context; 8use std::task::Context;
7 9
8use async_io::Async; 10use async_io::Async;
@@ -69,6 +71,12 @@ impl AsRawFd for TunTap {
69 } 71 }
70} 72}
71 73
74impl AsFd for TunTap {
75 fn as_fd(&self) -> BorrowedFd<'_> {
76 unsafe { BorrowedFd::borrow_raw(self.fd) }
77 }
78}
79
72impl TunTap { 80impl TunTap {
73 /// Create a new TUN/TAP device. 81 /// Create a new TUN/TAP device.
74 pub fn new(name: &str) -> io::Result<TunTap> { 82 pub fn new(name: &str) -> io::Result<TunTap> {
@@ -164,7 +172,7 @@ impl Driver for TunTapDevice {
164 fn receive(&mut self, cx: &mut Context) -> Option<(Self::RxToken<'_>, Self::TxToken<'_>)> { 172 fn receive(&mut self, cx: &mut Context) -> Option<(Self::RxToken<'_>, Self::TxToken<'_>)> {
165 let mut buf = vec![0; self.device.get_ref().mtu]; 173 let mut buf = vec![0; self.device.get_ref().mtu];
166 loop { 174 loop {
167 match self.device.get_mut().read(&mut buf) { 175 match unsafe { self.device.get_mut() }.read(&mut buf) {
168 Ok(n) => { 176 Ok(n) => {
169 buf.truncate(n); 177 buf.truncate(n);
170 return Some(( 178 return Some((
@@ -233,7 +241,7 @@ impl<'a> embassy_net_driver::TxToken for TxToken<'a> {
233 let result = f(&mut buffer); 241 let result = f(&mut buffer);
234 242
235 // todo handle WouldBlock with async 243 // todo handle WouldBlock with async
236 match self.device.get_mut().write(&buffer) { 244 match unsafe { self.device.get_mut() }.write(&buffer) {
237 Ok(_) => {} 245 Ok(_) => {}
238 Err(e) if e.kind() == io::ErrorKind::WouldBlock => info!("transmit WouldBlock"), 246 Err(e) if e.kind() == io::ErrorKind::WouldBlock => info!("transmit WouldBlock"),
239 Err(e) => panic!("transmit error: {:?}", e), 247 Err(e) => panic!("transmit error: {:?}", e),