NAME
NetObj::MacAddress - represent a MAC address
VERSION
version 1.0.2
SYNOPSIS
use NetObj::MacAddress;
# construct, supports various typical notations
my $mac1 = NetObj::MacAddress->new('08:00:20:1e:bc:78');
my $mac2 = NetObj::MacAddress->new('08-00-20-1E-BC-78');
my $mac3 = NetObj::MacAddress->new('6c40.087c.5e90');
# numerical and stringwise comparisons are strictly equivalent
$mac1 == $mac2; $mac1 eq $mac2; # true
$mac1 != $mac2; $mac1 ne $mac2; # false
$mac1 == $mac3; $mac1 eq $mac3; # false
$mac1 != $mac3; $mac1 ne $mac3; # true
# reject invalid MAC addresses
my $invalid_mac = NetObj::MacAddress->new('foo'); # throws exception
# test for validity
NetObj::MacAddress::is_valid('08:00:20:1e:bc:78'); # true
NetObj::MacAddress::is_valid('foo'); # false
# allow raw binary MAC addresses (any combination of 6 bytes)
my $mac4 = NetObj::MacAddress->new('l@,foo');
# specify binary explicitly
$mac4 = NetObj::MacAddress->new(binary => 'l@,foo');
$mac4 = NetObj::MacAddress->new({binary => 'l@,foo'});
# represent as hex (base16)
$mac4->to_string(); # '6c402c666f6f'
# or as the raw binary
$mac4->binary(); # 'l@,foo'
DESCRIPTION
NetObj::MacAddress represents MAC addresses. The constructor makes sure that only valid MAC addresses can be instantiated. Two MAC addresses compare equal if they represent the same address independently of the notation used in the constructor.
METHODS
is_valid
The class method NetObj::MacAddress::is_valid
tests for the validity of a MAC address represented by a string. It does not throw an exception but returns false for an invalid and true for a valid MAC address.
new
The constructor expects exactly one argument either as a raw 6 byte value or a string representation in a typically notation of hex characters. It throws an exception for invalid MAC addresses.
binary
The binary
method returns the raw 6 bytes of the MAC address.
to_string
The to_string
method returns the MAC address in hex notation (base16). Optionally, if it is given the name of a formatter it will format the string in the corresponding style. The default style is called 'base16'
.
my $mac = NetObj::MacAddress->new('0800201ebc78');
$mac->to_string(); # '0800201ebc78'
$mac->to_string('base16'); # '0800201ebc78'
use NetObj::MacAddress::Formatter::Colons;
$mac->to_string('colons'); # '08:00:20:1e:bc:78'
use NetObj::MacAddress::Formatter::Dashes;
$mac->to_string('dashes'); # '08-00-20-1E-BC-78'
use NetObj::MacAddress::Formatter::Dots;
$mac->to_string('dots'); # '0800.201e.bc78'
Some formatters are available by default (see examples above), others can be added if needed by providing a module with a package name beginning with NetObj::MacAddress::Formatter::
similarly to the existing ones.
is_multicast, is_unicast
The methods is_multicast
and is_unicast
indicate whether a MAC address is multicast or unicast, respectively.
my $unicast_mac = NetObj::MacAddress->new('000001abcdef');
my $multicast_mac = NetObj::MacAddress->new('010001abcdef');
$unicast_mac->is_unicast(); # true
$unicast_mac->is_multicast(); # false
$multicast_mac->is_unicast(); # false
$multicast_mac->is_multicast(); # true
is_global, is_local
The methods is_global
and is_local
indicate whether a MAC address is globally or locally assigned, respectively.
my $local_mac = NetObj::MacAddress->new('000001abcdef');
my $global_mac = NetObj::MacAddress->new('020001abcdef');
$local_mac->is_local(); # true
$local_mac->is_global(); # false
$global_mac->is_local(); # false
$global_mac->is_global(); # true
MOTIVATION
This class aims to provide a conceptually simple interface to represent a MAC address. The constructor takes a single argument in the form of a string in the most typical hex representations. Exotic representations are not supported. The resulting object is independent of the string representation used to construct it. Two MAC addresses compare equal if the refer to the same bytes.
Originally implemented as a Moo class this package is too small to warrant the number of dependencies. It is now implemented as a simple Perl class and strives to have no non CORE dependencies.
AUTHOR
Elmar S. Heeb <elmar@heebs.ch>
COPYRIGHT AND LICENSE
This software is Copyright (c) 2015 by Elmar S. Heeb.
This is free software, licensed under:
The GNU General Public License, Version 3, June 2007