package app import ( "fmt" ) // --------------------------------------------------------------------- // smartdns runtime accelerator (nftset -> agvpn_dyn4) // --------------------------------------------------------------------- // EN: Runtime accelerator state is persisted separately from DNS mode. // EN: This allows enabling/disabling SmartDNS nftset hook without changing // EN: resolver primary behavior. // RU: Состояние runtime-ускорителя хранится отдельно от DNS mode. // RU: Это позволяет включать/выключать SmartDNS nftset-hook независимо от // RU: основного пути через резолвер. const ( smartdnsRuntimeDomainSetLine = "domain-set -name agvpn_wild -file /etc/selective-vpn/smartdns.conf" smartdnsRuntimeNftsetLine = "nftset /domain-set:agvpn_wild/#4:inet#agvpn#agvpn_dyn4" smartdnsRuntimeStateVersion = 1 ) type smartDNSRuntimeState struct { Version int `json:"version"` Enabled bool `json:"enabled"` UpdatedAt string `json:"updated_at"` } func wildcardFillSource(runtimeEnabled bool) string { if runtimeEnabled { return "both" } return "resolver" } func smartDNSRuntimeSnapshot() SmartDNSRuntimeStatusResponse { st := loadSmartDNSRuntimeState(nil) appliedEnabled, err := smartDNSRuntimeEnabledFromConfig() msg := "" if err != nil { msg = fmt.Sprintf("config read error: %v", err) } return SmartDNSRuntimeStatusResponse{ Enabled: st.Enabled, AppliedEnable: appliedEnabled, WildcardSource: wildcardFillSource(st.Enabled), UnitState: smartdnsUnitState(), ConfigPath: smartdnsMainConfig, Message: msg, } }