From 114d7b2731745fb937aa12e0f019d1e8633c469d Mon Sep 17 00:00:00 2001 From: shats Date: Thu, 5 Mar 2026 16:26:01 +0700 Subject: [PATCH] feat(network-config-manager): add function to identify unknown OSPF interface names and display active status in templates --- frontend/src/NetworkConfigManager.jsx | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/frontend/src/NetworkConfigManager.jsx b/frontend/src/NetworkConfigManager.jsx index 06fc559..aa33560 100644 --- a/frontend/src/NetworkConfigManager.jsx +++ b/frontend/src/NetworkConfigManager.jsx @@ -127,6 +127,14 @@ const GATEWAY_TEMPLATES = [ const OSPF_COST_STEP = 10; +function isUnknownOspfInterfaceName(name) { + const value = String(name || '').trim(); + if (!value) return true; + if (value.startsWith('*')) return true; // служебные ссылки RouterOS вида *50 + if (value.toLowerCase() === 'unknown') return true; + return false; +} + function buildOspfTemplatesFromRouterResults(routerResults = [], servers = []) { const serverById = new Map((servers || []).map((s) => [String(s.id || s.ip || s.dns || ''), s])); const byComposite = new Map(); @@ -144,10 +152,10 @@ function buildOspfTemplatesFromRouterResults(routerResults = [], servers = []) { templates.forEach((tpl) => { const interfaceName = String(tpl?.interfaceName || '').trim(); + if (isUnknownOspfInterfaceName(interfaceName)) return; const area = String(tpl?.area || '').trim() || 'backbone'; const numericCost = Number(tpl?.cost); const cost = Number.isFinite(numericCost) && numericCost >= 0 ? numericCost : OSPF_COST_STEP; - if (!interfaceName) return; const compositeKey = `${identity.key}::${area.toLowerCase()}::${interfaceName.toUpperCase()}`; if (byComposite.has(compositeKey)) return; @@ -161,6 +169,7 @@ function buildOspfTemplatesFromRouterResults(routerResults = [], servers = []) { interfaceName, area, cost, + active: !Boolean(tpl?.disabled), }); }); }); @@ -4006,6 +4015,12 @@ function NetworkConfigManager() {
:: {template.interfaceName} + + {template.active ? 'Активен' : 'Неактивен'} +
cost {template.cost}