sourCEntral - mobile manpages




aggregate − optimise a list of route prefixes to help make nice short filters


aggregate [−m max-length] [−o max-opt-length] [−p default-length] [−q] [−t] [−v]


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, would be removed if was also supplied.

The second optimisation identifies adjacent prefixes that can be combined under a single, shorter-length prefix. For example, and can be combined into the single prefix


−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 would be truncated to Without this option an input prefix 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.


Aggregate 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 flag):

aggregate: maximum prefix length permitted will be 24
[ 0] +
[ 1] -
[ 2] -
[ 3]
[ 4]
[ 5]
[ 0] +
[ 6] -
[ 7] -
[ 8] -
[ 9]
[ 10]
[ 0] +
[ 11] -
[ 12] -

Note that and were combined under the single prefix, and was suppressed because it was included in 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:




Aggregate was written by Joe Abley <jabley AT mfnx DOT net>, 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 <michael DOT shields AT mfn DOT com>. The −t option was suggested by Robin Johnson <robbat2 AT fermi DOT orbis-terrarum DOT net>, and the treatment of leading zeros on octet parsing was changed following comments from Arnold Nipper <arnold AT nipper DOT de>.

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 <rnoland AT 2hip DOT net>).


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 option together with a pencil and paper is probably advisable.