[client] Add full sync response to debug bundle (#4287)

This commit is contained in:
Viktor Liu
2025-08-05 14:55:50 +02:00
committed by GitHub
parent 92ce5afe80
commit 3d3c4c5844
10 changed files with 298 additions and 221 deletions

View File

@@ -77,11 +77,11 @@ var forCmd = &cobra.Command{
var persistenceCmd = &cobra.Command{ var persistenceCmd = &cobra.Command{
Use: "persistence [on|off]", Use: "persistence [on|off]",
Short: "Set network map memory persistence", Short: "Set sync response memory persistence",
Long: `Configure whether the latest network map should persist in memory. When enabled, the last known network map will be kept in memory.`, Long: `Configure whether the latest sync response should persist in memory. When enabled, the last known sync response will be kept in memory.`,
Example: " netbird debug persistence on", Example: " netbird debug persistence on",
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),
RunE: setNetworkMapPersistence, RunE: setSyncResponsePersistence,
} }
func debugBundle(cmd *cobra.Command, _ []string) error { func debugBundle(cmd *cobra.Command, _ []string) error {
@@ -206,11 +206,11 @@ func runForDuration(cmd *cobra.Command, args []string) error {
time.Sleep(1 * time.Second) time.Sleep(1 * time.Second)
// Enable network map persistence before bringing the service up // Enable sync response persistence before bringing the service up
if _, err := client.SetNetworkMapPersistence(cmd.Context(), &proto.SetNetworkMapPersistenceRequest{ if _, err := client.SetSyncResponsePersistence(cmd.Context(), &proto.SetSyncResponsePersistenceRequest{
Enabled: true, Enabled: true,
}); err != nil { }); err != nil {
return fmt.Errorf("failed to enable network map persistence: %v", status.Convert(err).Message()) return fmt.Errorf("failed to enable sync response persistence: %v", status.Convert(err).Message())
} }
if _, err := client.Up(cmd.Context(), &proto.UpRequest{}); err != nil { if _, err := client.Up(cmd.Context(), &proto.UpRequest{}); err != nil {
@@ -273,7 +273,7 @@ func runForDuration(cmd *cobra.Command, args []string) error {
return nil return nil
} }
func setNetworkMapPersistence(cmd *cobra.Command, args []string) error { func setSyncResponsePersistence(cmd *cobra.Command, args []string) error {
conn, err := getClient(cmd) conn, err := getClient(cmd)
if err != nil { if err != nil {
return err return err
@@ -290,14 +290,14 @@ func setNetworkMapPersistence(cmd *cobra.Command, args []string) error {
} }
client := proto.NewDaemonServiceClient(conn) client := proto.NewDaemonServiceClient(conn)
_, err = client.SetNetworkMapPersistence(cmd.Context(), &proto.SetNetworkMapPersistenceRequest{ _, err = client.SetSyncResponsePersistence(cmd.Context(), &proto.SetSyncResponsePersistenceRequest{
Enabled: persistence == "on", Enabled: persistence == "on",
}) })
if err != nil { if err != nil {
return fmt.Errorf("failed to set network map persistence: %v", status.Convert(err).Message()) return fmt.Errorf("failed to set sync response persistence: %v", status.Convert(err).Message())
} }
cmd.Printf("Network map persistence set to: %s\n", persistence) cmd.Printf("Sync response persistence set to: %s\n", persistence)
return nil return nil
} }
@@ -357,13 +357,13 @@ func formatDuration(d time.Duration) string {
} }
func generateDebugBundle(config *profilemanager.Config, recorder *peer.Status, connectClient *internal.ConnectClient, logFilePath string) { func generateDebugBundle(config *profilemanager.Config, recorder *peer.Status, connectClient *internal.ConnectClient, logFilePath string) {
var networkMap *mgmProto.NetworkMap var syncResponse *mgmProto.SyncResponse
var err error var err error
if connectClient != nil { if connectClient != nil {
networkMap, err = connectClient.GetLatestNetworkMap() syncResponse, err = connectClient.GetLatestSyncResponse()
if err != nil { if err != nil {
log.Warnf("Failed to get latest network map: %v", err) log.Warnf("Failed to get latest sync response: %v", err)
} }
} }
@@ -371,7 +371,7 @@ func generateDebugBundle(config *profilemanager.Config, recorder *peer.Status, c
debug.GeneratorDependencies{ debug.GeneratorDependencies{
InternalConfig: config, InternalConfig: config,
StatusRecorder: recorder, StatusRecorder: recorder,
NetworkMap: networkMap, SyncResponse: syncResponse,
LogFile: logFilePath, LogFile: logFilePath,
}, },
debug.BundleConfig{ debug.BundleConfig{

View File

@@ -43,7 +43,7 @@ type ConnectClient struct {
engine *Engine engine *Engine
engineMutex sync.Mutex engineMutex sync.Mutex
persistNetworkMap bool persistSyncResponse bool
} }
func NewConnectClient( func NewConnectClient(
@@ -270,7 +270,7 @@ func (c *ConnectClient) run(mobileDependency MobileDependency, runningChan chan
c.engineMutex.Lock() c.engineMutex.Lock()
c.engine = NewEngine(engineCtx, cancel, signalClient, mgmClient, relayManager, engineConfig, mobileDependency, c.statusRecorder, checks) c.engine = NewEngine(engineCtx, cancel, signalClient, mgmClient, relayManager, engineConfig, mobileDependency, c.statusRecorder, checks)
c.engine.SetNetworkMapPersistence(c.persistNetworkMap) c.engine.SetSyncResponsePersistence(c.persistSyncResponse)
c.engineMutex.Unlock() c.engineMutex.Unlock()
if err := c.engine.Start(); err != nil { if err := c.engine.Start(); err != nil {
@@ -349,23 +349,23 @@ func (c *ConnectClient) Engine() *Engine {
return e return e
} }
// GetLatestNetworkMap returns the latest network map from the engine. // GetLatestSyncResponse returns the latest sync response from the engine.
func (c *ConnectClient) GetLatestNetworkMap() (*mgmProto.NetworkMap, error) { func (c *ConnectClient) GetLatestSyncResponse() (*mgmProto.SyncResponse, error) {
engine := c.Engine() engine := c.Engine()
if engine == nil { if engine == nil {
return nil, errors.New("engine is not initialized") return nil, errors.New("engine is not initialized")
} }
networkMap, err := engine.GetLatestNetworkMap() syncResponse, err := engine.GetLatestSyncResponse()
if err != nil { if err != nil {
return nil, fmt.Errorf("get latest network map: %w", err) return nil, fmt.Errorf("get latest sync response: %w", err)
} }
if networkMap == nil { if syncResponse == nil {
return nil, errors.New("network map is not available") return nil, errors.New("sync response is not available")
} }
return networkMap, nil return syncResponse, nil
} }
// Status returns the current client status // Status returns the current client status
@@ -398,18 +398,18 @@ func (c *ConnectClient) Stop() error {
return nil return nil
} }
// SetNetworkMapPersistence enables or disables network map persistence. // SetSyncResponsePersistence enables or disables sync response persistence.
// When enabled, the last received network map will be stored and can be retrieved // When enabled, the last received sync response will be stored and can be retrieved
// through the Engine's getLatestNetworkMap method. When disabled, any stored // through the Engine's GetLatestSyncResponse method. When disabled, any stored
// network map will be cleared. // sync response will be cleared.
func (c *ConnectClient) SetNetworkMapPersistence(enabled bool) { func (c *ConnectClient) SetSyncResponsePersistence(enabled bool) {
c.engineMutex.Lock() c.engineMutex.Lock()
c.persistNetworkMap = enabled c.persistSyncResponse = enabled
c.engineMutex.Unlock() c.engineMutex.Unlock()
engine := c.Engine() engine := c.Engine()
if engine != nil { if engine != nil {
engine.SetNetworkMapPersistence(enabled) engine.SetSyncResponsePersistence(enabled)
} }
} }

View File

@@ -46,7 +46,7 @@ iptables.txt: Anonymized iptables rules with packet counters, if --system-info f
nftables.txt: Anonymized nftables rules with packet counters, if --system-info flag was provided. nftables.txt: Anonymized nftables rules with packet counters, if --system-info flag was provided.
resolved_domains.txt: Anonymized resolved domain IP addresses from the status recorder. resolved_domains.txt: Anonymized resolved domain IP addresses from the status recorder.
config.txt: Anonymized configuration information of the NetBird client. config.txt: Anonymized configuration information of the NetBird client.
network_map.json: Anonymized network map containing peer configurations, routes, DNS settings, and firewall rules. network_map.json: Anonymized sync response containing peer configurations, routes, DNS settings, and firewall rules.
state.json: Anonymized client state dump containing netbird states. state.json: Anonymized client state dump containing netbird states.
mutex.prof: Mutex profiling information. mutex.prof: Mutex profiling information.
goroutine.prof: Goroutine profiling information. goroutine.prof: Goroutine profiling information.
@@ -73,7 +73,7 @@ Domains
All domain names (except for the netbird domains) are replaced with randomly generated strings ending in ".domain". Anonymized domains are consistent across all files in the bundle. All domain names (except for the netbird domains) are replaced with randomly generated strings ending in ".domain". Anonymized domains are consistent across all files in the bundle.
Reoccuring domain names are replaced with the same anonymized domain. Reoccuring domain names are replaced with the same anonymized domain.
Network Map Sync Response
The network_map.json file contains the following anonymized information: The network_map.json file contains the following anonymized information:
- Peer configurations (addresses, FQDNs, DNS settings) - Peer configurations (addresses, FQDNs, DNS settings)
- Remote and offline peer information (allowed IPs, FQDNs) - Remote and offline peer information (allowed IPs, FQDNs)
@@ -81,7 +81,7 @@ The network_map.json file contains the following anonymized information:
- DNS configuration (nameservers, domains, custom zones) - DNS configuration (nameservers, domains, custom zones)
- Firewall rules (peer IPs, source/destination ranges) - Firewall rules (peer IPs, source/destination ranges)
SSH keys in the network map are replaced with a placeholder value. All IP addresses and domains in the network map follow the same anonymization rules as described above. SSH keys in the sync response are replaced with a placeholder value. All IP addresses and domains in the sync response follow the same anonymization rules as described above.
State File State File
The state.json file contains anonymized internal state information of the NetBird client, including: The state.json file contains anonymized internal state information of the NetBird client, including:
@@ -201,7 +201,7 @@ type BundleGenerator struct {
// deps // deps
internalConfig *profilemanager.Config internalConfig *profilemanager.Config
statusRecorder *peer.Status statusRecorder *peer.Status
networkMap *mgmProto.NetworkMap syncResponse *mgmProto.SyncResponse
logFile string logFile string
anonymize bool anonymize bool
@@ -222,7 +222,7 @@ type BundleConfig struct {
type GeneratorDependencies struct { type GeneratorDependencies struct {
InternalConfig *profilemanager.Config InternalConfig *profilemanager.Config
StatusRecorder *peer.Status StatusRecorder *peer.Status
NetworkMap *mgmProto.NetworkMap SyncResponse *mgmProto.SyncResponse
LogFile string LogFile string
} }
@@ -238,7 +238,7 @@ func NewBundleGenerator(deps GeneratorDependencies, cfg BundleConfig) *BundleGen
internalConfig: deps.InternalConfig, internalConfig: deps.InternalConfig,
statusRecorder: deps.StatusRecorder, statusRecorder: deps.StatusRecorder,
networkMap: deps.NetworkMap, syncResponse: deps.SyncResponse,
logFile: deps.LogFile, logFile: deps.LogFile,
anonymize: cfg.Anonymize, anonymize: cfg.Anonymize,
@@ -311,8 +311,8 @@ func (g *BundleGenerator) createArchive() error {
log.Errorf("failed to add profiles to debug bundle: %v", err) log.Errorf("failed to add profiles to debug bundle: %v", err)
} }
if err := g.addNetworkMap(); err != nil { if err := g.addSyncResponse(); err != nil {
return fmt.Errorf("add network map: %w", err) return fmt.Errorf("add sync response: %w", err)
} }
if err := g.addStateFile(); err != nil { if err := g.addStateFile(); err != nil {
@@ -526,15 +526,15 @@ func (g *BundleGenerator) addResolvedDomains() error {
return nil return nil
} }
func (g *BundleGenerator) addNetworkMap() error { func (g *BundleGenerator) addSyncResponse() error {
if g.networkMap == nil { if g.syncResponse == nil {
log.Debugf("skipping empty network map in debug bundle") log.Debugf("skipping empty sync response in debug bundle")
return nil return nil
} }
if g.anonymize { if g.anonymize {
if err := anonymizeNetworkMap(g.networkMap, g.anonymizer); err != nil { if err := anonymizeSyncResponse(g.syncResponse, g.anonymizer); err != nil {
return fmt.Errorf("anonymize network map: %w", err) return fmt.Errorf("anonymize sync response: %w", err)
} }
} }
@@ -545,13 +545,13 @@ func (g *BundleGenerator) addNetworkMap() error {
AllowPartial: true, AllowPartial: true,
} }
jsonBytes, err := options.Marshal(g.networkMap) jsonBytes, err := options.Marshal(g.syncResponse)
if err != nil { if err != nil {
return fmt.Errorf("generate json: %w", err) return fmt.Errorf("generate json: %w", err)
} }
if err := g.addFileToZip(bytes.NewReader(jsonBytes), "network_map.json"); err != nil { if err := g.addFileToZip(bytes.NewReader(jsonBytes), "network_map.json"); err != nil {
return fmt.Errorf("add network map to zip: %w", err) return fmt.Errorf("add sync response to zip: %w", err)
} }
return nil return nil
@@ -921,6 +921,88 @@ func anonymizeNetworkMap(networkMap *mgmProto.NetworkMap, anonymizer *anonymize.
return nil return nil
} }
func anonymizeNetbirdConfig(config *mgmProto.NetbirdConfig, anonymizer *anonymize.Anonymizer) {
for _, stun := range config.Stuns {
if stun.Uri != "" {
stun.Uri = anonymizer.AnonymizeURI(stun.Uri)
}
}
for _, turn := range config.Turns {
if turn.HostConfig != nil && turn.HostConfig.Uri != "" {
turn.HostConfig.Uri = anonymizer.AnonymizeURI(turn.HostConfig.Uri)
}
if turn.User != "" {
turn.User = "turn-user-placeholder"
}
if turn.Password != "" {
turn.Password = "turn-password-placeholder"
}
}
if config.Signal != nil && config.Signal.Uri != "" {
config.Signal.Uri = anonymizer.AnonymizeURI(config.Signal.Uri)
}
if config.Relay != nil {
for i, url := range config.Relay.Urls {
config.Relay.Urls[i] = anonymizer.AnonymizeURI(url)
}
if config.Relay.TokenPayload != "" {
config.Relay.TokenPayload = "relay-token-payload-placeholder"
}
if config.Relay.TokenSignature != "" {
config.Relay.TokenSignature = "relay-token-signature-placeholder"
}
}
if config.Flow != nil {
if config.Flow.Url != "" {
config.Flow.Url = anonymizer.AnonymizeURI(config.Flow.Url)
}
if config.Flow.TokenPayload != "" {
config.Flow.TokenPayload = "flow-token-payload-placeholder"
}
if config.Flow.TokenSignature != "" {
config.Flow.TokenSignature = "flow-token-signature-placeholder"
}
}
}
func anonymizeSyncResponse(syncResponse *mgmProto.SyncResponse, anonymizer *anonymize.Anonymizer) error {
if syncResponse.NetbirdConfig != nil {
anonymizeNetbirdConfig(syncResponse.NetbirdConfig, anonymizer)
}
if syncResponse.PeerConfig != nil {
anonymizePeerConfig(syncResponse.PeerConfig, anonymizer)
}
for _, p := range syncResponse.RemotePeers {
anonymizeRemotePeer(p, anonymizer)
}
if syncResponse.NetworkMap != nil {
if err := anonymizeNetworkMap(syncResponse.NetworkMap, anonymizer); err != nil {
return err
}
}
for _, check := range syncResponse.Checks {
for i, file := range check.Files {
check.Files[i] = anonymizer.AnonymizeString(file)
}
}
return nil
}
func anonymizeSSHConfig(sshConfig *mgmProto.SSHConfig) {
if sshConfig != nil && len(sshConfig.SshPubKey) > 0 {
sshConfig.SshPubKey = []byte("ssh-placeholder-key")
}
}
func anonymizePeerConfig(config *mgmProto.PeerConfig, anonymizer *anonymize.Anonymizer) { func anonymizePeerConfig(config *mgmProto.PeerConfig, anonymizer *anonymize.Anonymizer) {
if config == nil { if config == nil {
return return
@@ -930,9 +1012,7 @@ func anonymizePeerConfig(config *mgmProto.PeerConfig, anonymizer *anonymize.Anon
config.Address = anonymizer.AnonymizeIP(addr).String() config.Address = anonymizer.AnonymizeIP(addr).String()
} }
if config.SshConfig != nil && len(config.SshConfig.SshPubKey) > 0 { anonymizeSSHConfig(config.SshConfig)
config.SshConfig.SshPubKey = []byte("ssh-placeholder-key")
}
config.Dns = anonymizer.AnonymizeString(config.Dns) config.Dns = anonymizer.AnonymizeString(config.Dns)
config.Fqdn = anonymizer.AnonymizeDomain(config.Fqdn) config.Fqdn = anonymizer.AnonymizeDomain(config.Fqdn)
@@ -954,9 +1034,7 @@ func anonymizeRemotePeer(peer *mgmProto.RemotePeerConfig, anonymizer *anonymize.
peer.Fqdn = anonymizer.AnonymizeDomain(peer.Fqdn) peer.Fqdn = anonymizer.AnonymizeDomain(peer.Fqdn)
if peer.SshConfig != nil && len(peer.SshConfig.SshPubKey) > 0 { anonymizeSSHConfig(peer.SshConfig)
peer.SshConfig.SshPubKey = []byte("ssh-placeholder-key")
}
} }
func anonymizeRoute(route *mgmProto.Route, anonymizer *anonymize.Anonymizer) { func anonymizeRoute(route *mgmProto.Route, anonymizer *anonymize.Anonymizer) {

View File

@@ -189,11 +189,11 @@ type Engine struct {
stateManager *statemanager.Manager stateManager *statemanager.Manager
srWatcher *guard.SRWatcher srWatcher *guard.SRWatcher
// Network map persistence // Sync response persistence
persistNetworkMap bool persistSyncResponse bool
latestNetworkMap *mgmProto.NetworkMap latestSyncResponse *mgmProto.SyncResponse
connSemaphore *semaphoregroup.SemaphoreGroup connSemaphore *semaphoregroup.SemaphoreGroup
flowManager nftypes.FlowManager flowManager nftypes.FlowManager
} }
// Peer is an instance of the Connection Peer // Peer is an instance of the Connection Peer
@@ -697,10 +697,10 @@ func (e *Engine) handleSync(update *mgmProto.SyncResponse) error {
return nil return nil
} }
// Store network map if persistence is enabled // Store sync response if persistence is enabled
if e.persistNetworkMap { if e.persistSyncResponse {
e.latestNetworkMap = nm e.latestSyncResponse = update
log.Debugf("network map persisted with serial %d", nm.GetSerial()) log.Debugf("sync response persisted with serial %d", nm.GetSerial())
} }
// only apply new changes and ignore old ones // only apply new changes and ignore old ones
@@ -1765,44 +1765,43 @@ func (e *Engine) stopDNSServer() {
e.statusRecorder.UpdateDNSStates(nsGroupStates) e.statusRecorder.UpdateDNSStates(nsGroupStates)
} }
// SetNetworkMapPersistence enables or disables network map persistence // SetSyncResponsePersistence enables or disables sync response persistence
func (e *Engine) SetNetworkMapPersistence(enabled bool) { func (e *Engine) SetSyncResponsePersistence(enabled bool) {
e.syncMsgMux.Lock() e.syncMsgMux.Lock()
defer e.syncMsgMux.Unlock() defer e.syncMsgMux.Unlock()
if enabled == e.persistNetworkMap { if enabled == e.persistSyncResponse {
return return
} }
e.persistNetworkMap = enabled e.persistSyncResponse = enabled
log.Debugf("Network map persistence is set to %t", enabled) log.Debugf("Sync response persistence is set to %t", enabled)
if !enabled { if !enabled {
e.latestNetworkMap = nil e.latestSyncResponse = nil
} }
} }
// GetLatestNetworkMap returns the stored network map if persistence is enabled // GetLatestSyncResponse returns the stored sync response if persistence is enabled
func (e *Engine) GetLatestNetworkMap() (*mgmProto.NetworkMap, error) { func (e *Engine) GetLatestSyncResponse() (*mgmProto.SyncResponse, error) {
e.syncMsgMux.Lock() e.syncMsgMux.Lock()
defer e.syncMsgMux.Unlock() defer e.syncMsgMux.Unlock()
if !e.persistNetworkMap { if !e.persistSyncResponse {
return nil, errors.New("network map persistence is disabled") return nil, errors.New("sync response persistence is disabled")
} }
if e.latestNetworkMap == nil { if e.latestSyncResponse == nil {
//nolint:nilnil //nolint:nilnil
return nil, nil return nil, nil
} }
log.Debugf("Retrieving latest network map with size %d bytes", proto.Size(e.latestNetworkMap)) log.Debugf("Retrieving latest sync response with size %d bytes", proto.Size(e.latestSyncResponse))
nm, ok := proto.Clone(e.latestNetworkMap).(*mgmProto.NetworkMap) sr, ok := proto.Clone(e.latestSyncResponse).(*mgmProto.SyncResponse)
if !ok { if !ok {
return nil, fmt.Errorf("failed to clone sync response")
return nil, fmt.Errorf("failed to clone network map")
} }
return nm, nil return sr, nil
} }
// GetWgAddr returns the wireguard address // GetWgAddr returns the wireguard address

View File

@@ -2959,27 +2959,27 @@ func (x *DeleteStateResponse) GetDeletedStates() int32 {
return 0 return 0
} }
type SetNetworkMapPersistenceRequest struct { type SetSyncResponsePersistenceRequest struct {
state protoimpl.MessageState `protogen:"open.v1"` state protoimpl.MessageState `protogen:"open.v1"`
Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
} }
func (x *SetNetworkMapPersistenceRequest) Reset() { func (x *SetSyncResponsePersistenceRequest) Reset() {
*x = SetNetworkMapPersistenceRequest{} *x = SetSyncResponsePersistenceRequest{}
mi := &file_daemon_proto_msgTypes[42] mi := &file_daemon_proto_msgTypes[42]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
func (x *SetNetworkMapPersistenceRequest) String() string { func (x *SetSyncResponsePersistenceRequest) String() string {
return protoimpl.X.MessageStringOf(x) return protoimpl.X.MessageStringOf(x)
} }
func (*SetNetworkMapPersistenceRequest) ProtoMessage() {} func (*SetSyncResponsePersistenceRequest) ProtoMessage() {}
func (x *SetNetworkMapPersistenceRequest) ProtoReflect() protoreflect.Message { func (x *SetSyncResponsePersistenceRequest) ProtoReflect() protoreflect.Message {
mi := &file_daemon_proto_msgTypes[42] mi := &file_daemon_proto_msgTypes[42]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -2991,38 +2991,38 @@ func (x *SetNetworkMapPersistenceRequest) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x) return mi.MessageOf(x)
} }
// Deprecated: Use SetNetworkMapPersistenceRequest.ProtoReflect.Descriptor instead. // Deprecated: Use SetSyncResponsePersistenceRequest.ProtoReflect.Descriptor instead.
func (*SetNetworkMapPersistenceRequest) Descriptor() ([]byte, []int) { func (*SetSyncResponsePersistenceRequest) Descriptor() ([]byte, []int) {
return file_daemon_proto_rawDescGZIP(), []int{42} return file_daemon_proto_rawDescGZIP(), []int{42}
} }
func (x *SetNetworkMapPersistenceRequest) GetEnabled() bool { func (x *SetSyncResponsePersistenceRequest) GetEnabled() bool {
if x != nil { if x != nil {
return x.Enabled return x.Enabled
} }
return false return false
} }
type SetNetworkMapPersistenceResponse struct { type SetSyncResponsePersistenceResponse struct {
state protoimpl.MessageState `protogen:"open.v1"` state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
} }
func (x *SetNetworkMapPersistenceResponse) Reset() { func (x *SetSyncResponsePersistenceResponse) Reset() {
*x = SetNetworkMapPersistenceResponse{} *x = SetSyncResponsePersistenceResponse{}
mi := &file_daemon_proto_msgTypes[43] mi := &file_daemon_proto_msgTypes[43]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
func (x *SetNetworkMapPersistenceResponse) String() string { func (x *SetSyncResponsePersistenceResponse) String() string {
return protoimpl.X.MessageStringOf(x) return protoimpl.X.MessageStringOf(x)
} }
func (*SetNetworkMapPersistenceResponse) ProtoMessage() {} func (*SetSyncResponsePersistenceResponse) ProtoMessage() {}
func (x *SetNetworkMapPersistenceResponse) ProtoReflect() protoreflect.Message { func (x *SetSyncResponsePersistenceResponse) ProtoReflect() protoreflect.Message {
mi := &file_daemon_proto_msgTypes[43] mi := &file_daemon_proto_msgTypes[43]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -3034,8 +3034,8 @@ func (x *SetNetworkMapPersistenceResponse) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x) return mi.MessageOf(x)
} }
// Deprecated: Use SetNetworkMapPersistenceResponse.ProtoReflect.Descriptor instead. // Deprecated: Use SetSyncResponsePersistenceResponse.ProtoReflect.Descriptor instead.
func (*SetNetworkMapPersistenceResponse) Descriptor() ([]byte, []int) { func (*SetSyncResponsePersistenceResponse) Descriptor() ([]byte, []int) {
return file_daemon_proto_rawDescGZIP(), []int{43} return file_daemon_proto_rawDescGZIP(), []int{43}
} }
@@ -4727,10 +4727,10 @@ const file_daemon_proto_rawDesc = "" +
"state_name\x18\x01 \x01(\tR\tstateName\x12\x10\n" + "state_name\x18\x01 \x01(\tR\tstateName\x12\x10\n" +
"\x03all\x18\x02 \x01(\bR\x03all\"<\n" + "\x03all\x18\x02 \x01(\bR\x03all\"<\n" +
"\x13DeleteStateResponse\x12%\n" + "\x13DeleteStateResponse\x12%\n" +
"\x0edeleted_states\x18\x01 \x01(\x05R\rdeletedStates\";\n" + "\x0edeleted_states\x18\x01 \x01(\x05R\rdeletedStates\"=\n" +
"\x1fSetNetworkMapPersistenceRequest\x12\x18\n" + "!SetSyncResponsePersistenceRequest\x12\x18\n" +
"\aenabled\x18\x01 \x01(\bR\aenabled\"\"\n" + "\aenabled\x18\x01 \x01(\bR\aenabled\"$\n" +
" SetNetworkMapPersistenceResponse\"v\n" + "\"SetSyncResponsePersistenceResponse\"v\n" +
"\bTCPFlags\x12\x10\n" + "\bTCPFlags\x12\x10\n" +
"\x03syn\x18\x01 \x01(\bR\x03syn\x12\x10\n" + "\x03syn\x18\x01 \x01(\bR\x03syn\x12\x10\n" +
"\x03ack\x18\x02 \x01(\bR\x03ack\x12\x10\n" + "\x03ack\x18\x02 \x01(\bR\x03ack\x12\x10\n" +
@@ -4881,7 +4881,7 @@ const file_daemon_proto_rawDesc = "" +
"\x04WARN\x10\x04\x12\b\n" + "\x04WARN\x10\x04\x12\b\n" +
"\x04INFO\x10\x05\x12\t\n" + "\x04INFO\x10\x05\x12\t\n" +
"\x05DEBUG\x10\x06\x12\t\n" + "\x05DEBUG\x10\x06\x12\t\n" +
"\x05TRACE\x10\a2\xbf\x0f\n" + "\x05TRACE\x10\a2\xc5\x0f\n" +
"\rDaemonService\x126\n" + "\rDaemonService\x126\n" +
"\x05Login\x12\x14.daemon.LoginRequest\x1a\x15.daemon.LoginResponse\"\x00\x12K\n" + "\x05Login\x12\x14.daemon.LoginRequest\x1a\x15.daemon.LoginResponse\"\x00\x12K\n" +
"\fWaitSSOLogin\x12\x1b.daemon.WaitSSOLoginRequest\x1a\x1c.daemon.WaitSSOLoginResponse\"\x00\x12-\n" + "\fWaitSSOLogin\x12\x1b.daemon.WaitSSOLoginRequest\x1a\x1c.daemon.WaitSSOLoginResponse\"\x00\x12-\n" +
@@ -4900,8 +4900,8 @@ const file_daemon_proto_rawDesc = "" +
"ListStates\x12\x19.daemon.ListStatesRequest\x1a\x1a.daemon.ListStatesResponse\"\x00\x12E\n" + "ListStates\x12\x19.daemon.ListStatesRequest\x1a\x1a.daemon.ListStatesResponse\"\x00\x12E\n" +
"\n" + "\n" +
"CleanState\x12\x19.daemon.CleanStateRequest\x1a\x1a.daemon.CleanStateResponse\"\x00\x12H\n" + "CleanState\x12\x19.daemon.CleanStateRequest\x1a\x1a.daemon.CleanStateResponse\"\x00\x12H\n" +
"\vDeleteState\x12\x1a.daemon.DeleteStateRequest\x1a\x1b.daemon.DeleteStateResponse\"\x00\x12o\n" + "\vDeleteState\x12\x1a.daemon.DeleteStateRequest\x1a\x1b.daemon.DeleteStateResponse\"\x00\x12u\n" +
"\x18SetNetworkMapPersistence\x12'.daemon.SetNetworkMapPersistenceRequest\x1a(.daemon.SetNetworkMapPersistenceResponse\"\x00\x12H\n" + "\x1aSetSyncResponsePersistence\x12).daemon.SetSyncResponsePersistenceRequest\x1a*.daemon.SetSyncResponsePersistenceResponse\"\x00\x12H\n" +
"\vTracePacket\x12\x1a.daemon.TracePacketRequest\x1a\x1b.daemon.TracePacketResponse\"\x00\x12D\n" + "\vTracePacket\x12\x1a.daemon.TracePacketRequest\x1a\x1b.daemon.TracePacketResponse\"\x00\x12D\n" +
"\x0fSubscribeEvents\x12\x18.daemon.SubscribeRequest\x1a\x13.daemon.SystemEvent\"\x000\x01\x12B\n" + "\x0fSubscribeEvents\x12\x18.daemon.SubscribeRequest\x1a\x13.daemon.SystemEvent\"\x000\x01\x12B\n" +
"\tGetEvents\x12\x18.daemon.GetEventsRequest\x1a\x19.daemon.GetEventsResponse\"\x00\x12N\n" + "\tGetEvents\x12\x18.daemon.GetEventsRequest\x1a\x19.daemon.GetEventsResponse\"\x00\x12N\n" +
@@ -4929,81 +4929,81 @@ func file_daemon_proto_rawDescGZIP() []byte {
var file_daemon_proto_enumTypes = make([]protoimpl.EnumInfo, 3) var file_daemon_proto_enumTypes = make([]protoimpl.EnumInfo, 3)
var file_daemon_proto_msgTypes = make([]protoimpl.MessageInfo, 70) var file_daemon_proto_msgTypes = make([]protoimpl.MessageInfo, 70)
var file_daemon_proto_goTypes = []any{ var file_daemon_proto_goTypes = []any{
(LogLevel)(0), // 0: daemon.LogLevel (LogLevel)(0), // 0: daemon.LogLevel
(SystemEvent_Severity)(0), // 1: daemon.SystemEvent.Severity (SystemEvent_Severity)(0), // 1: daemon.SystemEvent.Severity
(SystemEvent_Category)(0), // 2: daemon.SystemEvent.Category (SystemEvent_Category)(0), // 2: daemon.SystemEvent.Category
(*EmptyRequest)(nil), // 3: daemon.EmptyRequest (*EmptyRequest)(nil), // 3: daemon.EmptyRequest
(*LoginRequest)(nil), // 4: daemon.LoginRequest (*LoginRequest)(nil), // 4: daemon.LoginRequest
(*LoginResponse)(nil), // 5: daemon.LoginResponse (*LoginResponse)(nil), // 5: daemon.LoginResponse
(*WaitSSOLoginRequest)(nil), // 6: daemon.WaitSSOLoginRequest (*WaitSSOLoginRequest)(nil), // 6: daemon.WaitSSOLoginRequest
(*WaitSSOLoginResponse)(nil), // 7: daemon.WaitSSOLoginResponse (*WaitSSOLoginResponse)(nil), // 7: daemon.WaitSSOLoginResponse
(*UpRequest)(nil), // 8: daemon.UpRequest (*UpRequest)(nil), // 8: daemon.UpRequest
(*UpResponse)(nil), // 9: daemon.UpResponse (*UpResponse)(nil), // 9: daemon.UpResponse
(*StatusRequest)(nil), // 10: daemon.StatusRequest (*StatusRequest)(nil), // 10: daemon.StatusRequest
(*StatusResponse)(nil), // 11: daemon.StatusResponse (*StatusResponse)(nil), // 11: daemon.StatusResponse
(*DownRequest)(nil), // 12: daemon.DownRequest (*DownRequest)(nil), // 12: daemon.DownRequest
(*DownResponse)(nil), // 13: daemon.DownResponse (*DownResponse)(nil), // 13: daemon.DownResponse
(*GetConfigRequest)(nil), // 14: daemon.GetConfigRequest (*GetConfigRequest)(nil), // 14: daemon.GetConfigRequest
(*GetConfigResponse)(nil), // 15: daemon.GetConfigResponse (*GetConfigResponse)(nil), // 15: daemon.GetConfigResponse
(*PeerState)(nil), // 16: daemon.PeerState (*PeerState)(nil), // 16: daemon.PeerState
(*LocalPeerState)(nil), // 17: daemon.LocalPeerState (*LocalPeerState)(nil), // 17: daemon.LocalPeerState
(*SignalState)(nil), // 18: daemon.SignalState (*SignalState)(nil), // 18: daemon.SignalState
(*ManagementState)(nil), // 19: daemon.ManagementState (*ManagementState)(nil), // 19: daemon.ManagementState
(*RelayState)(nil), // 20: daemon.RelayState (*RelayState)(nil), // 20: daemon.RelayState
(*NSGroupState)(nil), // 21: daemon.NSGroupState (*NSGroupState)(nil), // 21: daemon.NSGroupState
(*FullStatus)(nil), // 22: daemon.FullStatus (*FullStatus)(nil), // 22: daemon.FullStatus
(*ListNetworksRequest)(nil), // 23: daemon.ListNetworksRequest (*ListNetworksRequest)(nil), // 23: daemon.ListNetworksRequest
(*ListNetworksResponse)(nil), // 24: daemon.ListNetworksResponse (*ListNetworksResponse)(nil), // 24: daemon.ListNetworksResponse
(*SelectNetworksRequest)(nil), // 25: daemon.SelectNetworksRequest (*SelectNetworksRequest)(nil), // 25: daemon.SelectNetworksRequest
(*SelectNetworksResponse)(nil), // 26: daemon.SelectNetworksResponse (*SelectNetworksResponse)(nil), // 26: daemon.SelectNetworksResponse
(*IPList)(nil), // 27: daemon.IPList (*IPList)(nil), // 27: daemon.IPList
(*Network)(nil), // 28: daemon.Network (*Network)(nil), // 28: daemon.Network
(*PortInfo)(nil), // 29: daemon.PortInfo (*PortInfo)(nil), // 29: daemon.PortInfo
(*ForwardingRule)(nil), // 30: daemon.ForwardingRule (*ForwardingRule)(nil), // 30: daemon.ForwardingRule
(*ForwardingRulesResponse)(nil), // 31: daemon.ForwardingRulesResponse (*ForwardingRulesResponse)(nil), // 31: daemon.ForwardingRulesResponse
(*DebugBundleRequest)(nil), // 32: daemon.DebugBundleRequest (*DebugBundleRequest)(nil), // 32: daemon.DebugBundleRequest
(*DebugBundleResponse)(nil), // 33: daemon.DebugBundleResponse (*DebugBundleResponse)(nil), // 33: daemon.DebugBundleResponse
(*GetLogLevelRequest)(nil), // 34: daemon.GetLogLevelRequest (*GetLogLevelRequest)(nil), // 34: daemon.GetLogLevelRequest
(*GetLogLevelResponse)(nil), // 35: daemon.GetLogLevelResponse (*GetLogLevelResponse)(nil), // 35: daemon.GetLogLevelResponse
(*SetLogLevelRequest)(nil), // 36: daemon.SetLogLevelRequest (*SetLogLevelRequest)(nil), // 36: daemon.SetLogLevelRequest
(*SetLogLevelResponse)(nil), // 37: daemon.SetLogLevelResponse (*SetLogLevelResponse)(nil), // 37: daemon.SetLogLevelResponse
(*State)(nil), // 38: daemon.State (*State)(nil), // 38: daemon.State
(*ListStatesRequest)(nil), // 39: daemon.ListStatesRequest (*ListStatesRequest)(nil), // 39: daemon.ListStatesRequest
(*ListStatesResponse)(nil), // 40: daemon.ListStatesResponse (*ListStatesResponse)(nil), // 40: daemon.ListStatesResponse
(*CleanStateRequest)(nil), // 41: daemon.CleanStateRequest (*CleanStateRequest)(nil), // 41: daemon.CleanStateRequest
(*CleanStateResponse)(nil), // 42: daemon.CleanStateResponse (*CleanStateResponse)(nil), // 42: daemon.CleanStateResponse
(*DeleteStateRequest)(nil), // 43: daemon.DeleteStateRequest (*DeleteStateRequest)(nil), // 43: daemon.DeleteStateRequest
(*DeleteStateResponse)(nil), // 44: daemon.DeleteStateResponse (*DeleteStateResponse)(nil), // 44: daemon.DeleteStateResponse
(*SetNetworkMapPersistenceRequest)(nil), // 45: daemon.SetNetworkMapPersistenceRequest (*SetSyncResponsePersistenceRequest)(nil), // 45: daemon.SetSyncResponsePersistenceRequest
(*SetNetworkMapPersistenceResponse)(nil), // 46: daemon.SetNetworkMapPersistenceResponse (*SetSyncResponsePersistenceResponse)(nil), // 46: daemon.SetSyncResponsePersistenceResponse
(*TCPFlags)(nil), // 47: daemon.TCPFlags (*TCPFlags)(nil), // 47: daemon.TCPFlags
(*TracePacketRequest)(nil), // 48: daemon.TracePacketRequest (*TracePacketRequest)(nil), // 48: daemon.TracePacketRequest
(*TraceStage)(nil), // 49: daemon.TraceStage (*TraceStage)(nil), // 49: daemon.TraceStage
(*TracePacketResponse)(nil), // 50: daemon.TracePacketResponse (*TracePacketResponse)(nil), // 50: daemon.TracePacketResponse
(*SubscribeRequest)(nil), // 51: daemon.SubscribeRequest (*SubscribeRequest)(nil), // 51: daemon.SubscribeRequest
(*SystemEvent)(nil), // 52: daemon.SystemEvent (*SystemEvent)(nil), // 52: daemon.SystemEvent
(*GetEventsRequest)(nil), // 53: daemon.GetEventsRequest (*GetEventsRequest)(nil), // 53: daemon.GetEventsRequest
(*GetEventsResponse)(nil), // 54: daemon.GetEventsResponse (*GetEventsResponse)(nil), // 54: daemon.GetEventsResponse
(*SwitchProfileRequest)(nil), // 55: daemon.SwitchProfileRequest (*SwitchProfileRequest)(nil), // 55: daemon.SwitchProfileRequest
(*SwitchProfileResponse)(nil), // 56: daemon.SwitchProfileResponse (*SwitchProfileResponse)(nil), // 56: daemon.SwitchProfileResponse
(*SetConfigRequest)(nil), // 57: daemon.SetConfigRequest (*SetConfigRequest)(nil), // 57: daemon.SetConfigRequest
(*SetConfigResponse)(nil), // 58: daemon.SetConfigResponse (*SetConfigResponse)(nil), // 58: daemon.SetConfigResponse
(*AddProfileRequest)(nil), // 59: daemon.AddProfileRequest (*AddProfileRequest)(nil), // 59: daemon.AddProfileRequest
(*AddProfileResponse)(nil), // 60: daemon.AddProfileResponse (*AddProfileResponse)(nil), // 60: daemon.AddProfileResponse
(*RemoveProfileRequest)(nil), // 61: daemon.RemoveProfileRequest (*RemoveProfileRequest)(nil), // 61: daemon.RemoveProfileRequest
(*RemoveProfileResponse)(nil), // 62: daemon.RemoveProfileResponse (*RemoveProfileResponse)(nil), // 62: daemon.RemoveProfileResponse
(*ListProfilesRequest)(nil), // 63: daemon.ListProfilesRequest (*ListProfilesRequest)(nil), // 63: daemon.ListProfilesRequest
(*ListProfilesResponse)(nil), // 64: daemon.ListProfilesResponse (*ListProfilesResponse)(nil), // 64: daemon.ListProfilesResponse
(*Profile)(nil), // 65: daemon.Profile (*Profile)(nil), // 65: daemon.Profile
(*GetActiveProfileRequest)(nil), // 66: daemon.GetActiveProfileRequest (*GetActiveProfileRequest)(nil), // 66: daemon.GetActiveProfileRequest
(*GetActiveProfileResponse)(nil), // 67: daemon.GetActiveProfileResponse (*GetActiveProfileResponse)(nil), // 67: daemon.GetActiveProfileResponse
(*LogoutRequest)(nil), // 68: daemon.LogoutRequest (*LogoutRequest)(nil), // 68: daemon.LogoutRequest
(*LogoutResponse)(nil), // 69: daemon.LogoutResponse (*LogoutResponse)(nil), // 69: daemon.LogoutResponse
nil, // 70: daemon.Network.ResolvedIPsEntry nil, // 70: daemon.Network.ResolvedIPsEntry
(*PortInfo_Range)(nil), // 71: daemon.PortInfo.Range (*PortInfo_Range)(nil), // 71: daemon.PortInfo.Range
nil, // 72: daemon.SystemEvent.MetadataEntry nil, // 72: daemon.SystemEvent.MetadataEntry
(*durationpb.Duration)(nil), // 73: google.protobuf.Duration (*durationpb.Duration)(nil), // 73: google.protobuf.Duration
(*timestamppb.Timestamp)(nil), // 74: google.protobuf.Timestamp (*timestamppb.Timestamp)(nil), // 74: google.protobuf.Timestamp
} }
var file_daemon_proto_depIdxs = []int32{ var file_daemon_proto_depIdxs = []int32{
73, // 0: daemon.LoginRequest.dnsRouteInterval:type_name -> google.protobuf.Duration 73, // 0: daemon.LoginRequest.dnsRouteInterval:type_name -> google.protobuf.Duration
@@ -5053,7 +5053,7 @@ var file_daemon_proto_depIdxs = []int32{
39, // 44: daemon.DaemonService.ListStates:input_type -> daemon.ListStatesRequest 39, // 44: daemon.DaemonService.ListStates:input_type -> daemon.ListStatesRequest
41, // 45: daemon.DaemonService.CleanState:input_type -> daemon.CleanStateRequest 41, // 45: daemon.DaemonService.CleanState:input_type -> daemon.CleanStateRequest
43, // 46: daemon.DaemonService.DeleteState:input_type -> daemon.DeleteStateRequest 43, // 46: daemon.DaemonService.DeleteState:input_type -> daemon.DeleteStateRequest
45, // 47: daemon.DaemonService.SetNetworkMapPersistence:input_type -> daemon.SetNetworkMapPersistenceRequest 45, // 47: daemon.DaemonService.SetSyncResponsePersistence:input_type -> daemon.SetSyncResponsePersistenceRequest
48, // 48: daemon.DaemonService.TracePacket:input_type -> daemon.TracePacketRequest 48, // 48: daemon.DaemonService.TracePacket:input_type -> daemon.TracePacketRequest
51, // 49: daemon.DaemonService.SubscribeEvents:input_type -> daemon.SubscribeRequest 51, // 49: daemon.DaemonService.SubscribeEvents:input_type -> daemon.SubscribeRequest
53, // 50: daemon.DaemonService.GetEvents:input_type -> daemon.GetEventsRequest 53, // 50: daemon.DaemonService.GetEvents:input_type -> daemon.GetEventsRequest
@@ -5080,7 +5080,7 @@ var file_daemon_proto_depIdxs = []int32{
40, // 71: daemon.DaemonService.ListStates:output_type -> daemon.ListStatesResponse 40, // 71: daemon.DaemonService.ListStates:output_type -> daemon.ListStatesResponse
42, // 72: daemon.DaemonService.CleanState:output_type -> daemon.CleanStateResponse 42, // 72: daemon.DaemonService.CleanState:output_type -> daemon.CleanStateResponse
44, // 73: daemon.DaemonService.DeleteState:output_type -> daemon.DeleteStateResponse 44, // 73: daemon.DaemonService.DeleteState:output_type -> daemon.DeleteStateResponse
46, // 74: daemon.DaemonService.SetNetworkMapPersistence:output_type -> daemon.SetNetworkMapPersistenceResponse 46, // 74: daemon.DaemonService.SetSyncResponsePersistence:output_type -> daemon.SetSyncResponsePersistenceResponse
50, // 75: daemon.DaemonService.TracePacket:output_type -> daemon.TracePacketResponse 50, // 75: daemon.DaemonService.TracePacket:output_type -> daemon.TracePacketResponse
52, // 76: daemon.DaemonService.SubscribeEvents:output_type -> daemon.SystemEvent 52, // 76: daemon.DaemonService.SubscribeEvents:output_type -> daemon.SystemEvent
54, // 77: daemon.DaemonService.GetEvents:output_type -> daemon.GetEventsResponse 54, // 77: daemon.DaemonService.GetEvents:output_type -> daemon.GetEventsResponse

View File

@@ -59,8 +59,8 @@ service DaemonService {
// Delete specific state or all states // Delete specific state or all states
rpc DeleteState(DeleteStateRequest) returns (DeleteStateResponse) {} rpc DeleteState(DeleteStateRequest) returns (DeleteStateResponse) {}
// SetNetworkMapPersistence enables or disables network map persistence // SetSyncResponsePersistence enables or disables sync response persistence
rpc SetNetworkMapPersistence(SetNetworkMapPersistenceRequest) returns (SetNetworkMapPersistenceResponse) {} rpc SetSyncResponsePersistence(SetSyncResponsePersistenceRequest) returns (SetSyncResponsePersistenceResponse) {}
rpc TracePacket(TracePacketRequest) returns (TracePacketResponse) {} rpc TracePacket(TracePacketRequest) returns (TracePacketResponse) {}
@@ -452,11 +452,11 @@ message DeleteStateResponse {
} }
message SetNetworkMapPersistenceRequest { message SetSyncResponsePersistenceRequest {
bool enabled = 1; bool enabled = 1;
} }
message SetNetworkMapPersistenceResponse {} message SetSyncResponsePersistenceResponse {}
message TCPFlags { message TCPFlags {
bool syn = 1; bool syn = 1;

View File

@@ -50,8 +50,8 @@ type DaemonServiceClient interface {
CleanState(ctx context.Context, in *CleanStateRequest, opts ...grpc.CallOption) (*CleanStateResponse, error) CleanState(ctx context.Context, in *CleanStateRequest, opts ...grpc.CallOption) (*CleanStateResponse, error)
// Delete specific state or all states // Delete specific state or all states
DeleteState(ctx context.Context, in *DeleteStateRequest, opts ...grpc.CallOption) (*DeleteStateResponse, error) DeleteState(ctx context.Context, in *DeleteStateRequest, opts ...grpc.CallOption) (*DeleteStateResponse, error)
// SetNetworkMapPersistence enables or disables network map persistence // SetSyncResponsePersistence enables or disables sync response persistence
SetNetworkMapPersistence(ctx context.Context, in *SetNetworkMapPersistenceRequest, opts ...grpc.CallOption) (*SetNetworkMapPersistenceResponse, error) SetSyncResponsePersistence(ctx context.Context, in *SetSyncResponsePersistenceRequest, opts ...grpc.CallOption) (*SetSyncResponsePersistenceResponse, error)
TracePacket(ctx context.Context, in *TracePacketRequest, opts ...grpc.CallOption) (*TracePacketResponse, error) TracePacket(ctx context.Context, in *TracePacketRequest, opts ...grpc.CallOption) (*TracePacketResponse, error)
SubscribeEvents(ctx context.Context, in *SubscribeRequest, opts ...grpc.CallOption) (DaemonService_SubscribeEventsClient, error) SubscribeEvents(ctx context.Context, in *SubscribeRequest, opts ...grpc.CallOption) (DaemonService_SubscribeEventsClient, error)
GetEvents(ctx context.Context, in *GetEventsRequest, opts ...grpc.CallOption) (*GetEventsResponse, error) GetEvents(ctx context.Context, in *GetEventsRequest, opts ...grpc.CallOption) (*GetEventsResponse, error)
@@ -217,9 +217,9 @@ func (c *daemonServiceClient) DeleteState(ctx context.Context, in *DeleteStateRe
return out, nil return out, nil
} }
func (c *daemonServiceClient) SetNetworkMapPersistence(ctx context.Context, in *SetNetworkMapPersistenceRequest, opts ...grpc.CallOption) (*SetNetworkMapPersistenceResponse, error) { func (c *daemonServiceClient) SetSyncResponsePersistence(ctx context.Context, in *SetSyncResponsePersistenceRequest, opts ...grpc.CallOption) (*SetSyncResponsePersistenceResponse, error) {
out := new(SetNetworkMapPersistenceResponse) out := new(SetSyncResponsePersistenceResponse)
err := c.cc.Invoke(ctx, "/daemon.DaemonService/SetNetworkMapPersistence", in, out, opts...) err := c.cc.Invoke(ctx, "/daemon.DaemonService/SetSyncResponsePersistence", in, out, opts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -375,8 +375,8 @@ type DaemonServiceServer interface {
CleanState(context.Context, *CleanStateRequest) (*CleanStateResponse, error) CleanState(context.Context, *CleanStateRequest) (*CleanStateResponse, error)
// Delete specific state or all states // Delete specific state or all states
DeleteState(context.Context, *DeleteStateRequest) (*DeleteStateResponse, error) DeleteState(context.Context, *DeleteStateRequest) (*DeleteStateResponse, error)
// SetNetworkMapPersistence enables or disables network map persistence // SetSyncResponsePersistence enables or disables sync response persistence
SetNetworkMapPersistence(context.Context, *SetNetworkMapPersistenceRequest) (*SetNetworkMapPersistenceResponse, error) SetSyncResponsePersistence(context.Context, *SetSyncResponsePersistenceRequest) (*SetSyncResponsePersistenceResponse, error)
TracePacket(context.Context, *TracePacketRequest) (*TracePacketResponse, error) TracePacket(context.Context, *TracePacketRequest) (*TracePacketResponse, error)
SubscribeEvents(*SubscribeRequest, DaemonService_SubscribeEventsServer) error SubscribeEvents(*SubscribeRequest, DaemonService_SubscribeEventsServer) error
GetEvents(context.Context, *GetEventsRequest) (*GetEventsResponse, error) GetEvents(context.Context, *GetEventsRequest) (*GetEventsResponse, error)
@@ -443,8 +443,8 @@ func (UnimplementedDaemonServiceServer) CleanState(context.Context, *CleanStateR
func (UnimplementedDaemonServiceServer) DeleteState(context.Context, *DeleteStateRequest) (*DeleteStateResponse, error) { func (UnimplementedDaemonServiceServer) DeleteState(context.Context, *DeleteStateRequest) (*DeleteStateResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method DeleteState not implemented") return nil, status.Errorf(codes.Unimplemented, "method DeleteState not implemented")
} }
func (UnimplementedDaemonServiceServer) SetNetworkMapPersistence(context.Context, *SetNetworkMapPersistenceRequest) (*SetNetworkMapPersistenceResponse, error) { func (UnimplementedDaemonServiceServer) SetSyncResponsePersistence(context.Context, *SetSyncResponsePersistenceRequest) (*SetSyncResponsePersistenceResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method SetNetworkMapPersistence not implemented") return nil, status.Errorf(codes.Unimplemented, "method SetSyncResponsePersistence not implemented")
} }
func (UnimplementedDaemonServiceServer) TracePacket(context.Context, *TracePacketRequest) (*TracePacketResponse, error) { func (UnimplementedDaemonServiceServer) TracePacket(context.Context, *TracePacketRequest) (*TracePacketResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method TracePacket not implemented") return nil, status.Errorf(codes.Unimplemented, "method TracePacket not implemented")
@@ -777,20 +777,20 @@ func _DaemonService_DeleteState_Handler(srv interface{}, ctx context.Context, de
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _DaemonService_SetNetworkMapPersistence_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { func _DaemonService_SetSyncResponsePersistence_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(SetNetworkMapPersistenceRequest) in := new(SetSyncResponsePersistenceRequest)
if err := dec(in); err != nil { if err := dec(in); err != nil {
return nil, err return nil, err
} }
if interceptor == nil { if interceptor == nil {
return srv.(DaemonServiceServer).SetNetworkMapPersistence(ctx, in) return srv.(DaemonServiceServer).SetSyncResponsePersistence(ctx, in)
} }
info := &grpc.UnaryServerInfo{ info := &grpc.UnaryServerInfo{
Server: srv, Server: srv,
FullMethod: "/daemon.DaemonService/SetNetworkMapPersistence", FullMethod: "/daemon.DaemonService/SetSyncResponsePersistence",
} }
handler := func(ctx context.Context, req interface{}) (interface{}, error) { handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(DaemonServiceServer).SetNetworkMapPersistence(ctx, req.(*SetNetworkMapPersistenceRequest)) return srv.(DaemonServiceServer).SetSyncResponsePersistence(ctx, req.(*SetSyncResponsePersistenceRequest))
} }
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
@@ -1050,8 +1050,8 @@ var DaemonService_ServiceDesc = grpc.ServiceDesc{
Handler: _DaemonService_DeleteState_Handler, Handler: _DaemonService_DeleteState_Handler,
}, },
{ {
MethodName: "SetNetworkMapPersistence", MethodName: "SetSyncResponsePersistence",
Handler: _DaemonService_SetNetworkMapPersistence_Handler, Handler: _DaemonService_SetSyncResponsePersistence_Handler,
}, },
{ {
MethodName: "TracePacket", MethodName: "TracePacket",

View File

@@ -27,15 +27,16 @@ func (s *Server) DebugBundle(_ context.Context, req *proto.DebugBundleRequest) (
s.mutex.Lock() s.mutex.Lock()
defer s.mutex.Unlock() defer s.mutex.Unlock()
networkMap, err := s.getLatestNetworkMap() syncResponse, err := s.getLatestSyncResponse()
if err != nil { if err != nil {
log.Warnf("failed to get latest network map: %v", err) log.Warnf("failed to get latest sync response: %v", err)
} }
bundleGenerator := debug.NewBundleGenerator( bundleGenerator := debug.NewBundleGenerator(
debug.GeneratorDependencies{ debug.GeneratorDependencies{
InternalConfig: s.config, InternalConfig: s.config,
StatusRecorder: s.statusRecorder, StatusRecorder: s.statusRecorder,
NetworkMap: networkMap, SyncResponse: syncResponse,
LogFile: s.logFile, LogFile: s.logFile,
}, },
debug.BundleConfig{ debug.BundleConfig{
@@ -192,26 +193,25 @@ func (s *Server) SetLogLevel(_ context.Context, req *proto.SetLogLevelRequest) (
return &proto.SetLogLevelResponse{}, nil return &proto.SetLogLevelResponse{}, nil
} }
// SetNetworkMapPersistence sets the network map persistence for the server. // SetSyncResponsePersistence sets the sync response persistence for the server.
func (s *Server) SetNetworkMapPersistence(_ context.Context, req *proto.SetNetworkMapPersistenceRequest) (*proto.SetNetworkMapPersistenceResponse, error) { func (s *Server) SetSyncResponsePersistence(_ context.Context, req *proto.SetSyncResponsePersistenceRequest) (*proto.SetSyncResponsePersistenceResponse, error) {
s.mutex.Lock() s.mutex.Lock()
defer s.mutex.Unlock() defer s.mutex.Unlock()
enabled := req.GetEnabled() enabled := req.GetEnabled()
s.persistNetworkMap = enabled s.persistSyncResponse = enabled
if s.connectClient != nil { if s.connectClient != nil {
s.connectClient.SetNetworkMapPersistence(enabled) s.connectClient.SetSyncResponsePersistence(enabled)
} }
return &proto.SetNetworkMapPersistenceResponse{}, nil return &proto.SetSyncResponsePersistenceResponse{}, nil
} }
// getLatestNetworkMap returns the latest network map from the engine if network map persistence is enabled func (s *Server) getLatestSyncResponse() (*mgmProto.SyncResponse, error) {
func (s *Server) getLatestNetworkMap() (*mgmProto.NetworkMap, error) {
cClient := s.connectClient cClient := s.connectClient
if cClient == nil { if cClient == nil {
return nil, errors.New("connect client is not initialized") return nil, errors.New("connect client is not initialized")
} }
return cClient.GetLatestNetworkMap() return cClient.GetLatestSyncResponse()
} }

View File

@@ -70,9 +70,9 @@ type Server struct {
statusRecorder *peer.Status statusRecorder *peer.Status
sessionWatcher *internal.SessionWatcher sessionWatcher *internal.SessionWatcher
lastProbe time.Time lastProbe time.Time
persistNetworkMap bool persistSyncResponse bool
isSessionActive atomic.Bool isSessionActive atomic.Bool
profileManager *profilemanager.ServiceManager profileManager *profilemanager.ServiceManager
profilesDisabled bool profilesDisabled bool
@@ -88,12 +88,12 @@ type oauthAuthFlow struct {
// New server instance constructor. // New server instance constructor.
func New(ctx context.Context, logFile string, configFile string, profilesDisabled bool) *Server { func New(ctx context.Context, logFile string, configFile string, profilesDisabled bool) *Server {
return &Server{ return &Server{
rootCtx: ctx, rootCtx: ctx,
logFile: logFile, logFile: logFile,
persistNetworkMap: true, persistSyncResponse: true,
statusRecorder: peer.NewRecorder(""), statusRecorder: peer.NewRecorder(""),
profileManager: profilemanager.NewServiceManager(configFile), profileManager: profilemanager.NewServiceManager(configFile),
profilesDisabled: profilesDisabled, profilesDisabled: profilesDisabled,
} }
} }
@@ -233,7 +233,7 @@ func (s *Server) connectWithRetryRuns(ctx context.Context, config *profilemanage
runOperation := func() error { runOperation := func() error {
log.Tracef("running client connection") log.Tracef("running client connection")
s.connectClient = internal.NewConnectClient(ctx, config, statusRecorder) s.connectClient = internal.NewConnectClient(ctx, config, statusRecorder)
s.connectClient.SetNetworkMapPersistence(s.persistNetworkMap) s.connectClient.SetSyncResponsePersistence(s.persistSyncResponse)
err := s.connectClient.Run(runningChan) err := s.connectClient.Run(runningChan)
if err != nil { if err != nil {

View File

@@ -395,12 +395,12 @@ func (s *serviceClient) configureServiceForDebug(
time.Sleep(time.Second) time.Sleep(time.Second)
if enablePersistence { if enablePersistence {
if _, err := conn.SetNetworkMapPersistence(s.ctx, &proto.SetNetworkMapPersistenceRequest{ if _, err := conn.SetSyncResponsePersistence(s.ctx, &proto.SetSyncResponsePersistenceRequest{
Enabled: true, Enabled: true,
}); err != nil { }); err != nil {
return fmt.Errorf("enable network map persistence: %v", err) return fmt.Errorf("enable sync response persistence: %v", err)
} }
log.Info("Network map persistence enabled for debug") log.Info("Sync response persistence enabled for debug")
} }
if _, err := conn.Up(s.ctx, &proto.UpRequest{}); err != nil { if _, err := conn.Up(s.ctx, &proto.UpRequest{}); err != nil {