Crate prefixset[−][src]
Expand description
This crate provides PrefixSet
, 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.
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 set-theoretic operations added.
Quickstart
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(())
}
Modules
Traits and types defining IP prefix objects that can be contained in a
PrefixSet<P>
.
PrefixSet<P>
and related types.
Structs
An object representing a contigious range of IpPrefix
s, covered by a
common super-prefix.
An implementation of IpPrefix
for the IPv4 address family.
An implementation of IpPrefix
for the IPv6 address family.
A collection of IP prefixes, providing fast insertion and iteration, and set-theorectic arithmetic.
Enums
Errors returned by construction and parsing operations.
Traits
Provides bounds and methods for types T
over which a
PrefixSet<T>
can be constructed.