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