modules/admin-full: only allow unique vlan ids, fix port labelling if CPU is at 0
authorJo-Philipp Wich <jow@openwrt.org>
Sun, 9 Oct 2011 23:39:34 +0000 (23:39 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Sun, 9 Oct 2011 23:39:34 +0000 (23:39 +0000)
modules/admin-full/luasrc/model/cbi/admin_network/vlan.lua

index 80af2c8903b4f9299db984b091287997440caa21..744ff661e3868bf93fc3e17e3cce9a5fb17823e5 100644 (file)
@@ -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