mirror of
https://github.com/netbirdio/netbird.git
synced 2026-10-06 21:49:08 +02:00
use nmap peers for affected on AddPeer
This commit is contained in:
@@ -935,14 +935,18 @@ func (am *DefaultAccountManager) AddPeer(ctx context.Context, accountID, setupKe
|
|||||||
am.StoreEvent(ctx, opEvent.InitiatorID, opEvent.TargetID, opEvent.AccountID, opEvent.Activity, opEvent.Meta)
|
am.StoreEvent(ctx, opEvent.InitiatorID, opEvent.TargetID, opEvent.AccountID, opEvent.Activity, opEvent.Meta)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
p, nmap, pc, _, err := am.networkMapController.GetValidatedPeerWithMap(ctx, false, accountID, newPeer)
|
||||||
|
if err != nil {
|
||||||
|
return p, nmap, pc, err
|
||||||
|
}
|
||||||
|
|
||||||
changedPeerIDs := []string{newPeer.ID}
|
changedPeerIDs := []string{newPeer.ID}
|
||||||
affectedPeerIDs := am.resolveAffectedPeersForPeerChanges(ctx, am.Store, accountID, changedPeerIDs)
|
affectedPeerIDs := affectedPeerIDsFromNetworkMap(nmap, newPeer.ID)
|
||||||
if err := am.networkMapController.OnPeersAdded(ctx, accountID, changedPeerIDs, affectedPeerIDs); err != nil {
|
if err := am.networkMapController.OnPeersAdded(ctx, accountID, changedPeerIDs, affectedPeerIDs); err != nil {
|
||||||
log.WithContext(ctx).Errorf("failed to update network map cache for peer %s: %v", newPeer.ID, err)
|
log.WithContext(ctx).Errorf("failed to update network map cache for peer %s: %v", newPeer.ID, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
p, nmap, pc, _, err := am.networkMapController.GetValidatedPeerWithMap(ctx, false, accountID, newPeer)
|
return p, nmap, pc, nil
|
||||||
return p, nmap, pc, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func getPeerIPDNSLabel(ip netip.Addr, peerHostName string) (string, error) {
|
func getPeerIPDNSLabel(ip netip.Addr, peerHostName string) (string, error) {
|
||||||
@@ -1476,6 +1480,33 @@ func (am *DefaultAccountManager) ResolveAffectedPeers(ctx context.Context, s sto
|
|||||||
return peerIDs
|
return peerIDs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// affectedPeerIDsFromNetworkMap returns the peer IDs referenced by a peer's
|
||||||
|
// network map (its connected and offline peers, which include routing and proxy
|
||||||
|
// peers), excluding the peer itself. For a freshly added peer these are, by ACL
|
||||||
|
// symmetry, exactly the peers its addition affects.
|
||||||
|
func affectedPeerIDsFromNetworkMap(nmap *types.NetworkMap, selfPeerID string) []string {
|
||||||
|
if nmap == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
seen := make(map[string]struct{}, len(nmap.Peers)+len(nmap.OfflinePeers))
|
||||||
|
ids := make([]string, 0, len(nmap.Peers)+len(nmap.OfflinePeers))
|
||||||
|
add := func(peers []*nbpeer.Peer) {
|
||||||
|
for _, p := range peers {
|
||||||
|
if p == nil || p.ID == "" || p.ID == selfPeerID {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if _, ok := seen[p.ID]; ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
seen[p.ID] = struct{}{}
|
||||||
|
ids = append(ids, p.ID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
add(nmap.Peers)
|
||||||
|
add(nmap.OfflinePeers)
|
||||||
|
return ids
|
||||||
|
}
|
||||||
|
|
||||||
// resolveAffectedPeersForPeerChanges resolves changed peer IDs into the full set of affected peer IDs.
|
// resolveAffectedPeersForPeerChanges resolves changed peer IDs into the full set of affected peer IDs.
|
||||||
func (am *DefaultAccountManager) resolveAffectedPeersForPeerChanges(ctx context.Context, s store.Store, accountID string, changedPeerIDs []string) []string {
|
func (am *DefaultAccountManager) resolveAffectedPeersForPeerChanges(ctx context.Context, s store.Store, accountID string, changedPeerIDs []string) []string {
|
||||||
groupIDs, err := s.GetGroupIDsByPeerIDs(ctx, accountID, changedPeerIDs)
|
groupIDs, err := s.GetGroupIDsByPeerIDs(ctx, accountID, changedPeerIDs)
|
||||||
|
|||||||
Reference in New Issue
Block a user