From: Nicolas Boisselier Date: Fri, 24 Jun 2016 16:36:58 +0000 (+0100) Subject: cidr_range X-Git-Url: https://git.nbdom.net/?a=commitdiff_plain;h=d5a3f0cdb3d3327429efed36e49c61aea3e452c7;p=nb.git cidr_range --- diff --git a/lib/mysql/functions.sql b/lib/mysql/functions.sql index e2aa5f75..fd4198ae 100644 --- a/lib/mysql/functions.sql +++ b/lib/mysql/functions.sql @@ -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 ;