155163Sshin#!/usr/bin/perl 255163Sshin# 355163Sshin# $FreeBSD$ 455163Sshin# 555163Sshin$dump="/var/tmp/route6d_dump"; 655163Sshin$pidfile="/var/run/route6d.pid"; 755163Sshin 855163Sshinsystem("rm -f $dump"); 955163Sshin 1055163Sshinopen(FD, "< $pidfile") || die "Can not open $pidfile"; 1155163Sshin$_ = <FD>; 1255163Sshinchop; 1355163Sshinclose(FD); 1455163Sshinsystem("kill -INT $_"); 1555163Sshin 16122675Sumeopen(NS, "/usr/bin/netstat -r -n|") || die "Can not open netstat"; 1755163Sshinwhile (<NS>) { 1855163Sshin chop; 1955163Sshin next unless (/^3f/ || /^5f/); 2055163Sshin @f = split(/\s+/); 2155163Sshin $gw{$f[0]} = $f[1]; 2255163Sshin $int{$f[0]} = $f[3]; 2355163Sshin} 2455163Sshinclose(NS); 2555163Sshin 2655163Sshin$err=0; 2755163Sshinsleep(2); 2855163Sshinopen(FD, "< $dump") || die "Can not open $dump"; 2955163Sshinwhile (<FD>) { 3055163Sshin chop; 3155163Sshin next unless (/^ 3f/ || /^ 5f/); 3255163Sshin @f = split(/\s+/); 3355163Sshin $dst = $f[1]; 3455163Sshin $f[2] =~ /if\(\d:([a-z0-9]+)\)/; 3555163Sshin $intf = $1; 3655163Sshin $f[3] =~ /gw\(([a-z0-9:]+)\)/; 3755163Sshin $gateway = $1; 3855163Sshin $f[4] =~ /\[(\d+)\]/; 3955163Sshin $metric = $1; 4055163Sshin $f[5] =~ /age\((\d+)\)/; 4155163Sshin $age = $1; 4255163Sshin unless (defined($gw{$dst})) { 4355163Sshin print "NOT FOUND: $dst $intf $gateway $metric $age\n"; 4455163Sshin $err++; 4555163Sshin next; 4655163Sshin } 4755163Sshin if ($gw{$dst} ne $gateway && $gw{$dst} !~ /link#\d+/) { 4855163Sshin print "WRONG GW: $dst $intf $gateway $metric $age\n"; 4955163Sshin print "kernel gw: $gw{$dst}\n"; 5055163Sshin $err++; 5155163Sshin next; 5255163Sshin } 5355163Sshin if ($int{$dst} ne $intf) { 5455163Sshin print "WRONG IF: $dst $intf $gateway $metric $age\n"; 5555163Sshin print "kernel if: $int{$dst}\n"; 5655163Sshin $err++; 5755163Sshin next; 5855163Sshin } 5955163Sshin} 6055163Sshinclose(FD); 6155163Sshin 6255163Sshinif ($err == 0) { 6355163Sshin print "No error found\n"; 6455163Sshin} 65