I wrote the code below some time ago. I've not used it in awhile, but
presumably it does what I think it does. I called it compactaddrs.pl.
Feed it a list of CIDR blocks via stdin.
John
#!/usr/bin/perl -T
use strict;
use warnings;
# compactaddrs - aggregate addr blocks
use NetAddr::IP qw( Compact );
my @v4blocks;
my @v6blocks;
while( defined(my $line=<>) ) {
chomp $line;
if ( $line =~ / ) {
push @v6blocks, NetAddr::IP->new($line);
}
else {
push @v4blocks, NetAddr::IP->new($line);
}
}
if ( scalar @v4blocks > 0 ) {
print "# IPv4 aggregate prefixes\n";
my @aggregates = Compact(@v4blocks);
print 'WHERE';
for my $prefix (@aggregates) {
print ' saddr <<= ';
print "'$prefix' OR";
# print "$prefix\n";
}
}
if ( scalar @v6blocks > 0 ) {
print " #IPv6 aggregate prefixes\n";
my @aggregates = Compact(@v6blocks);
for my $prefix (@aggregates) {
print "$prefix\n";
}
}
print "\n";