diff --git a/static/js/pages/bgp.js b/static/js/pages/bgp.js
index 669387b..74c9c6e 100644
--- a/static/js/pages/bgp.js
+++ b/static/js/pages/bgp.js
@@ -54,8 +54,10 @@ async function loadBgpTables() {
ipv4Sum.innerHTML = buildSummary("IPv4", data.ipv4_info);
ipv6Sum.innerHTML = buildSummary("IPv6", data.ipv6_info);
- renderPeers(ipv4Body, data.ipv4_peers);
- renderPeers(ipv6Body, data.ipv6_peers);
+ const bfdPeersSet = new Set(data.bfd_peers);
+
+ renderPeers(ipv4Body, data.ipv4_peers, bfdPeersSet);
+ renderPeers(ipv6Body, data.ipv6_peers, bfdPeersSet);
activatePopovers();
} catch (e) {
@@ -66,19 +68,19 @@ async function loadBgpTables() {
function buildSummary(label, info) {
const popContent = `
- BGP Router ID: ${info.router_id}
+ BGP Router ID: ${info.router_id}
Local AS: ${info.local_as}
- VRF ID: ${info.vrf_id}
- RIB Entries: ${info.rib_entries} (using ${info.rib_memory})
+ VRF ID: ${info.vrf_id}
+ RIB Entries: ${info.rib_entries} (using ${info.rib_memory})
Peers: ${info.peers} (using ${info.peers_memory})
- BGP Table Version: ${info.table_version}
+ BGP Table Version: ${info.table_version}
`.trim();
return `
${label} Unicast Summary
ℹ️
@@ -86,14 +88,15 @@ function buildSummary(label, info) {
`;
}
-
-function renderPeers(tbody, peers) {
+function renderPeers(tbody, peers, bfdPeersSet) {
tbody.innerHTML = "";
if (!peers.length) {
tbody.innerHTML = `| No data available. |
`;
return;
}
+ const ip_version = tbody.id.includes('ipv4') ? 'ipv4' : 'ipv6';
+
peers.forEach((p, i) => {
const popTitle = `${p.as_number} details`;
const popContent = `
@@ -103,6 +106,8 @@ function renderPeers(tbody, peers) {
Outbound Queue: ${p.out_queue}
`.trim();
+ const hasBfd = bfdPeersSet.has(p.neighbor);
+
const tr = document.createElement("tr");
tr.dataset.index = i;
tr.innerHTML = `
@@ -112,13 +117,22 @@ function renderPeers(tbody, peers) {
${p.state_pfx_rcd} |
${p.prefix_sent} |
${p.description} |
-
-
+
- ℹ️
+
+
+
+
+ ${hasBfd ? `
+
+
+ ` : ''}
|
`;
tbody.appendChild(tr);
@@ -126,16 +140,22 @@ function renderPeers(tbody, peers) {
}
function activatePopovers() {
- document.querySelectorAll('[data-bs-toggle="popover"]').forEach(el => {
- const existing = bootstrap.Popover.getInstance(el);
- if (existing) existing.dispose();
- new bootstrap.Popover(el);
+ const popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'));
+ popoverTriggerList.map(function (popoverTriggerEl) {
+ return new bootstrap.Popover(popoverTriggerEl);
+ });
+}
+
+function activateTooltips() {
+ const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
+ tooltipTriggerList.map(function (tooltipTriggerEl) {
+ return new bootstrap.Tooltip(tooltipTriggerEl);
});
}
function showError(sumEl, bodyEl, label) {
sumEl.textContent = `Error fetching ${label} data.`;
- bodyEl.innerHTML = `| Error retrieving data. |
`;
+ bodyEl.innerHTML = `| Error retrieving data. |
`;
}
function refreshBGPTable() {