export structure and function, and fix the default

This commit is contained in:
alex 2026-04-13 15:48:57 +08:00
parent 51cdeb285e
commit 4cccf58b2e
5 changed files with 23 additions and 5 deletions

View File

@ -14,6 +14,7 @@ use std::net::{SocketAddr, ToSocketAddrs};
pub use network::get_edge;
pub use network::get_install_channel;
pub use network::{async_main, init_edge, NodeConfig, restore_dns};
pub use network::{RouteInfo, set_route_from_net};
use sdlan_sn_rs::utils::{Mac, save_to_file};
use serde::{Deserialize, Serialize};
use tokio::net::UdpSocket;

View File

@ -32,9 +32,26 @@ impl RouteTable2 {
}
}
pub fn lookup(&self, ip: u32) -> Option<(u8, Ipv4Addr)> {
let res = self.route_table.lookup(ip);
if res.is_some() {
res
} else {
if self.default_gw.load().is_some() {
Some((0, self.default_gw.load().unwrap()))
} else {
None
}
}
}
pub fn clear_and_add_routes(&self, routes: Vec<RouteInfo>) -> Result<()> {
for route in self.cache_table.iter() {
let (net, gw) = route.key();
if net.addr().to_bits() == 0 {
// default gateway
self.default_gw.store(Arc::new(Some(gw.clone())));
}
if route.value().load(Ordering::Relaxed) {
if let Err(e) = del_route(net, gw) {
error!("failed to del route: {}", e.as_str());

View File

@ -260,7 +260,7 @@ impl TunTapPacketHandler for Iface {
if edge.device_config.contains(&Ipv4Addr::from_bits(dest_ip)) {
let _ = edge.send_arp_request(dest_ip, dest_ip).await;
} else {
if let Some((_, real_ip)) = edge.route_table.route_table.lookup(dest_ip) {
if let Some((_, real_ip)) = edge.route_table.lookup(dest_ip) {
let real_ip = u32::from_be_bytes(real_ip.octets());
let _ = edge.send_arp_request(dest_ip, real_ip).await;
}
@ -669,7 +669,7 @@ impl TunTapPacketHandler for Iface {
if eee.device_config.contains(&Ipv4Addr::from_bits(dstip)) {
let _ = eee.send_arp_request(dstip, dstip).await;
} else {
if let Some((_, real_ip)) = eee.route_table.route_table.lookup(dstip) {
if let Some((_, real_ip)) = eee.route_table.lookup(dstip) {
let real_ip = u32::from_be_bytes(real_ip.octets());
let _ = eee.send_arp_request(dstip, real_ip).await;
}

View File

@ -553,7 +553,7 @@ impl TunTapPacketHandler for Iface {
if eee.device_config.contains(&Ipv4Addr::from_bits(dstip)) {
let _ = eee.send_arp_request(dstip, dstip).await;
} else {
if let Some((_, real_ip)) = eee.route_table.route_table.lookup(dstip) {
if let Some((_, real_ip)) = eee.route_table.lookup(dstip) {
let real_ip = u32::from_be_bytes(real_ip.octets());
let _ = eee.send_arp_request(dstip, real_ip).await;
}

View File

@ -78,12 +78,12 @@ impl RouteTableTrie {
self.trie.store(Arc::new(IpTrie::default()));
}
pub fn lookup(&self, ip: u32) -> Option<(u8, Ipv4Addr)> {
pub(crate) fn lookup(&self, ip: u32) -> Option<(u8, Ipv4Addr)> {
let trie = self.trie.load();
trie.lookup(ip)
}
pub fn insert(&self, prefix: u32, prefix_len: u8, nexthop: Ipv4Addr) {
pub(crate) fn insert(&self, prefix: u32, prefix_len: u8, nexthop: Ipv4Addr) {
let old = self.trie.load();
let mut new_trie = (*(*old)).clone();