libs/core: add is4linklocal(), is4rfc1918() and is6linklocal() to luci.ip
authorJo-Philipp Wich <jow@openwrt.org>
Sat, 12 Feb 2011 18:59:33 +0000 (18:59 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Sat, 12 Feb 2011 18:59:33 +0000 (18:59 +0000)
libs/core/luasrc/ip.lua

index 3b0ca6799b51afa7897311ec5d21c67411c9d585..77aecd2832c2e2df39079e38566374215d5f9bfd 100644 (file)
@@ -334,6 +334,26 @@ function cidr.is4( self )
        return self[1] == FAMILY_INET4
 end
 
+--- Test whether this instance is an IPv4 RFC1918 private address
+-- @return     Boolean indicating whether this instance is an RFC1918 address
+function cidr.is4rfc1918( self )
+       if self[1] == FAMILY_INET4 then
+               return ((self[2][1] >= 0x0A00) and (self[2][1] <= 0x0AFF)) or
+                      ((self[2][1] >= 0xAC10) and (self[2][1] <= 0xAC1F)) or
+                          (self[2][1] == 0xC0A8)
+       end
+       return false
+end
+
+--- Test whether this instance is an IPv4 link-local address (Zeroconf)
+-- @return     Boolean indicating whether this instance is IPv4 link-local
+function cidr.is4linklocal( self )
+       if self[1] == FAMILY_INET4 then
+               return (self[2][1] == 0xA9FE)
+       end
+       return false
+end
+
 --- Test whether the instance is a IPv6 address.
 -- @return     Boolean indicating a IPv6 address type
 -- @see                cidr.is4
@@ -341,6 +361,15 @@ function cidr.is6( self )
        return self[1] == FAMILY_INET6
 end
 
+--- Test whether this instance is an IPv6 link-local address
+-- @return     Boolean indicating whether this instance is IPv6 link-local
+function cidr.is6linklocal( self )
+       if self[1] == FAMILY_INET6 then
+               return (self[2][1] >= 0xFE80) and (self[2][1] <= 0xFEBF)
+       end
+       return false
+end
+
 --- Return a corresponding string representation of the instance.
 -- If the prefix length is lower then the maximum possible prefix length for the
 -- corresponding address type then the address is returned in CIDR notation,