diff options
Diffstat (limited to 'scripts/vyatta-show-nat.pl')
-rwxr-xr-x | scripts/vyatta-show-nat.pl | 89 |
1 files changed, 0 insertions, 89 deletions
diff --git a/scripts/vyatta-show-nat.pl b/scripts/vyatta-show-nat.pl deleted file mode 100755 index 0ae25af..0000000 --- a/scripts/vyatta-show-nat.pl +++ /dev/null @@ -1,89 +0,0 @@ -#!/usr/bin/perl - -use strict; -use lib "/opt/vyatta/share/perl5"; -use Vyatta::Config; -use Vyatta::NatRule; - -sub numerically { $a <=> $b; } - -exit 1 if ($#ARGV != 0); -my $xsl_file = $ARGV[0]; - -if (! -e $xsl_file) { - print "Invalid XSL file \"$xsl_file\"\n"; - exit 1; -} - -my %stats = ( - source => [ ], - destination => [ ], - ); -open(STATS, "sudo /sbin/iptables -t nat -L -vn |") or exit 1; -my $skey = ""; -my ($rule_tcp_pkts, $rule_tcp_bytes, $rule_pkts, $rule_bytes); -my $tcp_done = 0; -while (<STATS>) { - if (m/^Chain PREROUTING/) { - $skey = "destination"; - } elsif (m/^Chain POSTROUTING/) { - $skey = "source"; - } elsif (m/^Chain /) { - $skey = ""; - } - - if ($skey ne "" && (m/SNAT/ || m/DNAT/ || m/MASQUERADE/ || m/RETURN/ || m/NETMAP/)) { - m/^\s*(\d+[KMG]?)\s+(\d+[KMG]?)\s/; - $rule_pkts = $1; - $rule_bytes = $2; - if (m/tcp_udp/) { # protocol is tcp_udp, 2 rules in iptables for it - if ($tcp_done == 0) { - $rule_tcp_pkts = $rule_pkts; - $rule_tcp_bytes = $rule_bytes; - $tcp_done = 1; - next; - } else { - $rule_pkts += $rule_tcp_pkts; - $rule_bytes += $rule_tcp_bytes; - $tcp_done = 0; - } - } - push @{$stats{$skey}}, ($rule_pkts, $rule_bytes); - } -} -close STATS; - -open(RENDER, "| /opt/vyatta/sbin/render_xml $xsl_file") or exit 1; - -# begin -print RENDER "<opcommand name='natrules'><format type='row'>\n"; - -# get rid of the stats for PRE_SNAT_HOOK -splice @{$stats{'source'}}, 0, 2; - -my $config = new Vyatta::Config; -$config->setLevel("service nat rule"); -my @rules_pre = $config->listOrigNodes(); -my $rule; -my @rules = sort numerically @rules_pre; -for $rule (@rules) { - my $nrule = new Vyatta::NatRule; - $nrule->setupOrig("service nat rule $rule"); - next if defined $nrule->{_disable}; - my $ntype = $nrule->orig_type(); - print RENDER " <row>\n"; - print RENDER " <rule_num>$rule</rule_num>\n"; - my $pkts = shift @{$stats{$ntype}}; - my $bytes = shift @{$stats{$ntype}}; - print RENDER " <pkts>$pkts</pkts>\n"; - print RENDER " <bytes>$bytes</bytes>\n"; - $nrule->outputXml(*RENDER{IO}); - print RENDER " </row>\n"; -} - -# end -print RENDER "</format></opcommand>\n"; - -close RENDER; -exit 0; - |