diff options
| author | Gerhard de Clercq <[email protected]> | 2025-12-16 15:52:56 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-12-16 15:52:56 +0100 |
| commit | cf2bbdd9138430fe401a3bcef1a3c9afef851652 (patch) | |
| tree | 7da65fd63def40aa20c9e5bcdb1a3d3e68962bee /embassy-net-tuntap/src/lib.rs | |
| parent | c283ba36eb5516cdedc46acf6f9f234859161e2a (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.rs | 12 |
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")] |
| 3 | use std::io; | 3 | use std::io; |
| 4 | use std::io::{Read, Write}; | 4 | use std::io::{Read, Write}; |
| 5 | use std::os::fd::AsFd; | ||
| 5 | use std::os::unix::io::{AsRawFd, RawFd}; | 6 | use std::os::unix::io::{AsRawFd, RawFd}; |
| 7 | use std::os::unix::prelude::BorrowedFd; | ||
| 6 | use std::task::Context; | 8 | use std::task::Context; |
| 7 | 9 | ||
| 8 | use async_io::Async; | 10 | use async_io::Async; |
| @@ -69,6 +71,12 @@ impl AsRawFd for TunTap { | |||
| 69 | } | 71 | } |
| 70 | } | 72 | } |
| 71 | 73 | ||
| 74 | impl AsFd for TunTap { | ||
| 75 | fn as_fd(&self) -> BorrowedFd<'_> { | ||
| 76 | unsafe { BorrowedFd::borrow_raw(self.fd) } | ||
| 77 | } | ||
| 78 | } | ||
| 79 | |||
| 72 | impl TunTap { | 80 | impl 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), |
