]> git.nbdom.net Git - nb.git/commitdiff
cidr_range
authorNicolas Boisselier <nicolas.boisselier@semantico.com>
Fri, 24 Jun 2016 16:36:58 +0000 (17:36 +0100)
committerNicolas Boisselier <nicolas.boisselier@semantico.com>
Fri, 24 Jun 2016 16:36:58 +0000 (17:36 +0100)
lib/mysql/functions.sql

index e2aa5f7518b9dcb8151d3142a1d3bc64b04481bf..fd4198ae35328c605eee8cdbcbb3afcf30fb3bb7 100644 (file)
@@ -6,9 +6,26 @@ BEGIN
   RETURN date_format(s,f);
 END$$
 
--- NB 24.06.16 DROP FUNCTION IF EXISTS cidr_range$$
--- NB 24.06.16 CREATE FUNCTION cidr_range (cidr text,s text)
--- NB 24.06.16 RETURNS text DETERMINISTIC
--- NB 24.06.16 BEGIN
--- NB 24.06.16   RETURN date_format(s,f);
--- NB 24.06.16 END$$
+DROP FUNCTION IF EXISTS ip_in_subnet_mask$$
+CREATE FUNCTION ip_in_subnet_mask (ip VARCHAR(20), subnet VARCHAR(20), netmask VARCHAR(20)) RETURNS TINYINT(1)
+DETERMINISTIC
+BEGIN
+  RETURN (INET_ATON(ip) & INET_ATON(netmask)) = INET_ATON(subnet);
+END$$
+
+DROP FUNCTION IF EXISTS INET_CTOA$$
+DELIMITER ;;
+CREATE FUNCTION `INET_CTOA`(`paramCIDR` int) RETURNS varchar(15) CHARSET utf8
+  DETERMINISTIC
+  COMMENT 'Converts a CIDR suffix (integer between 0 and 32) to an IPv4 netmask in dotted decimal notation'
+  BEGIN
+    DECLARE `netmask` int unsigned;
+    IF  ( (`paramCIDR` < 0) OR (`paramCIDR` > 32) )
+    THEN
+      RETURN NULL;
+    ELSE
+      SET `netmask` = 0xFFFFFFFF - (pow( 2, (32-`paramCIDR`) ) - 1);
+      RETURN INET_NTOA(`netmask`);
+    END IF;
+END ;;
+DELIMITER ;