diff options
author | Mohit Mehta <mohit.mehta@vyatta.com> | 2009-08-05 12:24:11 -0700 |
---|---|---|
committer | Mohit Mehta <mohit.mehta@vyatta.com> | 2009-08-05 12:24:11 -0700 |
commit | 4d56db8428fd770c86d80f77511814e2aff37c5e (patch) | |
tree | fba0883a86032086a448e757fada846dd5ce4808 /scripts | |
parent | 1dfc6aa94e31a5ee6c420d184ec83dfd463bf615 (diff) | |
download | vyatta-nat-4d56db8428fd770c86d80f77511814e2aff37c5e.tar.gz vyatta-nat-4d56db8428fd770c86d80f77511814e2aff37c5e.zip |
* Fix Bug 1445 - Allow setting protocols tcp and udp in one rule
NAT rules can be defined with 'tcp_udp' as a valid value for protocol
* Fix Bug 4780 - DNAT rule to translate port fails
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/vyatta-show-nat.pl | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/scripts/vyatta-show-nat.pl b/scripts/vyatta-show-nat.pl index 574c995..0ae25af 100755 --- a/scripts/vyatta-show-nat.pl +++ b/scripts/vyatta-show-nat.pl @@ -21,6 +21,8 @@ my %stats = ( ); 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"; @@ -32,7 +34,21 @@ while (<STATS>) { if ($skey ne "" && (m/SNAT/ || m/DNAT/ || m/MASQUERADE/ || m/RETURN/ || m/NETMAP/)) { m/^\s*(\d+[KMG]?)\s+(\d+[KMG]?)\s/; - push @{$stats{$skey}}, ($1, $2); + $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; |