Skip to content
This repository was archived by the owner on Apr 21, 2023. It is now read-only.

wolcomm/prefixset-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

52 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

prefixset-rs

Crates.io ci/cd codecov docs.rs

Deprecated

This crate is deprecated. A replacement is available in the generic-ip-rs crate.

About

A Rust library crate prefixset, providing a set-like container for IP prefixes (not IP addresses).

Sets of prefixes are stored in a binary radix tree structure that provides:

  • Fast insertion of contiguous prefix ranges in a single traversal,
  • Iteration over either prefixes or ranges of prefixes, and
  • Self aggregation on each operation.

Prior art

This is a Rust implementation derived in large part from the internal data-structure used in the widely used bgpq3 tool by Alexandre Snarskii, packaged as a library, and with the set-theoretic operations added.

Usage

Full documentation can be found here.

extern crate prefixset; use prefixset::{Error, Ipv6Prefix, IpPrefixRange, PrefixSet}; fn main() -> Result<(), Error> { // create a set by parsing a Vec<&str> let set = vec![ "2001:db8::/37", "2001:db8:f00::/37", ] .iter() .map(|s| s.parse::<Ipv6Prefix>()) .collect::<Result<PrefixSet<_>, _>>()?; // create a range by parsing a &str and providing the lower // and upper prefix lenth bounds let range = IpPrefixRange::new("2001:db8::/36".parse()?, 37, 37)?; assert_eq!(set.ranges().collect::<Vec<_>>(), vec![range]); Ok(()) }

About

A Rust library providing a set-like container for IP prefixes.

Topics

Resources

License

Stars

Watchers

Forks