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 | |
| parent | c283ba36eb5516cdedc46acf6f9f234859161e2a (diff) | |
Merge pull request #5082 from Gerharddc/tuntap-update
embassy-net-tuntap: update async-io
Diffstat (limited to 'embassy-net-tuntap')
| -rw-r--r-- | embassy-net-tuntap/Cargo.toml | 4 | ||||
| -rw-r--r-- | embassy-net-tuntap/src/lib.rs | 12 |
2 files changed, 12 insertions, 4 deletions
diff --git a/embassy-net-tuntap/Cargo.toml b/embassy-net-tuntap/Cargo.toml index 77668b445..95dc1e1f0 100644 --- a/embassy-net-tuntap/Cargo.toml +++ b/embassy-net-tuntap/Cargo.toml | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | [package] | 1 | [package] |
| 2 | name = "embassy-net-tuntap" | 2 | name = "embassy-net-tuntap" |
| 3 | version = "0.1.0" | 3 | version = "0.1.1" |
| 4 | description = "embassy-net driver for Linux TUN/TAP interfaces." | 4 | description = "embassy-net driver for Linux TUN/TAP interfaces." |
| 5 | keywords = ["embedded", "tuntap", "embassy-net", "ethernet", "async"] | 5 | keywords = ["embedded", "tuntap", "embassy-net", "ethernet", "async"] |
| 6 | categories = ["embedded", "hardware-support", "network-programming", "asynchronous"] | 6 | categories = ["embedded", "hardware-support", "network-programming", "asynchronous"] |
| @@ -11,7 +11,7 @@ documentation = "https://docs.embassy.dev/embassy-net-tuntap" | |||
| 11 | 11 | ||
| 12 | [dependencies] | 12 | [dependencies] |
| 13 | embassy-net-driver = { version = "0.2.0", path = "../embassy-net-driver" } | 13 | embassy-net-driver = { version = "0.2.0", path = "../embassy-net-driver" } |
| 14 | async-io = "1.6.0" | 14 | async-io = "2.6.0" |
| 15 | log = "0.4.14" | 15 | log = "0.4.14" |
| 16 | libc = "0.2.101" | 16 | libc = "0.2.101" |
| 17 | 17 | ||
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), |
