gitextract_r0774cwm/ ├── .dockerignore ├── .editorconfig ├── .github/ │ ├── FUNDING.yml │ └── workflows/ │ ├── ci.yml │ └── release.yml ├── .gitignore ├── Directory.Build.props ├── LICENSE ├── NetworkOptimizer.sln ├── README.md ├── TODO.md ├── docker/ │ ├── .dockerignore │ ├── .env.example │ ├── DEPLOYMENT.md │ ├── Dockerfile │ ├── NATIVE-DEPLOYMENT.md │ ├── QUICK-REFERENCE.md │ ├── README.md │ ├── docker-compose.local.yml │ ├── docker-compose.macos.yml │ ├── docker-compose.prod.yml │ ├── docker-compose.yml │ ├── entrypoint.sh │ ├── grafana/ │ │ ├── dashboards/ │ │ │ ├── network-overview.json │ │ │ ├── security-posture.json │ │ │ ├── sqm-performance.json │ │ │ └── switch-deep-dive.json │ │ └── provisioning/ │ │ ├── dashboards/ │ │ │ └── dashboards.yml │ │ └── datasources/ │ │ └── influxdb.yml │ └── openspeedtest/ │ ├── Dockerfile │ ├── entrypoint.sh │ └── nginx.conf ├── docs/ │ ├── MACOS-INSTALLATION.md │ ├── PLAN-unifi-api-abstraction.md │ └── features/ │ └── speed-test-roadmap.md ├── nuget.config ├── packages/ │ ├── Blazor-ApexCharts.6.1.1-ozarkconnect.1.nupkg │ └── Blazor-ApexCharts.6.1.1-ozarkconnect.2.nupkg ├── renovate.json ├── scripts/ │ ├── README.md │ ├── build-installer.ps1 │ ├── build.sh │ ├── clean.sh │ ├── coverage.runsettings │ ├── coverage.sh │ ├── deploy-external-speedtest.sh │ ├── docker-build.sh │ ├── docker-run.sh │ ├── docker-stop.sh │ ├── extract-elevation0-from-images.py │ ├── install-macos-native.sh │ ├── parse-antenna-patterns.ps1 │ ├── proxmox/ │ │ ├── README.md │ │ └── install.sh │ ├── publish.sh │ ├── reset-password.ps1 │ ├── reset-password.sh │ ├── sync-perf-tweaks.ps1 │ ├── test.sh │ └── watch.sh ├── src/ │ ├── NetworkOptimizer.Agents/ │ │ ├── .gitignore │ │ ├── AgentDeployer.cs │ │ ├── AgentHealthMonitor.cs │ │ ├── Models/ │ │ │ ├── AgentConfiguration.cs │ │ │ ├── DeploymentResult.cs │ │ │ └── SshCredentials.cs │ │ ├── NetworkOptimizer.Agents.csproj │ │ ├── README.md │ │ ├── ScriptRenderer.cs │ │ └── Templates/ │ │ ├── install-linux.sh.template │ │ ├── linux-agent.service.template │ │ └── linux-agent.sh.template │ ├── NetworkOptimizer.Alerts/ │ │ ├── AlertCooldownTracker.cs │ │ ├── AlertCorrelationService.cs │ │ ├── AlertProcessingService.cs │ │ ├── AlertRuleEvaluator.cs │ │ ├── DefaultAlertRules.cs │ │ ├── Delivery/ │ │ │ ├── DiscordChannelConfig.cs │ │ │ ├── DiscordDeliveryChannel.cs │ │ │ ├── EmailChannelConfig.cs │ │ │ ├── EmailDeliveryChannel.cs │ │ │ ├── IAlertDeliveryChannel.cs │ │ │ ├── ISecretDecryptor.cs │ │ │ ├── NtfyChannelConfig.cs │ │ │ ├── NtfyDeliveryChannel.cs │ │ │ ├── SlackChannelConfig.cs │ │ │ ├── SlackDeliveryChannel.cs │ │ │ ├── TeamsChannelConfig.cs │ │ │ ├── TeamsDeliveryChannel.cs │ │ │ ├── TimestampFormatter.cs │ │ │ ├── WebhookChannelConfig.cs │ │ │ └── WebhookDeliveryChannel.cs │ │ ├── DigestService.cs │ │ ├── Events/ │ │ │ ├── AlertEvent.cs │ │ │ ├── AlertEventBus.cs │ │ │ └── IAlertEventBus.cs │ │ ├── Interfaces/ │ │ │ ├── IAlertRepository.cs │ │ │ ├── IDigestStateStore.cs │ │ │ └── IScheduleRepository.cs │ │ ├── Models/ │ │ │ ├── AlertHistoryEntry.cs │ │ │ ├── AlertIncident.cs │ │ │ ├── AlertRule.cs │ │ │ ├── DeliveryChannel.cs │ │ │ └── ScheduledTask.cs │ │ ├── NetworkOptimizer.Alerts.csproj │ │ ├── ScheduleService.cs │ │ └── Templates/ │ │ ├── alert-email.html │ │ └── digest-email.html │ ├── NetworkOptimizer.Audit/ │ │ ├── Analyzers/ │ │ │ ├── AuditScorer.cs │ │ │ ├── FirewallGroupHelper.cs │ │ │ ├── FirewallRuleAnalyzer.cs │ │ │ ├── FirewallRuleEvaluator.cs │ │ │ ├── FirewallRuleOverlapDetector.cs │ │ │ ├── FirewallRuleParser.cs │ │ │ ├── HttpAppIds.cs │ │ │ ├── PortSecurityAnalyzer.cs │ │ │ ├── UpnpSecurityAnalyzer.cs │ │ │ └── VlanAnalyzer.cs │ │ ├── CHANGELOG.md │ │ ├── ConfigAuditEngine.cs │ │ ├── Constants/ │ │ │ └── DetectionConstants.cs │ │ ├── DeviceNameHints.cs │ │ ├── Dns/ │ │ │ ├── DnatDnsAnalyzer.cs │ │ │ ├── DnsAppIds.cs │ │ │ ├── DnsSecurityAnalyzer.cs │ │ │ ├── DnsStampDecoder.cs │ │ │ ├── DohProviderRegistry.cs │ │ │ └── ThirdPartyDnsDetector.cs │ │ ├── IssueTypes.cs │ │ ├── Models/ │ │ │ ├── AuditIssue.cs │ │ │ ├── AuditRequest.cs │ │ │ ├── AuditResult.cs │ │ │ ├── AuditSeverity.cs │ │ │ ├── DeviceAllowanceSettings.cs │ │ │ ├── DeviceDetectionResult.cs │ │ │ ├── FirewallAction.cs │ │ │ ├── FirewallRule.cs │ │ │ ├── NetworkInfo.cs │ │ │ ├── OfflineClientInfo.cs │ │ │ ├── PortInfo.cs │ │ │ ├── SwitchInfo.cs │ │ │ └── WirelessClientInfo.cs │ │ ├── NetworkOptimizer.Audit.csproj │ │ ├── README.md │ │ ├── Rules/ │ │ │ ├── AccessPortVlanRule.cs │ │ │ ├── CameraVlanRule.cs │ │ │ ├── FirewallAnyAnyRule.cs │ │ │ ├── IAuditRule.cs │ │ │ ├── IWirelessAuditRule.cs │ │ │ ├── IotVlanRule.cs │ │ │ ├── MacRestrictionRule.cs │ │ │ ├── PortIsolationRule.cs │ │ │ ├── PortNameHelper.cs │ │ │ ├── UnusedPortRule.cs │ │ │ ├── VlanPlacementChecker.cs │ │ │ ├── VlanSubnetMismatchRule.cs │ │ │ ├── WiredSubnetMismatchRule.cs │ │ │ ├── WirelessCameraVlanRule.cs │ │ │ └── WirelessIotVlanRule.cs │ │ ├── Scoring/ │ │ │ └── ScoreConstants.cs │ │ └── Services/ │ │ ├── Detectors/ │ │ │ ├── FingerprintDetector.cs │ │ │ ├── MacOuiDetector.cs │ │ │ └── NamePatternDetector.cs │ │ ├── DeviceTypeDetectionService.cs │ │ ├── FirewallZoneLookup.cs │ │ ├── IIeeeOuiDatabase.cs │ │ └── IeeeOuiDatabase.cs │ ├── NetworkOptimizer.Core/ │ │ ├── Caching/ │ │ │ └── AsyncCachedValue.cs │ │ ├── Enums/ │ │ │ ├── AgentType.cs │ │ │ ├── AlertSeverity.cs │ │ │ ├── AlertStatus.cs │ │ │ ├── AuditSeverity.cs │ │ │ ├── ClientDeviceCategory.cs │ │ │ ├── DeviceType.cs │ │ │ └── MeasurementType.cs │ │ ├── Extensions/ │ │ │ └── ServiceProviderExtensions.cs │ │ ├── FeatureFlags.cs │ │ ├── Helpers/ │ │ │ ├── CloudflareIpRanges.cs │ │ │ ├── DisplayFormatters.cs │ │ │ ├── JsonExtensions.cs │ │ │ ├── NetworkFormatHelpers.cs │ │ │ ├── NetworkUtilities.cs │ │ │ └── ProcessUtilities.cs │ │ ├── Interfaces/ │ │ │ ├── IAgentDeployer.cs │ │ │ ├── IAuditEngine.cs │ │ │ ├── IMetricsStorage.cs │ │ │ ├── IReportGenerator.cs │ │ │ ├── ISqmManager.cs │ │ │ └── IUniFiApiClient.cs │ │ ├── Models/ │ │ │ ├── AgentStatus.cs │ │ │ ├── AuditResult.cs │ │ │ ├── NetworkConfiguration.cs │ │ │ ├── ProtectCamera.cs │ │ │ ├── SqmConfiguration.cs │ │ │ └── UniFiDevice.cs │ │ ├── NetworkOptimizer.Core.csproj │ │ └── VendorSpecificAttribute.cs │ ├── NetworkOptimizer.Diagnostics/ │ │ ├── Analyzers/ │ │ │ ├── ApLockAnalyzer.cs │ │ │ ├── PerformanceAnalyzer.cs │ │ │ ├── PortProfile8021xAnalyzer.cs │ │ │ ├── PortProfileSuggestionAnalyzer.cs │ │ │ ├── StreamingAppIds.cs │ │ │ └── TrunkConsistencyAnalyzer.cs │ │ ├── DiagnosticsEngine.cs │ │ ├── Models/ │ │ │ ├── AccessPortVlanIssue.cs │ │ │ ├── ApLockIssue.cs │ │ │ ├── DiagnosticSeverity.cs │ │ │ ├── DiagnosticsResult.cs │ │ │ ├── PerformanceIssue.cs │ │ │ ├── PortProfile8021xIssue.cs │ │ │ ├── PortProfileSuggestion.cs │ │ │ └── TrunkConsistencyIssue.cs │ │ └── NetworkOptimizer.Diagnostics.csproj │ ├── NetworkOptimizer.Installer/ │ │ ├── CustomStrings.wxl │ │ ├── Iperf3/ │ │ │ ├── .gitignore │ │ │ └── Download-Iperf3.ps1 │ │ ├── Iperf3Component.wxs │ │ ├── LICENSE.txt │ │ ├── License.rtf │ │ ├── NetworkOptimizer.Installer.wixproj │ │ ├── Package.wxs │ │ ├── ServiceComponent.wxs │ │ ├── SpeedTest/ │ │ │ ├── .gitignore │ │ │ ├── Download-Nginx.ps1 │ │ │ ├── Start-SpeedTest.ps1 │ │ │ ├── config.js.template │ │ │ └── nginx.conf │ │ ├── SpeedTestComponent.wxs │ │ ├── Traefik/ │ │ │ ├── .gitignore │ │ │ └── Download-Traefik.ps1 │ │ └── TraefikComponent.wxs │ ├── NetworkOptimizer.Monitoring/ │ │ ├── AlertEngine.cs │ │ ├── MetricsAggregator.cs │ │ ├── Models/ │ │ │ ├── Alert.cs │ │ │ ├── AlertThreshold.cs │ │ │ ├── CellularModemStats.cs │ │ │ ├── DeviceMetrics.cs │ │ │ └── InterfaceMetrics.cs │ │ ├── NetworkOptimizer.Monitoring.csproj │ │ ├── QmicliParser.cs │ │ ├── README.md │ │ ├── SnmpConfiguration.cs │ │ ├── SnmpPoller.cs │ │ └── UniFiOids.cs │ ├── NetworkOptimizer.Reports/ │ │ ├── BrandingOptions.cs │ │ ├── INDEX.md │ │ ├── MarkdownReportGenerator.cs │ │ ├── NetworkOptimizer.Reports.csproj │ │ ├── PdfReportGenerator.cs │ │ ├── README.md │ │ ├── ReportData.cs │ │ └── Templates/ │ │ └── .gitkeep │ ├── NetworkOptimizer.Sqm/ │ │ ├── ARCHITECTURE.md │ │ ├── BaselineCalculator.cs │ │ ├── InputSanitizer.cs │ │ ├── LatencyMonitor.cs │ │ ├── Models/ │ │ │ ├── BaselineData.cs │ │ │ ├── ConnectionProfile.cs │ │ │ ├── SpeedtestResult.cs │ │ │ ├── SqmConfiguration.cs │ │ │ └── SqmStatus.cs │ │ ├── NetworkOptimizer.Sqm.csproj │ │ ├── README.md │ │ ├── ScriptGenerator.cs │ │ ├── SpeedtestIntegration.cs │ │ └── SqmManager.cs │ ├── NetworkOptimizer.Storage/ │ │ ├── .gitignore │ │ ├── Helpers/ │ │ │ └── SpeedTestFilterHelper.cs │ │ ├── InfluxDbStorage.cs │ │ ├── Interfaces/ │ │ │ ├── IAgentRepository.cs │ │ │ ├── IAuditRepository.cs │ │ │ ├── IMetricsStorage.cs │ │ │ ├── IModemRepository.cs │ │ │ ├── ISettingsRepository.cs │ │ │ ├── ISpeedTestRepository.cs │ │ │ ├── ISqmRepository.cs │ │ │ └── IUniFiRepository.cs │ │ ├── Migrations/ │ │ │ ├── 20251208000000_InitialCreate.Designer.cs │ │ │ ├── 20251208000000_InitialCreate.cs │ │ │ ├── 20251210000000_AddModemAndSpeedTables.Designer.cs │ │ │ ├── 20251210000000_AddModemAndSpeedTables.cs │ │ │ ├── 20251216000000_AddUniFiSshSettings.Designer.cs │ │ │ ├── 20251216000000_AddUniFiSshSettings.cs │ │ │ ├── 20251217000000_AddDismissedIssues.Designer.cs │ │ │ ├── 20251217000000_AddDismissedIssues.cs │ │ │ ├── 20251217100000_AddGatewaySshSettings.Designer.cs │ │ │ ├── 20251217100000_AddGatewaySshSettings.cs │ │ │ ├── 20251217200000_AddStartIperf3ServerToDeviceConfig.Designer.cs │ │ │ ├── 20251217200000_AddStartIperf3ServerToDeviceConfig.cs │ │ │ ├── 20251217300000_AddSystemSettings.Designer.cs │ │ │ ├── 20251217300000_AddSystemSettings.cs │ │ │ ├── 20251218000000_AddSshCredentialOverridesToDeviceConfig.Designer.cs │ │ │ ├── 20251218000000_AddSshCredentialOverridesToDeviceConfig.cs │ │ │ ├── 20251219000000_AddUniFiConnectionSettings.Designer.cs │ │ │ ├── 20251219000000_AddUniFiConnectionSettings.cs │ │ │ ├── 20251224000000_AddPathAnalysisJson.Designer.cs │ │ │ ├── 20251224000000_AddPathAnalysisJson.cs │ │ │ ├── 20251227000000_AddTcMonitorPort.Designer.cs │ │ │ ├── 20251227000000_AddTcMonitorPort.cs │ │ │ ├── 20251227100000_AddSqmWanConfiguration.Designer.cs │ │ │ ├── 20251227100000_AddSqmWanConfiguration.cs │ │ │ ├── 20251228000000_AddAdminSettings.Designer.cs │ │ │ ├── 20251228000000_AddAdminSettings.cs │ │ │ ├── 20251228100000_AddSqmSpeedtestSchedule.Designer.cs │ │ │ ├── 20251228100000_AddSqmSpeedtestSchedule.cs │ │ │ ├── 20251229000000_AddReportDataJson.Designer.cs │ │ │ ├── 20251229000000_AddReportDataJson.cs │ │ │ ├── 20260102000000_AddLocalIpToIperf3Result.Designer.cs │ │ │ ├── 20260102000000_AddLocalIpToIperf3Result.cs │ │ │ ├── 20260103000000_AddIgnoreControllerSSLErrors.Designer.cs │ │ │ ├── 20260103000000_AddIgnoreControllerSSLErrors.cs │ │ │ ├── 20260104100000_AddClientSpeedTestFieldsToIperf3Result.Designer.cs │ │ │ ├── 20260104100000_AddClientSpeedTestFieldsToIperf3Result.cs │ │ │ ├── 20260106000000_AddLocationAndWifiSignal.Designer.cs │ │ │ ├── 20260106000000_AddLocationAndWifiSignal.cs │ │ │ ├── 20260107000000_AddWifiRadio.Designer.cs │ │ │ ├── 20260107000000_AddWifiRadio.cs │ │ │ ├── 20260107100000_AddWifiMlo.Designer.cs │ │ │ ├── 20260107100000_AddWifiMlo.cs │ │ │ ├── 20260107200000_AddWifiTxRxRates.Designer.cs │ │ │ ├── 20260107200000_AddWifiTxRxRates.cs │ │ │ ├── 20260110000000_AddIperf3BinaryPathToDeviceConfig.Designer.cs │ │ │ ├── 20260110000000_AddIperf3BinaryPathToDeviceConfig.cs │ │ │ ├── 20260113000000_AddUpnpNotes.Designer.cs │ │ │ ├── 20260113000000_AddUpnpNotes.cs │ │ │ ├── 20260124000000_AddNotesToIperf3Result.Designer.cs │ │ │ ├── 20260124000000_AddNotesToIperf3Result.cs │ │ │ ├── 20260209200000_AddApLocations.Designer.cs │ │ │ ├── 20260209200000_AddApLocations.cs │ │ │ ├── 20260210100000_AddLoadedLatencyColumns.Designer.cs │ │ │ ├── 20260210100000_AddLoadedLatencyColumns.cs │ │ │ ├── 20260211000000_AddWanIdentityColumns.Designer.cs │ │ │ ├── 20260211000000_AddWanIdentityColumns.cs │ │ │ ├── 20260211200000_AddBuildingsAndFloorPlans.Designer.cs │ │ │ ├── 20260211200000_AddBuildingsAndFloorPlans.cs │ │ │ ├── 20260211300000_AddApOrientationDeg.Designer.cs │ │ │ ├── 20260211300000_AddApOrientationDeg.cs │ │ │ ├── 20260211400000_AddApMountType.Designer.cs │ │ │ ├── 20260211400000_AddApMountType.cs │ │ │ ├── 20260212000000_AddFloorMaterial.Designer.cs │ │ │ ├── 20260212000000_AddFloorMaterial.cs │ │ │ ├── 20260213000000_AddClientSignalLog.Designer.cs │ │ │ ├── 20260213000000_AddClientSignalLog.cs │ │ │ ├── 20260213000000_AddPlannedAps.Designer.cs │ │ │ ├── 20260213000000_AddPlannedAps.cs │ │ │ ├── 20260214100000_AddPerBandTxPower.Designer.cs │ │ │ ├── 20260214100000_AddPerBandTxPower.cs │ │ │ ├── 20260220000000_AddFloorPlanImages.Designer.cs │ │ │ ├── 20260220000000_AddFloorPlanImages.cs │ │ │ ├── 20260221000000_AddAlertTables.Designer.cs │ │ │ ├── 20260221000000_AddAlertTables.cs │ │ │ ├── 20260221100000_AddThreatTables.Designer.cs │ │ │ ├── 20260221100000_AddThreatTables.cs │ │ │ ├── 20260222100000_AddTrafficFlowFields.Designer.cs │ │ │ ├── 20260222100000_AddTrafficFlowFields.cs │ │ │ ├── 20260222200000_AddThreatNoiseFilters.Designer.cs │ │ │ ├── 20260222200000_AddThreatNoiseFilters.cs │ │ │ ├── 20260223000000_AddScheduledTasks.Designer.cs │ │ │ ├── 20260223000000_AddScheduledTasks.cs │ │ │ ├── 20260223100000_AddAlertRuleThreshold.Designer.cs │ │ │ ├── 20260223100000_AddAlertRuleThreshold.cs │ │ │ ├── 20260225200000_AddPatternLastAlertedAt.Designer.cs │ │ │ ├── 20260225200000_AddPatternLastAlertedAt.cs │ │ │ ├── 20260226010000_AddPatternDedupKey.Designer.cs │ │ │ ├── 20260226010000_AddPatternDedupKey.cs │ │ │ ├── 20260226100000_AddAuditIsScheduled.Designer.cs │ │ │ ├── 20260226100000_AddAuditIsScheduled.cs │ │ │ ├── 20260226120000_AddSqmBaselineLatency.Designer.cs │ │ │ ├── 20260226120000_AddSqmBaselineLatency.cs │ │ │ ├── 20260228000000_AddWanDataUsageTables.Designer.cs │ │ │ ├── 20260228000000_AddWanDataUsageTables.cs │ │ │ ├── 20260301000000_AddSignalLogChannelWidth.Designer.cs │ │ │ ├── 20260301000000_AddSignalLogChannelWidth.cs │ │ │ ├── 20260301200000_AddSnapshotGatewayBootTime.Designer.cs │ │ │ ├── 20260301200000_AddSnapshotGatewayBootTime.cs │ │ │ ├── 20260306000000_AddAlertSourceUrl.Designer.cs │ │ │ ├── 20260306000000_AddAlertSourceUrl.cs │ │ │ ├── 20260311000000_AddDeviceIperf3Overrides.Designer.cs │ │ │ ├── 20260311000000_AddDeviceIperf3Overrides.cs │ │ │ ├── 20260312000000_PurgeStaleCrowdSecNegativeCache.Designer.cs │ │ │ ├── 20260312000000_PurgeStaleCrowdSecNegativeCache.cs │ │ │ ├── 20260318000000_AddExternalServerName.Designer.cs │ │ │ ├── 20260318000000_AddExternalServerName.cs │ │ │ ├── 20260320000000_AddWanSteerTrafficClasses.Designer.cs │ │ │ ├── 20260320000000_AddWanSteerTrafficClasses.cs │ │ │ ├── 20260402100000_AddCongestionSeverity.Designer.cs │ │ │ ├── 20260402100000_AddCongestionSeverity.cs │ │ │ ├── 20260404000000_AddApiKey.Designer.cs │ │ │ ├── 20260404000000_AddApiKey.cs │ │ │ ├── 20260405000000_AddExternalSpeedTestServers.Designer.cs │ │ │ ├── 20260405000000_AddExternalSpeedTestServers.cs │ │ │ ├── 20260428000000_AddSqmLinkSpeedOverride.Designer.cs │ │ │ ├── 20260428000000_AddSqmLinkSpeedOverride.cs │ │ │ ├── 20260505000000_AddSqmBootDelay.Designer.cs │ │ │ ├── 20260505000000_AddSqmBootDelay.cs │ │ │ ├── 20260507000000_AddPerfTweakSettings.Designer.cs │ │ │ ├── 20260507000000_AddPerfTweakSettings.cs │ │ │ └── NetworkOptimizerDbContextModelSnapshot.cs │ │ ├── Models/ │ │ │ ├── AdminSettings.cs │ │ │ ├── AgentConfiguration.cs │ │ │ ├── ApLocation.cs │ │ │ ├── AuditResult.cs │ │ │ ├── Building.cs │ │ │ ├── ClientSignalLog.cs │ │ │ ├── DeviceSshConfiguration.cs │ │ │ ├── DismissedIssue.cs │ │ │ ├── ExternalSpeedTestServer.cs │ │ │ ├── FloorPlan.cs │ │ │ ├── FloorPlanImage.cs │ │ │ ├── GatewaySshSettings.cs │ │ │ ├── Iperf3Result.cs │ │ │ ├── LicenseInfo.cs │ │ │ ├── ModemConfiguration.cs │ │ │ ├── NetworkOptimizerDbContext.cs │ │ │ ├── PerfTweakSetting.cs │ │ │ ├── PlannedAp.cs │ │ │ ├── SqmBaseline.cs │ │ │ ├── SqmWanConfiguration.cs │ │ │ ├── SystemSetting.cs │ │ │ ├── UniFiConnectionSettings.cs │ │ │ ├── UniFiSshSettings.cs │ │ │ ├── UpnpNote.cs │ │ │ ├── WanDataUsageConfig.cs │ │ │ ├── WanDataUsageSnapshot.cs │ │ │ └── WanSteerTrafficClass.cs │ │ ├── NetworkOptimizer.Storage.csproj │ │ ├── README.md │ │ ├── Repositories/ │ │ │ ├── AgentRepository.cs │ │ │ ├── AlertRepository.cs │ │ │ ├── AuditRepository.cs │ │ │ ├── ModemRepository.cs │ │ │ ├── ScheduleRepository.cs │ │ │ ├── SettingsRepository.cs │ │ │ ├── SpeedTestRepository.cs │ │ │ ├── SqmRepository.cs │ │ │ ├── ThreatRepository.cs │ │ │ └── UniFiRepository.cs │ │ ├── RepositoryBase.cs │ │ ├── Services/ │ │ │ ├── CredentialProtectionService.cs │ │ │ └── ICredentialProtectionService.cs │ │ ├── StorageConfiguration.cs │ │ └── StorageServiceExtensions.cs │ ├── NetworkOptimizer.Threats/ │ │ ├── Analysis/ │ │ │ ├── BruteForceDetector.cs │ │ │ ├── DDoSDetector.cs │ │ │ ├── ExploitCampaignDetector.cs │ │ │ ├── ExposureValidator.cs │ │ │ ├── FlowInterestFilter.cs │ │ │ ├── KillChainClassifier.cs │ │ │ ├── ScanSweepDetector.cs │ │ │ └── ThreatPatternAnalyzer.cs │ │ ├── CrowdSec/ │ │ │ ├── CrowdSecClient.cs │ │ │ ├── CrowdSecEnrichmentService.cs │ │ │ └── CrowdSecModels.cs │ │ ├── Enrichment/ │ │ │ └── GeoEnrichmentService.cs │ │ ├── Interfaces/ │ │ │ ├── IThreatRepository.cs │ │ │ ├── IThreatSettingsAccessor.cs │ │ │ └── IUniFiClientAccessor.cs │ │ ├── Models/ │ │ │ ├── CrowdSecReputation.cs │ │ │ ├── EventSource.cs │ │ │ ├── ExposureReport.cs │ │ │ ├── GeoInfo.cs │ │ │ ├── KillChainStage.cs │ │ │ ├── PatternType.cs │ │ │ ├── ThreatAction.cs │ │ │ ├── ThreatEvent.cs │ │ │ ├── ThreatNoiseFilter.cs │ │ │ └── ThreatPattern.cs │ │ ├── NetworkOptimizer.Threats.csproj │ │ ├── ThreatCollectionService.cs │ │ └── ThreatEventNormalizer.cs │ ├── NetworkOptimizer.UniFi/ │ │ ├── ClientIpEnricher.cs │ │ ├── Helpers/ │ │ │ ├── GlobalSwitchSettings.cs │ │ │ └── VlanAnalysisHelper.cs │ │ ├── Models/ │ │ │ ├── NetworkHop.cs │ │ │ ├── NetworkPath.cs │ │ │ ├── PathAnalysisResult.cs │ │ │ ├── UniFiApiResponse.cs │ │ │ ├── UniFiClientDetailResponse.cs │ │ │ ├── UniFiClientResponse.cs │ │ │ ├── UniFiDeviceResponse.cs │ │ │ ├── UniFiFingerprintDatabase.cs │ │ │ ├── UniFiFirewallGroup.cs │ │ │ ├── UniFiFirewallRule.cs │ │ │ ├── UniFiFirewallZone.cs │ │ │ ├── UniFiIpsEvent.cs │ │ │ ├── UniFiNetworkConfig.cs │ │ │ ├── UniFiPortForwardRule.cs │ │ │ ├── UniFiPortProfile.cs │ │ │ ├── UniFiProtectDeviceResponse.cs │ │ │ ├── UniFiSysInfo.cs │ │ │ ├── UniFiThreatLogEntry.cs │ │ │ ├── UniFiWlanConfig.cs │ │ │ ├── WiFiManClientResponse.cs │ │ │ └── WirelessRateSnapshot.cs │ │ ├── NetworkOptimizer.UniFi.csproj │ │ ├── NetworkPathAnalyzer.cs │ │ ├── README.md │ │ ├── RadioFormatHelper.cs │ │ ├── UniFiApiClient.cs │ │ ├── UniFiDiscovery.cs │ │ └── UniFiProductDatabase.cs │ ├── NetworkOptimizer.Web/ │ │ ├── App.razor │ │ ├── Components/ │ │ │ ├── Layout/ │ │ │ │ ├── AuthLayout.razor │ │ │ │ ├── MainLayout.razor │ │ │ │ └── NavMenu.razor │ │ │ ├── Pages/ │ │ │ │ ├── Agents.razor │ │ │ │ ├── Alerts.razor │ │ │ │ ├── Audit.razor │ │ │ │ ├── ClientDashboard.razor │ │ │ │ ├── ClientSpeedTest.razor │ │ │ │ ├── ClientWanSpeedTest.razor │ │ │ │ ├── Dashboard.razor │ │ │ │ ├── Login.razor │ │ │ │ ├── Optimize.razor │ │ │ │ ├── PerformanceTweaks.razor │ │ │ │ ├── PwaInstall.razor │ │ │ │ ├── Settings.razor │ │ │ │ ├── SpeedTest.razor │ │ │ │ ├── Sqm.razor │ │ │ │ ├── ThreatDashboard.razor │ │ │ │ ├── UpnpInspector.razor │ │ │ │ ├── WanSpeedTest.razor │ │ │ │ ├── WanSteering.razor │ │ │ │ └── WiFiOptimizer.razor │ │ │ ├── Routes.razor │ │ │ ├── ScrollRestoration.razor │ │ │ ├── Shared/ │ │ │ │ ├── AgentStatusTable.razor │ │ │ │ ├── AlertsList.razor │ │ │ │ ├── CellularStatsPanel.razor │ │ │ │ ├── DeviceCard.razor │ │ │ │ ├── DeviceIcon.razor │ │ │ │ ├── IssuesList.razor │ │ │ │ ├── PwaBanner.razor │ │ │ │ ├── SecurityScoreGauge.razor │ │ │ │ ├── SpeedTestDetails.razor │ │ │ │ ├── SpeedTestMap.razor │ │ │ │ ├── SpeedTestSearchFilter.razor │ │ │ │ ├── SponsorshipBanner.razor │ │ │ │ ├── SqmStatusPanel.razor │ │ │ │ ├── SshTroubleshootingTooltip.razor │ │ │ │ ├── UpdateChecker.razor │ │ │ │ ├── WanOption.cs │ │ │ │ └── WiFi/ │ │ │ │ ├── AirtimeFairness.razor │ │ │ │ ├── ApLoadBalance.razor │ │ │ │ ├── BandSteeringAnalysis.razor │ │ │ │ ├── ChannelAnalysis.razor │ │ │ │ ├── ClientTimeline.razor │ │ │ │ ├── ConnectivityFlow.razor │ │ │ │ ├── EnvironmentalCorrelation.razor │ │ │ │ ├── FloorPlanEditor.razor │ │ │ │ ├── HealthScoreGauge.razor │ │ │ │ ├── Metrics.razor │ │ │ │ ├── PowerCoverageAnalysis.razor │ │ │ │ ├── RoamingAnalytics.razor │ │ │ │ ├── SpectrumAnalysis.razor │ │ │ │ └── WiFiDashboardPanel.razor │ │ │ └── _Imports.razor │ │ ├── Endpoints/ │ │ │ ├── AlertEndpoints.cs │ │ │ ├── EndpointHelpers.cs │ │ │ └── SpeedTestEndpoints.cs │ │ ├── Models/ │ │ │ ├── ApMapMarker.cs │ │ │ └── ClientDashboardModels.cs │ │ ├── NetworkOptimizer.Web.csproj │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── README.md │ │ ├── Resources/ │ │ │ └── PerfTweaks/ │ │ │ ├── 06-mongodb-ssd-offload.sh │ │ │ ├── 07-mongodb-ssd-backup.sh │ │ │ ├── 10-journald-volatile.sh │ │ │ ├── 15-fan-control-tuning.sh │ │ │ ├── 20-sfp-sgmiiplus.sh │ │ │ └── force_uniphy1_sgmiiplus.ko │ │ ├── Services/ │ │ │ ├── AdminAuthService.cs │ │ │ ├── AgentService.cs │ │ │ ├── ApMapService.cs │ │ │ ├── AuditService.cs │ │ │ ├── CellularModemService.cs │ │ │ ├── ClientDashboardService.cs │ │ │ ├── ClientSpeedTestService.cs │ │ │ ├── CloudflareSpeedTestService.cs │ │ │ ├── ConfigTransferService.cs │ │ │ ├── DashboardLayoutService.cs │ │ │ ├── DashboardService.cs │ │ │ ├── DiagnosticsService.cs │ │ │ ├── FileVersionProvider.cs │ │ │ ├── FingerprintDatabaseService.cs │ │ │ ├── FloorPlanService.cs │ │ │ ├── GatewaySpeedTestService.cs │ │ │ ├── GatewayWanSpeedTestService.cs │ │ │ ├── HeatmapDataCache.cs │ │ │ ├── IAgentService.cs │ │ │ ├── ICellularModemService.cs │ │ │ ├── IDashboardService.cs │ │ │ ├── IFingerprintDatabaseService.cs │ │ │ ├── IGatewaySpeedTestService.cs │ │ │ ├── IIperf3SpeedTestService.cs │ │ │ ├── ISponsorshipService.cs │ │ │ ├── ISqmDeploymentService.cs │ │ │ ├── ISqmService.cs │ │ │ ├── ISystemSettingsService.cs │ │ │ ├── ITcMonitorClient.cs │ │ │ ├── IUniFiSshService.cs │ │ │ ├── Iperf3JsonParser.cs │ │ │ ├── Iperf3ServerService.cs │ │ │ ├── Iperf3SpeedTestService.cs │ │ │ ├── JwtService.cs │ │ │ ├── NginxHostedService.cs │ │ │ ├── PasswordHasher.cs │ │ │ ├── PdfStorageService.cs │ │ │ ├── PerfTweaksDeploymentService.cs │ │ │ ├── PlannedApService.cs │ │ │ ├── PullToRefreshState.cs │ │ │ ├── ScheduleExecutorRegistration.cs │ │ │ ├── SponsorshipService.cs │ │ │ ├── SqmDeploymentService.cs │ │ │ ├── SqmService.cs │ │ │ ├── Ssh/ │ │ │ │ ├── GatewaySshService.cs │ │ │ │ ├── IGatewaySshService.cs │ │ │ │ ├── SshClientService.cs │ │ │ │ ├── SshCommandResult.cs │ │ │ │ └── SshConnectionInfo.cs │ │ │ ├── SystemSettingsService.cs │ │ │ ├── TcMonitorClient.cs │ │ │ ├── ThreatDashboardService.cs │ │ │ ├── ThreatSettingsAccessor.cs │ │ │ ├── TimeFormatHelper.cs │ │ │ ├── TopologySnapshotService.cs │ │ │ ├── TraefikHostedService.cs │ │ │ ├── UniFiClientAccessor.cs │ │ │ ├── UniFiConnectionService.cs │ │ │ ├── UniFiSshService.cs │ │ │ ├── UwnSpeedTestService.cs │ │ │ ├── WanDataUsageService.cs │ │ │ ├── WanSpeedTestServiceBase.cs │ │ │ ├── WanSteerDeploymentService.cs │ │ │ ├── WanSteerValidation.cs │ │ │ └── WiFiOptimizerService.cs │ │ ├── appsettings.Development.json │ │ ├── appsettings.json │ │ └── wwwroot/ │ │ ├── css/ │ │ │ └── app.css │ │ ├── data/ │ │ │ ├── antenna-patterns.json │ │ │ └── cloudflare-colos.json │ │ ├── downloads/ │ │ │ ├── iperf3_3.18-1_mips-3.4.ipk │ │ │ └── libiperf3_3.18-1_mips-3.4.ipk │ │ ├── js/ │ │ │ ├── demo-mask.js │ │ │ ├── floorPlanEditor.js │ │ │ ├── scrollRestoration.js │ │ │ ├── steppedScaleBar.js │ │ │ └── updateCheck.js │ │ ├── lib/ │ │ │ ├── pdf.min.mjs │ │ │ └── pdf.worker.min.mjs │ │ └── manifest.webmanifest │ ├── NetworkOptimizer.WiFi/ │ │ ├── Analyzers/ │ │ │ └── SiteHealthScorer.cs │ │ ├── BssidIdentifier.cs │ │ ├── Data/ │ │ │ ├── AntennaPatternLoader.cs │ │ │ ├── ApModelCatalog.cs │ │ │ ├── MaterialAttenuation.cs │ │ │ └── MountTypeHelper.cs │ │ ├── Helpers/ │ │ │ ├── ChannelSpanHelper.cs │ │ │ └── SignalClassification.cs │ │ ├── IWiFiDataProvider.cs │ │ ├── Models/ │ │ │ ├── AccessPointSnapshot.cs │ │ │ ├── ChannelRecommendation.cs │ │ │ ├── ChannelScanResult.cs │ │ │ ├── ClientConnectionEvent.cs │ │ │ ├── PropagationModels.cs │ │ │ ├── RegulatoryChannelData.cs │ │ │ ├── RoamingEvent.cs │ │ │ ├── RoamingTopology.cs │ │ │ ├── WiFiMetrics.cs │ │ │ ├── WirelessClientSnapshot.cs │ │ │ └── WlanConfiguration.cs │ │ ├── NetworkOptimizer.WiFi.csproj │ │ ├── Providers/ │ │ │ └── UniFiLiveDataProvider.cs │ │ ├── Rules/ │ │ │ ├── BandSteeringRule.cs │ │ │ ├── CoChannelInterferenceRule.cs │ │ │ ├── CoverageGapRule.cs │ │ │ ├── DhcpIssuesRule.cs │ │ │ ├── High2GHzConcentrationRule.cs │ │ │ ├── HighApLoadRule.cs │ │ │ ├── HighPowerOverlapRule.cs │ │ │ ├── HighPowerRule.cs │ │ │ ├── HighRadioUtilizationRule.cs │ │ │ ├── HighTxRetryRule.cs │ │ │ ├── IWiFiOptimizerRule.cs │ │ │ ├── IoTSsidSeparationRule.cs │ │ │ ├── LegacyClientAirtimeRule.cs │ │ │ ├── LoadImbalanceRule.cs │ │ │ ├── MinRssiEnabledRule.cs │ │ │ ├── MinRssiRule.cs │ │ │ ├── MinimumDataRatesRule.cs │ │ │ ├── NonStandardChannelRule.cs │ │ │ ├── RoamingAssistantRule.cs │ │ │ ├── TxPowerVariationRule.cs │ │ │ ├── WeakSignalPopulationRule.cs │ │ │ ├── WiFiOptimizerContext.cs │ │ │ ├── WiFiOptimizerEngine.cs │ │ │ └── WideChannelWidthRule.cs │ │ ├── Services/ │ │ │ ├── ChannelRecommendationService.cs │ │ │ └── PropagationService.cs │ │ ├── SiteHealthScore.cs │ │ └── WiFiAnalysisHelpers.cs │ ├── OpenSpeedTest/ │ │ ├── .gitignore │ │ ├── ATTRIBUTION.md │ │ ├── License.md │ │ ├── README.md │ │ ├── assets/ │ │ │ ├── css/ │ │ │ │ ├── app.css │ │ │ │ ├── darkmode.css │ │ │ │ └── ozark-overrides.css │ │ │ ├── images/ │ │ │ │ └── icons/ │ │ │ │ ├── browserconfig.xml │ │ │ │ └── site.webmanifest │ │ │ └── js/ │ │ │ ├── app-2.5.4.js │ │ │ ├── config.js │ │ │ ├── darkmode.js │ │ │ └── geolocation.js │ │ ├── downloading │ │ ├── hosted.html │ │ ├── index.html │ │ └── upload │ ├── cfspeedtest/ │ │ ├── .gitignore │ │ ├── Makefile │ │ ├── go.mod │ │ ├── main.go │ │ └── speedtest/ │ │ ├── latency.go │ │ ├── metadata.go │ │ ├── servertiming.go │ │ ├── sockopt_unix.go │ │ ├── sockopt_windows.go │ │ ├── throughput.go │ │ ├── transport.go │ │ └── types.go │ ├── uwnspeedtest/ │ │ ├── Makefile │ │ ├── go.mod │ │ ├── main.go │ │ └── uwn/ │ │ ├── discovery.go │ │ ├── latency.go │ │ ├── throughput.go │ │ └── types.go │ └── wansteer/ │ ├── Makefile │ ├── config.go │ ├── config.sample.json │ ├── go.mod │ ├── health.go │ ├── main.go │ ├── rules.go │ ├── status.go │ └── wansteer_test.go └── tests/ ├── Directory.Build.props ├── FluentAssertionsLicense.cs ├── NetworkOptimizer.Agents.Tests/ │ ├── DeploymentResultTests.cs │ ├── NetworkOptimizer.Agents.Tests.csproj │ └── ScriptRendererTests.cs ├── NetworkOptimizer.Alerts.Tests/ │ ├── AlertCooldownTrackerTests.cs │ ├── AlertCorrelationServiceTests.cs │ ├── AlertEventBusTests.cs │ ├── AlertRuleEvaluatorTests.cs │ ├── Delivery/ │ │ ├── NtfyDeliveryChannelTests.cs │ │ └── WebhookDeliveryChannelTests.cs │ ├── NetworkOptimizer.Alerts.Tests.csproj │ └── ScheduleCalculationTests.cs ├── NetworkOptimizer.Audit.Tests/ │ ├── Analyzers/ │ │ ├── FirewallGroupHelperTests.cs │ │ ├── FirewallRuleAnalyzerTests.cs │ │ ├── FirewallRuleEvaluatorTests.cs │ │ ├── FirewallRuleOverlapDetectorTests.cs │ │ ├── FirewallRuleParserTests.cs │ │ ├── HttpAppIdsTests.cs │ │ ├── PortProfileResolutionTests.cs │ │ ├── PortSecurityAnalyzerTests.cs │ │ ├── ProtectCameraFallbackTests.cs │ │ ├── UpnpSecurityAnalyzerTests.cs │ │ └── VlanAnalyzerTests.cs │ ├── AuditScorerTests.cs │ ├── ConfigAuditEngineTests.cs │ ├── Constants/ │ │ └── DetectionConstantsTests.cs │ ├── DeviceNameHintsTests.cs │ ├── Dns/ │ │ ├── DnatDnsAnalyzerTests.cs │ │ ├── DnsAppIdsTests.cs │ │ ├── DnsSecurityAnalyzerTests.cs │ │ ├── DnsStampDecoderTests.cs │ │ ├── DohProviderRegistryTests.cs │ │ └── ThirdPartyDnsDetectorTests.cs │ ├── Models/ │ │ ├── AuditRequestTests.cs │ │ ├── ClientInfoDisplayNameTests.cs │ │ ├── DeviceAllowanceSettingsTests.cs │ │ ├── FirewallActionTests.cs │ │ ├── FirewallRuleTests.cs │ │ └── NetworkPurposeExtensionsTests.cs │ ├── NetworkOptimizer.Audit.Tests.csproj │ ├── Rules/ │ │ ├── AccessPortVlanRuleTests.cs │ │ ├── AuditRuleBaseTests.cs │ │ ├── CameraVlanRuleTests.cs │ │ ├── FirewallAnyAnyRuleTests.cs │ │ ├── IotVlanRuleTests.cs │ │ ├── MacRestrictionRuleTests.cs │ │ ├── PortIsolationRuleTests.cs │ │ ├── PortNameHelperTests.cs │ │ ├── UnusedPortRuleTests.cs │ │ ├── VlanPlacementCheckerTests.cs │ │ ├── VlanSubnetMismatchRuleTests.cs │ │ ├── WiredSubnetMismatchRuleTests.cs │ │ ├── WirelessCameraVlanRuleTests.cs │ │ └── WirelessIotVlanRuleTests.cs │ ├── Services/ │ │ ├── DeviceTypeDetectionServiceTests.cs │ │ ├── FingerprintDetectorTests.cs │ │ ├── FirewallZoneLookupTests.cs │ │ └── MacOuiDetectorTests.cs │ └── xunit.runner.json ├── NetworkOptimizer.Core.Tests/ │ ├── Caching/ │ │ └── AsyncCachedValueTests.cs │ ├── Extensions/ │ │ └── ServiceProviderExtensionsTests.cs │ ├── Helpers/ │ │ ├── CloudflareIpRangesTests.cs │ │ ├── DisplayFormattersTests.cs │ │ └── NetworkUtilitiesTests.cs │ └── NetworkOptimizer.Core.Tests.csproj ├── NetworkOptimizer.Diagnostics.Tests/ │ ├── Analyzers/ │ │ ├── ApLockAnalyzerTests.cs │ │ ├── PerformanceAnalyzerTests.cs │ │ ├── PortProfile8021xAnalyzerTests.cs │ │ ├── PortProfileSuggestionAnalyzerTests.cs │ │ └── TrunkConsistencyAnalyzerTests.cs │ ├── DiagnosticsEngineTests.cs │ ├── NetworkOptimizer.Diagnostics.Tests.csproj │ └── xunit.runner.json ├── NetworkOptimizer.Monitoring.Tests/ │ ├── AlertEngineTests.cs │ ├── AlertThresholdTests.cs │ ├── CellularModemStatsTests.cs │ ├── DeviceMetricsTests.cs │ ├── InterfaceMetricsTests.cs │ ├── MetricsAggregatorTests.cs │ ├── NetworkOptimizer.Monitoring.Tests.csproj │ ├── QmicliParserTests.cs │ └── SnmpConfigurationTests.cs ├── NetworkOptimizer.Reports.Tests/ │ ├── BrandingOptionsTests.cs │ ├── NetworkOptimizer.Reports.Tests.csproj │ └── ReportDataTests.cs ├── NetworkOptimizer.Sqm.Tests/ │ ├── BaselineCalculatorTests.cs │ ├── InputSanitizerTests.cs │ ├── LatencyMonitorTests.cs │ ├── NetworkOptimizer.Sqm.Tests.csproj │ ├── ScriptGeneratorTests.cs │ ├── SpeedtestIntegrationTests.cs │ ├── SqmManagerTests.cs │ └── WanInterfaceExtractionTests.cs ├── NetworkOptimizer.Storage.Tests/ │ ├── AgentRepositoryTests.cs │ ├── AuditRepositoryTests.cs │ ├── CredentialProtectionServiceTests.cs │ ├── ModemRepositoryTests.cs │ ├── NetworkOptimizer.Storage.Tests.csproj │ ├── SettingsRepositoryTests.cs │ ├── SpeedTestRepositoryTests.cs │ ├── SqmRepositoryTests.cs │ ├── UniFiRepositoryTests.cs │ └── WanDataUsageServiceTests.cs ├── NetworkOptimizer.Threats.Tests/ │ ├── BruteForceDetectorTests.cs │ ├── CrowdSecClientTests.cs │ ├── DDoSDetectorTests.cs │ ├── ExploitCampaignDetectorTests.cs │ ├── ExposureValidatorTests.cs │ ├── FlowInterestFilterTests.cs │ ├── KillChainClassifierTests.cs │ ├── NetworkOptimizer.Threats.Tests.csproj │ ├── ScanSweepDetectorTests.cs │ ├── ThreatEventNormalizerTests.cs │ └── ThreatPatternAnalyzerTests.cs ├── NetworkOptimizer.UniFi.Tests/ │ ├── CgnatIpDetectionTests.cs │ ├── ClientIpEnricherTests.cs │ ├── DaisyChainPathTests.cs │ ├── DeviceTypeClassificationTests.cs │ ├── DiscoveredClientTests.cs │ ├── Fixtures/ │ │ ├── NetworkTestData.cs │ │ └── TopologyBuilder.cs │ ├── GatewayApExclusionTests.cs │ ├── LagSpeedTests.cs │ ├── NetworkOptimizer.UniFi.Tests.csproj │ ├── NetworkPathAnalyzerIntegrationTests.cs │ ├── NetworkPathAnalyzerTests.cs │ ├── NetworkPathTests.cs │ ├── PathAnalysisResultTests.cs │ ├── PathTrace/ │ │ └── BuildHopListTests.cs │ ├── RadioFormatHelperTests.cs │ ├── SnapshotIntegrationTests.cs │ ├── UniFiClientResponseTests.cs │ ├── UniFiFingerprintDatabaseTests.cs │ ├── UniFiFirewallZoneTests.cs │ ├── UniFiNetworkConfigTests.cs │ ├── UniFiProductDatabaseTests.cs │ ├── UniFiWlanConfigTests.cs │ └── WirelessRateSnapshotTests.cs ├── NetworkOptimizer.Web.Tests/ │ ├── NetworkOptimizer.Web.Tests.csproj │ ├── WanSteerDeploymentServiceTests.cs │ └── WanSteerValidationTests.cs └── NetworkOptimizer.WiFi.Tests/ ├── BssidIdentifierTests.cs ├── ChannelRecommendationServiceTests.cs ├── ChannelSpanHelperTests.cs ├── CoChannelInterferenceRuleTests.cs ├── CoverageGapRuleTests.cs ├── LoadImbalanceRuleTests.cs ├── NetworkOptimizer.WiFi.Tests.csproj ├── PropagationInterferenceTests.cs ├── RegulatoryChannelDataTests.cs ├── SignalClassificationTests.cs └── WiFiAnalysisHelpersTests.cs