docs [AI]

This commit is contained in:
2026-06-30 18:51:09 +07:00
parent 18cad76e38
commit f7a76353ea
67 changed files with 2104 additions and 1417 deletions
+13
View File
@@ -1,12 +1,22 @@
//! Обёртка над асинхронным TUN-устройством.
//!
//! [`Tun`] инкапсулирует создание/открытие TUN тремя путями: по конфигурации
//! ([`new`](Tun::new)), через билдер-замыкание ([`create`](Tun::create)) или из
//! готового файлового дескриптора ([`from_fd`](Tun::from_fd) — так его передаёт
//! Android `VpnService`). [`split`](Tun::split) разводит устройство на отдельные
//! reader/writer, чтобы читать и писать пакеты из разных задач.
use netrunner_logger::error;
use std::io;
use tun::{AsyncDevice, Configuration, DeviceReader, DeviceWriter, create_as_async};
/// Асинхронное TUN-устройство.
pub struct Tun {
device: AsyncDevice,
}
impl Tun {
/// Создаёт устройство из готовой конфигурации.
pub fn new(config: &Configuration) -> io::Result<Self> {
match create_as_async(config) {
Ok(device) => Ok(Self { device }),
@@ -17,6 +27,7 @@ impl Tun {
}
}
/// Создаёт устройство, настраивая конфигурацию через замыкание-билдер.
pub fn create<F>(f: F) -> io::Result<Self>
where
F: FnOnce(&mut Configuration),
@@ -26,6 +37,7 @@ impl Tun {
Self::new(&config)
}
/// Открывает устройство из уже существующего fd (передаётся Android `VpnService`).
pub fn from_fd(fd: i32) -> io::Result<Self> {
let mut config = Configuration::default();
config.raw_fd(fd);
@@ -34,6 +46,7 @@ impl Tun {
Self::new(&config)
}
/// Разводит устройство на пишущую и читающую половины (для разных задач).
pub fn split(self) -> io::Result<(DeviceWriter, DeviceReader)> {
let (writer, reader) = self.device.split()?;
Ok((writer, reader))