#### ASpath-tree v.4.2 - Released on Thu APR 17 2003, h.16:58:12 #### File: lib/odd-routes.pl Last modified on Fri MAR 14 2003, h.15:42:35 # Routines to create the odd routes pages: three pages showing the invalid routes, the unaggregated routes sorted # by origin AS and the unaggregated routes sorted by owner xTLA respectively sub create_oddroutes_pages { my ($filename) = @_; my ($maxlen_inv, $maxlen_una, $maxlen_longer, $N_inv, $N_unag, $N_longer) = (0, 0, 0, 0, 0, 0); my @tmp = (); my %inv = (); my %una = (); my %una1 = (); my %una2 = (); foreach $key (keys(%ATTRIBUTES)) { @tmp = split(/\s+/, $ATTRIBUTES{$key}); if ($tmp[0] == 0) { $N_inv++; if ($maxlen_inv < @tmp) {$maxlen_inv = @tmp} push (@{$inv{$tmp[1]}}, $key); } elsif ($tmp[0] == 2) { $N_unag++; if ($maxlen_una < @tmp) {$maxlen_una = @tmp} push (@{$una{$tmp[1]}}, $key); push (@{$una1{$tmp[3]}}, $key); } elsif ($tmp[0] == 5) { $N_longer++; if ($maxlen_longer < @tmp) {$maxlen_longer = @tmp} push (@{$una2{$tmp[1]}}, $key); } } &oddroutes_page('inv', $filename, $N_inv, $maxlen_inv, %inv); &oddroutes_page('unabyori', $filename, $N_unag, $maxlen_una, %una); &oddroutes_page('unabyown', $filename, $N_unag, $maxlen_una, %una1); &oddroutes_page('longer6to4', $filename, $N_longer, $maxlen_longer, %una2); return(0); } # Routine to create invalid routes odd-route page sub oddroutes_page { my ($type, $filename, $flag, $maxlen, %hash) = @_; my ($asname, $origin, $origin_as, $link1, $link2, $link3, $prefix, $owner, $ptla_owner, $fptla_owner, $flag_whois); my ($numcol, $leftcol) = (0, 0); my $separator = "-"; $filename =~ /(.*)\/{1}(.*)\.{1}.*$/; my $path = $1; my $link = $2; if ($type eq 'inv') { $link1 = 'Invalid Prefixes'; open(HTMLFILE,">".$filename); } else {$link1 = "Invalid Prefixes"} if ($type eq 'unabyori') { $link2 = 'Unaggregated Prefixes (by origin)'; open(HTMLFILE,">".$path."/".$link."1.html"); } else {$link2 = "Unaggregated Prefixes (by origin)"} if ($type eq 'unabyown') { $link3 = 'Unaggregated Prefixes (by owner)'; open(HTMLFILE,">".$path."/".$link."2.html"); } else {$link3 = "Unaggregated Prefixes (by owner)"} if ($type eq 'longer6to4') { $link4 = '6to4 Longer Prefixes'; open(HTMLFILE,">".$path."/".$link."3.html"); } else {$link4 = "6to4 Longer Prefixes"} print HTMLFILE &header("IPv6 BGP table: unaggregated and invalid prefixes", 0); print HTMLFILE "\n"; if ($SITEPICTURE) { print HTMLFILE "\n"; } else {print HTMLFILE "\n"} print HTMLFILE "\n"; print HTMLFILE "\n"; print HTMLFILE "\n
  IPv6 BGP odd routes
Updated on $LONGDATE
[ "; print HTMLFILE "$link1"; print HTMLFILE " | "; print HTMLFILE "$link2"; print HTMLFILE " | "; print HTMLFILE "$link3"; print HTMLFILE " | "; print HTMLFILE "$link4"; print HTMLFILE " ]
\n

\n"; if ($type eq 'inv') { if ($flag) { $numcol = ($maxlen-5)*2; print HTMLFILE "

