[client] Prevent local routes in status from being overridden by updates (#3166)

This commit is contained in:
Viktor Liu 2025-01-10 11:02:05 +01:00 committed by GitHub
parent 649bfb236b
commit 93f3e1b14b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 14 additions and 7 deletions

View File

@ -763,12 +763,13 @@ func (e *Engine) updateConfig(conf *mgmProto.PeerConfig) error {
} }
} }
e.statusRecorder.UpdateLocalPeerState(peer.LocalPeerState{ state := e.statusRecorder.GetLocalPeerState()
IP: e.config.WgAddr, state.IP = e.config.WgAddr
PubKey: e.config.WgPrivateKey.PublicKey().String(), state.PubKey = e.config.WgPrivateKey.PublicKey().String()
KernelInterface: device.WireGuardModuleIsLoaded(), state.KernelInterface = device.WireGuardModuleIsLoaded()
FQDN: conf.GetFqdn(), state.FQDN = conf.GetFqdn()
})
e.statusRecorder.UpdateLocalPeerState(state)
return nil return nil
} }

View File

@ -84,6 +84,12 @@ type LocalPeerState struct {
Routes map[string]struct{} Routes map[string]struct{}
} }
// Clone returns a copy of the LocalPeerState
func (l LocalPeerState) Clone() LocalPeerState {
l.Routes = maps.Clone(l.Routes)
return l
}
// SignalState contains the latest state of a signal connection // SignalState contains the latest state of a signal connection
type SignalState struct { type SignalState struct {
URL string URL string
@ -501,7 +507,7 @@ func (d *Status) GetPeerStateChangeNotifier(peer string) <-chan struct{} {
func (d *Status) GetLocalPeerState() LocalPeerState { func (d *Status) GetLocalPeerState() LocalPeerState {
d.mux.Lock() d.mux.Lock()
defer d.mux.Unlock() defer d.mux.Unlock()
return d.localPeer return d.localPeer.Clone()
} }
// UpdateLocalPeerState updates local peer status // UpdateLocalPeerState updates local peer status