diff --git a/embassy-net-tuntap/Cargo.toml b/embassy-net-tuntap/Cargo.toml index 4e374c36..7e2c7bfd 100644 --- a/embassy-net-tuntap/Cargo.toml +++ b/embassy-net-tuntap/Cargo.toml @@ -6,6 +6,7 @@ keywords = ["embedded", "tuntap", "embassy-net", "embedded-hal-async", "ethernet categories = ["embedded", "hardware-support", "no-std", "network-programming", "async"] license = "MIT OR Apache-2.0" edition = "2021" +repository = "https://github.com/embassy-rs/embassy" [dependencies] embassy-net-driver = { version = "0.2.0", path = "../embassy-net-driver" } @@ -16,4 +17,4 @@ libc = "0.2.101" [package.metadata.embassy_docs] src_base = "https://github.com/embassy-rs/embassy/blob/embassy-net-tuntap-v$VERSION/embassy-net-tuntap/src/" src_base_git = "https://github.com/embassy-rs/embassy/blob/$COMMIT/embassy-net-tuntap/src/" -target = "thumbv7em-none-eabi" \ No newline at end of file +target = "thumbv7em-none-eabi" diff --git a/embassy-net-tuntap/src/lib.rs b/embassy-net-tuntap/src/lib.rs index 75c54c48..de30934e 100644 --- a/embassy-net-tuntap/src/lib.rs +++ b/embassy-net-tuntap/src/lib.rs @@ -1,3 +1,5 @@ +#![warn(missing_docs)] +#![doc = include_str!("../README.md")] use std::io; use std::io::{Read, Write}; use std::os::unix::io::{AsRawFd, RawFd}; @@ -7,12 +9,19 @@ use async_io::Async; use embassy_net_driver::{self, Capabilities, Driver, HardwareAddress, LinkState}; use log::*; +/// Get the MTU of the given interface. pub const SIOCGIFMTU: libc::c_ulong = 0x8921; +/// Get the index of the given interface. pub const _SIOCGIFINDEX: libc::c_ulong = 0x8933; +/// Capture all packages. pub const _ETH_P_ALL: libc::c_short = 0x0003; +/// Set the interface flags. pub const TUNSETIFF: libc::c_ulong = 0x400454CA; +/// TUN device. pub const _IFF_TUN: libc::c_int = 0x0001; +/// TAP device. pub const IFF_TAP: libc::c_int = 0x0002; +/// No packet information. pub const IFF_NO_PI: libc::c_int = 0x1000; const ETHERNET_HEADER_LEN: usize = 14; @@ -47,6 +56,7 @@ fn ifreq_ioctl(lower: libc::c_int, ifreq: &mut ifreq, cmd: libc::c_ulong) -> io: Ok(ifreq.ifr_data) } +/// A TUN/TAP device. #[derive(Debug)] pub struct TunTap { fd: libc::c_int, @@ -60,6 +70,7 @@ impl AsRawFd for TunTap { } impl TunTap { + /// Create a new TUN/TAP device. pub fn new(name: &str) -> io::Result { unsafe { let fd = libc::open( @@ -126,11 +137,13 @@ impl io::Write for TunTap { } } +/// A TUN/TAP device, wrapped in an async interface. pub struct TunTapDevice { device: Async, } impl TunTapDevice { + /// Create a new TUN/TAP device. pub fn new(name: &str) -> io::Result { Ok(Self { device: Async::new(TunTap::new(name)?)?,