Net-ISC-DHCPClient
view release on metacpan or search on metacpan
lib/Net/ISC/DHCPClient.pm view on Meta::CPAN
die "Missing leases_path!" if (!defined($opts{leases_path}));
my $self = {};
# Incoming arguments:
$self->{INTERFACE} = defined($opts{interface}) ? $opts{interface} : undef;
$self->{leases_path} = $opts{leases_path};
# Internal storage:
$self->{leases_af_inet} = undef;
$self->{leases_af_inet6} = undef;
bless ($self, $class);
return $self;
}
sub is_dhcp($$;$)
{
my ($self, $af, $inteface_to_query) = @_;
die "Address family is: inet or inet6!" if (!($af eq 'inet' || $af eq 'inet6'));
if (defined($inteface_to_query) &&
defined($self->{INTERFACE}) &&
$self->{INTERFACE} ne $inteface_to_query) {
die sprintf("Cannot query interface %s, has %s.", $inteface_to_query, $self->{INTERFACE});
}
if (defined($self->{INTERFACE})) {
if ($af eq 'inet') {
$self->leases_af_inet();
return scalar(@{$self->{leases_af_inet}}) > 0;
}
if ($af eq 'inet6') {
$self->leases_af_inet6();
return scalar(@{$self->{leases_af_inet6}}) > 0;
}
return 0;
}
die "Need interface!" if (!defined($inteface_to_query));
# Iterate all found leases and look for given interface
my $leases_to_check;
$leases_to_check = $self->{leases_af_inet} if ($af eq 'inet');
$leases_to_check = $self->{leases_af_inet6} if ($af eq 'inet6');
for my $lease (@$leases_to_check) {
return 1 if ($lease->{INTERFACE} eq $inteface_to_query);
}
return 0;
}
sub leases_af_inet($)
{
my ($self) = @_;
return $self->{leases_af_inet} if ($self->{leases_af_inet});
$self->{leases_af_inet} = $self->_read_lease_file($self->{leases_path},
$self->{INTERFACE},
'inet');
return $self->{leases_af_inet};
}
sub leases_af_inet6($)
{
my ($self) = @_;
return $self->{leases_af_inet6} if ($self->{leases_af_inet6});
$self->{leases_af_inet6} = $self->_read_lease_file($self->{leases_path},
$self->{INTERFACE},
'inet6');
return $self->{leases_af_inet6};
}
sub _read_lease_file($$$$)
{
my ($self, $path, $interface, $af) = @_;
my @isc_lease_files;
my @netplan_lease_files;
my $leases = [];
lib/Net/ISC/DHCPClient.pm view on Meta::CPAN
if ($af eq 'inet') {
if ($interface) {
$leasefile_re1 = qr/^dhclient-(.*)?-($interface)\.lease$/;
$leasefile_re2 = qr/^dhclient\.($interface)\.leases$/;
$leasefile_re3 = qr/^internal-(.*)?-($interface)\.lease$/;
} else {
$leasefile_re1 = qr/^dhclient-(.*)?-(.+)\.lease$/;
$leasefile_re2 = qr/^dhclient\.(.+)\.leases$/;
$leasefile_re3 = qr/^internal-(.*)?-($interface)\.lease$/;
}
} elsif ($af eq 'inet6') {
if ($interface) {
$leasefile_re1 = qr/^dhclient6-(.*)?-($interface)\.lease$/;
$leasefile_re2 = qr/^dhclient6\.($interface)\.leases$/;
} else {
$leasefile_re1 = qr/^dhclient6-(.*)?-(.+)\.lease$/;
$leasefile_re2 = qr/^dhclient6\.(.+)\.leases$/;
}
} else {
die "Unknown AF! '$af'";
}
lib/Net/ISC/DHCPClient.pm view on Meta::CPAN
$hasIscLeaseData = 0;
next;
}
if (!$hasIscLeaseData) {
next;
}
s/^\s+//; # Eat starting whitespace
$self->_isc_af_inet_lease_parser($currentLease, $_) if ($af eq 'inet');
$self->_isc_af_inet6_lease_parser($currentLease, $ia_type, $_) if ($af eq 'inet6');
} # end while (<LEASEFILE>)
close (LEASEFILE);
}
for my $leaseFile (@netplan_lease_files) {
open (LEASEFILE, $leaseFile) or
die "Cannot open leasefile $leaseFile. Error: $!";
my $currentLease;
my $ia_type = [];
lib/Net/ISC/DHCPClient.pm view on Meta::CPAN
};
# renew 5 2002/12/27 06:25:31;
(m#^expire\s+(\d+)\s+(\d+)/(\d+)/(\d+)\s+(\d+):(\d+):(\d+);#) && do {
my $leaseTime = timegm($7, $6, $5, $4, $3-1, $2);
$currentLease->{EXPIRE} = $leaseTime;
last SWITCH;
};
}
}
sub _isc_af_inet6_lease_parser($$$$)
{
my ($self, $currentLease, $ia_type, $line) = @_;
my $context = '';
my $addr = '';
$context = $ia_type->[0] if (defined($ia_type->[0]));
$addr = $ia_type->[1] if (defined($ia_type->[1]));
SWITCH: {
# interface "eth1";
lib/Net/ISC/DHCPClient/Inet6Lease.pm view on Meta::CPAN
package Net::ISC::DHCPClient::Inet6Lease;
use 5.006;
use strict;
use warnings;
=head1 NAME
Net::ISC::DHCPClient - ISC dhclient inet6 lease object
=head1 VERSION
Version 0.01
=cut
our $VERSION = '0.01';
( run in 0.340 second using v1.01-cache-2.11-cpan-87723dcf8b7 )