|
@@ -9641,6 +9641,11 @@ function renderBgpNetworks() {
|
|
|
? '<span class="px-2 py-0.5 rounded-full text-[10px] bg-slate-800 text-slate-400 border border-slate-700">Disabled</span>'
|
|
? '<span class="px-2 py-0.5 rounded-full text-[10px] bg-slate-800 text-slate-400 border border-slate-700">Disabled</span>'
|
|
|
: '<span class="px-2 py-0.5 rounded-full text-[10px] bg-emerald-500/10 text-emerald-400 border border-emerald-500/20">Announcing</span>'}
|
|
: '<span class="px-2 py-0.5 rounded-full text-[10px] bg-emerald-500/10 text-emerald-400 border border-emerald-500/20">Announcing</span>'}
|
|
|
</td>
|
|
</td>
|
|
|
|
|
+ <td class="py-2.5 px-3">
|
|
|
|
|
+ ${n.disabled
|
|
|
|
|
+ ? '<span class="text-slate-600 font-mono text-[10px]">-</span>'
|
|
|
|
|
+ : '<span class="px-2 py-0.5 rounded text-[10px] bg-slate-800 text-cyan-300 border border-cyan-800/40 font-mono">blackhole (dist 255)</span>'}
|
|
|
|
|
+ </td>
|
|
|
<td class="py-2.5 px-3 text-slate-400 font-sans truncate max-w-xs">${escapeHtml(n.comment || '')}</td>
|
|
<td class="py-2.5 px-3 text-slate-400 font-sans truncate max-w-xs">${escapeHtml(n.comment || '')}</td>
|
|
|
<td class="py-2.5 px-3 text-right space-x-1 font-sans">
|
|
<td class="py-2.5 px-3 text-right space-x-1 font-sans">
|
|
|
<button onclick="deleteBgpNetwork('${n.id}')" class="px-2 py-1 rounded text-[11px] bg-rose-950/60 hover:bg-rose-900 text-rose-300 border border-rose-900/50">
|
|
<button onclick="deleteBgpNetwork('${n.id}')" class="px-2 py-1 rounded text-[11px] bg-rose-950/60 hover:bg-rose-900 text-rose-300 border border-rose-900/50">
|
|
@@ -10125,7 +10130,11 @@ async function submitBgpInstance(e) {
|
|
|
|
|
|
|
|
// ----------------- BGP Peer Connection Modal (DebTik v7) -----------------
|
|
// ----------------- BGP Peer Connection Modal (DebTik v7) -----------------
|
|
|
function switchBgpPeerModalTab(tab) {
|
|
function switchBgpPeerModalTab(tab) {
|
|
|
- const tabs = ['general', 'extra', 'attributes', 'filter'];
|
|
|
|
|
|
|
+ // Normalize legacy tab names
|
|
|
|
|
+ if (tab === 'extra' || tab === 'filter') tab = 'filters';
|
|
|
|
|
+ if (tab === 'attributes') tab = 'networks';
|
|
|
|
|
+
|
|
|
|
|
+ const tabs = ['general', 'filters', 'networks'];
|
|
|
tabs.forEach(t => {
|
|
tabs.forEach(t => {
|
|
|
const pane = document.getElementById(`bgp-peer-tab-${t}`);
|
|
const pane = document.getElementById(`bgp-peer-tab-${t}`);
|
|
|
const btn = document.getElementById(`bgp-peer-tab-btn-${t}`);
|
|
const btn = document.getElementById(`bgp-peer-tab-btn-${t}`);
|
|
@@ -10145,7 +10154,7 @@ function addOutputNetworkRow(val = '') {
|
|
|
const row = document.createElement('div');
|
|
const row = document.createElement('div');
|
|
|
row.className = 'flex items-center gap-2 output-net-row';
|
|
row.className = 'flex items-center gap-2 output-net-row';
|
|
|
row.innerHTML = `
|
|
row.innerHTML = `
|
|
|
- <input type="text" value="${escapeHtml(val)}" placeholder="e.g. 10.2.51.0/24 or BGP-AWMN" class="flex-1 bg-slate-900 border border-slate-700 rounded-lg px-3 py-1.5 text-white font-mono text-xs focus:outline-none focus:border-cyan-500">
|
|
|
|
|
|
|
+ <input type="text" value="${escapeHtml(val)}" placeholder="e.g. 192.168.100.0/24" class="flex-1 bg-slate-900 border border-slate-700 rounded-lg px-3 py-1.5 text-white font-mono text-xs focus:outline-none focus:border-cyan-500">
|
|
|
<button type="button" onclick="this.closest('.output-net-row').remove()" class="w-7 h-7 flex items-center justify-center bg-slate-800 hover:bg-rose-950 text-slate-400 hover:text-rose-400 border border-slate-700 rounded-lg text-base font-bold transition" title="Remove network">-</button>
|
|
<button type="button" onclick="this.closest('.output-net-row').remove()" class="w-7 h-7 flex items-center justify-center bg-slate-800 hover:bg-rose-950 text-slate-400 hover:text-rose-400 border border-slate-700 rounded-lg text-base font-bold transition" title="Remove network">-</button>
|
|
|
`;
|
|
`;
|
|
|
container.appendChild(row);
|
|
container.appendChild(row);
|
|
@@ -10163,11 +10172,8 @@ function parseBgpTime(val) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function formatBgpTime(secs) {
|
|
function formatBgpTime(secs) {
|
|
|
- if (!secs || secs <= 0) return '00:00:00';
|
|
|
|
|
- const h = Math.floor(secs / 3600);
|
|
|
|
|
- const m = Math.floor((secs % 3600) / 60);
|
|
|
|
|
- const s = secs % 60;
|
|
|
|
|
- return `${String(h).padStart(2, '0')}:${String(m).padStart(2, '0')}:${String(s).padStart(2, '0')}`;
|
|
|
|
|
|
|
+ if (!secs || secs <= 0) return '30';
|
|
|
|
|
+ return String(secs);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function populateBgpRoutingTables() {
|
|
function populateBgpRoutingTables() {
|
|
@@ -10189,82 +10195,36 @@ function populateBgpRoutingTables() {
|
|
|
function openAddBgpPeerModal() {
|
|
function openAddBgpPeerModal() {
|
|
|
document.getElementById('bgp-peer-form').reset();
|
|
document.getElementById('bgp-peer-form').reset();
|
|
|
document.getElementById('modal-bgp-peer-id').value = '';
|
|
document.getElementById('modal-bgp-peer-id').value = '';
|
|
|
- document.getElementById('bgp-peer-modal-title').innerText = 'New...';
|
|
|
|
|
|
|
+ document.getElementById('bgp-peer-modal-title').innerText = 'New BGP Connection...';
|
|
|
|
|
|
|
|
// General Tab
|
|
// General Tab
|
|
|
document.getElementById('modal-bgp-peer-enabled').checked = true;
|
|
document.getElementById('modal-bgp-peer-enabled').checked = true;
|
|
|
- document.getElementById('modal-bgp-peer-comment').value = '';
|
|
|
|
|
document.getElementById('modal-bgp-peer-name').value = '';
|
|
document.getElementById('modal-bgp-peer-name').value = '';
|
|
|
- if (document.getElementById('modal-bgp-peer-instance')) document.getElementById('modal-bgp-peer-instance').value = 'bgp-instance-1';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-template')) document.getElementById('modal-bgp-peer-template').value = '';
|
|
|
|
|
- document.getElementById('modal-bgp-peer-local-as').value = '';
|
|
|
|
|
- document.getElementById('modal-bgp-peer-afi-ip').checked = true;
|
|
|
|
|
- document.getElementById('modal-bgp-peer-afi-ipv6').checked = false;
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-afi-l2vpn')) document.getElementById('modal-bgp-peer-afi-l2vpn').checked = false;
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-afi-vpnv4')) document.getElementById('modal-bgp-peer-afi-vpnv4').checked = false;
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-afi-l2vpn-cisco')) document.getElementById('modal-bgp-peer-afi-l2vpn-cisco').checked = false;
|
|
|
|
|
- document.getElementById('modal-bgp-peer-router-id').value = '';
|
|
|
|
|
- document.getElementById('modal-bgp-peer-remote-addr').value = '';
|
|
|
|
|
- document.getElementById('modal-bgp-peer-remote-port').value = '';
|
|
|
|
|
- document.getElementById('modal-bgp-peer-remote-as').value = '';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-remote-allow-as')) document.getElementById('modal-bgp-peer-remote-allow-as').value = '';
|
|
|
|
|
- document.getElementById('modal-bgp-peer-local-addr').value = '';
|
|
|
|
|
- document.getElementById('modal-bgp-peer-local-port').value = '';
|
|
|
|
|
- document.getElementById('modal-bgp-peer-local-role').value = 'ebgp';
|
|
|
|
|
- document.getElementById('modal-bgp-peer-password').value = '';
|
|
|
|
|
- document.getElementById('modal-bgp-peer-multihop').checked = false;
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-tx-ttl')) document.getElementById('modal-bgp-peer-tx-ttl').value = '';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-rx-min-ttl')) document.getElementById('modal-bgp-peer-rx-min-ttl').value = '';
|
|
|
|
|
- document.getElementById('modal-bgp-peer-connect').checked = true;
|
|
|
|
|
- document.getElementById('modal-bgp-peer-listen').checked = true;
|
|
|
|
|
-
|
|
|
|
|
- // Extra Tab
|
|
|
|
|
- document.getElementById('modal-bgp-peer-holdtime').value = '00:00:30';
|
|
|
|
|
- document.getElementById('modal-bgp-peer-keepalive').value = '00:00:10';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-use-bfd')) document.getElementById('modal-bgp-peer-use-bfd').checked = false;
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-vrf')) document.getElementById('modal-bgp-peer-vrf').value = 'main';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-no-client-reflect')) document.getElementById('modal-bgp-peer-no-client-reflect').checked = true;
|
|
|
|
|
- document.getElementById('modal-bgp-peer-redist-conn').checked = false;
|
|
|
|
|
- document.getElementById('modal-bgp-peer-redist-static').checked = true;
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-redist-rip')) document.getElementById('modal-bgp-peer-redist-rip').checked = false;
|
|
|
|
|
- document.getElementById('modal-bgp-peer-redist-ospf').checked = false;
|
|
|
|
|
- document.getElementById('modal-bgp-peer-redist-bgp').checked = false;
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-redist-vpn')) document.getElementById('modal-bgp-peer-redist-vpn').checked = false;
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-redist-dhcp')) document.getElementById('modal-bgp-peer-redist-dhcp').checked = false;
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-redist-bgp-mpls-vpn')) document.getElementById('modal-bgp-peer-redist-bgp-mpls-vpn').checked = false;
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-redist-slaac')) document.getElementById('modal-bgp-peer-redist-slaac').checked = false;
|
|
|
|
|
- document.getElementById('modal-bgp-peer-default-orig').checked = false;
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-network-blackhole')) document.getElementById('modal-bgp-peer-network-blackhole').checked = false;
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-no-early-cut')) document.getElementById('modal-bgp-peer-no-early-cut').checked = false;
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-keep-sent-attrs')) document.getElementById('modal-bgp-peer-keep-sent-attrs').checked = false;
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-input-affinity')) document.getElementById('modal-bgp-peer-input-affinity').value = '';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-output-affinity')) document.getElementById('modal-bgp-peer-output-affinity').value = '';
|
|
|
|
|
-
|
|
|
|
|
- // Attributes Tab
|
|
|
|
|
- document.getElementById('modal-bgp-peer-nexthop-choice').value = 'force-self';
|
|
|
|
|
- document.getElementById('modal-bgp-peer-default-prepend').value = 0;
|
|
|
|
|
- document.getElementById('modal-bgp-peer-allow-as-in').value = 0;
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-ignore-as-path-len')) document.getElementById('modal-bgp-peer-ignore-as-path-len').checked = false;
|
|
|
|
|
- document.getElementById('modal-bgp-peer-remove-priv-as').checked = false;
|
|
|
|
|
- document.getElementById('modal-bgp-peer-as-override').checked = false;
|
|
|
|
|
-
|
|
|
|
|
- // Filter Tab
|
|
|
|
|
|
|
+ document.getElementById('modal-bgp-peer-comment').value = '';
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-local-as')) document.getElementById('modal-bgp-peer-local-as').value = '';
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-remote-addr')) document.getElementById('modal-bgp-peer-remote-addr').value = '';
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-remote-port')) document.getElementById('modal-bgp-peer-remote-port').value = '';
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-remote-as')) document.getElementById('modal-bgp-peer-remote-as').value = '';
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-local-addr')) document.getElementById('modal-bgp-peer-local-addr').value = '';
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-local-port')) document.getElementById('modal-bgp-peer-local-port').value = '';
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-local-role')) document.getElementById('modal-bgp-peer-local-role').value = 'ebgp';
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-password')) document.getElementById('modal-bgp-peer-password').value = '';
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-multihop')) document.getElementById('modal-bgp-peer-multihop').checked = false;
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-passive')) document.getElementById('modal-bgp-peer-passive').checked = false;
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-nexthop-self')) document.getElementById('modal-bgp-peer-nexthop-self').checked = false;
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-holdtime')) document.getElementById('modal-bgp-peer-holdtime').value = '30';
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-keepalive')) document.getElementById('modal-bgp-peer-keepalive').value = '10';
|
|
|
|
|
+
|
|
|
|
|
+ // Filters Tab
|
|
|
populateFilterChainsDatalist();
|
|
populateFilterChainsDatalist();
|
|
|
- document.getElementById('modal-bgp-peer-in-filter').value = '';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-in-accept-nlri')) document.getElementById('modal-bgp-peer-in-accept-nlri').value = '';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-in-accept-comm')) document.getElementById('modal-bgp-peer-in-accept-comm').value = '';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-in-accept-ext-comm')) document.getElementById('modal-bgp-peer-in-accept-ext-comm').value = '';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-in-accept-large-comm')) document.getElementById('modal-bgp-peer-in-accept-large-comm').value = '';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-in-filter-comm')) document.getElementById('modal-bgp-peer-in-filter-comm').value = '';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-in-filter-ext-comm')) document.getElementById('modal-bgp-peer-in-filter-ext-comm').value = '';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-in-filter-large-comm')) document.getElementById('modal-bgp-peer-in-filter-large-comm').value = '';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-in-filter-unknown')) document.getElementById('modal-bgp-peer-in-filter-unknown').checked = false;
|
|
|
|
|
- document.getElementById('modal-bgp-peer-out-filter').value = '';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-out-selection-policy')) document.getElementById('modal-bgp-peer-out-selection-policy').value = 'disabled';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-out-network-name')) document.getElementById('modal-bgp-peer-out-network-name').value = '';
|
|
|
|
|
-
|
|
|
|
|
- populateBgpRoutingTables();
|
|
|
|
|
-
|
|
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-in-filter')) document.getElementById('modal-bgp-peer-in-filter').value = '';
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-out-filter')) document.getElementById('modal-bgp-peer-out-filter').value = '';
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-redist-conn')) document.getElementById('modal-bgp-peer-redist-conn').checked = false;
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-redist-static')) document.getElementById('modal-bgp-peer-redist-static').checked = true;
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-redist-ospf')) document.getElementById('modal-bgp-peer-redist-ospf').checked = false;
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-default-orig')) document.getElementById('modal-bgp-peer-default-orig').checked = false;
|
|
|
|
|
+
|
|
|
|
|
+ // Advertised Networks Tab
|
|
|
const container = document.getElementById('modal-bgp-output-networks-container');
|
|
const container = document.getElementById('modal-bgp-output-networks-container');
|
|
|
if (container) {
|
|
if (container) {
|
|
|
container.innerHTML = '';
|
|
container.innerHTML = '';
|
|
@@ -10287,6 +10247,7 @@ function populateFilterChainsDatalist() {
|
|
|
});
|
|
});
|
|
|
if (chains.size === 0) {
|
|
if (chains.size === 0) {
|
|
|
chains.add('awmn');
|
|
chains.add('awmn');
|
|
|
|
|
+ chains.add('Internal');
|
|
|
chains.add('bgp-in');
|
|
chains.add('bgp-in');
|
|
|
chains.add('bgp-out');
|
|
chains.add('bgp-out');
|
|
|
}
|
|
}
|
|
@@ -10302,7 +10263,6 @@ function openEditBgpPeerModal(id) {
|
|
|
const p = (state.bgpPeers || []).find(item => item.id === id);
|
|
const p = (state.bgpPeers || []).find(item => item.id === id);
|
|
|
if (!p) return;
|
|
if (!p) return;
|
|
|
|
|
|
|
|
- populateBgpRoutingTables();
|
|
|
|
|
populateFilterChainsDatalist();
|
|
populateFilterChainsDatalist();
|
|
|
|
|
|
|
|
document.getElementById('modal-bgp-peer-id').value = p.id;
|
|
document.getElementById('modal-bgp-peer-id').value = p.id;
|
|
@@ -10310,74 +10270,38 @@ function openEditBgpPeerModal(id) {
|
|
|
|
|
|
|
|
// General Tab
|
|
// General Tab
|
|
|
document.getElementById('modal-bgp-peer-enabled').checked = p.enabled !== false && !p.disabled;
|
|
document.getElementById('modal-bgp-peer-enabled').checked = p.enabled !== false && !p.disabled;
|
|
|
- document.getElementById('modal-bgp-peer-comment').value = p.comment || '';
|
|
|
|
|
document.getElementById('modal-bgp-peer-name').value = p.name || '';
|
|
document.getElementById('modal-bgp-peer-name').value = p.name || '';
|
|
|
- if (document.getElementById('modal-bgp-peer-instance')) document.getElementById('modal-bgp-peer-instance').value = p.instance || 'bgp-instance-1';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-template')) document.getElementById('modal-bgp-peer-template').value = p.template || '';
|
|
|
|
|
- document.getElementById('modal-bgp-peer-local-as').value = p.local_as || '';
|
|
|
|
|
- document.getElementById('modal-bgp-peer-router-id').value = p.router_id || '';
|
|
|
|
|
- document.getElementById('modal-bgp-peer-afi-ip').checked = true;
|
|
|
|
|
- document.getElementById('modal-bgp-peer-afi-ipv6').checked = p.afi === 'ipv6';
|
|
|
|
|
- document.getElementById('modal-bgp-peer-remote-addr').value = p.remote_address || '';
|
|
|
|
|
- document.getElementById('modal-bgp-peer-remote-port').value = p.remote_port || '';
|
|
|
|
|
- document.getElementById('modal-bgp-peer-remote-as').value = p.remote_as || '';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-remote-allow-as')) document.getElementById('modal-bgp-peer-remote-allow-as').value = p.remote_allow_as || '';
|
|
|
|
|
- document.getElementById('modal-bgp-peer-local-addr').value = p.local_address || '';
|
|
|
|
|
- document.getElementById('modal-bgp-peer-local-port').value = p.local_port || '';
|
|
|
|
|
- document.getElementById('modal-bgp-peer-local-role').value = p.local_role || 'ebgp';
|
|
|
|
|
- document.getElementById('modal-bgp-peer-password').value = p.password || '';
|
|
|
|
|
- document.getElementById('modal-bgp-peer-multihop').checked = !!p.multihop;
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-tx-ttl')) document.getElementById('modal-bgp-peer-tx-ttl').value = p.tx_ttl || '';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-rx-min-ttl')) document.getElementById('modal-bgp-peer-rx-min-ttl').value = p.rx_min_ttl || '';
|
|
|
|
|
- document.getElementById('modal-bgp-peer-connect').checked = p.connect !== false;
|
|
|
|
|
- document.getElementById('modal-bgp-peer-listen').checked = p.listen !== false;
|
|
|
|
|
-
|
|
|
|
|
- // Extra Tab
|
|
|
|
|
- document.getElementById('modal-bgp-peer-holdtime').value = p.hold_time ? formatBgpTime(p.hold_time) : '00:00:30';
|
|
|
|
|
- document.getElementById('modal-bgp-peer-keepalive').value = p.keepalive_time ? formatBgpTime(p.keepalive_time) : '00:00:10';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-use-bfd')) document.getElementById('modal-bgp-peer-use-bfd').checked = !!p.use_bfd;
|
|
|
|
|
- document.getElementById('modal-bgp-peer-routing-table').value = p.routing_table || 'main';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-vrf')) document.getElementById('modal-bgp-peer-vrf').value = p.vrf || 'main';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-no-client-reflect')) document.getElementById('modal-bgp-peer-no-client-reflect').checked = p.no_client_reflect !== false;
|
|
|
|
|
- document.getElementById('modal-bgp-peer-redist-conn').checked = !!p.redist_connected;
|
|
|
|
|
- document.getElementById('modal-bgp-peer-redist-static').checked = p.redist_static !== false;
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-redist-rip')) document.getElementById('modal-bgp-peer-redist-rip').checked = !!p.redist_rip;
|
|
|
|
|
- document.getElementById('modal-bgp-peer-redist-ospf').checked = !!p.redist_ospf;
|
|
|
|
|
- document.getElementById('modal-bgp-peer-redist-bgp').checked = !!p.redist_bgp;
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-redist-vpn')) document.getElementById('modal-bgp-peer-redist-vpn').checked = !!p.redist_vpn;
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-redist-dhcp')) document.getElementById('modal-bgp-peer-redist-dhcp').checked = !!p.redist_dhcp;
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-redist-bgp-mpls-vpn')) document.getElementById('modal-bgp-peer-redist-bgp-mpls-vpn').checked = !!p.redist_bgp_mpls_vpn;
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-redist-slaac')) document.getElementById('modal-bgp-peer-redist-slaac').checked = !!p.redist_slaac;
|
|
|
|
|
- document.getElementById('modal-bgp-peer-default-orig').checked = !!p.default_originate;
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-network-blackhole')) document.getElementById('modal-bgp-peer-network-blackhole').checked = !!p.network_blackhole;
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-no-early-cut')) document.getElementById('modal-bgp-peer-no-early-cut').checked = !!p.no_early_cut;
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-keep-sent-attrs')) document.getElementById('modal-bgp-peer-keep-sent-attrs').checked = !!p.keep_sent_attrs;
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-input-affinity')) document.getElementById('modal-bgp-peer-input-affinity').value = p.input_affinity || '';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-output-affinity')) document.getElementById('modal-bgp-peer-output-affinity').value = p.output_affinity || '';
|
|
|
|
|
-
|
|
|
|
|
- // Attributes Tab
|
|
|
|
|
- document.getElementById('modal-bgp-peer-nexthop-choice').value = p.nexthop_choice || (p.nexthop_self ? 'force-self' : 'default');
|
|
|
|
|
- document.getElementById('modal-bgp-peer-default-prepend').value = p.default_prepend || 0;
|
|
|
|
|
- document.getElementById('modal-bgp-peer-allow-as-in').value = p.allow_as_in || 0;
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-ignore-as-path-len')) document.getElementById('modal-bgp-peer-ignore-as-path-len').checked = !!p.ignore_as_path_len;
|
|
|
|
|
- document.getElementById('modal-bgp-peer-remove-priv-as').checked = !!p.remove_private_as;
|
|
|
|
|
- document.getElementById('modal-bgp-peer-as-override').checked = !!p.as_override;
|
|
|
|
|
-
|
|
|
|
|
- // Filter Tab
|
|
|
|
|
- document.getElementById('modal-bgp-peer-in-filter').value = p.in_filter || '';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-in-accept-nlri')) document.getElementById('modal-bgp-peer-in-accept-nlri').value = p.in_accept_nlri || '';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-in-accept-comm')) document.getElementById('modal-bgp-peer-in-accept-comm').value = p.in_accept_communities || '';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-in-accept-ext-comm')) document.getElementById('modal-bgp-peer-in-accept-ext-comm').value = p.in_accept_ext_communities || '';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-in-accept-large-comm')) document.getElementById('modal-bgp-peer-in-accept-large-comm').value = p.in_accept_large_communities || '';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-in-filter-comm')) document.getElementById('modal-bgp-peer-in-filter-comm').value = p.in_filter_communities || '';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-in-filter-ext-comm')) document.getElementById('modal-bgp-peer-in-filter-ext-comm').value = p.in_filter_ext_communities || '';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-in-filter-large-comm')) document.getElementById('modal-bgp-peer-in-filter-large-comm').value = p.in_filter_large_communities || '';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-in-filter-unknown')) document.getElementById('modal-bgp-peer-in-filter-unknown').checked = !!p.in_filter_unknown;
|
|
|
|
|
- document.getElementById('modal-bgp-peer-out-filter').value = p.out_filter || '';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-out-selection-policy')) document.getElementById('modal-bgp-peer-out-selection-policy').value = p.out_selection_policy || 'disabled';
|
|
|
|
|
- if (document.getElementById('modal-bgp-peer-out-network-name')) document.getElementById('modal-bgp-peer-out-network-name').value = p.output_network || '';
|
|
|
|
|
-
|
|
|
|
|
- // Output Networks
|
|
|
|
|
|
|
+ document.getElementById('modal-bgp-peer-comment').value = p.comment || '';
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-local-as')) document.getElementById('modal-bgp-peer-local-as').value = p.local_as || '';
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-remote-addr')) document.getElementById('modal-bgp-peer-remote-addr').value = p.remote_address || '';
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-remote-port')) document.getElementById('modal-bgp-peer-remote-port').value = p.remote_port || '';
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-remote-as')) document.getElementById('modal-bgp-peer-remote-as').value = p.remote_as || '';
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-local-addr')) document.getElementById('modal-bgp-peer-local-addr').value = p.local_address || '';
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-local-port')) document.getElementById('modal-bgp-peer-local-port').value = p.local_port || '';
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-local-role')) document.getElementById('modal-bgp-peer-local-role').value = p.local_role || 'ebgp';
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-password')) document.getElementById('modal-bgp-peer-password').value = p.password || '';
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-multihop')) document.getElementById('modal-bgp-peer-multihop').checked = !!p.multihop;
|
|
|
|
|
+
|
|
|
|
|
+ // Passive mode
|
|
|
|
|
+ const isPassive = !!p.passive || (p.connect === false && p.listen !== false);
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-passive')) document.getElementById('modal-bgp-peer-passive').checked = isPassive;
|
|
|
|
|
+
|
|
|
|
|
+ // Next-hop self
|
|
|
|
|
+ const isNexthopSelf = !!p.nexthop_self || p.nexthop_choice === 'force-self';
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-nexthop-self')) document.getElementById('modal-bgp-peer-nexthop-self').checked = isNexthopSelf;
|
|
|
|
|
+
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-holdtime')) document.getElementById('modal-bgp-peer-holdtime').value = p.hold_time ? String(p.hold_time) : '30';
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-keepalive')) document.getElementById('modal-bgp-peer-keepalive').value = p.keepalive_time ? String(p.keepalive_time) : '10';
|
|
|
|
|
+
|
|
|
|
|
+ // Filters Tab
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-in-filter')) document.getElementById('modal-bgp-peer-in-filter').value = p.in_filter || '';
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-out-filter')) document.getElementById('modal-bgp-peer-out-filter').value = p.out_filter || '';
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-redist-conn')) document.getElementById('modal-bgp-peer-redist-conn').checked = !!p.redist_connected;
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-redist-static')) document.getElementById('modal-bgp-peer-redist-static').checked = p.redist_static !== false;
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-redist-ospf')) document.getElementById('modal-bgp-peer-redist-ospf').checked = !!p.redist_ospf;
|
|
|
|
|
+ if (document.getElementById('modal-bgp-peer-default-orig')) document.getElementById('modal-bgp-peer-default-orig').checked = !!p.default_originate;
|
|
|
|
|
+
|
|
|
|
|
+ // Advertised Networks Tab
|
|
|
const container = document.getElementById('modal-bgp-output-networks-container');
|
|
const container = document.getElementById('modal-bgp-output-networks-container');
|
|
|
if (container) {
|
|
if (container) {
|
|
|
container.innerHTML = '';
|
|
container.innerHTML = '';
|
|
@@ -10399,7 +10323,7 @@ function copyCurrentBgpPeer() {
|
|
|
document.getElementById('modal-bgp-peer-id').value = '';
|
|
document.getElementById('modal-bgp-peer-id').value = '';
|
|
|
const nameEl = document.getElementById('modal-bgp-peer-name');
|
|
const nameEl = document.getElementById('modal-bgp-peer-name');
|
|
|
if (nameEl) nameEl.value = (nameEl.value || 'peer') + '-copy';
|
|
if (nameEl) nameEl.value = (nameEl.value || 'peer') + '-copy';
|
|
|
- document.getElementById('bgp-peer-modal-title').innerText = 'New...';
|
|
|
|
|
|
|
+ document.getElementById('bgp-peer-modal-title').innerText = 'New BGP Connection...';
|
|
|
const removeBtn = document.getElementById('modal-btn-remove-peer');
|
|
const removeBtn = document.getElementById('modal-btn-remove-peer');
|
|
|
if (removeBtn) removeBtn.classList.add('hidden');
|
|
if (removeBtn) removeBtn.classList.add('hidden');
|
|
|
showToast('Cloned', 'BGP connection copied to new draft', 'info');
|
|
showToast('Cloned', 'BGP connection copied to new draft', 'info');
|
|
@@ -10425,6 +10349,8 @@ function getBgpPeerFormData() {
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
const enabled = document.getElementById('modal-bgp-peer-enabled').checked;
|
|
const enabled = document.getElementById('modal-bgp-peer-enabled').checked;
|
|
|
|
|
+ const isPassive = document.getElementById('modal-bgp-peer-passive')?.checked || false;
|
|
|
|
|
+ const isNexthopSelf = document.getElementById('modal-bgp-peer-nexthop-self')?.checked || false;
|
|
|
|
|
|
|
|
return {
|
|
return {
|
|
|
id: document.getElementById('modal-bgp-peer-id').value,
|
|
id: document.getElementById('modal-bgp-peer-id').value,
|
|
@@ -10432,64 +10358,28 @@ function getBgpPeerFormData() {
|
|
|
enabled: enabled,
|
|
enabled: enabled,
|
|
|
disabled: !enabled,
|
|
disabled: !enabled,
|
|
|
comment: document.getElementById('modal-bgp-peer-comment').value.trim(),
|
|
comment: document.getElementById('modal-bgp-peer-comment').value.trim(),
|
|
|
- instance: document.getElementById('modal-bgp-peer-instance')?.value.trim() || 'bgp-instance-1',
|
|
|
|
|
- template: document.getElementById('modal-bgp-peer-template')?.value.trim() || '',
|
|
|
|
|
local_as: parseInt(document.getElementById('modal-bgp-peer-local-as')?.value, 10) || 0,
|
|
local_as: parseInt(document.getElementById('modal-bgp-peer-local-as')?.value, 10) || 0,
|
|
|
- router_id: document.getElementById('modal-bgp-peer-router-id').value.trim(),
|
|
|
|
|
- afi: document.getElementById('modal-bgp-peer-afi-ipv6').checked ? 'ipv6' : 'ip',
|
|
|
|
|
remote_address: document.getElementById('modal-bgp-peer-remote-addr').value.trim(),
|
|
remote_address: document.getElementById('modal-bgp-peer-remote-addr').value.trim(),
|
|
|
remote_port: parseInt(document.getElementById('modal-bgp-peer-remote-port').value, 10) || 0,
|
|
remote_port: parseInt(document.getElementById('modal-bgp-peer-remote-port').value, 10) || 0,
|
|
|
remote_as: parseInt(document.getElementById('modal-bgp-peer-remote-as').value, 10) || 0,
|
|
remote_as: parseInt(document.getElementById('modal-bgp-peer-remote-as').value, 10) || 0,
|
|
|
- remote_allow_as: document.getElementById('modal-bgp-peer-remote-allow-as')?.value.trim() || '',
|
|
|
|
|
- local_address: document.getElementById('modal-bgp-peer-local-addr').value.trim(),
|
|
|
|
|
- local_port: parseInt(document.getElementById('modal-bgp-peer-local-port').value, 10) || 0,
|
|
|
|
|
- local_role: document.getElementById('modal-bgp-peer-local-role').value,
|
|
|
|
|
- password: document.getElementById('modal-bgp-peer-password').value,
|
|
|
|
|
- multihop: document.getElementById('modal-bgp-peer-multihop').checked,
|
|
|
|
|
- tx_ttl: parseInt(document.getElementById('modal-bgp-peer-tx-ttl')?.value, 10) || 0,
|
|
|
|
|
- rx_min_ttl: parseInt(document.getElementById('modal-bgp-peer-rx-min-ttl')?.value, 10) || 0,
|
|
|
|
|
- connect: document.getElementById('modal-bgp-peer-connect').checked,
|
|
|
|
|
- listen: document.getElementById('modal-bgp-peer-listen').checked,
|
|
|
|
|
- hold_time: parseBgpTime(document.getElementById('modal-bgp-peer-holdtime').value),
|
|
|
|
|
- keepalive_time: parseBgpTime(document.getElementById('modal-bgp-peer-keepalive').value),
|
|
|
|
|
- use_bfd: document.getElementById('modal-bgp-peer-use-bfd')?.checked || false,
|
|
|
|
|
- routing_table: document.getElementById('modal-bgp-peer-routing-table').value,
|
|
|
|
|
- vrf: document.getElementById('modal-bgp-peer-vrf')?.value.trim() || 'main',
|
|
|
|
|
- no_client_reflect: document.getElementById('modal-bgp-peer-no-client-reflect')?.checked || false,
|
|
|
|
|
- redist_connected: document.getElementById('modal-bgp-peer-redist-conn').checked,
|
|
|
|
|
- redist_static: document.getElementById('modal-bgp-peer-redist-static').checked,
|
|
|
|
|
- redist_rip: document.getElementById('modal-bgp-peer-redist-rip')?.checked || false,
|
|
|
|
|
- redist_ospf: document.getElementById('modal-bgp-peer-redist-ospf').checked,
|
|
|
|
|
- redist_bgp: document.getElementById('modal-bgp-peer-redist-bgp').checked,
|
|
|
|
|
- redist_vpn: document.getElementById('modal-bgp-peer-redist-vpn')?.checked || false,
|
|
|
|
|
- redist_dhcp: document.getElementById('modal-bgp-peer-redist-dhcp')?.checked || false,
|
|
|
|
|
- redist_bgp_mpls_vpn: document.getElementById('modal-bgp-peer-redist-bgp-mpls-vpn')?.checked || false,
|
|
|
|
|
- redist_slaac: document.getElementById('modal-bgp-peer-redist-slaac')?.checked || false,
|
|
|
|
|
- default_originate: document.getElementById('modal-bgp-peer-default-orig').checked,
|
|
|
|
|
- network_blackhole: document.getElementById('modal-bgp-peer-network-blackhole')?.checked || false,
|
|
|
|
|
- no_early_cut: document.getElementById('modal-bgp-peer-no-early-cut')?.checked || false,
|
|
|
|
|
- keep_sent_attrs: document.getElementById('modal-bgp-peer-keep-sent-attrs')?.checked || false,
|
|
|
|
|
- input_affinity: (document.getElementById('modal-bgp-peer-input-affinity')?.value || '').trim(),
|
|
|
|
|
- output_affinity: (document.getElementById('modal-bgp-peer-output-affinity')?.value || '').trim(),
|
|
|
|
|
- nexthop_choice: document.getElementById('modal-bgp-peer-nexthop-choice').value,
|
|
|
|
|
- nexthop_self: document.getElementById('modal-bgp-peer-nexthop-choice').value === 'force-self',
|
|
|
|
|
- default_prepend: parseInt(document.getElementById('modal-bgp-peer-default-prepend').value, 10) || 0,
|
|
|
|
|
- allow_as_in: parseInt(document.getElementById('modal-bgp-peer-allow-as-in').value, 10) || 0,
|
|
|
|
|
- ignore_as_path_len: document.getElementById('modal-bgp-peer-ignore-as-path-len')?.checked || false,
|
|
|
|
|
- remove_private_as: document.getElementById('modal-bgp-peer-remove-priv-as').checked,
|
|
|
|
|
- as_override: document.getElementById('modal-bgp-peer-as-override').checked,
|
|
|
|
|
|
|
+ local_address: document.getElementById('modal-bgp-peer-local-addr')?.value.trim() || '',
|
|
|
|
|
+ local_port: parseInt(document.getElementById('modal-bgp-peer-local-port')?.value, 10) || 0,
|
|
|
|
|
+ local_role: document.getElementById('modal-bgp-peer-local-role')?.value || 'ebgp',
|
|
|
|
|
+ password: document.getElementById('modal-bgp-peer-password')?.value || '',
|
|
|
|
|
+ multihop: document.getElementById('modal-bgp-peer-multihop')?.checked || false,
|
|
|
|
|
+ passive: isPassive,
|
|
|
|
|
+ connect: !isPassive,
|
|
|
|
|
+ listen: true,
|
|
|
|
|
+ hold_time: parseBgpTime(document.getElementById('modal-bgp-peer-holdtime')?.value),
|
|
|
|
|
+ keepalive_time: parseBgpTime(document.getElementById('modal-bgp-peer-keepalive')?.value),
|
|
|
|
|
+ nexthop_self: isNexthopSelf,
|
|
|
|
|
+ nexthop_choice: isNexthopSelf ? 'force-self' : 'default',
|
|
|
in_filter: (document.getElementById('modal-bgp-peer-in-filter')?.value || '').trim(),
|
|
in_filter: (document.getElementById('modal-bgp-peer-in-filter')?.value || '').trim(),
|
|
|
- in_accept_nlri: (document.getElementById('modal-bgp-peer-in-accept-nlri')?.value || '').trim(),
|
|
|
|
|
- in_accept_communities: (document.getElementById('modal-bgp-peer-in-accept-comm')?.value || '').trim(),
|
|
|
|
|
- in_accept_ext_communities: (document.getElementById('modal-bgp-peer-in-accept-ext-comm')?.value || '').trim(),
|
|
|
|
|
- in_accept_large_communities: (document.getElementById('modal-bgp-peer-in-accept-large-comm')?.value || '').trim(),
|
|
|
|
|
- in_filter_communities: (document.getElementById('modal-bgp-peer-in-filter-comm')?.value || '').trim(),
|
|
|
|
|
- in_filter_ext_communities: (document.getElementById('modal-bgp-peer-in-filter-ext-comm')?.value || '').trim(),
|
|
|
|
|
- in_filter_large_communities: (document.getElementById('modal-bgp-peer-in-filter-large-comm')?.value || '').trim(),
|
|
|
|
|
- in_filter_unknown: document.getElementById('modal-bgp-peer-in-filter-unknown')?.checked || false,
|
|
|
|
|
out_filter: (document.getElementById('modal-bgp-peer-out-filter')?.value || '').trim(),
|
|
out_filter: (document.getElementById('modal-bgp-peer-out-filter')?.value || '').trim(),
|
|
|
- out_selection_policy: document.getElementById('modal-bgp-peer-out-selection-policy')?.value || 'disabled',
|
|
|
|
|
- output_network: (document.getElementById('modal-bgp-peer-out-network-name')?.value || '').trim(),
|
|
|
|
|
|
|
+ default_originate: document.getElementById('modal-bgp-peer-default-orig')?.checked || false,
|
|
|
|
|
+ redist_connected: document.getElementById('modal-bgp-peer-redist-conn')?.checked || false,
|
|
|
|
|
+ redist_static: document.getElementById('modal-bgp-peer-redist-static')?.checked !== false,
|
|
|
|
|
+ redist_ospf: document.getElementById('modal-bgp-peer-redist-ospf')?.checked || false,
|
|
|
output_networks: outputNetworks
|
|
output_networks: outputNetworks
|
|
|
};
|
|
};
|
|
|
}
|
|
}
|