mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-05-07 18:24:36 +00:00
refactor(config): unify runtime configuration management via ConfigRpc (#1397)
* refactor(config): unify runtime configuration management via ConfigRpc * feat(tests): add config patch test and fix problem
This commit is contained in:
@@ -152,7 +152,7 @@ pub struct PeerManager {
|
||||
encryptor: Arc<dyn Encryptor + 'static>,
|
||||
data_compress_algo: CompressorAlgo,
|
||||
|
||||
exit_nodes: Vec<IpAddr>,
|
||||
exit_nodes: RwLock<Vec<IpAddr>>,
|
||||
|
||||
reserved_my_peer_id_map: DashMap<String, PeerId>,
|
||||
|
||||
@@ -304,7 +304,7 @@ impl PeerManager {
|
||||
encryptor,
|
||||
data_compress_algo,
|
||||
|
||||
exit_nodes,
|
||||
exit_nodes: RwLock::new(exit_nodes),
|
||||
|
||||
reserved_my_peer_id_map: DashMap::new(),
|
||||
|
||||
@@ -1068,7 +1068,7 @@ impl PeerManager {
|
||||
.global_ctx
|
||||
.is_ip_in_same_network(&std::net::IpAddr::V4(*ipv4_addr))
|
||||
{
|
||||
for exit_node in &self.exit_nodes {
|
||||
for exit_node in self.exit_nodes.read().await.iter() {
|
||||
let IpAddr::V4(exit_node) = exit_node else {
|
||||
continue;
|
||||
};
|
||||
@@ -1109,7 +1109,7 @@ impl PeerManager {
|
||||
dst_peers.push(peer_id);
|
||||
} else if !ipv6_addr.is_unicast_link_local() {
|
||||
// NOTE: never route link local address to exit node.
|
||||
for exit_node in &self.exit_nodes {
|
||||
for exit_node in self.exit_nodes.read().await.iter() {
|
||||
let IpAddr::V6(exit_node) = exit_node else {
|
||||
continue;
|
||||
};
|
||||
@@ -1419,6 +1419,11 @@ impl PeerManager {
|
||||
|
||||
true
|
||||
}
|
||||
|
||||
pub async fn update_exit_nodes(&self) {
|
||||
let exit_nodes = self.global_ctx.config.get_exit_nodes();
|
||||
*self.exit_nodes.write().await = exit_nodes;
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
||||
@@ -1,18 +1,14 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use crate::{
|
||||
common::acl_processor::AclRuleBuilder,
|
||||
proto::{
|
||||
cli::{
|
||||
AclManageRpc, DumpRouteRequest, DumpRouteResponse, GetAclStatsRequest,
|
||||
GetAclStatsResponse, GetWhitelistRequest, GetWhitelistResponse,
|
||||
ListForeignNetworkRequest, ListForeignNetworkResponse, ListGlobalForeignNetworkRequest,
|
||||
ListGlobalForeignNetworkResponse, ListPeerRequest, ListPeerResponse, ListRouteRequest,
|
||||
ListRouteResponse, PeerInfo, PeerManageRpc, SetWhitelistRequest, SetWhitelistResponse,
|
||||
ShowNodeInfoRequest, ShowNodeInfoResponse,
|
||||
},
|
||||
rpc_types::{self, controller::BaseController},
|
||||
use crate::proto::{
|
||||
cli::{
|
||||
AclManageRpc, DumpRouteRequest, DumpRouteResponse, GetAclStatsRequest, GetAclStatsResponse,
|
||||
GetWhitelistRequest, GetWhitelistResponse, ListForeignNetworkRequest,
|
||||
ListForeignNetworkResponse, ListGlobalForeignNetworkRequest,
|
||||
ListGlobalForeignNetworkResponse, ListPeerRequest, ListPeerResponse, ListRouteRequest,
|
||||
ListRouteResponse, PeerInfo, PeerManageRpc, ShowNodeInfoRequest, ShowNodeInfoResponse,
|
||||
},
|
||||
rpc_types::{self, controller::BaseController},
|
||||
};
|
||||
|
||||
use super::peer_manager::PeerManager;
|
||||
@@ -163,28 +159,6 @@ impl AclManageRpc for PeerManagerRpcService {
|
||||
})
|
||||
}
|
||||
|
||||
async fn set_whitelist(
|
||||
&self,
|
||||
_: BaseController,
|
||||
request: SetWhitelistRequest,
|
||||
) -> Result<SetWhitelistResponse, rpc_types::error::Error> {
|
||||
tracing::info!(
|
||||
"Setting whitelist - TCP: {:?}, UDP: {:?}",
|
||||
request.tcp_ports,
|
||||
request.udp_ports
|
||||
);
|
||||
|
||||
let global_ctx = self.peer_manager.get_global_ctx();
|
||||
|
||||
global_ctx.config.set_tcp_whitelist(request.tcp_ports);
|
||||
global_ctx.config.set_udp_whitelist(request.udp_ports);
|
||||
global_ctx
|
||||
.get_acl_filter()
|
||||
.reload_rules(AclRuleBuilder::build(&global_ctx)?.as_ref());
|
||||
|
||||
Ok(SetWhitelistResponse {})
|
||||
}
|
||||
|
||||
async fn get_whitelist(
|
||||
&self,
|
||||
_: BaseController,
|
||||
|
||||
Reference in New Issue
Block a user