From 724b61440bf02ec083f1cf1c536cffe151f062b2 Mon Sep 17 00:00:00 2001 From: pascal Date: Mon, 3 Aug 2026 17:27:58 +0200 Subject: [PATCH] use new path on initial sync --- .../network_map/controller/controller.go | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/management/internals/controllers/network_map/controller/controller.go b/management/internals/controllers/network_map/controller/controller.go index 555d82cce..91957bae5 100644 --- a/management/internals/controllers/network_map/controller/controller.go +++ b/management/internals/controllers/network_map/controller/controller.go @@ -900,6 +900,10 @@ func (c *Controller) GetValidatedPeerWithComponents(ctx context.Context, isRequi return peer, &types.NetworkMapComponents{Network: types.TwinNetwork(network)}, nil, nil, 0, nil } + if nmData := c.getNetworkMapData(ctx, accountID); nmData != nil { + return c.getValidatedPeerWithComponentsFromData(ctx, accountID, peer, nmData) + } + account, err := c.requestBuffer.GetAccountWithBackpressure(ctx, accountID) if err != nil { return nil, nil, nil, nil, 0, err @@ -944,6 +948,21 @@ func (c *Controller) GetValidatedPeerWithComponents(ctx context.Context, isRequi return peer, components, proxyNetworkMaps[peer.ID], postureChecks, dnsFwdPort, nil } +// getValidatedPeerWithComponentsFromData is the account-free variant of +// GetValidatedPeerWithComponents. The proxy network map fragment is omitted +// like on the other nmdata paths. +func (c *Controller) getValidatedPeerWithComponentsFromData(ctx context.Context, accountID string, peer *nbpeer.Peer, nmData *networkmap.NetworkMapData) (*nbpeer.Peer, *types.NetworkMapComponents, *types.NetworkMap, []*posture.Checks, int64, error) { + postureChecks := peerPostureChecksFromData(nmData, peer.ID) + + dnsDomain := c.getDNSDomainFromData(nmData.AccountSettings) + peersCustomZone := networkmap.PeersCustomZone(ctx, accountID, dnsDomain, nmData.Peers, ipv6AllowedPeersFromData(nmData)) + + components := nmData.GetPeerNetworkMapComponents(peer.ID, peersCustomZone) + dnsFwdPort := computeForwarderPortFromData(nmData.Peers, network_map.DnsForwarderPortMinVersion) + + return peer, components, nil, postureChecks, dnsFwdPort, nil +} + // BufferUpdateAffectedPeers accumulates peer IDs and flushes them after the buffer interval. func (c *Controller) BufferUpdateAffectedPeers(ctx context.Context, accountID string, peerIDs []string, reason types.UpdateReason) error { if len(peerIDs) == 0 { @@ -1055,6 +1074,10 @@ func (c *Controller) GetValidatedPeerWithMap(ctx context.Context, isRequiresAppr return emptyMap, nil, 0, nil } + if nmData := c.getNetworkMapData(ctx, accountID); nmData != nil { + return c.getValidatedPeerWithMapFromData(ctx, accountID, peerID, nmData) + } + account, err := c.requestBuffer.GetAccountWithBackpressure(ctx, accountID) if err != nil { return nil, nil, 0, err @@ -1102,6 +1125,21 @@ func (c *Controller) GetValidatedPeerWithMap(ctx context.Context, isRequiresAppr return networkMap, postureChecks, dnsFwdPort, nil } +// getValidatedPeerWithMapFromData is the account-free variant of +// GetValidatedPeerWithMap. The proxy network map fragment is omitted like on +// the other nmdata paths. +func (c *Controller) getValidatedPeerWithMapFromData(ctx context.Context, accountID string, peerID string, nmData *networkmap.NetworkMapData) (*types.NetworkMap, []*posture.Checks, int64, error) { + postureChecks := peerPostureChecksFromData(nmData, peerID) + + dnsDomain := c.getDNSDomainFromData(nmData.AccountSettings) + peersCustomZone := networkmap.PeersCustomZone(ctx, accountID, dnsDomain, nmData.Peers, ipv6AllowedPeersFromData(nmData)) + + networkMap := networkMapFromData(ctx, nmData, peerID, peersCustomZone) + dnsFwdPort := computeForwarderPortFromData(nmData.Peers, network_map.DnsForwarderPortMinVersion) + + return networkMap, postureChecks, dnsFwdPort, nil +} + // GetDNSDomain returns the configured dnsDomain func (c *Controller) GetDNSDomain(settings *types.Settings) string { if settings == nil {