mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-10-12 06:26:15 -08:00
fix: filter overlapped proxy cidrs in ProxyCidrsMonitor (#2079)
* feat(route): add async methods to list proxy CIDRs for IPv4 and IPv6 * refactor(ProxyCidrsMonitor): get proxy cidrs from list_proxy_cidrs
This commit is contained in:
1 parent
6f3e708679
commit
ec7ddd3bad
4 files changed
+66
-30
No files matched your search
@@ -32,35 +32,27 @@ impl ProxyCidrsMonitor {
|
||||
Vec<cidr::Ipv4Cidr>,
|
||||
Vec<cidr::Ipv4Cidr>,
|
||||
) {
|
||||
// Collect proxy_cidrs from routes
|
||||
let mut proxy_cidrs = BTreeSet::new();
|
||||
let routes = peer_mgr.list_routes().await;
|
||||
for r in routes {
|
||||
for cidr in r.proxy_cidrs {
|
||||
let Ok(cidr) = cidr.parse::<cidr::Ipv4Cidr>() else {
|
||||
continue;
|
||||
};
|
||||
proxy_cidrs.insert(cidr);
|
||||
let proxy_cidrs = if let Some(routes) = global_ctx.config.get_routes() {
|
||||
// If manual routes exist, override entire proxy_cidrs
|
||||
routes.into_iter().collect()
|
||||
} else {
|
||||
// Collect proxy_cidrs from routes
|
||||
let mut proxy_cidrs = peer_mgr.list_proxy_cidrs().await;
|
||||
|
||||
// Add VPN portal cidr to proxy_cidrs
|
||||
if let Some(vpn_cfg) = global_ctx.config.get_vpn_portal_config() {
|
||||
proxy_cidrs.insert(vpn_cfg.client_cidr);
|
||||
}
|
||||
}
|
||||
|
||||
// Add VPN portal cidr to proxy_cidrs
|
||||
if let Some(vpn_cfg) = global_ctx.config.get_vpn_portal_config() {
|
||||
proxy_cidrs.insert(vpn_cfg.client_cidr);
|
||||
}
|
||||
|
||||
// If has manual routes, override entire proxy_cidrs
|
||||
if let Some(routes) = global_ctx.config.get_routes() {
|
||||
proxy_cidrs = routes.into_iter().collect();
|
||||
}
|
||||
proxy_cidrs
|
||||
};
|
||||
|
||||
// Calculate diff
|
||||
if cur_proxy_cidrs == &proxy_cidrs {
|
||||
return (proxy_cidrs, Vec::new(), Vec::new());
|
||||
}
|
||||
let added: Vec<cidr::Ipv4Cidr> = proxy_cidrs.difference(cur_proxy_cidrs).cloned().collect();
|
||||
let removed: Vec<cidr::Ipv4Cidr> =
|
||||
cur_proxy_cidrs.difference(&proxy_cidrs).cloned().collect();
|
||||
let added = proxy_cidrs.difference(cur_proxy_cidrs).cloned().collect();
|
||||
let removed = cur_proxy_cidrs.difference(&proxy_cidrs).cloned().collect();
|
||||
|
||||
(proxy_cidrs, added, removed)
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user