=pod

package Data::IPV4::Range::Parse;

=head1 NAME

Data::IPV4::Range::Parse - Perl extension parsing ipv4 ranges

=head1 SYNOPSIS

  use Data::IPV4::Range::Parse;
  ($stat_int,$end_int)=auto_parse_ipv4_range('10/24');
  ($stat_int,$end_int)=auto_parse_ipv4_range('10.0.0 - 11');
  ($stat_int,$end_int)=auto_parse_ipv4_range('9');

  unless(($stat_int,$end_int)=auto_parse_ipv4_range('10/')) {
    print "failed to parse 10/\n";
  }


=head1 DESCRIPTION

Simple Interface for getting start and ending address of ranges as integers.

=head2 EXPORT

:CONSTANTS

 ALL_BITS
 MAX_CIDR
 MIN_CIDR

:PARSE_IP

 int_to_ip
 ip_to_int

:SORT

 sort_quad
 sort_notations

:COMPUTE_FROM_INT

 broadcast_int
 base_int
 size_from_mask
 hostmask
 cidr_to_int

:PARSE_RANGE

 parse_ipv4_cidr
 parse_ipv4_range
 parse_ipv4_ip
 auto_parse_ipv4_range

=head2 CONSTANTS

This section explains the Exportable constants.

=over 4

=item * ALL_BITS

Same as 0xffffffff

=item * MAX_CIDR

Same as 32

=item * MIN_CIDR

Same as 0

=back

=head2 PARSE_IP

This section covers the parse ipv4 address functions.

=over 4

=item * my $int=ip_to_int('10.0.0.1');

=item * my $int=Data::IPV4::Range::Parse->ip_to_int('10.0.0.1');

Returns a perl usable integer ipv4 representation of the ipv4 quad notation.

=item * my $ip=int_to_ip($int);

=item * my $ip=Data::IPV4::Range::Parse->int_to_ip($int);

Returns the integer formated in the standard quad notation.

=back

=head2 SORT

This section covers the Exportable sort functions.

=over 4

=item * my @ips=sort sort_quad @usorted_ips

Low level sort function used to sort ipv4 addresses in quad notation.

=item * my @ranges=sort sort_notations @unsorted_notations

Low level sort function used to sort ipv4 ranges.  This function will croak if a range cannot be parsed.

=back

=head2 COMPUTE_FROM_INT

This section covers the Exportable integer computation functions

=over 4

=item * my $broadcast_int=broadcast_int($ip_int,$mask_int);

=item * my $broadcast_int=Data::IPV4::Range::Parse->broadcast_int( $ip_int, $mask_int );

Returns an integer representing the broadcast address from 2 integers.

=item * my $base_int=base_int($ip_int,$mask_int);

=item * my $base_int=Data::IPV4::Range::Parse->base_int( $ip_int, $mask_int );

Returns an integer representing the base address from 2 integers.

=item * my $size=size_from_mask($mask_int)

=item * my $size=Data::IPV4::Range::Parse->size_from_mask($mask_int)

Returns an integer representing the size of a network.

=item * my $hostmask_int=hostmask($ip_int,$mask_int);

=item * my $hostmask_int=Data::IPV4::Range::Parse->hostmask( $ip_int, $mask_int );

Returns an integer representing the hostmask from 2 integers.

=item * my $mask_int=cidr_to_int(0-32);

=item * my $mask_int=Data::IPV4::Range::Parse->cidr_to_int( 0-32 );

Returns an integer representing netmask from a given cidr size.

=back

=head2 PARSE_RANGE

This section covers the Exportable range parser functions. An empty set is returned when the range cannot be parsed.

=over 4

=item * my ($start,$end)=parse_ipv4_cidr('10/23');

=item * my ($start,$end)=Data::IPV4::Range::Parse->parse_ipv4_cidr( '10/23' );

Returns 2 integers representing the base and broadcast of a CIDR.

=item * my ($start,$end)=parse_ipv4_range( '10 - 11' );

=item * my ($start,$end)=Data::IPV4::Range::Parse->parse_ipv4_range( '10 - 11' );

Returns 2 integers representing the start and end of a ip range.

=item * my ($start,$end)=parse_ipv4_ip('10.0.0.1')

=item * my ($start,$end)=Data::IPV4::Range::Parse->parse_ipv4_ip( '10.0.0.1' )

Returns 2 integers representing the input ip as a /32 range

=item * my ($start,$end)=auto_parse_ipv4_range('10');

=item * my ($start,$end)= Data::IPV4::Range::Parse->auto_parse_ipv4_range( '10' );

Attempts to figure out what type of range notation and calls the corresponding parse_ipv4_xxx function, returning an empty set on failure or 2 integers representing the start and end of the range.

=back

=head1 AUTHOR

Michael Shipper

=head1 SourceForge Project

As of version 1.04 the Project has been moved to SourceForge.net

L<Data IPV4 Range Parse|https://sourceforge.net/projects/data-ipv4-range/>

=head1 COPYRIGHT AND LICENSE

Copyright (C) 2010 by Michael Shipper

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.10.0 or,
at your option, any later version of Perl 5 you may have available.

=cut