Net-DHCPv6

 view release on metacpan or  search on metacpan

lib/Net/DHCPv6/Option/SntpServers.pm  view on Meta::CPAN

#!/bin/false
# ABSTRACT: SNTP Servers option (code 31) -- list of IPv6 addresses per RFC 4075
# PODNAME: Net::DHCPv6::Option::SntpServers
use strictures 2;

package Net::DHCPv6::Option::SntpServers;
$Net::DHCPv6::Option::SntpServers::VERSION = '0.003';
use Net::DHCPv6::OptionList ();
use Net::DHCPv6::Constants  qw(
    $IPV6_ADDR_LEN $OPTION_SNTP_SERVERS
);
use Net::DHCPv6::X::Truncated ();
use parent 'Net::DHCPv6::Option';
use Ref::Util qw( is_plain_arrayref );
use namespace::clean;
my $EMPTY = q();

sub new {
    my ( $class, %args ) = @_;
    my $addresses = $class->_pick_addrs( \%args, 'servers' );
    if ( !defined $addresses && $args{addresses} ) {
        my $list = is_plain_arrayref( $args{addresses} ) ? $args{addresses} : [ $args{addresses} ];
        $addresses = [ map { $class->_resolve_ipv6( $_ ) } @{$list} ];
    }
    $addresses //= [];
    $args{code} = $OPTION_SNTP_SERVERS;
    $args{data} = join( $EMPTY, @{$addresses} );
    my $self = $class->SUPER::new( %args );
    $self->{servers} = $addresses;
    return bless $self, $class;
}

sub servers_raw { return shift->{servers} }

sub servers {
    my $self = shift;
    return [ map { $self->_format_ipv6( $_ ) } @{ $self->{servers} } ];
}

sub from_bytes_inner {
    my ( $class, $code, $payload ) = @_;
    Net::DHCPv6::X::Truncated->throw( message => 'Truncated SntpServers option' )
        if CORE::length( $payload ) % $IPV6_ADDR_LEN != 0;
    my @addrs;
    while ( CORE::length( $payload ) ) {
        push @addrs, substr( $payload, 0, $IPV6_ADDR_LEN, q() );
    }
    return $class->new( servers_raw => \@addrs );
}

$Net::DHCPv6::OptionList::OPTION_CLASS{$OPTION_SNTP_SERVERS} = __PACKAGE__;
1;

__END__

=pod

=encoding UTF-8

=head1 NAME

Net::DHCPv6::Option::SntpServers - SNTP Servers option (code 31) -- list of IPv6 addresses per RFC 4075

=head1 VERSION

version 0.003

=head1 SYNOPSIS

  # Text form (auto-resolved to wire bytes)
  my $opt = Net::DHCPv6::Option::SntpServers->new(
      servers => [ '2001:db8::1', '2001:db8::2' ],
  );
  print $opt->servers->[0];           # '2001:db8::1'



( run in 0.965 second using v1.01-cache-2.11-cpan-6aa56a78535 )