summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am1
-rw-r--r--scripts/vyatta-op-dns-forwarding.pl117
-rw-r--r--templates/clear/dns/forwarding/cache/node.def2
-rw-r--r--templates/show/dns/forwarding/nameservers/node.def2
-rw-r--r--templates/show/dns/forwarding/node.def1
-rw-r--r--templates/show/dns/forwarding/statistics/node.def8
-rw-r--r--templates/show/dns/node.def1
7 files changed, 131 insertions, 1 deletions
diff --git a/Makefile.am b/Makefile.am
index 7499a22..1063b78 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -21,6 +21,7 @@ bin_SCRIPTS += scripts/vyatta-tshark-interface-port.pl
bin_sudo_users_SCRIPTS = scripts/vyatta-identify-interface.pl
bin_sudo_users_SCRIPTS += scripts/vyatta-delete-log-file.sh
bin_sudo_users_SCRIPTS += scripts/vyatta-reboot.pl
+bin_sudo_users_SCRIPTS += scripts/vyatta-op-dns-forwarding.pl
cpiop = find . ! -regex '\(.*~\|.*\.bak\|.*\.swp\|.*\#.*\#\)' -print0 | \
cpio -0pd
diff --git a/scripts/vyatta-op-dns-forwarding.pl b/scripts/vyatta-op-dns-forwarding.pl
new file mode 100644
index 0000000..d23ae7f
--- /dev/null
+++ b/scripts/vyatta-op-dns-forwarding.pl
@@ -0,0 +1,117 @@
+#!/usr/bin/perl
+#
+# Module: vyatta-op-dns-forwarding.pl
+#
+# **** License ****
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# This code was originally developed by Vyatta, Inc.
+# Portions created by Vyatta are Copyright (C) 2008 Vyatta, Inc.
+# All Rights Reserved.
+#
+# Author: Mohit Mehta
+# Date: August 2008
+# Description: Script to execute op-mode commands for DNS forwarding
+#
+# **** End License ****
+#
+
+use lib "/opt/vyatta/share/perl5/";
+use Getopt::Long;
+use VyattaConfig;
+use strict;
+use warnings;
+
+my $show_stats_output="";
+my $show_nameservers_output="";
+my $dnsmasq_log='/var/log/dnsmasq.log';
+
+sub get_cache_stats {
+ my ($cache_size, $queries_forwarded, $queries_answered_locally, $entries_inserted, $entries_removed);
+
+ my $grepped_line = `grep 'cache size' $dnsmasq_log`;
+ my @split_line = split(/\s+/, $grepped_line);
+ my @temp_split = split(/,/, $split_line[6]);
+ $cache_size = $temp_split[0];
+ @temp_split = split(/\//, $split_line[7]);
+ $entries_removed = $temp_split[0];
+ $entries_inserted = $temp_split[1];
+
+ $grepped_line = `grep 'queries forwarded' $dnsmasq_log`;
+ @split_line = split(/\s+/, $grepped_line);
+ @temp_split = split(/,/, $split_line[6]);
+ $queries_forwarded = $temp_split[0];
+ $queries_answered_locally = $split_line[10];
+
+ $show_stats_output .= "----------------\n";
+ $show_stats_output .= "Cache statistics\n";
+ $show_stats_output .= "----------------\n";
+ $show_stats_output .= "Cache size: $cache_size\n";
+ $show_stats_output .= "Queries forwarded: $queries_forwarded\n";
+ $show_stats_output .= "Queries answered locally: $queries_answered_locally\n";
+ $show_stats_output .= "Total DNS entries inserted into cache: $entries_inserted\n";
+ $show_stats_output .= "DNS entries removed from cache before expiry: $entries_removed\n";
+
+}
+
+sub get_nameserver_stats {
+
+ $show_stats_output .= "\n---------------------\n";
+ $show_stats_output .= "Nameserver statistics\n";
+ $show_stats_output .= "---------------------\n";
+
+ my @grepped_lines = `grep 'server' $dnsmasq_log`;
+
+ foreach my $lines (@grepped_lines) {
+ my @each_line = split(/\s+/, $lines);
+ my $nameserver_word = $each_line[5];
+ my @nameserver_split = split(/#/, $nameserver_word);
+ my $nameserver = $nameserver_split[0];
+ my $queries_sent_word = $each_line[8];
+ my @queries_sent_split = split(/,/, $queries_sent_word);
+ my $queries_sent = $queries_sent_split[0];
+ my $queries_retried_failed = $each_line[12];
+
+ $show_stats_output .= "Server: $nameserver\nQueries sent: $queries_sent\nQueries retried or failed: $queries_retried_failed\n\n";
+
+ }
+}
+
+sub print_stats {
+ print $show_stats_output;
+}
+
+#
+# main
+#
+my ($clear_cache, $show_statistics, $show_nameservers);
+
+GetOptions("clear-cache!" => \$clear_cache,
+ "show-statistics!" => \$show_statistics,
+ "show-nameservers!" => \$show_nameservers);
+
+if (defined $clear_cache) {
+ system("kill -1 `pidof dnsmasq`");
+}
+
+if (defined $show_statistics) {
+ system("echo > /var/log/dnsmasq.log; kill -10 `pidof dnsmasq`");
+ get_cache_stats;
+ get_nameserver_stats;
+ print_stats;
+}
+
+if (defined $show_nameservers) {
+
+}
+
+exit 0;
+
+# end of file
diff --git a/templates/clear/dns/forwarding/cache/node.def b/templates/clear/dns/forwarding/cache/node.def
index 8211e12..8a5f8cc 100644
--- a/templates/clear/dns/forwarding/cache/node.def
+++ b/templates/clear/dns/forwarding/cache/node.def
@@ -2,7 +2,7 @@ help: Clear DNS forwarding cache
run:
if ps ax | grep dnsmasq | grep -v grep > /dev/null
then
- kill -1 `pidof dnsmasq`
+ sudo /opt/vyatta/bin/sudo-users/vyatta-op-dns-forwarding.pl --clear-cache
else
echo "DNS forwarding not configured"
fi
diff --git a/templates/show/dns/forwarding/nameservers/node.def b/templates/show/dns/forwarding/nameservers/node.def
new file mode 100644
index 0000000..0609f6a
--- /dev/null
+++ b/templates/show/dns/forwarding/nameservers/node.def
@@ -0,0 +1,2 @@
+help: Show DNS forwarding nameservers information
+run: sudo /opt/vyatta/bin/sudo-users/vyatta-op-dns-forwarding.pl --show-nameservers
diff --git a/templates/show/dns/forwarding/node.def b/templates/show/dns/forwarding/node.def
new file mode 100644
index 0000000..eb9ce4b
--- /dev/null
+++ b/templates/show/dns/forwarding/node.def
@@ -0,0 +1 @@
+help: Show DNS forwarding information
diff --git a/templates/show/dns/forwarding/statistics/node.def b/templates/show/dns/forwarding/statistics/node.def
new file mode 100644
index 0000000..a73b49d
--- /dev/null
+++ b/templates/show/dns/forwarding/statistics/node.def
@@ -0,0 +1,8 @@
+help: Show DNS forwarding statistics
+run:
+ if ps ax | grep dnsmasq | grep -v grep > /dev/null
+ then
+ sudo /opt/vyatta/bin/sudo-users/vyatta-op-dns-forwarding.pl --show-statistics
+ else
+ echo "DNS forwarding not configured"
+ fi
diff --git a/templates/show/dns/node.def b/templates/show/dns/node.def
new file mode 100644
index 0000000..45d0e4f
--- /dev/null
+++ b/templates/show/dns/node.def
@@ -0,0 +1 @@
+help: Show Domain Name Server (DNS) information