(options = {})
| 8428 | html += `<div class="mt-2 px-3 py-2 rounded border text-xs text-gray-400 border-slate-700 bg-slate-900/40">${escapeHtml(a)}</div>`; |
| 8429 | }); |
| 8430 | out.innerHTML = html; |
| 8431 | } catch (e) { |
| 8432 | out.innerHTML = '<p class="text-sm text-red-400">Failed: ' + escapeHtml(e.message) + '</p>'; |
| 8433 | } finally { |
| 8434 | _ndBusy(btn, false); |
| 8435 | } |
| 8436 | } |
| 8437 | async function dtpTrustBaseline() { |
| 8438 | try { |
| 8439 | await postAPI('/api/net/dtp-baseline', { action: 'reset' }); |
| 8440 | addConsoleMessage('DTP baseline reset — re-learning current DTP speakers', 'info'); |
| 8441 | await runDtpWatch(); |
| 8442 | } catch (e) { |
| 8443 | addConsoleMessage('Failed to reset DTP baseline: ' + e.message, 'error'); |
| 8444 | } |
| 8445 | } |
| 8446 | |
| 8447 | // ---- CDP Watch (passive Cisco Discovery flood / spoof / info-leak) --------- |
| 8448 | const _CDP_VERDICT_STYLE = { |
| 8449 | clean: ['bg-green-950/40 border-green-900 text-green-400', '✓ No CDP anomaly — speakers match the trusted baseline'], |
| 8450 | 'cdp-enabled': ['bg-amber-950/50 border-amber-800 text-amber-300', '⚠ CDP is enabled here — it leaks IOS version / mgmt IP / native VLAN in clear'], |
no test coverage detected