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:19:23 +0100 |
commit | 8297be5485c6444a24bc890099336271012cb9e1 (patch) | |
tree | c0a1cb88ec9af8453693ef26c0dd293df5936eac /modules/luci-base/luasrc/cbi | |
parent | 07ceede1becb16cca3e26cd41539c34c97b2850e (diff) |
luci-base: add 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/cbi')
-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 ) |