Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
RGXG_NET_CIDR_STRING(3) 	 librgxg manual 	 RGXG_NET_CIDR_STRING(3)

NAME
     rgxg_net_cidr_string, rgxg_net_cidr_ipv4, rgxg_net_cidr_ipv6 - create regex
     that matches all addresses of the given CIDR block

SYNOPSIS
     #include <rgxg/net.h>

     int rgxg_net_cidr_string (const char *cidr, char **endptr, char *regex,
	  rgxg_options_t options);

     int rgxg_net_cidr_ipv4 (const rgxg_ipv4_t *address, int prefix, char *regex,
	  rgxg_options_t options);
     int rgxg_net_cidr_ipv6 (const rgxg_ipv6_t *address, int prefix, char *regex,
	  rgxg_options_t options);

DESCRIPTION
     rgxg_net_cidr_string()  generates	the  (extended)  regular expression that
     matches all addresses of the CIDR block  given  as  string  in  cidr  (e.g.
     "192.168.0.0/24"  or  "2001:db8:aaaa::/64").   cidr  must	be valid and not
     NULL.

     If endptr is not NULL, rgxg_net_cidr_string() stores on success the address
     of the first character which is not part of the CIDR block in *endptr.   If
     there  is	no  error  and **endptr is '\0', then the entire string has been
     parsed. The *endptr values in case of an error are described in the  ERRORS
     section below.

     rgxg_net_cidr_ipv4() and rgxg_net_cidr_ipv6() generate the (extended) regu-
     lar  expression  that  matches all addresses of the CIDR block specified by
     address and prefix (network identifier), which must be  between  0  and  32
     (rgxg_net_cidr_ipv4())  respectively  128 (rgxg_net_cidr_ipv6()) inclusive.
     address must be valid and not NULL.

     The rgxg_ipv4_t and rgxg_ipv6_t structures which are the types  of  address
     are defined in <rgxg/net.h>.

	 typedef struct {
	     uint8_t octet[4];
	 } rgxg_ipv4_t;

	 typedef struct {
	     uint16_t hextet[8];
	 } rgxg_ipv6_t;

     The n-th element of the octet/hextet array stores the (n+1)-th octet/hextet
     of  the  IPv4  respectively IPv6 address (i.e. for instance the first octet
     '192' in '192.168.0.0' is stored in octet[0]).

     The generated regular expression is written to the character string  regex,
     including	the terminating null byte ('\0'), unless RGXG_NONULLBYTE is set.
     If regex is NULL the return value is the number  of  characters  (excluding
     the  terminating  null byte) that would have been written in case regex has
     been initialized. Note that the functions assume an arbitrarily long  regex
     string,  callers  must  ensure that the given string is large enough to not
     overflow the actual space.

     options is either zero, or the bitwise-or of one or more of  the  following
     macros:

     Options marked as 'IPv6 only' can be used with rgxg_net_cidr_string() (when
     parsing IPv6 CIDR blocks) and with rgxg_net_cidr_ipv6().

     RGXG_NOUPPERCASE (IPv6 only)
	    The  generated  regular  expression only matches IPv6 addresses with
	    lower case letters. By default both lower and upper case letters are
	    matched.

     RGXG_NOLOWERCASE (IPv6 only)
	    The generated regular expression only matches  IPv6  addresses  with
	    upper case letters. By default both lower and upper case letters are
	    matched.

     RGXG_NOZEROCOMPRESSION (IPv6 only)
	    The  generated regular expression does not match IPv6 addresses with
	    zero compression (second form of text  representation  of  IPv6  ad-
	    dresses mentioned in section 2.2 of RFC 4291).

     RGXG_NOMIXEDNOTATION (IPv6 only)
	    The  generated  regular  expression does not match IPv6 addresses in
	    mixed notation (third form of text representation of IPv6  addresses
	    mentioned in section 2.2 of RFC 4291).

     RGXG_NOOUTERPARENS (IPv6 only)
	    Omit the outer parenthesis, if any, of the regular expression.

     RGXG_NONULLBYTE
	    Do not add the terminating null byte ('\0') to the regex string.

     Note  that  RGXG_NOUPPERCASE  and RGXG_NOLOWERCASE are mutual exclusive op-
     tions.

RETURN VALUE
     Upon successful return, these functions return  the  number  of  characters
     (excluding the terminating null byte) written to regex.

     If  an  error  occurs, a (negative) error code is returned (see ERRORS sec-
     tion).

ERRORS
     The following errors can be returned:

     RGXG_ERROR_PREFIX
	    Invalid network identifier (e.g. the prefix  is  lesser  than  0  or
	    greater than 32 (IPv4) respectively 128 (IPv6)).

	    rgxg_net_cidr_string(): If endptr is not NULL, *endptr points to the
	    first character of the invalid prefix.

     RGXG_ERROR_ARG2BIG (rgxg_net_cidr_string() only)
	    At least one octet/hextet is too large.

	    rgxg_net_cidr_string(): If endptr is not NULL, *endptr points to the
	    first digit of the too large octet/hextet.

     RGXG_ERROR_SYNTAX (rgxg_net_cidr_string() only)
	    Syntax  error in cidr string.  If endptr is not NULL, *endptr points
	    to the character that causes the syntax error.

     RGXG_ERROR_MUTEXOPTIONS (rgxg_net_cidr_string()/rgxg_net_cidr_ipv6() only)
	    Two mutual exclusive options were specified.

AVAILABILITY
     These functions are available since rgxg 0.1.

SEE ALSO
     regex(7), rgxg_number_greaterequal(3), rgxg_number_range(3).

AUTHOR
     Hannes von Haugwitz <hannes@vonhaugwitz.com>

rgxg 0.1.2			  Apr 12, 2020		 RGXG_NET_CIDR_STRING(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=rgxg_net_cidr_ipv6&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help