#!%%PATHPERLBIN%% #### ASpath-tree v.4.2 - Released on Thu APR 17 2003, h.16:58:12 #### File: update-rtree Last modified on Tue MAR 18 2003, h.22:59:48 # Configuration File my $CONFIGFILE = "%%PREFIX%%/etc/ASpath-tree.config"; # Global variables use vars qw ($HOMEDIR $RSHDIR $ROUTER $LOCAL $ROUTERADDR $ROUTERUSER $ROUTERUSERPASS $CONTACTNAME $CONTACTMAIL $SITENAME $SITEPICTURE $HTMLDIR $WHOISLINK $QUIET $DEBUG $FILTEROUT $RIPEWHOISCLIENT $MORETREES); use vars qw ($DATADIR $ROOTPICTURE $LIB $ICONS $WARNINGTIME $HISTORYPERIOD $FLAG_COLLECT $LONGDATE $CURRENTTIME $LASTRUN); use vars qw ($SIXBONEDB $IPV6PREFIXTABLE $PTLA_FILE $HISTORYFILE $LASTRUNFILE $OLDASPATHSFILE $OLDDATEFILE $OLDBBASPATHSFILE $OLDBBDATEFILE $PTLASHISTORYDIR $OTHERHISTORYDIR $PREFIXESGLOBALHISTORY $GLOBALHISTORYDIR $PREFIXESGLOBALHIST24H $GLOBALPTLAHISTDIR $GLOBALOTHERHISTDIR $TODOBGPCOLLECT $HTMLDIR_LOCAL $OUTPUTCOMPLETE $OUTPUTBB $OUTPUTIANA $OUTPUTCOMPLETECHANGES $OUTPUTIANACHANGES $DETAILDIR $DETAILDIRCO $DETAILDIRBB $DETAILDIRIANA $HISTORYHTMLDIR $CHANGESDIR $ICONSDIR $LINKDIR $LINKDIRBB $LINKDIRIANA $INDEXPAGE $PEERLASTALIVEFILE $VER $CHANGESFLAG $LOGDIR $STATUSCODES $BGPTABLEFILE $SUMMINFOGLOBALHIST24H $SUMMINFOGLOBALHISTORY $RIRSDB $ASTABLE $ASFORCETABLE $STLA_FILE $RIPEWHOISLINK $ROUTERTABLE); $QUIET = 0; $DEBUG = 0; my $usage = <] no input parameters: basic ASpath-tree behaviour -u update local information bases with whois queries over the Internet -r recover previously used local information bases -d enable printing and logging for debugging -f Configuration file (default is /etc/ASpath-tree.config) -h help in line EndOfHelpinline my $input = ''; my $message = ''; use Getopt::Long; my $res = GetOptions(\%opt, "d", "u", "r", "h", "help", "f=s", ); if (@ARGV) {$message = "ERROR: unexpected input parameter(s)!\n"; $input = 3} elsif ($res) { if (keys(%opt)) { if (exists $opt{help} || exists $opt{h}) {$input = 3} if (exists $opt{f}) { if (-e $opt{f}) {$CONFIGFILE = $opt{f}} else {$message = "ERROR: file \"$opt{f}\" does not exist!\n"; $input = 3} } if (exists $opt{d}) {$QUIET = 1; $DEBUG = 1} if (exists $opt{u} && exists ($opt{r})) {$input = 3} elsif (exists $opt{u}) {$input = 1} elsif (exists $opt{r}) {$input = 2} } } else {$message = "ERROR: unexpected input parameter(s)!\n"; $input = 3} die("\nASpath-tree\n$message\n$usage") if ($input == 3); my $conf_log = &set_env($CONFIGFILE); my $text = 'Requested actions: '; if (!$input) {$text .= "default\n"} elsif ($input == 1) {$text .= "update dbs from the Internet\n"} elsif ($input == 2) {$text .= "recover db info\n"} require ("$LIB/ASmain.pl"); &set_runtime; &log_it("ASpath-tree $VER - $LONGDATE\n",1); &log_it("$text\nENVIRONMENT\n$conf_log"."end ENVIRONMENT\n"); if (!$input) {&asmain} elsif ($input == 1 || $input == 2) {&update_localdbs_tables($input)} my $etime = time - $^T; &log_it("ASpath-tree $VER - elapsed time: $etime seconds\n",1); exit(0); # Routine to read the configuration file and configure ASpath-tree environment sub set_env { my ($file) = @_; open (FILECONF, "< $file") || die "Cannot open $file: $!\n"; my @file_cont = ; close (FILECONF); my $logtext = ''; ## Reading configuration file... foreach $line (@file_cont) { chomp($line); while ((length($line)>0) && grep(/\s+/,substr($line,(length($line)-1),1))) { $line = substr($line,0,length($line)-1); } if ($line =~ /^\s*HOMEDIR\s*=\s*(.*)/) {$HOMEDIR = $1} if ($line =~ /^\s*RSHDIR\s*=\s*(.*)/) {$RSHDIR = $1} if ($line =~ /^\s*ROUTER\s*=\s*(.*)/) {$ROUTER = uc($1)} if ($line =~ /^\s*LOCAL\s*=\s*(.*)/) {$LOCAL = $1} if ($line =~ /^\s*ROUTERADDR\s*=\s*(.*)/) {$ROUTERADDR = $1} if ($line =~ /^\s*ROUTERUSER\s*=\s*(.*)/) {$ROUTERUSER = $1} if ($line =~ /^\s*ROUTERUSERPASS\s*=\s*(.*)/) {$ROUTERUSERPASS = $1} if ($line =~ /^\s*CONTACTNAME\s*=\s*(.*)/) {$CONTACTNAME = $1} if ($line =~ /^\s*CONTACTMAIL\s*=\s*(.*)/) {$CONTACTMAIL = $1} if ($line =~ /^\s*SITENAME\s*=\s*(.*)/) {$SITENAME = $1} if ($line =~ /^\s*SITEPICTURE\s*=\s*(.*)/) {$SITEPICTURE = $1} if ($line =~ /^\s*HTMLDIR\s*=\s*(.*)/) {$HTMLDIR = $1} if ($line =~ /^\s*WHOISLINK\s*=\s*(.*)/) {$WHOISLINK = $1} if ($line =~ /^\s*CHANGESFLAG\s*=\s*(.*)/) {$CHANGESFLAG = $1} if ($line =~ /^\s*FILTEROUT\s*=\s*(.*)/) {$FILTEROUT = $1} if ($line =~ /^\s*RIPEWHOISCLIENT\s*=\s*(.*)/) {$RIPEWHOISCLIENT = $1} if ($line =~ /^\s*MORETREES\s*=\s*(.*)/) {$MORETREES = $1} } # DEFAULT values setting...(if not explicitely declared) and ERROR checking ... die "ERROR in configuration file: parameter HOMEDIR not set!\n" unless ($HOMEDIR); die "ERROR in configuration file: parameter HOMEDIR not correct!\n" unless (-d "$HOMEDIR"); $LOGDIR = "$HOMEDIR/log"; unless (-e "$LOGDIR") {mkdir("$LOGDIR", 0775)}; if ($DEBUG) {open(LOGFILE, "> $LOGDIR/runlog.txt"); close(LOGFILE)} &log_it_and_die("ERROR in configuration file: parameter SITENAME not set!") unless ($SITENAME); &log_it_and_die("ERROR in configuration file: parameter ROUTER = \"$ROUTER\" not acceptable!") if ($ROUTER && !grep(/^$ROUTER$/, ("CISCO", "JUNIPER" , "ZEBRA", "ZEBRA93"))); &log_it_and_die("ERROR in configuration file: LOCAL cannot be set for ROUTER = $ROUTER!") if ($LOCAL && $ROUTER !~ /^ZEBRA.*/i); unless ($LOCAL) { &log_it_and_die("ERROR in configuration file: parameter RSHDIR not set!") unless ($RSHDIR); &log_it_and_die("ERROR in configuration file: parameter ROUTERADDR not set!") unless ($ROUTERADDR); &log_it_and_die("ERROR in configuration file: parameter ROUTERUSER not set!") unless ($ROUTERUSER); } unless ($WHOISLINK) {$WHOISLINK = "http://whois.6bone.net/cgi-bin/whois"} unless ($DATADIR) {$DATADIR = "$HOMEDIR/data"} unless ($LIB) {$LIB = "%%PREFIX%%/libexec/aspathtree"} unless ($FILTEROUT) {$FILTEROUT = 0} $ICONS = "./icons"; $WARNINGTIME = 5; $HISTORYPERIOD = 24; $RIPEWHOISLINK = "http://www.ripe.net/perl/whois?form_type=simple&full_query_string=&searchtext=-s+ARIN%2CAPNIC%2CRIPE"; $VER = "v.4.2"; $logtext .= " Configuration file: $file.\n"; $logtext .= " HOMEDIR = $HOMEDIR\n"; $logtext .= " Parser = "; if ($ROUTER) {$logtext .= "\"$ROUTER\"\n"} else {$logtext .= "default (CISCO)\n"} $logtext .= " FILTER = "; if ($FILTEROUT == 0) {$logtext .= "default "} elsif ($FILTEROUT == 1) {$logtext .= "All suppressed routes "} elsif ($FILTEROUT == 2) {$logtext .= "Suppressed routes learned through iBGP "} $logtext .= "(FILTEROUT = $FILTEROUT)\n"; $logtext .= " CHANGES pages = "; if ($CHANGESFLAG) {$logtext .= "yes\n"} else {$logtext .= "no\n"} $logtext .= " pTLAs & 2001 trees = "; if ($MORETREES) {$logtext .= "yes\n"} else {$logtext .= "no\n"} $logtext .= "\n WARNINGTIME = \"$WARNINGTIME\"\n"; $logtext .= " HISTORYPERIOD = \"$HISTORYPERIOD\"\n"; $logtext .= " WHOISLINK = \"$WHOISLINK\"\n"; $logtext .= "\n LIBDIR = \"$LIB\"\n"; # Setting derived parameters and creating directories if required... $SIXBONEDB = "$DATADIR/6bone.db"; $RIRSDB = "$DATADIR/rirs.db"; $IPV6PREFIXTABLE = "$DATADIR/ipv6-prefix.table"; $PTLA_FILE = "$DATADIR/ptla-prefix.table"; $STLA_FILE = "$DATADIR/stla-prefix.table"; $ASTABLE = "$DATADIR/as.table"; $ASFORCETABLE = "$DATADIR/force.as.name"; $logtext .= "\n DATADIR = \"$DATADIR\"\n"; $logtext .= " SIXBONEDB = \"$SIXBONEDB\" "; if (-e $SIXBONEDB) {$logtext .= "(ok)\n"} else {$logtext .= "(no)\n"} $logtext .= " RIRSDB = \"$RIRSDB\" "; if (-e $RIRSDB) {$logtext .= "(ok)\n"} else {$logtext .= "(no)\n"} $logtext .= " ASFORCETABLE = \"$ASFORCETABLE\" "; if (-e $ASFORCETABLE) {$logtext .= "(ok)\n"} else {$logtext .= "(no)\n"} $logtext .= " IPV6PREFIXTABLE = \"$IPV6PREFIXTABLE\" "; if (-e $IPV6PREFIXTABLE) {$logtext .= "(ok)\n"} else {$logtext .= "(no)\n"} $logtext .= " PTLA_FILE = \"$PTLA_FILE\" "; if (-e $PTLA_FILE) {$logtext .= "(ok)\n"} else {$logtext .= "(no)\n"} $logtext .= " STLA_FILE = \"$STLA_FILE\" "; if (-e $STLA_FILE) {$logtext .= "(ok)\n"} else {$logtext .= "(no)\n"} $logtext .= " ASTABLE = \"$ASTABLE\" "; if (-e $ASTABLE) {$logtext .= "(ok)\n"} else {$logtext .= "(no)\n"} $HISTORYFILE = "$HOMEDIR/history/allprefixes.txt"; $PEERLASTALIVEFILE = "$HOMEDIR/history/last_alive_peers.txt"; $LASTRUNFILE = "$HOMEDIR/history/lastrun.txt"; $PTLASHISTORYDIR = "$HOMEDIR/history/ptlas"; $OTHERHISTORYDIR = "$HOMEDIR/history/other"; $OLDASPATHSFILE = "$HOMEDIR/history/completetree/aspaths.txt"; $OLDDATEFILE = "$HOMEDIR/history/completetree/lastchangedate.txt"; $logtext .= " HISTORY dir = \"$HOMEDIR/history\"\n"; $logtext .= " HISTORYFILE = \"$HISTORYFILE\"\n"; $logtext .= " PEERLASTALIVEFILE = \"$PEERLASTALIVEFILE\"\n"; $logtext .= " LASTRUNFILE = \"$LASTRUNFILE\"\n"; $logtext .= " PTLASHISTORYDIR = \"$PTLASHISTORYDIR\" "; if (-e "$PTLASHISTORYDIR") {$logtext .= "(ok)\n"} else {mkdir("$PTLASHISTORYDIR", 0775); $logtext .= "(created)\n"} $logtext .= " OTHERHISTORYDIR = \"$OTHERHISTORYDIR\" "; if (-e "$OTHERHISTORYDIR") {$logtext .= "(ok)\n"} else {mkdir("$OTHERHISTORYDIR", 0775); $logtext .= "(created)\n"} $logtext .= " Complete tree dir = \"$HOMEDIR/history/completetree\" "; if (-e "$HOMEDIR/history/completetree") {$logtext .= "(ok)\n"} else {mkdir("$HOMEDIR/history/completetree", 0775); $logtext .= "(created)\n"} $logtext .= " OLDASPATHSFILE = \"$OLDASPATHSFILE\"\n"; $logtext .= " OLDDATEFILE = \"$OLDDATEFILE\"\n"; if ($MORETREES) { $OLDOTHASPATHSFILE = "$HOMEDIR/history/othertree/aspaths.txt"; $OLDOTHDATEFILE = "$HOMEDIR/history/othertree/lastchangedate.txt"; $OLDBBASPATHSFILE = "$HOMEDIR/history/bbtree/bbaspaths.txt"; $OLDBBDATEFILE = "$HOMEDIR/history/bbtree/lastchangedate.txt"; $logtext .= " BB tree dir = \"$HOMEDIR/history/bbtree\" "; if (-e "$HOMEDIR/history/bbtree") {$logtext .= "(ok)\n"} else {mkdir("$HOMEDIR/history/bbtree", 0775); $logtext .= "(created)\n"} $logtext .= " OLDBBASPATHSFILE = \"$OLDBBASPATHSFILE\"\n"; $logtext .= " OLDBBDATEFILE = \"$OLDBBDATEFILE\"\n"; $logtext .= " 2001 tree dir = \"$HOMEDIR/history/othertree\" "; if (-e "$HOMEDIR/history/othertree") {$logtext .= "(ok)\n"} else {mkdir("$HOMEDIR/history/othertree", 0775); $logtext .= "(created)\n"} $logtext .= " OLDOTHASPATHSFILE = \"$OLDOTHASPATHSFILE\"\n"; $logtext .= " OLDOTHDATEFILE = \"$OLDOTHDATEFILE\"\n"; } else { if (-e "$HOMEDIR/history/bbtree") {system "rm -rf $HOMEDIR/history/bbtree"} if (-e "$HOMEDIR/history/othertree") {system "rm -rf $HOMEDIR/history/othertree"} } $HTMLDIR_LOCAL = "$HOMEDIR/htdocs"; unless ($HTMLDIR) {$HTMLDIR = $HTMLDIR_LOCAL} $logtext .= "\n HTMLDIR_LOCAL = \"$HTMLDIR_LOCAL\"\n"; $OUTPUTCOMPLETE = "$HTMLDIR_LOCAL/bgp-page-complete.html"; $logtext .= " OUTPUTCOMPLETE = \"$OUTPUTCOMPLETE\"\n"; $OUTPUTBB = "$HTMLDIR_LOCAL/bgp-page-backbone.html"; $OUTPUTIANA = "$HTMLDIR_LOCAL/bgp-page-otherIANA.html"; if ($MORETREES) { $logtext .= " OUTPUTBB = \"$OUTPUTBB\"\n"; $logtext .= " OUTPUTIANA = \"$OUTPUTIANA\"\n"; } $BGPTABLEFILE = "$HTMLDIR_LOCAL/bgp-table-snapshot.txt"; $logtext .= " BGPTABLEFILE = \"$BGPTABLEFILE\"\n"; if ($CHANGESFLAG) { $CHANGESDIR = "$HTMLDIR_LOCAL/changes"; $logtext .= " CHANGESDIR = \"$CHANGESDIR\" "; if (-e "$CHANGESDIR") {$logtext .= "(ok)\n"} else {mkdir("$CHANGESDIR", 0775); $logtext .= "(created)\n"} $OUTPUTCOMPLETECHANGES = "$CHANGESDIR/bgp-page-complete-changes.html"; $logtext .= " OUTPUTCOMPLETECHANGES = \"$OUTPUTCOMPLETECHANGES\"\n"; $OUTPUTBBCHANGES = "$CHANGESDIR/bgp-page-backbone-changes.html"; $OUTPUTIANACHANGES = "$CHANGESDIR/bgp-page-otherIANAchanges.html"; if ($MORETREES) { $logtext .= " OUTPUTBBCHANGES = \"$OUTPUTBBCHANGES\"\n"; $logtext .= " OUTPUTIANACHANGES = \"$OUTPUTIANACHANGES\"\n"; } } elsif (-e "$CHANGESDIR") {system "rm -rf $CHANGESDIR"} $DETAILDIR = "$HTMLDIR_LOCAL/details"; $DETAILDIRCO = "$DETAILDIR/complete"; $logtext .= " DETAILDIR = \"$DETAILDIR\" "; if (-e "$DETAILDIR") {$logtext .= "(ok)\n"} else {mkdir("$DETAILDIR", 0775); $logtext .= "(created)\n"} $logtext .= " DETAILDIRCO = \"$DETAILDIRCO\" "; if (-e "$DETAILDIRCO") {$logtext .= "(ok)\n"} else {mkdir("$DETAILDIRCO", 0775); $logtext .= "(created)\n"} if ($MORETREES) { $DETAILDIRBB = "$DETAILDIR/backbone"; $DETAILDIRIANA = "$DETAILDIR/otherIANA"; $logtext .= " DETAILDIRBB = \"$DETAILDIRBB\" "; if (-e "$DETAILDIRBB") {$logtext .= "(ok)\n"} else {mkdir("$DETAILDIRBB", 0775); $logtext .= "(created)\n"} $logtext .= " DETAILDIRIANA = \"$DETAILDIRIANA\" "; if (-e "$DETAILDIRIANA") {$logtext .= "(ok)\n"} else {mkdir("$DETAILDIRIANA", 0775); $logtext .= "(created)\n"} } else { if (-e "$DETAILDIRBB") {system "rm -rf $DETAILDIRBB"} if (-e "$DETAILDIRIANA") {system "rm -rf $DETAILDIRIANA"} } $HISTORYHTMLDIR = "$HTMLDIR_LOCAL/24h_history"; $logtext .= " HISTORYHTMLDIR = \"$HISTORYHTMLDIR\" "; if (-e "$HISTORYHTMLDIR") {$logtext .= "(ok)\n"} else {mkdir("$HISTORYHTMLDIR", 0775); $logtext .= "(created)\n"} $ICONSDIR = "$HTMLDIR_LOCAL/icons"; $logtext .= " ICONSDIR = \"$ICONSDIR\"\n"; $logtext .= " Trash dir = \"$HTMLDIR_LOCAL/trash\" "; if (-e "$HTMLDIR_LOCAL/trash") {system "rm -rf $HTMLDIR_LOCAL/trash/*"; $logtext .= "(ok, empty)\n"} else {mkdir("$HTMLDIR_LOCAL/trash", 0775); $logtext .= "(created)\n"} $logtext .= "\n HTMLDIR = \"$HTMLDIR\"\n"; if (-d $HTMLDIR) { unless (-e "$HTMLDIR/details") {mkdir("$HTMLDIR/details", 0775); $logtext .= " $HTMLDIR/details created.\n"} unless (-e "$HTMLDIR/details/complete") {mkdir("$HTMLDIR/details/complete", 0775); $logtext .= " $HTMLDIR/details/complete created.\n"} if ($MORETREES) { unless (-e "$HTMLDIR/details/backbone") {mkdir("$HTMLDIR/details/backbone", 0775); $logtext .= " $HTMLDIR/details/backbone created.\n"} unless (-e "$HTMLDIR/details/otherIANA") {mkdir("$HTMLDIR/details/otherIANA", 0775); $logtext .= " $HTMLDIR/details/otherIANA created.\n"} } else { if (-e "$HTMLDIR/details/backbone") {system "rm -rf $HTMLDIR/details/backbone"} if (-e "$HTMLDIR/details/otherIANA") {system "rm -rf $HTMLDIR/details/otherIANA"} } unless (-e "$HTMLDIR/24h_history") {mkdir("$HTMLDIR/24h_history", 0775); $logtext .= " $HTMLDIR/24h_history created.\n"} if ($CHANGESFLAG) { unless (-e "$HTMLDIR/changes") {mkdir("$HTMLDIR/changes", 0775); $logtext .= " $HTMLDIR/changes created.\n"} } unless (-e "$HTMLDIR/icons") { mkdir("$HTMLDIR/icons", 0775); system("cp $ICONSDIR/* $HTMLDIR/icons"); $logtext .= " $HTMLDIR/icons created and template icons copied.\n"; } } else {&log_it_and_die("ERROR in configuration file: HTMLDIR does not exist!!!\n")} $INDEXPAGE = "bgp.html"; $LINKDIR = "details/complete"; if ($MORETREES) { $LINKDIRBB = "details/backbone"; $LINKDIRIANA = "details/otherIANA"; } return($logtext); } # Routine to log debug info/send to STDOUT runtime messages sub log_it { my ($text, $flag) = @_; if ($DEBUG) { open(LOGFILE,">> $LOGDIR/runlog.txt"); print LOGFILE "$text\n"; close(LOGFILE); } if ($QUIET && $flag) {print STDOUT "$text\n"} } # Routine to log configuration ERRORs and stop ASpath-tree execution sub log_it_and_die { my ($text) = @_; if ($DEBUG) { open(LOGFILE,">> $LOGDIR/runlog.txt"); print LOGFILE "$text\n PROGRAM TERMINATED DUE TO UNEXPECTED CONDITIONS.\n"; close(LOGFILE); } die "$text\n"; } #### ASpath-tree v.4.2 - Released on Thu APR 17 2003, h.16:58:12 #### File: update-rtree Last modified on Tue MAR 18 2003, h.22:59:48