\n"; print HTMLFILE "\n"; print HTMLFILE "\n"; print HTMLFILE "\n"; foreach $origin (sort(keys(%hash))) { $origin_as = &format_originAS($origin); print HTMLFILE "\n"; print HTMLFILE "\n"; print HTMLFILE "\n"; } print HTMLFILE "
OriginInvalid PrefixesAS Paths
$origin_as\n"; foreach $prefix (@{$hash{$origin}}) { print HTMLFILE "\n"; } print HTMLFILE "
$prefix
\n"; foreach $prefix (@{$hash{$origin}}) { @tmp = split(/\s+/, $ATTRIBUTES{$prefix}); print HTMLFILE "\n"; for ($i = 4; $i < $#tmp; $i++) { $asname = &format_asname($tmp[$i]); print HTMLFILE ""; print HTMLFILE "\n"; } $asname = &format_asname($tmp[$#tmp]); print HTMLFILE "\n"; if ($#tmp < $maxlen) { $leftcol = $numcol - ($#tmp - 4)*2 + 1; print HTMLFILE "\n"; } print HTMLFILE "\n\n"; } print HTMLFILE "
$asname$separator$asname 
\n
\n"; } else { print HTMLFILE "There are no invalid prefixes.

\n"; } } elsif ($type eq 'unabyori') { if ($flag) { $numcol = ($maxlen-5)*2; print HTMLFILE "
\n"; print HTMLFILE "\n"; print HTMLFILE "\n"; print HTMLFILE "\n"; print HTMLFILE "\n"; print HTMLFILE "\n"; foreach $origin (sort {$ASNAME{$a} cmp $ASNAME{$b}} (keys(%hash))) { $origin_as = &format_originAS($origin); print HTMLFILE "\n"; print HTMLFILE "\n"; print HTMLFILE "\n\n"; print HTMLFILE "\n"; } print HTMLFILE "
OriginUnaggregated PrefixesAssigned toxTLA ownerAS Paths
$origin_as"; foreach $prefix (@{$hash{$origin}}) {print HTMLFILE "\n"} print HTMLFILE "
$prefix
\n"; foreach $prefix (@{$hash{$origin}}) { @tmp = split(/\s+/, $ATTRIBUTES{$prefix}); if (&includedprefix($prefix,"3ffe::/16")) {$flag_whois = 0} else {$flag_whois = 1} $owner = &format_owner($tmp[2],$flag_whois); print HTMLFILE ""; } print HTMLFILE "
$owner
"; print HTMLFILE ""; foreach $prefix (@{$hash{$origin}}) { @tmp = split(/\s+/, $ATTRIBUTES{$prefix}); if ($tmp[3] eq '?' || $tmp[3] eq '?') {$fptla_owner = '?'} else { if (&includedprefix($prefix,"3ffe::/16")) {$flag_whois = 0} else {$flag_whois = 1} $fptla_owner = &format_owner($tmp[3],$flag_whois); } print HTMLFILE "\n"; } print HTMLFILE "
$fptla_owner
\n"; foreach $prefix (@{$hash{$origin}}) { @tmp = split(/\s+/, $ATTRIBUTES{$prefix}); print HTMLFILE "\n"; for ($i = 4; $i < $#tmp; $i++) { $asname = &format_asname($tmp[$i]); print HTMLFILE ""; print HTMLFILE "\n"; } $asname = &format_asname($tmp[$#tmp]); print HTMLFILE "\n"; if ($#tmp < $maxlen) { $leftcol = $numcol - ($#tmp - 4)*2 + 1; print HTMLFILE "\n"; } print HTMLFILE "\n"; } print HTMLFILE "
$asname$separator$asname 
\n
\n"; } else { print HTMLFILE "There are no unaggregated prefixes.

