style: rustfmt tun general.rs
This commit is contained in:
+31
-29
@@ -9,10 +9,10 @@ use std::io;
|
|||||||
use std::net::Ipv4Addr;
|
use std::net::Ipv4Addr;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use tokio::sync::mpsc::{Receiver, Sender};
|
use tokio::sync::mpsc::{Receiver, Sender};
|
||||||
use tun_rs::async_framed::{Decoder, DeviceFramedRead, DeviceFramedWrite, Encoder};
|
|
||||||
use tun_rs::AsyncDevice;
|
use tun_rs::AsyncDevice;
|
||||||
#[cfg(not(target_os = "android"))]
|
#[cfg(not(target_os = "android"))]
|
||||||
use tun_rs::DeviceBuilder;
|
use tun_rs::DeviceBuilder;
|
||||||
|
use tun_rs::async_framed::{Decoder, DeviceFramedRead, DeviceFramedWrite, Encoder};
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct DeviceIOManager {
|
pub struct DeviceIOManager {
|
||||||
@@ -130,40 +130,42 @@ impl DeviceIOManager {
|
|||||||
fn create_tun(config: DeviceConfig) -> anyhow::Result<AsyncDevice> {
|
fn create_tun(config: DeviceConfig) -> anyhow::Result<AsyncDevice> {
|
||||||
#[cfg(target_os = "android")]
|
#[cfg(target_os = "android")]
|
||||||
{
|
{
|
||||||
let fd = config.tun_fd.context("Android requires a VpnService TUN fd")?;
|
let fd = config
|
||||||
|
.tun_fd
|
||||||
|
.context("Android requires a VpnService TUN fd")?;
|
||||||
// SAFETY: The fd comes directly from ParcelFileDescriptor returned by
|
// SAFETY: The fd comes directly from ParcelFileDescriptor returned by
|
||||||
// VpnService.Builder.establish and remains open for the network lifetime.
|
// VpnService.Builder.establish and remains open for the network lifetime.
|
||||||
return unsafe { Ok(AsyncDevice::from_fd(fd)?) };
|
return unsafe { Ok(AsyncDevice::from_fd(fd)?) };
|
||||||
}
|
}
|
||||||
#[cfg(not(target_os = "android"))]
|
#[cfg(not(target_os = "android"))]
|
||||||
{
|
{
|
||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
if let Some(fd) = config.tun_fd {
|
if let Some(fd) = config.tun_fd {
|
||||||
// SAFETY: Caller must ensure fd is a valid, open file descriptor for a TUN device.
|
// SAFETY: Caller must ensure fd is a valid, open file descriptor for a TUN device.
|
||||||
// Using an invalid fd may cause undefined behavior.
|
// Using an invalid fd may cause undefined behavior.
|
||||||
unsafe { return Ok(AsyncDevice::from_fd(fd)?) }
|
unsafe { return Ok(AsyncDevice::from_fd(fd)?) }
|
||||||
}
|
}
|
||||||
let mut builder = DeviceBuilder::new();
|
let mut builder = DeviceBuilder::new();
|
||||||
if let Some(tun_name) = config.tun_name {
|
if let Some(tun_name) = config.tun_name {
|
||||||
builder = builder.name(tun_name);
|
builder = builder.name(tun_name);
|
||||||
}
|
}
|
||||||
if let Some(mtu) = config.mtu {
|
if let Some(mtu) = config.mtu {
|
||||||
builder = builder.mtu(mtu);
|
builder = builder.mtu(mtu);
|
||||||
}
|
}
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
{
|
{
|
||||||
builder = builder.metric(1);
|
builder = builder.metric(1);
|
||||||
}
|
}
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(target_os = "linux")]
|
||||||
{
|
{
|
||||||
builder = builder.offload(true);
|
builder = builder.offload(true);
|
||||||
}
|
}
|
||||||
let dev = builder.build_async().context("创建tun失败")?;
|
let dev = builder.build_async().context("创建tun失败")?;
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(target_os = "linux")]
|
||||||
{
|
{
|
||||||
_ = dev.set_tx_queue_len(1000);
|
_ = dev.set_tx_queue_len(1000);
|
||||||
}
|
}
|
||||||
Ok(dev)
|
Ok(dev)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn create(
|
fn create(
|
||||||
|
|||||||
Reference in New Issue
Block a user