Fast prefix origin pair lookups
Project description
roa_checker
This package contains a trie of ROAs for fast prefix-origin pair lookups
Usage
from ipaddress import ip_network
from roa_checker import ROAChecker, ROARouted, ROAValidity
def test_tree():
# TODO: Break up into unit tests
trie = ROAChecker()
cidrs = [ip_network(x) for x in ["1.2.0.0/16", "1.2.3.0/24", "1.2.3.4"]]
routed_origin = 1
for cidr in cidrs:
trie.insert(cidr, routed_origin, cidr.prefixlen)
for cidr in cidrs:
assert trie.get_roa(cidr, routed_origin).prefix == cidr
validity, routed = trie.get_validity(cidr, routed_origin)
assert validity, routed == (ROAValidity.VALID, ROARouted.ROUTED,)
assert ROAValidity.is_unknown(validity) is False
assert ROAValidity.is_invalid(validity) is False
assert ROAValidity.is_valid(validity) is True
non_routed_cidrs = [ip_network(x) for x in ["2.2.0.0/16", "2.2.3.0/24", "2.2.3.4"]]
non_routed_origin = 0
for cidr in non_routed_cidrs:
trie.insert(cidr, non_routed_origin, cidr.prefixlen)
for cidr in non_routed_cidrs:
assert trie.get_roa(cidr, non_routed_origin).prefix == cidr
assert trie.get_validity(cidr, routed_origin) == (
ROAValidity.INVALID_ORIGIN,
ROARouted.NON_ROUTED,
)
validity, routed = trie.get_validity(ip_network("1.0.0.0/8"), routed_origin)
assert validity == ROAValidity.UNKNOWN
assert routed == ROARouted.UNKNOWN
validity, routed = trie.get_validity(ip_network("255.255.255.255"), routed_origin)
assert validity == ROAValidity.UNKNOWN
assert routed == ROARouted.UNKNOWN
assert ROAValidity.is_unknown(validity) is True
assert ROAValidity.is_invalid(validity) is False
assert ROAValidity.is_valid(validity) is False
validity, routed = trie.get_validity(ip_network("1.2.4.0/24"), routed_origin)
assert validity == ROAValidity.INVALID_LENGTH
assert routed == ROARouted.ROUTED
assert ROAValidity.is_unknown(validity) is False
assert ROAValidity.is_invalid(validity) is True
assert ROAValidity.is_valid(validity) is False
validity, routed = trie.get_validity(ip_network("1.2.3.0/24"), routed_origin + 1)
assert validity == ROAValidity.INVALID_ORIGIN
assert routed == ROARouted.ROUTED
assert ROAValidity.is_unknown(validity) is False
assert ROAValidity.is_invalid(validity) is True
assert ROAValidity.is_valid(validity) is False
validity, routed = trie.get_validity(ip_network("1.2.4.0/24"), routed_origin + 1)
assert validity == ROAValidity.INVALID_LENGTH_AND_ORIGIN
assert routed == ROARouted.ROUTED
assert ROAValidity.is_unknown(validity) is False
assert ROAValidity.is_invalid(validity) is True
assert ROAValidity.is_valid(validity) is False
validity, routed = trie.get_validity(ip_network("1.2.0.255"), routed_origin)
assert validity == ROAValidity.INVALID_LENGTH
assert routed == ROARouted.ROUTED
validity, routed = trie.get_validity(ip_network("1.3.0.0/16"), routed_origin)
assert validity == ROAValidity.UNKNOWN
assert routed == ROARouted.UNKNOWN
validity, routed = trie.get_validity(ip_network("1.2.0.255"), routed_origin)
assert validity == ROAValidity.INVALID_LENGTH
assert routed == ROARouted.ROUTED
Installation
Install python and pip if you have not already. Then run:
pip3 install roa_checker
This will install the package and all of it's python dependencies.
If you want to install the project for development:
git clone https://github.com/jfuruness/roa_checker.git
cd roa_checker
pip3 install -e .[test]
pre-commit install
To test the development package: Testing
Testing
After installation for development:
cd roa_checker
python3 -m pytest roa_checker
To run all tests:
tox
Development/Contributing
- Fork it!
- Create your feature branch:
git checkout -b my-new-feature
- Commit your changes:
git commit -am 'Add some feature'
- Push to the branch:
git push origin my-new-feature
- Submit a pull request
- Email me at jfuruness@gmail.com if I don't see it after a while
History
- roa_checker
- 1.1.3 Dependency updates
- 1.1.2 Added ROA to top level import
- 1.1.1 mypy and linter fixes
- 1.1.0 Updated test deps
- 1.0.0 Updated package structure, typing, linters, etc, made ROAValidity contains multiple invalid types
- 0.0.1 First working version
License
BSD License (see license file)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
roa_checker-1.1.3.tar.gz
(9.6 kB
view hashes)
Built Distribution
Close
Hashes for roa_checker-1.1.3-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4e6462fe815214eac2020201024f7cb2d198e2e68afebccab49d16feb35e4dd2 |
|
MD5 | c3bfc6ab592adc45f8e5c03ac689ee11 |
|
BLAKE2b-256 | 42ec95bbb01d486b6c7a700af625fb7746b0d1dcbb960f5cdfc1427084b999dd |