Merge pull request #2332 from embassy-rs/embassy-net-tuntap-docs
docs: document embassy-net-tuntap
This commit is contained in:
commit
70ea805af3
@ -6,6 +6,7 @@ keywords = ["embedded", "tuntap", "embassy-net", "embedded-hal-async", "ethernet
|
|||||||
categories = ["embedded", "hardware-support", "no-std", "network-programming", "async"]
|
categories = ["embedded", "hardware-support", "no-std", "network-programming", "async"]
|
||||||
license = "MIT OR Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
repository = "https://github.com/embassy-rs/embassy"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
embassy-net-driver = { version = "0.2.0", path = "../embassy-net-driver" }
|
embassy-net-driver = { version = "0.2.0", path = "../embassy-net-driver" }
|
||||||
@ -16,4 +17,4 @@ libc = "0.2.101"
|
|||||||
[package.metadata.embassy_docs]
|
[package.metadata.embassy_docs]
|
||||||
src_base = "https://github.com/embassy-rs/embassy/blob/embassy-net-tuntap-v$VERSION/embassy-net-tuntap/src/"
|
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/"
|
src_base_git = "https://github.com/embassy-rs/embassy/blob/$COMMIT/embassy-net-tuntap/src/"
|
||||||
target = "thumbv7em-none-eabi"
|
target = "thumbv7em-none-eabi"
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![warn(missing_docs)]
|
||||||
|
#![doc = include_str!("../README.md")]
|
||||||
use std::io;
|
use std::io;
|
||||||
use std::io::{Read, Write};
|
use std::io::{Read, Write};
|
||||||
use std::os::unix::io::{AsRawFd, RawFd};
|
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 embassy_net_driver::{self, Capabilities, Driver, HardwareAddress, LinkState};
|
||||||
use log::*;
|
use log::*;
|
||||||
|
|
||||||
|
/// Get the MTU of the given interface.
|
||||||
pub const SIOCGIFMTU: libc::c_ulong = 0x8921;
|
pub const SIOCGIFMTU: libc::c_ulong = 0x8921;
|
||||||
|
/// Get the index of the given interface.
|
||||||
pub const _SIOCGIFINDEX: libc::c_ulong = 0x8933;
|
pub const _SIOCGIFINDEX: libc::c_ulong = 0x8933;
|
||||||
|
/// Capture all packages.
|
||||||
pub const _ETH_P_ALL: libc::c_short = 0x0003;
|
pub const _ETH_P_ALL: libc::c_short = 0x0003;
|
||||||
|
/// Set the interface flags.
|
||||||
pub const TUNSETIFF: libc::c_ulong = 0x400454CA;
|
pub const TUNSETIFF: libc::c_ulong = 0x400454CA;
|
||||||
|
/// TUN device.
|
||||||
pub const _IFF_TUN: libc::c_int = 0x0001;
|
pub const _IFF_TUN: libc::c_int = 0x0001;
|
||||||
|
/// TAP device.
|
||||||
pub const IFF_TAP: libc::c_int = 0x0002;
|
pub const IFF_TAP: libc::c_int = 0x0002;
|
||||||
|
/// No packet information.
|
||||||
pub const IFF_NO_PI: libc::c_int = 0x1000;
|
pub const IFF_NO_PI: libc::c_int = 0x1000;
|
||||||
|
|
||||||
const ETHERNET_HEADER_LEN: usize = 14;
|
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)
|
Ok(ifreq.ifr_data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// A TUN/TAP device.
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct TunTap {
|
pub struct TunTap {
|
||||||
fd: libc::c_int,
|
fd: libc::c_int,
|
||||||
@ -60,6 +70,7 @@ impl AsRawFd for TunTap {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl TunTap {
|
impl TunTap {
|
||||||
|
/// Create a new TUN/TAP device.
|
||||||
pub fn new(name: &str) -> io::Result<TunTap> {
|
pub fn new(name: &str) -> io::Result<TunTap> {
|
||||||
unsafe {
|
unsafe {
|
||||||
let fd = libc::open(
|
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 {
|
pub struct TunTapDevice {
|
||||||
device: Async<TunTap>,
|
device: Async<TunTap>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TunTapDevice {
|
impl TunTapDevice {
|
||||||
|
/// Create a new TUN/TAP device.
|
||||||
pub fn new(name: &str) -> io::Result<TunTapDevice> {
|
pub fn new(name: &str) -> io::Result<TunTapDevice> {
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
device: Async::new(TunTap::new(name)?)?,
|
device: Async::new(TunTap::new(name)?)?,
|
||||||
|
Loading…
Reference in New Issue
Block a user