diff options
| -rw-r--r-- | embassy-net-tuntap/Cargo.toml | 4 | ||||
| -rw-r--r-- | embassy-net-tuntap/src/lib.rs | 12 | ||||
| -rw-r--r-- | examples/std/Cargo.toml | 2 |
3 files changed, 13 insertions, 5 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), |
diff --git a/examples/std/Cargo.toml b/examples/std/Cargo.toml index 6dc6a353d..0e3b3c6d5 100644 --- a/examples/std/Cargo.toml +++ b/examples/std/Cargo.toml | |||
| @@ -10,7 +10,7 @@ embassy-sync = { version = "0.7.2", path = "../../embassy-sync", features = ["lo | |||
| 10 | embassy-executor = { version = "0.9.0", path = "../../embassy-executor", features = ["arch-std", "executor-thread", "log"] } | 10 | embassy-executor = { version = "0.9.0", path = "../../embassy-executor", features = ["arch-std", "executor-thread", "log"] } |
| 11 | embassy-time = { version = "0.5.0", path = "../../embassy-time", features = ["log", "std", ] } | 11 | embassy-time = { version = "0.5.0", path = "../../embassy-time", features = ["log", "std", ] } |
| 12 | embassy-net = { version = "0.7.1", path = "../../embassy-net", features=[ "log", "medium-ethernet", "medium-ip", "tcp", "udp", "dns", "dhcpv4", "proto-ipv6"] } | 12 | embassy-net = { version = "0.7.1", path = "../../embassy-net", features=[ "log", "medium-ethernet", "medium-ip", "tcp", "udp", "dns", "dhcpv4", "proto-ipv6"] } |
| 13 | embassy-net-tuntap = { version = "0.1.0", path = "../../embassy-net-tuntap" } | 13 | embassy-net-tuntap = { version = "0.1.1", path = "../../embassy-net-tuntap" } |
| 14 | embassy-net-ppp = { version = "0.2.1", path = "../../embassy-net-ppp", features = ["log"]} | 14 | embassy-net-ppp = { version = "0.2.1", path = "../../embassy-net-ppp", features = ["log"]} |
| 15 | embedded-io-async = { version = "0.6.1" } | 15 | embedded-io-async = { version = "0.6.1" } |
| 16 | embedded-io-adapters = { version = "0.6.1", features = ["futures-03"] } | 16 | embedded-io-adapters = { version = "0.6.1", features = ["futures-03"] } |
