diff options
author | Jo-Philipp Wich <jo@mein.io> | 2017-01-23 16:10:36 +0100 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2017-01-23 16:15:22 +0100 |
commit | e4b1bb315606c6c6078a1d3f81eea092762a47e7 (patch) | |
tree | 8ada839aa22c7476b81a2b347eaa0b198a7178aa /modules/luci-base/luasrc | |
parent | 937f4fbbdf8365664de2d1a20e382679a8f05543 (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.lua | 34 |
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 ) |