From cf2bbdd9138430fe401a3bcef1a3c9afef851652 Mon Sep 17 00:00:00 2001 From: Gerhard de Clercq <11624490+Gerharddc@users.noreply.github.com> Date: Tue, 16 Dec 2025 15:52:56 +0100 Subject: Merge pull request #5082 from Gerharddc/tuntap-update embassy-net-tuntap: update async-io --- embassy-net-tuntap/Cargo.toml | 4 ++-- embassy-net-tuntap/src/lib.rs | 12 ++++++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) (limited to 'embassy-net-tuntap') 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 @@ [package] name = "embassy-net-tuntap" -version = "0.1.0" +version = "0.1.1" description = "embassy-net driver for Linux TUN/TAP interfaces." keywords = ["embedded", "tuntap", "embassy-net", "ethernet", "async"] categories = ["embedded", "hardware-support", "network-programming", "asynchronous"] @@ -11,7 +11,7 @@ documentation = "https://docs.embassy.dev/embassy-net-tuntap" [dependencies] embassy-net-driver = { version = "0.2.0", path = "../embassy-net-driver" } -async-io = "1.6.0" +async-io = "2.6.0" log = "0.4.14" libc = "0.2.101" 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 @@ #![doc = include_str!("../README.md")] use std::io; use std::io::{Read, Write}; +use std::os::fd::AsFd; use std::os::unix::io::{AsRawFd, RawFd}; +use std::os::unix::prelude::BorrowedFd; use std::task::Context; use async_io::Async; @@ -69,6 +71,12 @@ impl AsRawFd for TunTap { } } +impl AsFd for TunTap { + fn as_fd(&self) -> BorrowedFd<'_> { + unsafe { BorrowedFd::borrow_raw(self.fd) } + } +} + impl TunTap { /// Create a new TUN/TAP device. pub fn new(name: &str) -> io::Result { @@ -164,7 +172,7 @@ impl Driver for TunTapDevice { fn receive(&mut self, cx: &mut Context) -> Option<(Self::RxToken<'_>, Self::TxToken<'_>)> { let mut buf = vec![0; self.device.get_ref().mtu]; loop { - match self.device.get_mut().read(&mut buf) { + match unsafe { self.device.get_mut() }.read(&mut buf) { Ok(n) => { buf.truncate(n); return Some(( @@ -233,7 +241,7 @@ impl<'a> embassy_net_driver::TxToken for TxToken<'a> { let result = f(&mut buffer); // todo handle WouldBlock with async - match self.device.get_mut().write(&buffer) { + match unsafe { self.device.get_mut() }.write(&buffer) { Ok(_) => {} Err(e) if e.kind() == io::ErrorKind::WouldBlock => info!("transmit WouldBlock"), Err(e) => panic!("transmit error: {:?}", e), -- cgit