summaryrefslogtreecommitdiffhomepage
path: root/modules/luci-base/luasrc
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2017-01-23 16:10:36 +0100
committerJo-Philipp Wich <jo@mein.io>2017-01-23 16:15:22 +0100
commite4b1bb315606c6c6078a1d3f81eea092762a47e7 (patch)
tree8ada839aa22c7476b81a2b347eaa0b198a7178aa /modules/luci-base/luasrc
parent937f4fbbdf8365664de2d1a20e382679a8f05543 (diff)
luci-base: ipmask, ipmask4 and ipmask6 validators
These validators accept IP address specifications in the form - address - address/bits - address/netmask Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Diffstat (limited to 'modules/luci-base/luasrc')
-rw-r--r--modules/luci-base/luasrc/cbi/datatypes.lua34
1 files changed, 34 insertions, 0 deletions
diff --git a/modules/luci-base/luasrc/cbi/datatypes.lua b/modules/luci-base/luasrc/cbi/datatypes.lua
index 9b48643607..2039a3516b 100644
--- a/modules/luci-base/luasrc/cbi/datatypes.lua
+++ b/modules/luci-base/luasrc/cbi/datatypes.lua
@@ -131,6 +131,40 @@ function ip6prefix(val)
return ( val and val >= 0 and val <= 128 )
end
+function ipmask(val)
+ return ipmask4(val) or ipmask6(val)
+end
+
+function ipmask4(val)
+ local ip, mask = val:match("^([^/]+)/([^/]+)$")
+ local bits = tonumber(mask)
+
+ if bits and bits < 0 or bits > 32 then
+ return false
+ end
+
+ if not bits and not ip4addr(mask) then
+ return false
+ end
+
+ return ip4addr(ip or val)
+end
+
+function ipmask6(val)
+ local ip, mask = val:match("^([^/]+)/([^/]+)$")
+ local bits = tonumber(mask)
+
+ if bits and bits < 0 or bits > 128 then
+ return false
+ end
+
+ if not bits and not ip6addr(mask) then
+ return false
+ end
+
+ return ip6addr(ip or val)
+end
+
function port(val)
val = tonumber(val)
return ( val and val >= 0 and val <= 65535 )