diff --git a/client/internal/conn_mgr.go b/client/internal/conn_mgr.go index 119ddc1bd..f7b1f6a05 100644 --- a/client/internal/conn_mgr.go +++ b/client/internal/conn_mgr.go @@ -98,14 +98,14 @@ func (e *ConnMgr) UpdatedRemoteFeatureFlag(ctx context.Context, enabled bool) er } // SetExcludeList sets the list of peer IDs that should always have permanent connections. -func (e *ConnMgr) SetExcludeList(peerIDs []string) { +func (e *ConnMgr) SetExcludeList(peerIDs map[string]bool) { if e.lazyConnMgr == nil { return } excludedPeers := make([]lazyconn.PeerConfig, 0, len(peerIDs)) - for _, peerID := range peerIDs { + for peerID := range peerIDs { var peerConn *peer.Conn var exists bool if peerConn, exists = e.peerStore.PeerConn(peerID); !exists { diff --git a/client/internal/engine.go b/client/internal/engine.go index d6bcc66f6..e04ccc9b8 100644 --- a/client/internal/engine.go +++ b/client/internal/engine.go @@ -1927,14 +1927,16 @@ func (e *Engine) updateForwardRules(rules []*mgmProto.ForwardingRule) ([]firewal return forwardingRules, nberrors.FormatErrorOrNil(merr) } -func (e *Engine) toExcludedLazyPeers(routes []*route.Route, rules []firewallManager.ForwardRule, peers []*mgmProto.RemotePeerConfig) []string { - excludedPeers := make([]string, 0) +func (e *Engine) toExcludedLazyPeers(routes []*route.Route, rules []firewallManager.ForwardRule, peers []*mgmProto.RemotePeerConfig) map[string]bool { + excludedPeers := make(map[string]bool) for _, r := range routes { if r.Peer == "" { continue } - log.Infof("exclude router peer from lazy connection: %s", r.Peer) - excludedPeers = append(excludedPeers, r.Peer) + if !excludedPeers[r.Peer] { + log.Infof("exclude router peer from lazy connection: %s", r.Peer) + excludedPeers[r.Peer] = true + } } for _, r := range rules { @@ -1945,7 +1947,7 @@ func (e *Engine) toExcludedLazyPeers(routes []*route.Route, rules []firewallMana continue } log.Infof("exclude forwarder peer from lazy connection: %s", p.GetWgPubKey()) - excludedPeers = append(excludedPeers, p.GetWgPubKey()) + excludedPeers[p.GetWgPubKey()] = true } } }