Skip to main content

Requirements Status Coverage Status

aggregate6

aggregate6 will compress an unsorted list of IP prefixes (both IPv4 and IPv6).

Description

Takes a list of IPv6 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, 2001:67c:208c:10::/64 would be removed if 2001:67c:208c::/48 was also supplied.

The second optimisation identifies adjacent prefixes that can be combined under a single, shorter-length prefix. For example, 2001:67c:208c::/48 and 2001:67c:208d::/48 can be combined into the single prefix 2001:67c:208c::/47.

The above optimalisation steps are often useful in context of compressing firewall rules or BGP prefix-list filters.

The following command line options are available:

-4          Only output IPv4 prefixes
-6          Only output IPv6 prefixes
-h, --help  show help message and exit
-m N        Sets the maximum prefix length for entries read, longer prefixes will be discarded prior to processing
-t          truncate IP/mask to network/mask
-v          Display verbose information about the optimisations
-V          Display aggregate6 version

Installation

OpenBSD:

$ doas pkg_add aggregate6

CentOS/RHEL/Rocky:

$ yum install epel-release
$ yum install aggregate6

Fedora:

$ dnf install aggregate6

Other platforms:

$ pip3 install aggregate6

CLI Usage

Either provide the list of IPv4 and IPv6 prefixes on STDIN, or give filenames containing lists of IPv4 and IPv6 prefixes as arguments.

$ # via STDIN
$ cat file_with_list_of_prefixes | aggregate6
   ... output ...

$ # with a filename as argument
$ aggregate6 file_with_list_of_prefixes [ ... optional_other_prefix_lists ]
   ... output ...

$ # Whitespace separated works too
$ echo 2001:67c:208c::/48 2000::/3 | aggregate6
2000::/3

$ # You can combine IPv4 and IPv6
$ echo 10.0.0.0/16 10.0.0.0/24 2000::/3 | aggregate6
10.0.0.0/16
2000::/3

Library Usage

Aggregate6 can be used in your own pyp/python2/python3 project as python module. Currently there is just one simple public function: aggregate() which takes a list as parameter.

>>> from aggregate6 import aggregate
>>> aggregate(["10.0.0.0/8", "10.0.0.0/24"])
['10.0.0.0/8']
>>>

Bugs

Please report bugs at https://github.com/job/aggregate6/issues

Author

Job Snijders job@instituut.net

Release files for aggregate6 1.0.15

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for aggregate6 1.0.15
File Size Uploaded
aggregate6-1.0.15.tar.gz 9.0 kB Details

Release files / aggregate6-1.0.15.tar.gz

Download URL aggregate6-1.0.15.tar.gz
Size 9.0 kB
Tags Source
SHA-256 checksum
How to use checksums
6011819340a829f4c639dad08843a782f6bcb4d1313789137fde306ce7d9d6ac
BLAKE2b-256 checksum
How to use checksums
816575709fa83dfc6016364cc35602b26a34515c20cfe8b75328e3fe3eb1beb2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.3

Release history Release notifications | RSS feed

This release

1.0.15 This release

1 release file

1.0.14

1 release file

1.0.12

1 release file

1.0.11

1 release file

1.0.10

1 release file

1.0.9

1 release file

1.0.8

1 release file

1.0.7

1 release file

1.0.6

1 release file

1.0.5

1 release file

1.0.4

1 release file

1.0.3

1 release file

1.0.2

1 release file

1.0.1

1 release file

1.0.0

1 release file

0.9

1 release file

0.8

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page