diff --git a/static/js/pages/bgp.js b/static/js/pages/bgp.js
new file mode 100644
index 0000000..d51410d
--- /dev/null
+++ b/static/js/pages/bgp.js
@@ -0,0 +1,169 @@
+function filterTable(searchInputId,tableId){
+ const input=document.getElementById(searchInputId);
+ const filter=input.value.toUpperCase();
+ const table=document.getElementById(tableId);
+ const tr=table.getElementsByTagName("tr");
+
+ for(let i=1;i
-1){
+ tr[i].style.display="";
+ break;
+ }
+ }
+ }
+ }
+}
+
+function sortTable(tableId,columnIndex,th){
+ const table=document.getElementById(tableId);
+ const tbody=table.tBodies[0];
+ const rows=Array.from(tbody.rows);
+ const headers=Array.from(th.parentNode.children);
+
+ headers.forEach(header=>{
+ if(header!==th){
+ header.classList.remove('asc','desc');
+ header.setAttribute('data-sort-state','none');
+ }
+ });
+
+ let currentState=th.getAttribute('data-sort-state')||'none';
+ let newState=currentState==='none'?'asc':currentState==='asc'?'desc':'none';
+
+ th.classList.remove('asc','desc');
+ if(newState!=='none')th.classList.add(newState);
+ th.setAttribute('data-sort-state',newState);
+
+ if(newState==='none'){
+ rows.sort((a,b)=>parseInt(a.getAttribute('data-index'))-parseInt(b.getAttribute('data-index')));
+ }else{
+ rows.sort((a,b)=>{
+ const aText=a.cells[columnIndex].textContent.trim();
+ const bText=b.cells[columnIndex].textContent.trim();
+
+ const aNum=parseFloat(aText.replace(/[^0-9.-]/g,''));
+ const bNum=parseFloat(bText.replace(/[^0-9.-]/g,''));
+ const isNumeric=!isNaN(aNum)&&!isNaN(bNum);
+
+ return newState==='asc'
+ ?(isNumeric?aNum-bNum:aText.localeCompare(bText))
+ :(isNumeric?bNum-aNum:bText.localeCompare(aText));
+ });
+ }
+
+ rows.forEach(row=>tbody.appendChild(row));
+}
+
+async function loadBgpTables(){
+ const ipv4SummaryEl=document.getElementById("ipv4Summary");
+ const ipv6SummaryEl=document.getElementById("ipv6Summary");
+ const ipv4Body=document.getElementById("ipv4TableBody");
+ const ipv6Body=document.getElementById("ipv6TableBody");
+
+ try{
+ const response=await fetch("/bgp/json");
+ const data=await response.json();
+
+ ipv4SummaryEl.innerHTML=`
+ BGP Router ID:${data.ipv4_info.router_id},Local AS Number:${data.ipv4_info.local_as} VRF ID:${data.ipv4_info.vrf_id}
+ BGP Table Version:${data.ipv4_info.table_version}
+ RIB Entries:${data.ipv4_info.rib_entries},using ${data.ipv4_info.rib_memory}
+ Peers:${data.ipv4_info.peers},using ${data.ipv4_info.peers_memory}
+ `;
+
+ ipv6SummaryEl.innerHTML=`
+ BGP Router ID:${data.ipv6_info.router_id},Local AS Number:${data.ipv6_info.local_as} VRF ID:${data.ipv6_info.vrf_id}
+ BGP Table Version:${data.ipv6_info.table_version}
+ RIB Entries:${data.ipv6_info.rib_entries},using ${data.ipv6_info.rib_memory}
+ Peers:${data.ipv6_info.peers},using ${data.ipv6_info.peers_memory}
+ `;
+
+ ipv4Body.innerHTML="";
+ if(data.ipv4_peers.length===0){
+ ipv4Body.innerHTML=`| Geen data beschikbaar. |
`;
+ }else{
+ data.ipv4_peers.forEach((peer,index)=>{
+ const row=document.createElement("tr");
+ row.setAttribute("data-index",index);
+ row.innerHTML=`
+ ${peer.neighbor} |
+ ${peer.version} |
+ ${peer.as_number} |
+ ${peer.msg_received} |
+ ${peer.msg_sent} |
+ ${peer.table_version} |
+ ${peer.in_queue} |
+ ${peer.out_queue} |
+ ${peer.up_down} |
+ ${peer.state_pfx_rcd} |
+ ${peer.prefix_sent} |
+ ${peer.description} |
+ `;
+ ipv4Body.appendChild(row);
+ });
+ }
+
+ ipv6Body.innerHTML="";
+ if(data.ipv6_peers.length===0){
+ ipv6Body.innerHTML=`| Geen data beschikbaar. |
`;
+ }else{
+ data.ipv6_peers.forEach((peer,index)=>{
+ const row=document.createElement("tr");
+ row.setAttribute("data-index",index);
+ row.innerHTML=`
+ ${peer.neighbor} |
+ ${peer.version} |
+ ${peer.as_number} |
+ ${peer.msg_received} |
+ ${peer.msg_sent} |
+ ${peer.table_version} |
+ ${peer.in_queue} |
+ ${peer.out_queue} |
+ ${peer.up_down} |
+ ${peer.state_pfx_rcd} |
+ ${peer.prefix_sent} |
+ ${peer.description} |
+ `;
+ ipv6Body.appendChild(row);
+ });
+ }
+ }catch(error){
+ ipv4SummaryEl.textContent="Fout bij ophalen IPv4 data.";
+ ipv6SummaryEl.textContent="Fout bij ophalen IPv6 data.";
+ ipv4Body.innerHTML=`| Fout bij ophalen van data. |
`;
+ ipv6Body.innerHTML=`| Fout bij ophalen van data. |
`;
+ }
+}
+
+window.addEventListener("DOMContentLoaded",()=>{
+ loadBgpTables();
+});
+
+function refreshBGPTable(){
+ const searchInput=document.getElementById("ipv4Search");
+ const searchInput2=document.getElementById("ipv6Search");
+ const refreshIcon=document.getElementById("refreshIcon");
+ const refreshIcon2=document.getElementById("refreshIcon2");
+ const refreshSpinner=document.getElementById("refreshSpinner");
+ const refreshSpinner2=document.getElementById("refreshSpinner2");
+
+ searchInput.value="";
+ searchInput2.value="";
+
+ refreshIcon.classList.add("d-none");
+ refreshIcon2.classList.add("d-none");
+ refreshSpinner.classList.remove("d-none");
+ refreshSpinner2.classList.remove("d-none");
+
+ loadBgpTables().then(()=>{
+ refreshIcon.classList.remove("d-none");
+ refreshIcon2.classList.remove("d-none");
+ refreshSpinner.classList.add("d-none");
+ refreshSpinner2.classList.add("d-none");
+ });
+}