\n"; } } elsif ($type eq 'unabyown') { if ($flag) { $numcol = ($maxlen-5)*2; print HTMLFILE "
\n"; print HTMLFILE "\n"; print HTMLFILE "\n"; print HTMLFILE "\n"; print HTMLFILE "\n"; print HTMLFILE "\n"; my @owners = sort(keys(%hash)); if ($owners[0] eq '-') {shift(@owners);$owners[@owners] = '-'} foreach $ptla_owner (@owners) { print HTMLFILE "\n"; print HTMLFILE "\n"; print HTMLFILE "\n"; print HTMLFILE "\n"; print HTMLFILE "\n"; } print HTMLFILE "
xTLA ownerUnaggregated PrefixesAssigned toOriginAS Paths
"; if ($ptla_owner eq '?' || $ptla_owner eq '?') {$fptla_owner = '?'} else { if (grep(/$ptla_owner/, values(%PTLAS))) {$flag_whois = 0} else {$flag_whois = 1} $fptla_owner = &format_owner($ptla_owner,$flag_whois); } print HTMLFILE "$fptla_owner\n"; foreach $prefix (@{$hash{$ptla_owner}}) { print HTMLFILE "\n"; } print HTMLFILE "
$prefix
"; foreach $prefix (@{$hash{$ptla_owner}}) { @tmp = split(/\s+/, $ATTRIBUTES{$prefix}); if (&includedprefix($prefix,"3ffe::/16")) {$flag_whois = 0} else {$flag_whois = 1} $owner = &format_owner($tmp[2],$flag_whois); print HTMLFILE "\n"; } print HTMLFILE "
$owner
\n"; foreach $prefix (@{$hash{$ptla_owner}}) { @tmp = split(/\s+/, $ATTRIBUTES{$prefix}); $origin = &format_originAS($tmp[1]); print HTMLFILE "\n"; } print HTMLFILE "
$origin
\n"; foreach $prefix (@{$hash{$ptla_owner}}) { @tmp = split(/\s+/, $ATTRIBUTES{$prefix}); print HTMLFILE "\n"; for ($i = 4; $i < $#tmp; $i++) { $asname = &format_asname($tmp[$i]); print HTMLFILE ""; print HTMLFILE "\n"; } $asname = &format_asname($tmp[$#tmp]); print HTMLFILE "\n"; if ($#tmp < $maxlen) { $leftcol = $numcol - ($#tmp - 4)*2 + 1; print HTMLFILE "\n"; } print HTMLFILE "\n"; } print HTMLFILE "
$asname$separator$asname 
\n
\n"; } else { print HTMLFILE "There are no unaggregated prefixes.

\n"; } } elsif ($type eq 'longer6to4') { if ($flag) { $numcol = ($maxlen-5)*2; print HTMLFILE "
\n"; print HTMLFILE "\n"; print HTMLFILE "\n"; print HTMLFILE "\n"; foreach $origin (sort(keys(%hash))) { $origin_as = &format_originAS($origin); print HTMLFILE "\n"; print HTMLFILE "\n"; print HTMLFILE "\n"; } print HTMLFILE "
OriginPrefixesAS Paths
$origin_as"; foreach $prefix (@{$hash{$origin}}) {print HTMLFILE "\n"} print HTMLFILE "
$prefix
\n"; foreach $prefix (@{$hash{$origin}}) { @tmp = split(/\s+/, $ATTRIBUTES{$prefix}); print HTMLFILE "\n"; for ($i = 4; $i < $#tmp; $i++) { $asname = &format_asname($tmp[$i]); print HTMLFILE ""; print HTMLFILE "\n"; } $asname = &format_asname($tmp[$#tmp]); print HTMLFILE "\n"; if ($#tmp < $maxlen) { $leftcol = $numcol - ($#tmp - 4)*2 + 1; print HTMLFILE "\n"; } print HTMLFILE "\n"; } print HTMLFILE "
$asname$separator$asname 
\n


\n"; } else { print HTMLFILE "There are no 6to4 longer prefixes.


\n"; } } print HTMLFILE "Back to routing information page\n"; print HTMLFILE "
\n This pages display all the anomalous IPv6 BGP prefixes (according to RFC2546 - "IPv6 routing Practice") currently advertised inside the 6Bone backbone. In particular two kinds of anomalous prefixes are displayed:
\n".&footer."
\n\n\n"; close(HTMLFILE); } (1); #### ASpath-tree v.4.2 - Released on Thu APR 17 2003, h.16:58:12 #### File: lib/odd-routes.pl Last modified on Fri MAR 14 2003, h.15:42:35