diff options
-rw-r--r-- | Makefile.am | 1 | ||||
-rwxr-xr-x | scripts/vyatta-show-dhclient.pl | 158 | ||||
-rw-r--r-- | templates/show/dhcp/client/interface/node.def | 1 | ||||
-rw-r--r-- | templates/show/dhcp/client/interface/node.tag/node.def | 5 | ||||
-rw-r--r-- | templates/show/dhcp/client/node.def | 2 | ||||
-rw-r--r-- | templates/show/vrrp/interface/node.tag/node.def | 2 |
6 files changed, 168 insertions, 1 deletions
diff --git a/Makefile.am b/Makefile.am index c9849cb..4e9c1eb 100644 --- a/Makefile.am +++ b/Makefile.am @@ -13,6 +13,7 @@ allowed_DATA = functions/allowed/hosts bin_SCRIPTS = scripts/vyatta-show-interfaces bin_SCRIPTS += scripts/vyatta-show-version +bin_SCRIPTS += scripts/vyatta-show-dhclient.pl bin_sudo_users_SCRIPTS = scripts/vyatta-show-log bin_sudo_users_SCRIPTS += scripts/vyatta-show-log-all diff --git a/scripts/vyatta-show-dhclient.pl b/scripts/vyatta-show-dhclient.pl new file mode 100755 index 0000000..24a1a60 --- /dev/null +++ b/scripts/vyatta-show-dhclient.pl @@ -0,0 +1,158 @@ +#!/usr/bin/perl +# +# Module: vyatta-show-dhclient.pl +# +# **** License **** +# Version: VPL 1.0 +# +# The contents of this file are subject to the Vyatta Public License +# Version 1.0 ("License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://www.vyatta.com/vpl +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +# the License for the specific language governing rights and limitations +# under the License. +# +# This code was originally developed by Vyatta, Inc. +# Portions created by Vyatta are Copyright (C) 2007 Vyatta, Inc. +# All Rights Reserved. +# +# Author: Stig Thormodsrud +# Date: January 2008 +# Description: Script to display dhcp client lease info +# +# **** End License **** +# + +use lib "/opt/vyatta/share/perl5/"; +use POSIX; +use strict; +use warnings; + +my $lease_dir = '/var/lib/dhcp3'; + + +sub dhclient_get_lease_files { + my ($intf) = @_; + + # todo: fix sorting for ethX > 9 + my @lease_files; + my $LS; + if ($intf eq "all") { + my $file = "dhclient_eth"; + open($LS,"ls $lease_dir |grep '^$file.*\_lease\$' | sort |"); + } else { + my $file = "dhclient_$intf"; + open($LS,"ls $lease_dir |grep '^$file\_lease\$' | sort |"); + } + @lease_files = <$LS>; + close($LS); + foreach my $i (0 .. $#lease_files) { + $lease_files[$i] = "$lease_dir/$lease_files[$i]"; + } + chomp @lease_files; + return @lease_files; +} + +sub dhclient_parse_vars { + my ($file) = @_; + + my %var_list; + if ( !(-f $file)) { + return %var_list; + } + + open(FD, "<$file"); + my $line; + $line = <FD>; + chomp $line; + $var_list{'last_update'} = $line; + while ($line = <FD>) { + chomp $line; + if ($line =~ m/(\w+)=\'([a-zA-Z0-9.]+)\'/) { + my $var = $1; + my $val = $2; + $var_list{$var} = $val; + } + } + close(FD); + + return %var_list; +} + +sub dhclient_show_lease { + my ($file) = @_; + + my %var_list = dhclient_parse_vars($file); + + my $last_update = $var_list{'last_update'}; + my $reason = $var_list{'reason'}; + my $interface = $var_list{'interface'}; + my $new_expiry = $var_list{'new_expiry'}; + my $new_dhcp_lease_time = $var_list{'new_dhcp_lease_time'}; + my $new_ip_address = $var_list{'new_ip_address'}; + my $new_broadcast_address = $var_list{'new_broadcast_address'}; + my $new_subnet_mask = $var_list{'new_subnet_mask'}; + my $new_domain_name = $var_list{'new_domain_name'}; + my $new_network_number = $var_list{'new_network_number'}; + my $new_domain_name_servers = $var_list{'new_domain_name_servers'}; + my $new_routers = $var_list{'new_routers'}; + my $new_dhcp_server_identifier = $var_list{'new_dhcp_server_identifier'}; + my $new_dhcp_message_type = $var_list{'new_dhcp_message_type'}; + + my $old_ip_address = $var_list{'old_ip_address'}; + my $old_subnet_mask = $var_list{'old_subnet_mask'}; + my $old_domain_name = $var_list{'old_domain_name'}; + my $old_domain_name_servers = $var_list{'old_domain_name_servers'}; + my $old_routers = $var_list{'old_routers'}; + + my $new_expiry_str; + if (defined $new_expiry) { + $new_expiry_str = strftime("%a %b %d %R:%S %Z %Y", + localtime($new_expiry)); + } + + print "interface : $interface\n" if defined $interface; + if (defined $new_ip_address) { + print "ip address : $new_ip_address\t"; + my $ip_active = `ip addr list $interface`; + if ($ip_active =~ m/$new_ip_address/) { + print "[Active]\n"; + } else { + print "[Inactive]\n"; + } + } + print "subnet mask: $new_subnet_mask\n" if defined $new_subnet_mask; + print "domain name: $new_domain_name\n" if defined $new_domain_name; + print "router : $new_routers\n" if defined $new_routers; + print "name server: $new_domain_name_servers\n" if + defined $new_domain_name_servers; + print "dhcp server: $new_dhcp_server_identifier\n" if + defined $new_dhcp_server_identifier; + print "lease time : $new_dhcp_lease_time\n" if defined $new_dhcp_lease_time; + print "last update: $last_update\n" if defined $last_update; + print "expiry : $new_expiry_str\n" if defined $new_expiry_str; + print "reason : $reason\n" if defined $reason; + print "\n"; +} + + +# +# main +# + +my $intf = 'all'; +if ($#ARGV >= 0) { + $intf = $ARGV[0]; +} + +my @dhclient_files = dhclient_get_lease_files($intf); +foreach my $file (@dhclient_files) { + dhclient_show_lease($file); +} + +exit 0; + +#end of file diff --git a/templates/show/dhcp/client/interface/node.def b/templates/show/dhcp/client/interface/node.def new file mode 100644 index 0000000..458e0ec --- /dev/null +++ b/templates/show/dhcp/client/interface/node.def @@ -0,0 +1 @@ +help: Show dhcp client information for a given interface diff --git a/templates/show/dhcp/client/interface/node.tag/node.def b/templates/show/dhcp/client/interface/node.tag/node.def new file mode 100644 index 0000000..03fd1d9 --- /dev/null +++ b/templates/show/dhcp/client/interface/node.tag/node.def @@ -0,0 +1,5 @@ +help: Show dhcp client information for interface +allowed: local -a array ; + array=( /sys/class/net/eth* ) ; + echo -n ${array[@]##*/} +run: /opt/vyatta/bin/vyatta-show-dhclient.pl $5 diff --git a/templates/show/dhcp/client/node.def b/templates/show/dhcp/client/node.def new file mode 100644 index 0000000..e94212f --- /dev/null +++ b/templates/show/dhcp/client/node.def @@ -0,0 +1,2 @@ +help: Show dhcp client information +run: /opt/vyatta/bin/vyatta-show-dhclient.pl diff --git a/templates/show/vrrp/interface/node.tag/node.def b/templates/show/vrrp/interface/node.tag/node.def index 8556884..05fbede 100644 --- a/templates/show/vrrp/interface/node.tag/node.def +++ b/templates/show/vrrp/interface/node.tag/node.def @@ -2,4 +2,4 @@ help: Show VRRP information for interface allowed: local -a array ; array=( /sys/class/net/eth* ) ; echo -n ${array[@]##*/} -run: /opt/vyatta/sbin/vyatta-show-vrrp.pl $4 +run: /opt/vyatta/sbin/vyatta-show-vrrp.pl $5 |