NAME

Template::Plugin::IPAddr - Template::Toolkit plugin handling IP-addresses

SYNOPSIS

# Create IPaddr object via USE directive...
[% USE IPAddr %]
[% USE IPAddr(prefix) %]

# ...or via new
[% ip = IPAddr.new(prefix) %]

# Methods that return the different parts of the prefix
[% IPAddr.addr %]
[% IPAddr.cidr %]
[% IPAddr.network %]
[% IPAddr.netmask %]
[% IPAddr.wildcard %]

# Methods for retriving usable IP-adresses from a prefix
[% IPAddr.first %]
[% IPAddr.last %]

DESCRIPTION

This module implements an IPAddr class for handling IPv4 and IPv6-addresses in an object-orientated way. The module is based on NetAddr::IP and works on IPv4 as well as IPv6-addresses.

You can create a IPAddr object via the USE directive, adding any initial prefix as an argument.

[% USE IPAddr %]
[% USE IPAddr(prefix) %]

Once you've got a IPAddr object, you can use it as a prototype to create other IPAddr objects with the new() method.

[% USE IPAddr %]
[% ip = IPAddr.new(prefix) %]

After creating an IPaddr object, you can use the supplied methods for retreiving properties of the prefix.

[% USE IPAddr('10.0.0.0/24') %]
[% IPAddr.netmask %]   # 255.255.255.0
[% IPAddr.first %]     # 10.0.0.1
[% IPAddr.last %]      # 10.0.0.254

METHODS

new

Creates a new IPAddr object using an initial value passed as a positional parameter. Any string which is accepted by NetAddr::IP->new can be used as a parameter.

[% USE IPAddr %]
[% USE IPAddr(prefix) %]
[% ip = IPAddr.new(prefix) %]

Examples of (recommended) formats of initial parameters that can be used:

# IPv4
n.n.n.n             # Host address
n.n.n.n/m           # CIDR notation
n.n.n.n/m.m.m.m     # address + netmask

# IPv6
x:x:x:x:x:x:x:x     # Host address
x:x:x:x:x:x:x:x/m   # CIDR notation
::n.n.n.n           # IPv4-compatible IPv6 address

When used as [% USE IPAddr %] the prefix assigned internally is 0.0.0.0/0

addr

Returns the address part of the prefix as written in the initial value.

[% USE IPAddr('10.1.1.1/24') %]
[% IPAddr.addr %]  # 10.1.1.1

[% USE IPAddr('2001:DB8::DEAD:BEEF') %]
[% IPAddr.addr %]  # 2001:db8::dead:beef

cidr

Returns the prefix in CIDR notation, i.e. as network/prefixlen.

[% USE IPAddr('10.1.1.1/255.255.255.0') %]
[% IPAddr.cidr %]   # 10.1.1.0/24

[% USE IPAddr('2001:db8:a:b:c:d:e:f/48') %]
[% IPAddr.cidr %]  # 2001:db8:a::/48

Note that differs from the cidr method in NetAddr::IP (which returns address/prefixlen).

first

Returns the first usable IP-address within the prefix.

[% USE IPAddr('10.0.0.0/16') %]
[% IPAddr.first %]   # 10.0.0.1

last

Returns the last usable IP-address within the prefix.

[% USE IPAddr('10.0.0.0/16') %]
[% IPAddr.last %]   # 10.0.255.254

network

Returns the network part of the prefix.

[% USE IPAddr('10.1.1.1/24') %]
[% IPAddr.network %]   # 10.1.1.0

[% USE IPAddr('2001:db8:a:b:c:d:e:f/48') %]
[% IPAddr.network %]  # 2001:db8:a::

netmask

Returns the netmask part of the prefix.

[% USE IPAddr('10.1.1.1/24') %]
[% IPAddr.netmask %]   # 255.255.255.0

wildcard

Returns the netmask of the prefix in wildcard format (the netmask with all bits inverted).

[% USE IPAddr('10.1.1.1/24') %]
[% IPAddr.wildcard %]   # 0.0.0.255

NOTES

Not all methods are applicable in a IPv6 context. For example there are no notation of netmask or wildcard in IPv6, and the first and last returns addresses of no/little value.

When using IPv6 mapped IPv4 addresses, the "dot notation" is lost in the process. For example:

[% USE IPAddr('::192.0.2.1') %]

then

[% IPAddr.addr %]

will print ::c000:201.

SEE ALSO

Template, "PLUGINS" in Template::Manual::Config, NetAddr::IP

AUTHOR

Per Carlson pelle@cpan.org

COPYRIGHT AND LICENSE

Copyright 2013 Per Carlson

This module is free software; you can redistribute it and/or modify it under the same terms as Perl 5.14.0.

For more details, see the full text of the licenses at http://opensource.org/licenses/Artistic-2.0, and http://opensource.org/licenses/GPL-1.0.