summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--modules/admin-full/luasrc/model/cbi/admin_network/vlan.lua27
1 files changed, 21 insertions, 6 deletions
diff --git a/modules/admin-full/luasrc/model/cbi/admin_network/vlan.lua b/modules/admin-full/luasrc/model/cbi/admin_network/vlan.lua
index 80af2c890..744ff661e 100644
--- a/modules/admin-full/luasrc/model/cbi/admin_network/vlan.lua
+++ b/modules/admin-full/luasrc/model/cbi/admin_network/vlan.lua
@@ -205,6 +205,7 @@ m.uci:foreach("network", "switch",
vid.rmempty = false
vid.forcewrite = true
+ vid.vlan_used = { }
-- Validate user provided VLAN ID, make sure its within the bounds
-- allowed by the switch.
@@ -212,7 +213,13 @@ m.uci:foreach("network", "switch",
local v = tonumber(value)
local m = has_vlan4k and 4094 or (num_vlans - 1)
if v ~= nil and v >= min_vid and v <= m then
- return value
+ if not self.vlan_used[v] then
+ self.vlan_used[v] = true
+ return value
+ else
+ return nil,
+ translatef("Invalid VLAN ID given! Only unique IDs are allowed")
+ end
else
return nil,
translatef("Invalid VLAN ID given! Only IDs between %d and %d are allowed.", min_vid, m)
@@ -246,13 +253,21 @@ m.uci:foreach("network", "switch",
-- Build per-port off/untagged/tagged choice lists.
local pt
+ local off = 1
for pt = 0, num_ports - 1 do
- local po = s:option(ListValue, tostring(pt),
- (pt == cpu_port) and translate("CPU") or translatef("Port %d", (pt + 1)))
+ local title
+ if pt == cpu_port then
+ off = 0
+ title = translate("CPU")
+ else
+ title = translatef("Port %d", pt + off)
+ end
+
+ local po = s:option(ListValue, tostring(pt), title)
- po:value("", translate("off"))
- po:value("u" % pt, translate("untagged"))
- po:value("t" % pt, translate("tagged"))
+ po:value("", translate("off"))
+ po:value("u", translate("untagged"))
+ po:value("t", translate("tagged"))
po.cfgvalue = portvalue
po.validate = portvalidate