- optimise a list of route prefixes to help make nice short
[-m max-length] [-o max-opt-length] [-p default-length] [-q]
Takes a list of prefixes in conventional format on stdin, and performs two
optimisations to attempt to reduce the length of the prefix list.
The first optimisation is to remove any supplied prefixes which are superfluous
because they are already included in another supplied prefix. For example,
188.8.131.52/24 would be removed if 184.108.40.206/17 was also supplied.
The second optimisation identifies adjacent prefixes that can be combined under
a single, shorter-length prefix. For example, 220.127.116.11/24 and 18.104.22.168/24
can be combined into the single prefix 22.214.171.124/23.
- -m max-length
- Sets the maximum prefix length for entries read from stdin
max_length bits. The default is 32. Prefixes with longer lengths
will be discarded prior to processing.
- -o max-opt-length
- Sets the maximum prefix length for optimisation to
max-opt-length bits. The default is 32. Prefixes with longer
lengths will not be subject to optimisation.
- -p default-length
- Sets the default prefix length. There is no default;
without this option a prefix without a mask length is treated as invalid.
Use -p 32 -m 32 -o 32 to aggregate a list of host routes specified
as bare addresses, for example.
- Sets quiet mode -- instructs aggregate never to
generate warning messages or other output on stderr.
- Silently truncate prefixes that seem to have an
inconsistent prefix: e.g. an input prefix 126.96.36.199/24 would be
truncated to 188.8.131.52/24. Without this option an input prefix
184.108.40.206/24 would not be accepted, and a warning about the
inconsistent mask would be generated.
- Sets verbose mode. This changes the output format to
display the source line number that the prefix was obtained from, together
with a preceding "-" to indicate a route that can be suppressed,
or a "+" to indicate a shorter-prefix aggregate that was added
by aggregate as an adjacency optimisation. Note that verbose output
continues even if -q is selected.
exits 0 on success, and >0 if an error occurs.
The following list of prefixes:
is optimised as followed by aggregate
(output shown using the -v
aggregate: maximum prefix length permitted will be 24
[ 0] + 220.127.116.11/21
[ 1] - 18.104.22.168/22
[ 2] - 22.214.171.124/22
[ 3] 126.96.36.199/22
[ 4] 188.8.131.52/22
[ 5] 184.108.40.206/22
[ 0] + 220.127.116.11/21
[ 6] - 18.104.22.168/22
[ 7] - 22.214.171.124/22
[ 8] - 126.96.36.199/23
[ 9] 188.8.131.52/19
[ 10] 184.108.40.206/21
[ 0] + 220.127.116.11/15
[ 11] - 18.104.22.168/16
[ 12] - 22.214.171.124/16
Note that 126.96.36.199/22 and 188.8.131.52/22 were combined under the single
prefix 184.108.40.206/21, and 220.127.116.11/23 was suppressed because it was
included in 18.104.22.168/22. The number in square brackets at the beginning
of each line indicates the original line number, or zero for new prefixes that
were introduced by aggregate.
The output without the -v
flag is as follows:
was written by Joe Abley <firstname.lastname@example.org>, and has been
reasonably well tested. It is suitable for reducing customer prefix filters
for production use without extensive hand-proving of results.
Autoconf bits were donated by Michael Shields <email@example.com>.
option was suggested by Robin Johnson
<firstname.lastname@example.org>, and the treatment of leading zeros
on octet parsing was changed following comments from Arnold Nipper
An early version of aggregate
would attempt to combine adjacent prefixes
regardless of whether the first prefix lay on an appropriate bit boundary or
not (pointed out with great restraint by Robert Noland
Common unix parsing of IPv4 addresses understands the representation of
individual octets in octal or hexadecimal, following a "0" or
"0x" prefix, respectively. That convention has been deliberately
disabled here, since resources such as the IRR do not follow the convention,
and confusion can result.
For extremely sensitive applications, judicious use of the -v
together with a pencil and paper is probably advisable.