summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStig Thormodsrud <stig@vyatta.com>2008-01-24 16:52:19 -0800
committerStig Thormodsrud <stig@vyatta.com>2008-01-24 16:52:19 -0800
commit0e701835a01303a2044a81b82310c872b78ce5d0 (patch)
treead910da2b3ddb61548de647036cf5008b6d925b3
parent438186703df138f952422eb772c1753cd8c773f0 (diff)
downloadvyatta-op-0e701835a01303a2044a81b82310c872b78ce5d0.tar.gz
vyatta-op-0e701835a01303a2044a81b82310c872b78ce5d0.zip
add 'show dhcp client leases'
-rw-r--r--Makefile.am1
-rwxr-xr-xscripts/vyatta-show-dhclient.pl158
-rw-r--r--templates/show/dhcp/client/interface/node.def1
-rw-r--r--templates/show/dhcp/client/interface/node.tag/node.def5
-rw-r--r--templates/show/dhcp/client/node.def2
-rw-r--r--templates/show/vrrp/interface/node.tag/node.def2
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