#ip #prefix #bgp #ip-address #routes #networking

prefixset

用于IP地址前缀的高效集合容器

2个版本

0.1.0-rc.22021年8月22日
0.1.0-rc.12021年8月4日

#route中排名8

MIT许可证

9.5MB
3K SLoC

prefixset-rs

Crates.io ci/cd codecov docs.rs

关于

这是一个Rust库包prefixset,提供IP前缀( IP地址)的集合容器。

前缀集合以二叉基数树结构存储,提供

  • 单次遍历中快速插入连续前缀范围
  • 遍历前缀或前缀范围
  • 每个操作上的自聚合

先前的技术

这是从广泛使用的Alexandre Snarskii的工具bgpq3中的内部数据结构衍生出来的Rust实现,作为一个库打包,并添加了集合论操作。

使用方法

完整文档可以在这里找到。

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(())
}

依赖项