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_edge;
|
||||||
pub use network::get_install_channel;
|
pub use network::get_install_channel;
|
||||||
pub use network::{async_main, init_edge, NodeConfig, restore_dns};
|
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 sdlan_sn_rs::utils::{Mac, save_to_file};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use tokio::net::UdpSocket;
|
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<()> {
|
pub fn clear_and_add_routes(&self, routes: Vec<RouteInfo>) -> Result<()> {
|
||||||
for route in self.cache_table.iter() {
|
for route in self.cache_table.iter() {
|
||||||
let (net, gw) = route.key();
|
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 route.value().load(Ordering::Relaxed) {
|
||||||
if let Err(e) = del_route(net, gw) {
|
if let Err(e) = del_route(net, gw) {
|
||||||
error!("failed to del route: {}", e.as_str());
|
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)) {
|
if edge.device_config.contains(&Ipv4Addr::from_bits(dest_ip)) {
|
||||||
let _ = edge.send_arp_request(dest_ip, dest_ip).await;
|
let _ = edge.send_arp_request(dest_ip, dest_ip).await;
|
||||||
} else {
|
} 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 real_ip = u32::from_be_bytes(real_ip.octets());
|
||||||
let _ = edge.send_arp_request(dest_ip, real_ip).await;
|
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)) {
|
if eee.device_config.contains(&Ipv4Addr::from_bits(dstip)) {
|
||||||
let _ = eee.send_arp_request(dstip, dstip).await;
|
let _ = eee.send_arp_request(dstip, dstip).await;
|
||||||
} else {
|
} 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 real_ip = u32::from_be_bytes(real_ip.octets());
|
||||||
let _ = eee.send_arp_request(dstip, real_ip).await;
|
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)) {
|
if eee.device_config.contains(&Ipv4Addr::from_bits(dstip)) {
|
||||||
let _ = eee.send_arp_request(dstip, dstip).await;
|
let _ = eee.send_arp_request(dstip, dstip).await;
|
||||||
} else {
|
} 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 real_ip = u32::from_be_bytes(real_ip.octets());
|
||||||
let _ = eee.send_arp_request(dstip, real_ip).await;
|
let _ = eee.send_arp_request(dstip, real_ip).await;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -78,12 +78,12 @@ impl RouteTableTrie {
|
|||||||
self.trie.store(Arc::new(IpTrie::default()));
|
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();
|
let trie = self.trie.load();
|
||||||
trie.lookup(ip)
|
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 old = self.trie.load();
|
||||||
let mut new_trie = (*(*old)).clone();
|
let mut new_trie = (*(*old)).clone();
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user