OSPF-LSDB
view release on metacpan or search on metacpan
script/ospfview view on Meta::CPAN
or die "Open pipe to '@cmd' failed: $!";
print $fh $dot, "\n";
close($fh)
or die "Close pipe to '@cmd' failed: $!";
pause();
exit 0;
}
my($oldtime, $oldyaml);
until ($term) {
my $time = time();
if ($oldtime) {
my $sleeptime = $interval - ($time - $oldtime);
if ($sleeptime > 0) {
select(undef, undef, undef, $sleeptime);
}
}
$oldtime = time();
my $ospfclass = $ipv6 ? 'OSPF::LSDB::ospf6d' : 'OSPF::LSDB::ospfd';
my $ospf = $ospfclass->new(ssh => $ssh);
eval { $ospf->parse(); };
if ($@) {
warn $@;
kill SIGTERM, $pid if $pid;
next;
}
my $yamlospf = OSPF::LSDB::YAML->new($ospf);
if (defined $ipv6 && $ipv6 != $yamlospf->ipv6()) {
die "Address family does not match -4 and -6 options.\n";
}
my $yaml = $yamlospf->Dump();
$yaml =~ s/^\s+(age|sequence): .*$//mg;
next if ($oldyaml && $oldyaml eq $yaml && ! $gone) || $term;
if ($dump) {
print $yaml;
}
if ($diff && $oldyaml) {
my %args = (
SUFFIX => ".yaml",
TEMPLATE => "ospfview-XXXXXXXXXX",
TMPDIR => 1,
UNLINK => 1
);
my $old = File::Temp->new(%args);
print $old $oldyaml;
my $new = File::Temp->new(%args);
print $new $yaml;
system('diff', '-up', $old->filename, $new->filename);
}
$oldyaml = $yaml;
my $view = $class->new($ospf);
my $dot = $view->graph(%todo);
if ($todo{verbose}) {
my @errors = $view->get_errors;
print map { "$_\n" } @errors, "" if @errors;
}
my $chldsigset = POSIX::SigSet->new( &POSIX::SIGCHLD );
my $oldsigset = POSIX::SigSet->new();
sigprocmask(POSIX::SIG_BLOCK, $chldsigset, $oldsigset)
or die "Block sigprocmask failed: $!";
if ($pid) {
kill SIGTERM, $pid;
if (waitpid($pid, 0) > 0) {
die "'@cmd' failed: $?" if $? &&
((WIFEXITED($?) && WEXITSTATUS($?) != 0) ||
(WIFSIGNALED($?) && WTERMSIG($?) != SIGTERM));
undef $pid;
$gone = 1;
}
}
sigprocmask(POSIX::SIG_SETMASK, $oldsigset, undef)
or die "Setmask sigprocmask failed: $!";
$gone = 0;
$pid = open2(undef, $fh, @cmd)
or die "Open pipe to '@cmd' failed: $!";
print $fh $dot, "\n";
close($fh)
or die "Close pipe to '@cmd' failed: $!";
}
}
main();
( run in 1.808 second using v1.01-cache-2.11-cpan-71847e10f99 )