fix warning
This commit is contained in:
parent
06d7819fd1
commit
cb71c53102
@ -4,9 +4,8 @@ use sdlan_rs::CommandLine;
|
|||||||
use sdlan_rs::CommandLineInput;
|
use sdlan_rs::CommandLineInput;
|
||||||
use sdlan_sn_rs::log;
|
use sdlan_sn_rs::log;
|
||||||
|
|
||||||
use tracing::{debug, error};
|
use tracing::error;
|
||||||
|
|
||||||
use std::process::exit;
|
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use structopt::StructOpt;
|
use structopt::StructOpt;
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
use std::{
|
use std::{
|
||||||
array,
|
collections::HashMap,
|
||||||
sync::atomic::{AtomicU8, Ordering},
|
sync::atomic::{AtomicU8, Ordering},
|
||||||
time::Duration,
|
time::Duration,
|
||||||
};
|
};
|
||||||
@ -13,10 +13,11 @@ use tokio::sync::{
|
|||||||
oneshot,
|
oneshot,
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::{get_edge, get_route_table};
|
use super::{get_edge, get_route_table, init_route};
|
||||||
|
|
||||||
static GLOBAL_ARP: OnceCell<ArpActor> = OnceCell::new();
|
static GLOBAL_ARP: OnceCell<ArpActor> = OnceCell::new();
|
||||||
pub fn init_arp() {
|
pub fn init_arp() {
|
||||||
|
init_route();
|
||||||
let actor = ArpActor::new();
|
let actor = ArpActor::new();
|
||||||
GLOBAL_ARP.set(actor).unwrap();
|
GLOBAL_ARP.set(actor).unwrap();
|
||||||
}
|
}
|
||||||
@ -27,6 +28,7 @@ pub fn get_arp() -> &'static ArpActor {
|
|||||||
|
|
||||||
const ETHER_TYPE_ARP: u16 = 0x0806;
|
const ETHER_TYPE_ARP: u16 = 0x0806;
|
||||||
const ETHER_TYPE_IP: u16 = 0x0800;
|
const ETHER_TYPE_IP: u16 = 0x0800;
|
||||||
|
#[allow(unused)]
|
||||||
const ETHER_TYPE_IP6: u16 = 0x86dd;
|
const ETHER_TYPE_IP6: u16 = 0x86dd;
|
||||||
|
|
||||||
const ARP_MAX_AGE: u8 = 128;
|
const ARP_MAX_AGE: u8 = 128;
|
||||||
@ -131,17 +133,19 @@ impl ArpHdr {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const ARP_TABLE_SIZE: usize = 8;
|
// const ARP_TABLE_SIZE: usize = 8;
|
||||||
static ARPTIME: AtomicU8 = AtomicU8::new(0);
|
static ARPTIME: AtomicU8 = AtomicU8::new(0);
|
||||||
const BROADCAST_IPADDR: u32 = 0xffffffff;
|
const BROADCAST_IPADDR: u32 = 0xffffffff;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
#[allow(unused)]
|
||||||
pub struct ArpEntry {
|
pub struct ArpEntry {
|
||||||
ip_addr: u32,
|
ip_addr: u32,
|
||||||
arptime: u8,
|
arptime: u8,
|
||||||
hw_addr: [u8; 6],
|
hw_addr: [u8; 6],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
impl ArpEntry {
|
impl ArpEntry {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
Self {
|
Self {
|
||||||
@ -151,12 +155,14 @@ impl ArpEntry {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
pub struct ArpInfo {
|
pub struct ArpInfo {
|
||||||
// host_ip: AtomicU32,
|
// host_ip: AtomicU32,
|
||||||
// ip representation of mask
|
// ip representation of mask
|
||||||
// host_netmask: AtomicU32,
|
// host_netmask: AtomicU32,
|
||||||
entry: [ArpEntry; ARP_TABLE_SIZE],
|
entry: HashMap<u32, ArpEntry>,
|
||||||
|
// entry: [ArpEntry; ARP_TABLE_SIZE],
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ArpInfo {
|
impl ArpInfo {
|
||||||
@ -197,17 +203,32 @@ impl ArpInfo {
|
|||||||
if target_ip == 0 {
|
if target_ip == 0 {
|
||||||
panic!("target should not route to me");
|
panic!("target should not route to me");
|
||||||
}
|
}
|
||||||
|
if let Some(entry) = self.entry.get(&target_ip) {
|
||||||
|
return (entry.hw_addr, target_ip, false);
|
||||||
|
}
|
||||||
|
/*
|
||||||
for i in 0..ARP_TABLE_SIZE {
|
for i in 0..ARP_TABLE_SIZE {
|
||||||
let item = &self.entry[i];
|
let item = &self.entry[i];
|
||||||
if item.ip_addr == target_ip {
|
if item.ip_addr == target_ip {
|
||||||
return (item.hw_addr, target_ip, false);
|
return (item.hw_addr, target_ip, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
return (BROADCAST_MAC, target_ip, true);
|
return (BROADCAST_MAC, target_ip, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_arp(&mut self, mac: [u8; 6], ip: u32) {
|
fn set_arp(&mut self, mac: [u8; 6], ip: u32) {
|
||||||
println!("setting ip: {:?} is at {:?}", ip.to_be_bytes(), mac);
|
// println!("setting ip: {:?} is at {:?}", ip.to_be_bytes(), mac);
|
||||||
|
let nowage = ARPTIME.load(Ordering::Relaxed);
|
||||||
|
self.entry.insert(
|
||||||
|
ip,
|
||||||
|
ArpEntry {
|
||||||
|
ip_addr: ip,
|
||||||
|
hw_addr: mac,
|
||||||
|
arptime: nowage,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
/*
|
||||||
for i in 0..ARP_TABLE_SIZE {
|
for i in 0..ARP_TABLE_SIZE {
|
||||||
let item = &mut self.entry[i];
|
let item = &mut self.entry[i];
|
||||||
if item.ip_addr != 0 {
|
if item.ip_addr != 0 {
|
||||||
@ -219,6 +240,8 @@ impl ArpInfo {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
/*
|
||||||
println!("set_arp 1");
|
println!("set_arp 1");
|
||||||
|
|
||||||
let mut itemindex = ARP_TABLE_SIZE;
|
let mut itemindex = ARP_TABLE_SIZE;
|
||||||
@ -251,16 +274,28 @@ impl ArpInfo {
|
|||||||
temp.ip_addr = ip;
|
temp.ip_addr = ip;
|
||||||
temp.hw_addr = mac;
|
temp.hw_addr = mac;
|
||||||
println!("set arp 6: idx={} => {:?}", itemindex, temp);
|
println!("set arp 6: idx={} => {:?}", itemindex, temp);
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
fn timer(&mut self) {
|
fn timer(&mut self) {
|
||||||
let timer = ARPTIME.fetch_add(1, Ordering::Relaxed);
|
let timer = ARPTIME.fetch_add(1, Ordering::Relaxed);
|
||||||
|
let mut todelete = vec![];
|
||||||
|
for (ip, entry) in &self.entry {
|
||||||
|
if (timer - entry.arptime) >= ARP_MAX_AGE {
|
||||||
|
todelete.push(*ip);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for ip in todelete {
|
||||||
|
self.entry.remove(&ip);
|
||||||
|
}
|
||||||
|
/*
|
||||||
for i in 0..ARP_TABLE_SIZE {
|
for i in 0..ARP_TABLE_SIZE {
|
||||||
let item = &mut self.entry[i];
|
let item = &mut self.entry[i];
|
||||||
if item.ip_addr != 0 && (timer - item.arptime) >= ARP_MAX_AGE {
|
if item.ip_addr != 0 && (timer - item.arptime) >= ARP_MAX_AGE {
|
||||||
item.ip_addr = 0;
|
item.ip_addr = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -275,6 +310,7 @@ pub struct ArpRequest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
#[allow(unused)]
|
||||||
pub enum ArpResponse {
|
pub enum ArpResponse {
|
||||||
LookupResp {
|
LookupResp {
|
||||||
mac: Mac,
|
mac: Mac,
|
||||||
@ -304,7 +340,8 @@ impl ArpActor {
|
|||||||
|
|
||||||
async fn loop_arp_info(mut rx: Receiver<ArpRequest>) {
|
async fn loop_arp_info(mut rx: Receiver<ArpRequest>) {
|
||||||
let mut arp = ArpInfo {
|
let mut arp = ArpInfo {
|
||||||
entry: array::from_fn(|_i| ArpEntry::new()),
|
// entry: array::from_fn(|_i| ArpEntry::new()),
|
||||||
|
entry: HashMap::new(),
|
||||||
};
|
};
|
||||||
loop {
|
loop {
|
||||||
tokio::select! {
|
tokio::select! {
|
||||||
@ -360,6 +397,7 @@ pub fn generate_arp_request(srcmac: [u8; 6], dstip: u32, srcip: u32) -> Vec<u8>
|
|||||||
arphdr.dipaddr = [(dstip >> 16) as u16, (dstip & 0xffff) as u16];
|
arphdr.dipaddr = [(dstip >> 16) as u16, (dstip & 0xffff) as u16];
|
||||||
arphdr.sipaddr = [(srcip >> 16) as u16, (srcip & 0xffff) as u16];
|
arphdr.sipaddr = [(srcip >> 16) as u16, (srcip & 0xffff) as u16];
|
||||||
|
|
||||||
|
/*
|
||||||
println!(
|
println!(
|
||||||
"arphdr.sipaddr: {:?}, {:?}",
|
"arphdr.sipaddr: {:?}, {:?}",
|
||||||
arphdr.sipaddr[0].to_be_bytes(),
|
arphdr.sipaddr[0].to_be_bytes(),
|
||||||
@ -370,6 +408,7 @@ pub fn generate_arp_request(srcmac: [u8; 6], dstip: u32, srcip: u32) -> Vec<u8>
|
|||||||
arphdr.dipaddr[0].to_be_bytes(),
|
arphdr.dipaddr[0].to_be_bytes(),
|
||||||
arphdr.dipaddr[1].to_be_bytes()
|
arphdr.dipaddr[1].to_be_bytes()
|
||||||
);
|
);
|
||||||
|
*/
|
||||||
|
|
||||||
arphdr.marshal_to_bytes()
|
arphdr.marshal_to_bytes()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,25 +6,18 @@ use std::time::Duration;
|
|||||||
use crate::config::{NULL_MAC, TCP_PING_TIME};
|
use crate::config::{NULL_MAC, TCP_PING_TIME};
|
||||||
use crate::network::ipv6::run_ipv6;
|
use crate::network::ipv6::run_ipv6;
|
||||||
use crate::network::{
|
use crate::network::{
|
||||||
generate_arp_request, get_edge, ping_to_sn, read_and_parse_packet, send_arp_request, ArpHdr,
|
get_edge, ping_to_sn, read_and_parse_packet, RegisterSuperFeedback, TunTapPacketHandler,
|
||||||
ArpRequestInfo, ArpResponse, RegisterSuperFeedback, TunTapPacketHandler, ARP_REPLY,
|
|
||||||
ARP_REQUEST,
|
|
||||||
};
|
};
|
||||||
use crate::pb::{
|
use crate::pb::{
|
||||||
encode_to_tcp_message, encode_to_udp_message, SdlData, SdlDevAddr, SdlRegisterSuper,
|
encode_to_tcp_message, encode_to_udp_message, SdlDevAddr, SdlRegisterSuper,
|
||||||
SdlRegisterSuperAck, SdlRegisterSuperNak, SdlSendRegisterEvent, SdlStunRequest, Sdlv6Info,
|
SdlRegisterSuperAck, SdlRegisterSuperNak, SdlSendRegisterEvent, SdlStunRequest, Sdlv6Info,
|
||||||
};
|
};
|
||||||
use crate::tcp::{init_tcp_conn, EventType, NakMsgCode, PacketType, SdlanTcp};
|
use crate::tcp::{init_tcp_conn, EventType, NakMsgCode, PacketType, SdlanTcp};
|
||||||
use crate::utils::{send_to_sock, CommandLine};
|
use crate::utils::{send_to_sock, CommandLine};
|
||||||
use crate::ConnectionState;
|
use crate::ConnectionState;
|
||||||
use etherparse::ether_type::ARP;
|
use sdlan_sn_rs::config::AF_INET;
|
||||||
use etherparse::{Ethernet2Header, IpHeaders};
|
|
||||||
use sdlan_sn_rs::config::{AF_INET, AF_INET6, SDLAN_DEFAULT_TTL};
|
|
||||||
use sdlan_sn_rs::peer::{SdlanSock, V6Info};
|
use sdlan_sn_rs::peer::{SdlanSock, V6Info};
|
||||||
use sdlan_sn_rs::utils::{
|
use sdlan_sn_rs::utils::{get_current_timestamp, ip_to_string, is_multi_broadcast, rsa_decrypt};
|
||||||
aes_encrypt, get_current_timestamp, ip_to_string, is_multi_broadcast, rsa_decrypt,
|
|
||||||
BROADCAST_MAC,
|
|
||||||
};
|
|
||||||
use sdlan_sn_rs::utils::{Mac, Result};
|
use sdlan_sn_rs::utils::{Mac, Result};
|
||||||
use tokio::io::AsyncWriteExt;
|
use tokio::io::AsyncWriteExt;
|
||||||
use tokio::sync::mpsc::{channel, Receiver, Sender};
|
use tokio::sync::mpsc::{channel, Receiver, Sender};
|
||||||
@ -34,7 +27,7 @@ use super::{check_peer_registration_needed, packet, Node, StartStopInfo};
|
|||||||
use crate::utils::Socket;
|
use crate::utils::Socket;
|
||||||
|
|
||||||
use prost::Message;
|
use prost::Message;
|
||||||
use tracing::{debug, error, info};
|
use tracing::{debug, error};
|
||||||
|
|
||||||
async fn handle_tcp_message(msg: SdlanTcp) {
|
async fn handle_tcp_message(msg: SdlanTcp) {
|
||||||
let edge = get_edge();
|
let edge = get_edge();
|
||||||
@ -73,10 +66,12 @@ async fn handle_tcp_message(msg: SdlanTcp) {
|
|||||||
.ip
|
.ip
|
||||||
.net_addr
|
.net_addr
|
||||||
.store(dev.net_addr, Ordering::Relaxed);
|
.store(dev.net_addr, Ordering::Relaxed);
|
||||||
|
/*
|
||||||
let mac = match dev.mac.try_into() {
|
let mac = match dev.mac.try_into() {
|
||||||
Err(_) => NULL_MAC,
|
Err(_) => NULL_MAC,
|
||||||
Ok(m) => m,
|
Ok(m) => m,
|
||||||
};
|
};
|
||||||
|
*/
|
||||||
// *edge.device_config.mac.write().unwrap() = mac;
|
// *edge.device_config.mac.write().unwrap() = mac;
|
||||||
edge.device_config
|
edge.device_config
|
||||||
.ip
|
.ip
|
||||||
@ -214,7 +209,7 @@ async fn handle_tcp_event(edge: &Node, eventtype: EventType, eventprotobuf: &[u8
|
|||||||
|
|
||||||
let dst_mac = match reg.dst_mac.try_into() {
|
let dst_mac = match reg.dst_mac.try_into() {
|
||||||
Ok(m) => m,
|
Ok(m) => m,
|
||||||
Err(e) => NULL_MAC,
|
Err(_e) => NULL_MAC,
|
||||||
};
|
};
|
||||||
|
|
||||||
check_peer_registration_needed(
|
check_peer_registration_needed(
|
||||||
@ -599,9 +594,13 @@ async fn edge_send_packet_to_net(eee: &Node, data: &[u8]) {
|
|||||||
error!("drop tun packet due to encrypt key len is 0");
|
error!("drop tun packet due to encrypt key len is 0");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
eee.device
|
if let Err(e) = eee
|
||||||
|
.device
|
||||||
.handle_packet_from_device(data, encrypt_key.as_slice())
|
.handle_packet_from_device(data, encrypt_key.as_slice())
|
||||||
.await;
|
.await
|
||||||
|
{
|
||||||
|
error!("failed to handle packet from device: {}", e.to_string());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn send_packet_to_net(eee: &Node, dst_mac: Mac, pkt: &[u8], size: u64) {
|
pub async fn send_packet_to_net(eee: &Node, dst_mac: Mac, pkt: &[u8], size: u64) {
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
use dashmap::DashMap;
|
use dashmap::DashMap;
|
||||||
use rsa::RsaPrivateKey;
|
use rsa::RsaPrivateKey;
|
||||||
use sdlan_sn_rs::config::{AF_INET, AF_INET6};
|
use sdlan_sn_rs::config::{AF_INET, AF_INET6};
|
||||||
use std::collections::HashMap;
|
|
||||||
use std::net::SocketAddr;
|
use std::net::SocketAddr;
|
||||||
use std::sync::atomic::{AtomicBool, AtomicU32, AtomicU64, AtomicU8, Ordering};
|
use std::sync::atomic::{AtomicBool, AtomicU32, AtomicU64, AtomicU8, Ordering};
|
||||||
use std::sync::{Arc, Mutex, RwLock};
|
use std::sync::{Arc, Mutex, RwLock};
|
||||||
|
|||||||
@ -1,18 +1,9 @@
|
|||||||
use std::{
|
use std::{net::SocketAddr, sync::atomic::Ordering, time::Duration};
|
||||||
net::SocketAddr,
|
|
||||||
sync::{atomic::Ordering, RwLock},
|
|
||||||
time::Duration,
|
|
||||||
};
|
|
||||||
|
|
||||||
use crate::{
|
use crate::{network::TunTapPacketHandler, utils::mac_to_string};
|
||||||
network::{send_packet_to_net, TunTapPacketHandler},
|
|
||||||
utils::mac_to_string,
|
|
||||||
};
|
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
config::{NULL_MAC, REGISTER_INTERVAL},
|
config::{NULL_MAC, REGISTER_INTERVAL},
|
||||||
get_edge,
|
|
||||||
network::{send_arp_request, ArpHdr, ArpRequestInfo, ARP_REPLY, ARP_REQUEST},
|
|
||||||
pb::{
|
pb::{
|
||||||
encode_to_tcp_message, encode_to_udp_message, SdlData, SdlEmpty, SdlPeerInfo, SdlQueryInfo,
|
encode_to_tcp_message, encode_to_udp_message, SdlData, SdlEmpty, SdlPeerInfo, SdlQueryInfo,
|
||||||
SdlRegister, SdlRegisterAck, SdlStunProbeReply,
|
SdlRegister, SdlRegisterAck, SdlStunProbeReply,
|
||||||
@ -20,14 +11,13 @@ use crate::{
|
|||||||
tcp::{get_tcp_conn, PacketType},
|
tcp::{get_tcp_conn, PacketType},
|
||||||
utils::{send_to_sock, Socket},
|
utils::{send_to_sock, Socket},
|
||||||
};
|
};
|
||||||
use etherparse::{ether_type::ARP, Ethernet2Header, IpHeader, IpHeaders};
|
|
||||||
use prost::Message;
|
use prost::Message;
|
||||||
use sdlan_sn_rs::{
|
use sdlan_sn_rs::{
|
||||||
config::{AF_INET, AF_INET6},
|
config::{AF_INET, AF_INET6},
|
||||||
peer::{is_sdlan_sock_equal, SdlanSock, V6Info},
|
peer::{is_sdlan_sock_equal, SdlanSock, V6Info},
|
||||||
utils::{
|
utils::{
|
||||||
aes_decrypt, aes_encrypt, get_current_timestamp, get_sdlan_sock_from_socketaddr,
|
aes_decrypt, get_current_timestamp, get_sdlan_sock_from_socketaddr, is_multi_broadcast,
|
||||||
ip_to_string, is_multi_broadcast, Mac, Result, SDLanError, BROADCAST_MAC,
|
Mac, Result, SDLanError,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
@ -278,7 +268,7 @@ pub async fn handle_packet_peer_info(
|
|||||||
} else {
|
} else {
|
||||||
match eee.pending_peers.get_peer(&dst_mac) {
|
match eee.pending_peers.get_peer(&dst_mac) {
|
||||||
Some(edgeinfo) => {
|
Some(edgeinfo) => {
|
||||||
let mut sock = SdlanSock {
|
let sock = SdlanSock {
|
||||||
family: AF_INET,
|
family: AF_INET,
|
||||||
port: v4.port as u16,
|
port: v4.port as u16,
|
||||||
v4: v4_u32,
|
v4: v4_u32,
|
||||||
@ -725,12 +715,10 @@ async fn send_register(eee: &Node, sock: &SdlanSock, mac: Mac, _v6_info: &Option
|
|||||||
|
|
||||||
async fn handle_tun_packet(
|
async fn handle_tun_packet(
|
||||||
eee: &Node,
|
eee: &Node,
|
||||||
from_sock: &SdlanSock,
|
_from_sock: &SdlanSock,
|
||||||
from_sn: bool,
|
_from_sn: bool,
|
||||||
pkt: SdlData, //orig_sender: &SdlanSock
|
pkt: SdlData, //orig_sender: &SdlanSock
|
||||||
) {
|
) {
|
||||||
let now = get_current_timestamp();
|
|
||||||
|
|
||||||
let payload = pkt.data;
|
let payload = pkt.data;
|
||||||
let key = eee.get_encrypt_key();
|
let key = eee.get_encrypt_key();
|
||||||
if key.len() == 0 {
|
if key.len() == 0 {
|
||||||
@ -745,10 +733,13 @@ async fn handle_tun_packet(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let data = origin.unwrap();
|
let data = origin.unwrap();
|
||||||
debug!("ether size is {}", data.len());
|
if let Err(e) = eee
|
||||||
eee.device
|
.device
|
||||||
.handle_packet_from_net(&data, key.as_slice())
|
.handle_packet_from_net(&data, key.as_slice())
|
||||||
.await;
|
.await
|
||||||
|
{
|
||||||
|
error!("failed to handle packet from net: {}", e.to_string());
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
let msg_size = data.len() as u64;
|
let msg_size = data.len() as u64;
|
||||||
|
|
||||||
|
|||||||
@ -94,7 +94,7 @@ impl RouteInfo {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ip, mask, gateway
|
// ip, mask, gateway, cidr;gateway,cidr2;gateway2
|
||||||
pub fn parse_route(route: String) -> Vec<(u32, u32, u32)> {
|
pub fn parse_route(route: String) -> Vec<(u32, u32, u32)> {
|
||||||
let mut result = Vec::new();
|
let mut result = Vec::new();
|
||||||
let routes: Vec<_> = route.split(",").collect();
|
let routes: Vec<_> = route.split(",").collect();
|
||||||
|
|||||||
@ -2,10 +2,8 @@ use etherparse::ether_type::ARP;
|
|||||||
use etherparse::{Ethernet2Header, IpHeaders};
|
use etherparse::{Ethernet2Header, IpHeaders};
|
||||||
use sdlan_sn_rs::config::SDLAN_DEFAULT_TTL;
|
use sdlan_sn_rs::config::SDLAN_DEFAULT_TTL;
|
||||||
use sdlan_sn_rs::utils::{
|
use sdlan_sn_rs::utils::{
|
||||||
aes_encrypt, ip_to_string, is_ipv6_multicast, is_multi_broadcast, net_bit_len_to_mask,
|
aes_encrypt, ip_to_string, is_multi_broadcast, net_bit_len_to_mask, SDLanError, BROADCAST_MAC,
|
||||||
SDLanError, BROADCAST_MAC,
|
|
||||||
};
|
};
|
||||||
use std::error::Error;
|
|
||||||
use std::ffi::CStr;
|
use std::ffi::CStr;
|
||||||
use std::ffi::{c_char, c_int};
|
use std::ffi::{c_char, c_int};
|
||||||
use std::fs::OpenOptions;
|
use std::fs::OpenOptions;
|
||||||
@ -15,14 +13,14 @@ use std::sync::atomic::Ordering;
|
|||||||
use sdlan_sn_rs::utils::Result;
|
use sdlan_sn_rs::utils::Result;
|
||||||
use std::io::{Read, Write};
|
use std::io::{Read, Write};
|
||||||
use std::os::fd::AsRawFd;
|
use std::os::fd::AsRawFd;
|
||||||
use std::process::{Command, Output};
|
use std::process::Command;
|
||||||
|
|
||||||
use tracing::{debug, error, info};
|
use tracing::{debug, error, info};
|
||||||
|
|
||||||
use crate::get_edge;
|
use crate::get_edge;
|
||||||
use crate::network::{
|
use crate::network::{
|
||||||
generate_arp_request, send_arp_request, send_packet_to_net, ArpHdr, ArpRequestInfo,
|
generate_arp_request, send_arp_request, send_packet_to_net, ArpHdr, ArpRequestInfo,
|
||||||
ArpResponse, ARP_REPLY,
|
ArpResponse, ARP_REPLY, ARP_REQUEST,
|
||||||
};
|
};
|
||||||
use crate::pb::{encode_to_udp_message, SdlData};
|
use crate::pb::{encode_to_udp_message, SdlData};
|
||||||
use crate::tcp::PacketType;
|
use crate::tcp::PacketType;
|
||||||
@ -345,7 +343,7 @@ impl TunTapPacketHandler for Iface {
|
|||||||
send_arp_request(ArpRequestInfo::Set { ip, mac }).await;
|
send_arp_request(ArpRequestInfo::Set { ip, mac }).await;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(_) => {
|
||||||
error!("failed to parse ip header, dropping");
|
error!("failed to parse ip header, dropping");
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|||||||
@ -205,7 +205,7 @@ impl ReadWriteActor {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
other => {
|
_other => {
|
||||||
// send chan is closed;
|
// send chan is closed;
|
||||||
started = false;
|
started = false;
|
||||||
return;
|
return;
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
mod command;
|
mod command;
|
||||||
use std::hash::Hasher;
|
|
||||||
|
|
||||||
pub use command::*;
|
pub use command::*;
|
||||||
|
|
||||||
|
|||||||
@ -11,11 +11,11 @@ use tokio::net::UdpSocket;
|
|||||||
|
|
||||||
use crate::network::Node;
|
use crate::network::Node;
|
||||||
|
|
||||||
|
#[allow(unused)]
|
||||||
pub struct SocketV6 {
|
pub struct SocketV6 {
|
||||||
ipv6: Option<Ipv4Addr>,
|
ipv6: Option<Ipv4Addr>,
|
||||||
port: u16,
|
port: u16,
|
||||||
has_v6: bool,
|
has_v6: bool,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Socket {
|
pub struct Socket {
|
||||||
@ -58,9 +58,7 @@ impl Socket {
|
|||||||
|
|
||||||
pub async fn build_v6(v6: Ipv6Addr, port: u16) -> Result<Self> {
|
pub async fn build_v6(v6: Ipv6Addr, port: u16) -> Result<Self> {
|
||||||
let udp = UdpSocket::bind(format!("[{}]:{}", v6, port)).await?;
|
let udp = UdpSocket::bind(format!("[{}]:{}", v6, port)).await?;
|
||||||
Ok(Self {
|
Ok(Self { udp })
|
||||||
udp
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn build(port: u16, bind_any: bool, join_multicast: bool, tos: u32) -> Result<Self> {
|
pub async fn build(port: u16, bind_any: bool, join_multicast: bool, tos: u32) -> Result<Self> {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user