From 375a0671f8ff574967ebb6c8a30dc85c0668cd09 Mon Sep 17 00:00:00 2001 From: asxalex Date: Fri, 30 Aug 2024 16:07:06 +0800 Subject: [PATCH] tun --- src/network/async_main.rs | 27 ++++++++++---------------- src/network/node.rs | 1 + src/network/packet.rs | 41 +++++++++++++++++++++------------------ 3 files changed, 33 insertions(+), 36 deletions(-) diff --git a/src/network/async_main.rs b/src/network/async_main.rs index 0bd6d0a..aa0ed24 100644 --- a/src/network/async_main.rs +++ b/src/network/async_main.rs @@ -1,7 +1,7 @@ use std::net::IpAddr; use std::sync::atomic::Ordering; -use std::time::Duration; use std::sync::Arc; +use std::time::Duration; use crate::config::TCP_PING_TIME; use crate::network::ipv6::run_ipv6; @@ -191,7 +191,7 @@ async fn handle_tcp_event(edge: &Node, eventtype: EventType, eventprotobuf: &[u8 return; }; let v4 = reg.nat_ip.to_be_bytes(); - let mut v6_sock = None; + let mut v6_sock = None; if let Some(v6_info) = reg.v6_info { if let Ok(v6_bytes) = v6_info.v6.try_into() { v6_sock = Some(V6Info { @@ -418,15 +418,11 @@ async fn run_edge_loop(eee: &'static Node, cancel: CancellationToken) { async fn send_stun_request(eee: &Node) { let sdl_v6_info = match *eee.ipv6.read().unwrap() { - Some(ref l) => { - Some(Sdlv6Info { - port: l.port as u32, - v6: Vec::from(l.v6), - }) - } - None => { - None - } + Some(ref l) => Some(Sdlv6Info { + port: l.port as u32, + v6: Vec::from(l.v6), + }), + None => None, }; let req = SdlStunRequest { cookie: 0, @@ -449,11 +445,7 @@ async fn send_stun_request(eee: &Node) { } } -pub async fn loop_socket_v6( - eee: &Node, - socket: Arc, - cancel: CancellationToken, -) { +pub async fn loop_socket_v6(eee: &Node, socket: Arc, cancel: CancellationToken) { debug!("loop sock v6"); loop { tokio::select! { @@ -478,7 +470,6 @@ pub async fn loop_socket_v6( } } debug!("loop_socket_v4 exited"); - } pub async fn loop_socket_v4( @@ -564,10 +555,12 @@ async fn get_tun_flow(eee: &'static Node, tx: Sender>) { } async fn read_and_parse_tun_packet(eee: &'static Node, buf: Vec) { + /* if !eee.is_authorized() { debug!("drop packet before authorized"); return; } + */ /* if eee.stats.last_sup.load(Ordering::Relaxed) == 0 { debug!("drop packet before first registration"); diff --git a/src/network/node.rs b/src/network/node.rs index 9391c87..1e8c866 100644 --- a/src/network/node.rs +++ b/src/network/node.rs @@ -1,6 +1,7 @@ use dashmap::DashMap; use rsa::RsaPrivateKey; use sdlan_sn_rs::config::{AF_INET, AF_INET6}; +use std::collections::HashMap; use std::net::SocketAddr; use std::sync::atomic::{AtomicBool, AtomicU32, AtomicU64, AtomicU8, Ordering}; use std::sync::{Arc, Mutex, RwLock}; diff --git a/src/network/packet.rs b/src/network/packet.rs index fe859ff..41de93b 100644 --- a/src/network/packet.rs +++ b/src/network/packet.rs @@ -1,4 +1,8 @@ -use std::{net::SocketAddr, sync::{atomic::Ordering, RwLock}, time::Duration}; +use std::{ + net::SocketAddr, + sync::{atomic::Ordering, RwLock}, + time::Duration, +}; use crate::{ config::REGISTER_INTERVAL, @@ -240,7 +244,7 @@ pub async fn handle_packet_peer_info( return Ok(()); }; - let mut v6: [u8; 16] = [0;16]; + let mut v6: [u8; 16] = [0; 16]; let mut v6_port = 0; if let Some(v6_info) = pi.v6_info { if let Ok(v6_bytes) = v6_info.v6.as_slice().try_into() { @@ -269,10 +273,7 @@ pub async fn handle_packet_peer_info( ); let mut v6_info = None; if v6_port != 0 { - v6_info = Some(V6Info { - port: v6_port, - v6, - }) + v6_info = Some(V6Info { port: v6_port, v6 }) } send_register(eee, &sock, &v6_info).await; @@ -512,7 +513,8 @@ pub async fn check_peer_registration_needed( let last_seen = k.last_seen.load(Ordering::Relaxed); // more than 3 seconds if now - last_seen > 1 { - check_known_peer_sock_change(eee, from_sn, src_ip, peer_sock, now, ipv4_to_ipv6).await; + check_known_peer_sock_change(eee, from_sn, src_ip, peer_sock, now, ipv4_to_ipv6) + .await; } } } @@ -636,11 +638,7 @@ async fn register_with_local_peers(eee: &Node) { } } -async fn send_register( - eee: &Node, - sock: &SdlanSock, - _v6_info: &Option -) { +async fn send_register(eee: &Node, sock: &SdlanSock, _v6_info: &Option) { if !eee.config.allow_p2p { debug!("skipping register as p2p is disabled"); return; @@ -661,12 +659,17 @@ async fn send_register( let _ = send_to_sock(eee, &msg, sock).await; if let Some(ref v6_info) = _v6_info { - let _ = send_to_sock(eee, &msg, &SdlanSock { - family: AF_INET6, - port: v6_info.port, - v4: [0;4], - v6: v6_info.v6, - }).await; + let _ = send_to_sock( + eee, + &msg, + &SdlanSock { + family: AF_INET6, + port: v6_info.port, + v4: [0; 4], + v6: v6_info.v6, + }, + ) + .await; } /* let key = eee.get_header_key(); @@ -727,7 +730,7 @@ async fn handle_tun_packet( return; } // packet should be sent to dev - debug!("writing {} bytes to tun", data.len()); + debug!("writing {} bytes to tun: {:?}", data.len(), data); if let Err(e) = eee.device.send(&data) { error!("failed to write to tun: {}", e.to_string()); }