var mtus = new Int16Array(10); function createPortTable() { var tbl = document.getElementById('speedtable'); if (tbl.rows.length <= 2 && numPorts) { clearInterval(pTableInterval); const sSelect = ''; const dSelect = ''; for (let i = 1; i <= numPorts; i++) { if (pIsSFP[i-1]) continue; console.log("Table row: " + i + "pState: " + pState[i-2]); const tr = tbl.insertRow(); let td = tr.insertCell(); td.appendChild(document.createTextNode(`Port ${i}`)); td = tr.insertCell(); td.innerHTML = linkS[pState[i] + 1]; td = tr.insertCell(); td.innerHTML = "Unknown"; td = tr.insertCell(); td.innerHTML = sSelect.replaceAll("speed_sel", "speed_sel_" + i); td = tr.insertCell(); td.innerHTML = dSelect.replaceAll("duplex_sel", "duplex_sel_" + i); var button = ''; td = tr.insertCell(); td.innerHTML = button; } } tbl = document.getElementById('mtutable'); if (tbl.rows.length <= 2 && numPorts) { const mSelect = ''; var tr = tbl.insertRow(); for (let i = 1; i <= numPorts; i++) { let td = tr.insertCell(); if (pIsSFP[i-1]) td.innerHTML = '' else td.innerHTML = '' } tr = tbl.insertRow(); for (let i = 1; i <= numPorts; i++) { let td = tr.insertCell(); td.innerHTML = mSelect.replaceAll("mtu_sel", "mtu_sel_" + i); } tr = tbl.insertRow(); for (let i = 1; i <= numPorts; i++) { let td = tr.insertCell(); td.innerHTML = ''; } } } function updatePortTable() { console.log("updatePortTable called"); var tbl = document.getElementById('speedtable'); if (tbl.rows.length <= 2 || !numPorts) return; for (let i = 1; i <= numPorts ; i++) { if (pIsSFP[i-1]) continue; tbl.rows[i].cells[1].innerHTML = `${linkS[pState[i-1]+1]}`; var td = tbl.rows[i].cells[2]; var adv = pAdvertised[i-1]; switch(pAdvertised[i-1]) { case 0x20: td.innerHTML = "2.5GBit Full Duplex"; break; case 0x10: td.innerHTML = "1000MBit Full Duplex"; break; case 0x2f: td.innerHTML = "AUTO"; break; case 0xc: td.innerHTML = "100MBit"; break; case 8: td.innerHTML = "100MBit Full Duplex"; break; case 4: td.innerHTML = "100MBit Half Duplex"; break; case 3: td.innerHTML = "10MBit"; break; case 2: td.innerHTML = "10MBit Full Duplex"; break; case 1: td.innerHTML = "10MBit Half Duplex"; break; default: td.innerHTML = "None"; break; } } } async function applySpeed(port) { var speed = document.getElementById('speed_sel_' + port).value; var duplex = document.getElementById('duplex_sel_' + port).value; var cmd = "port " + port + " " + speed; console.log("port " + port, ", speed: " + speed, ", duplex: ", duplex); try { const response = await fetch('/cmd', { method: 'POST', body: cmd }); console.log('Completed!', response); if (duplex != "any") { cmd = "port " + port + " duplex " + duplex; const response = await fetch('/cmd', { method: 'POST', body: cmd }); console.log('Completed!', response); } } catch(err) { console.error(`Error: ${err}`); } } async function applyMTU(port) { var mtu = document.getElementById('mtu_sel_' + port).value; var cmd = "mtu " + port + " " + mtu; try { const response = await fetch('/cmd', { method: 'POST', body: cmd }); console.log('MTU Completed!', response); getMTUs(); } catch(err) { console.error(`Error: ${err}`); } } function getMTUs() { var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { const s = JSON.parse(xhttp.responseText); console.log("MTUS: ", JSON.stringify(s)); for (let i = 0; i < s.length; i++) { p = s[i]; let n = p.portNum; mtus[n] = parseInt(p.mtu, 16); var mtu = document.getElementById('mtu_sel_' + n); if (!mtu) continue; mtu.value = mtus[n]; clearInterval(pMTUInterval); } } }; xhttp.open("GET", "/mtu.json", true); xhttp.timeout = 1500; xhttp.send(); } window.addEventListener("load", function() { const updatePortTableInterval = setInterval(updatePortTable, 1000); }); const pTableInterval = setInterval(createPortTable, 1000); const pMTUInterval = setInterval(getMTUs, 1200);