export structure and function, and fix the default
This commit is contained in:
parent
51cdeb285e
commit
4cccf58b2e
@ -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;
|
||||
|
||||
@ -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());
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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();
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user