diff --git a/html/style.css b/html/style.css index 9bc8b5d..c03be99 100644 --- a/html/style.css +++ b/html/style.css @@ -82,7 +82,6 @@ object, img { .isNOK{ color: #900;} .isOK{ color: #090;} .ip{padding:8px 16px;margin-bottom: 1em;margin-left: 1em} -/* read-only values line up with the text inside the input fields */ .rotext{display:inline-block;padding:8px 16px;margin-bottom: 1em;margin-left: 1em} .row {display: flex;} .rcol {flex: 90%;} diff --git a/html/system.js b/html/system.js index cb48a40..f9fd37e 100644 --- a/html/system.js +++ b/html/system.js @@ -133,7 +133,7 @@ function fetchIP() { document.getElementById("gw").value=s.ip_gateway; document.getElementById("hostname").value=s.hostname; document.getElementById("model").textContent=s.hw_ver; - loadMgmtVlan(parseInt(s.mgmt_vlan, 10) || 0); + loadMgmtVlan(); clearInterval(systemInterval); // Fetch and populate the config textbox fetchConfig().then((configText) => { @@ -170,14 +170,13 @@ window.addEventListener("load", function() { var mgmtVlanCurrent = 0; -/* Populate the management-VLAN picker from the configured VLANs. If management - * is untagged there is no VLAN to select, so show that as a disabled entry - * rather than inventing an id the switch would reject. */ -function loadMgmtVlan(cur) { +function loadMgmtVlan() { var sel = document.getElementById('mgmtvlan'); if (!sel) return; - mgmtVlanCurrent = cur; - fetch('/vlanlist').then(function(r) { return r.json(); }).then(function(list) { + fetch('/vlanlist').then(function(r) { return r.json(); }).then(function(d) { + var cur = d.mgmt || 0; + var list = d.vlan || []; + mgmtVlanCurrent = cur; sel.innerHTML = ''; if (!cur) { var none = document.createElement('option'); diff --git a/html/vlan.js b/html/vlan.js index 8e18f27..2ae5efa 100644 --- a/html/vlan.js +++ b/html/vlan.js @@ -110,7 +110,7 @@ async function loadVlanTable() { var resp; try { resp = await fetch('/vlanlist'); } catch(e) { return; } if (!resp.ok) return; - var vlans = await resp.json(); + var vlans = (await resp.json()).vlan || []; for (var i = 0; i < vlans.length; i++) { var v = vlans[i]; var vresp; @@ -181,7 +181,7 @@ function loadVlanList() { sel.style.display = 'none'; return; } - var vlans = JSON.parse(this.responseText); + var vlans = JSON.parse(this.responseText).vlan || []; if (!vlans.length) { sel.style.display = 'none'; return; diff --git a/httpd/page_impl.c b/httpd/page_impl.c index c78c2e1..44332e5 100644 --- a/httpd/page_impl.c +++ b/httpd/page_impl.c @@ -265,10 +265,7 @@ void send_basic_info(void) slen += strtox(outbuf + slen, BUILD_DATE); slen += strtox(outbuf + slen, "\",\"hw_ver\":\""); slen += strtox(outbuf + slen, machine.machine_name); - /* VLAN carrying switch management, 0 = untagged. */ - slen += strtox(outbuf + slen, "\",\"mgmt_vlan\":"); - itoa16_html(management_vlan); - slen += strtox(outbuf + slen, ",\"flash_size\":\""); + slen += strtox(outbuf + slen, "\",\"flash_size\":\""); string_to_html(get_flash_size_str()); if (machine.n_sfp) { @@ -861,7 +858,9 @@ void send_vlanlist(void) uint8_t first = 1; slen = strtox(outbuf, HTTP_RESPONCE_JSON); - char_to_html('['); + slen += strtox(outbuf + slen, "{\"mgmt\":"); + itoa16_html(management_vlan); + slen += strtox(outbuf + slen, ",\"vlan\":["); for (i = 1; i < 4095; i++) { if (vlan_get(i) < 0) @@ -869,7 +868,7 @@ void send_vlanlist(void) if (!(sfr_data[0] & 0x02)) /* bit 1: VLAN table entry valid */ continue; - if (slen + 139 > TCP_OUTBUF_SIZE) /* 138 bytes worst-case entry + 1 byte for closing ']' */ + if (slen + 141 > TCP_OUTBUF_SIZE) /* comma + 138-byte worst-case entry + closing "]}" */ break; if (!first) @@ -891,4 +890,5 @@ void send_vlanlist(void) } char_to_html(']'); + char_to_html('}'); }