17d56d374SYoshinobu Inoue#!/usr/bin/perl 27d56d374SYoshinobu Inoue# 37d56d374SYoshinobu Inoue# $FreeBSD$ 47d56d374SYoshinobu Inoue# 57d56d374SYoshinobu Inoue$dump="/var/tmp/route6d_dump"; 67d56d374SYoshinobu Inoue$pidfile="/var/run/route6d.pid"; 77d56d374SYoshinobu Inoue 87d56d374SYoshinobu Inouesystem("rm -f $dump"); 97d56d374SYoshinobu Inoue 107d56d374SYoshinobu Inoueopen(FD, "< $pidfile") || die "Can not open $pidfile"; 117d56d374SYoshinobu Inoue$_ = <FD>; 127d56d374SYoshinobu Inouechop; 137d56d374SYoshinobu Inoueclose(FD); 147d56d374SYoshinobu Inouesystem("kill -INT $_"); 157d56d374SYoshinobu Inoue 166d7256d9SHajimu UMEMOTOopen(NS, "/usr/bin/netstat -r -n|") || die "Can not open netstat"; 177d56d374SYoshinobu Inouewhile (<NS>) { 187d56d374SYoshinobu Inoue chop; 197d56d374SYoshinobu Inoue next unless (/^3f/ || /^5f/); 207d56d374SYoshinobu Inoue @f = split(/\s+/); 217d56d374SYoshinobu Inoue $gw{$f[0]} = $f[1]; 227d56d374SYoshinobu Inoue $int{$f[0]} = $f[3]; 237d56d374SYoshinobu Inoue} 247d56d374SYoshinobu Inoueclose(NS); 257d56d374SYoshinobu Inoue 267d56d374SYoshinobu Inoue$err=0; 277d56d374SYoshinobu Inouesleep(2); 287d56d374SYoshinobu Inoueopen(FD, "< $dump") || die "Can not open $dump"; 297d56d374SYoshinobu Inouewhile (<FD>) { 307d56d374SYoshinobu Inoue chop; 317d56d374SYoshinobu Inoue next unless (/^ 3f/ || /^ 5f/); 327d56d374SYoshinobu Inoue @f = split(/\s+/); 337d56d374SYoshinobu Inoue $dst = $f[1]; 347d56d374SYoshinobu Inoue $f[2] =~ /if\(\d:([a-z0-9]+)\)/; 357d56d374SYoshinobu Inoue $intf = $1; 367d56d374SYoshinobu Inoue $f[3] =~ /gw\(([a-z0-9:]+)\)/; 377d56d374SYoshinobu Inoue $gateway = $1; 387d56d374SYoshinobu Inoue $f[4] =~ /\[(\d+)\]/; 397d56d374SYoshinobu Inoue $metric = $1; 407d56d374SYoshinobu Inoue $f[5] =~ /age\((\d+)\)/; 417d56d374SYoshinobu Inoue $age = $1; 427d56d374SYoshinobu Inoue unless (defined($gw{$dst})) { 437d56d374SYoshinobu Inoue print "NOT FOUND: $dst $intf $gateway $metric $age\n"; 447d56d374SYoshinobu Inoue $err++; 457d56d374SYoshinobu Inoue next; 467d56d374SYoshinobu Inoue } 477d56d374SYoshinobu Inoue if ($gw{$dst} ne $gateway && $gw{$dst} !~ /link#\d+/) { 487d56d374SYoshinobu Inoue print "WRONG GW: $dst $intf $gateway $metric $age\n"; 497d56d374SYoshinobu Inoue print "kernel gw: $gw{$dst}\n"; 507d56d374SYoshinobu Inoue $err++; 517d56d374SYoshinobu Inoue next; 527d56d374SYoshinobu Inoue } 537d56d374SYoshinobu Inoue if ($int{$dst} ne $intf) { 547d56d374SYoshinobu Inoue print "WRONG IF: $dst $intf $gateway $metric $age\n"; 557d56d374SYoshinobu Inoue print "kernel if: $int{$dst}\n"; 567d56d374SYoshinobu Inoue $err++; 577d56d374SYoshinobu Inoue next; 587d56d374SYoshinobu Inoue } 597d56d374SYoshinobu Inoue} 607d56d374SYoshinobu Inoueclose(FD); 617d56d374SYoshinobu Inoue 627d56d374SYoshinobu Inoueif ($err == 0) { 637d56d374SYoshinobu Inoue print "No error found\n"; 647d56d374SYoshinobu Inoue} 65