generalize upstream re-detection into network change watcher
Always detect network changes (LAN IP, upstream, peers) regardless of upstream config. LAN IP is now tracked in ServerCtx and updated every 30s — multicast announcements use the current IP instead of the startup IP. Upstream re-detection still only runs when auto-detected. Peer flush triggers on any network change. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -113,7 +113,7 @@ pub async fn start_lan_discovery(ctx: Arc<ServerCtx>, config: &LanConfig) {
|
||||
.as_nanos() as u64;
|
||||
pid ^ ts
|
||||
};
|
||||
let local_ip = detect_lan_ip().unwrap_or(Ipv4Addr::LOCALHOST);
|
||||
let local_ip = *ctx.lan_ip.lock().unwrap();
|
||||
info!(
|
||||
"LAN discovery on {}:{}, local IP {}, instance {:016x}",
|
||||
multicast_group, port, local_ip, instance_id
|
||||
@@ -142,7 +142,6 @@ pub async fn start_lan_discovery(ctx: Arc<ServerCtx>, config: &LanConfig) {
|
||||
// Spawn sender
|
||||
let sender_ctx = Arc::clone(&ctx);
|
||||
let sender_socket = Arc::clone(&socket);
|
||||
let local_ip_str = local_ip.to_string();
|
||||
let dest = SocketAddr::new(IpAddr::V4(multicast_group), port);
|
||||
tokio::spawn(async move {
|
||||
let mut ticker = tokio::time::interval(interval);
|
||||
@@ -162,9 +161,10 @@ pub async fn start_lan_discovery(ctx: Arc<ServerCtx>, config: &LanConfig) {
|
||||
if services.is_empty() {
|
||||
continue;
|
||||
}
|
||||
let current_ip = sender_ctx.lan_ip.lock().unwrap().to_string();
|
||||
let announcement = Announcement {
|
||||
instance_id,
|
||||
host: local_ip_str.clone(),
|
||||
host: current_ip,
|
||||
services,
|
||||
};
|
||||
if let Ok(json) = serde_json::to_vec(&announcement) {
|
||||
|
||||
Reference in New Issue
Block a user