From c36136047ce9a95d8471b7084a5196aa657b7635 Mon Sep 17 00:00:00 2001 From: chriz Date: Sun, 25 Jan 2026 22:04:05 +0100 Subject: [PATCH] Add support for configuring PVID on VLAN page. --- html/vlan.html | 2 ++ html/vlan.js | 16 ++++++++++++++-- html/vlan_sub.js | 18 +++++++++++++----- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/html/vlan.html b/html/vlan.html index a3f91e0..8bf5fc3 100644 --- a/html/vlan.html +++ b/html/vlan.html @@ -23,6 +23,8 @@

Untagged Ports

+

PVID (default VLAN incoming traffic)

+

diff --git a/html/vlan.js b/html/vlan.js index a6b0f9b..d37d626 100644 --- a/html/vlan.js +++ b/html/vlan.js @@ -6,6 +6,7 @@ function vlanForm() { clearInterval(vlanInterval); var t = document.getElementById('tPorts'); var u = document.getElementById('uPorts'); + var p = document.getElementById('pPorts'); for (let i = 1; i <= numPorts; i++) { const d = document.createElement("div"); d.classList.add("cbgroup"); @@ -29,6 +30,10 @@ function vlanForm() { d2.children[0].children[0].id = "uport" + i; d2.children[0].children[0].setAttribute('onclick', `setC("t", ${i}, false);`); u.appendChild(d2); + var d3=d.cloneNode(true); + d3.children[0].children[0].id = "pport" + i; + d3.children[0].children[0].removeAttribute('onclick'); + p.appendChild(d3); } } @@ -42,6 +47,12 @@ function utClicked(t){ } } +function pvClicked(p){ + for (let i = 1; i <= numPorts; i++) { + setC('p', i, p); + } +} + window.addEventListener("load", function() { vlanInterval = setInterval(vlanForm, 100); }); @@ -55,8 +66,9 @@ function fetchVLAN() { m = parseInt(s.members, 16); document.getElementById('vname').value = s.name; for (let i = 1; i <= numPorts; i++) { - setC('t', i, (m>>(10+i-1))&1); - setC('u', i, (m>>(i-1))&1); + setC('t', i, (m>>(10+i-1))&1); + setC('u', i, (m>>(i-1))&1); + setC('p', i, (m>>(20+i-1))&1); } } }; diff --git a/html/vlan_sub.js b/html/vlan_sub.js index ee381de..ea14c95 100644 --- a/html/vlan_sub.js +++ b/html/vlan_sub.js @@ -1,4 +1,5 @@ async function vlanSub() { + var commands = []; var cmd = "vlan "; var v=document.getElementById('vid').value if (!v) { @@ -14,12 +15,19 @@ async function vlanSub() { else if (document.getElementById('uport' + i).checked) cmd = cmd + ` ${i}`; } + commands.push(cmd); + for (let i = 1; i <= numPorts; i++) { + if (document.getElementById('pport' + i).checked) + commands.push(`pvid ${i} ${v}`); + } try { - const response = await fetch('/cmd', { - method: 'POST', - body: cmd - }); - console.log('Completed!', response); + for (let c of commands) { + const response = await fetch('/cmd', { + method: 'POST', + body: c + }); + console.log('Completed!', response); + } } catch(err) { console.error(`Error: ${err}`); }