ipnetworktable

IPv4 and IPv6 network fast lookup table.

Build Status Coverage Status Crates.io

Description

This crate provides storage and retrieval of IPv4 and IPv6 network prefixes.

Currently, it uses ip_network crate, that provides IP network data structure and treebitmap as backend, that provides fast lookup times, and a small memory footprint. Backend can be changed in future releases.

Usage

Add this to your Cargo.toml:

toml [dependencies] ip_network = "0.3" ip_network_table = "0.1"

this to your crate root (not necessary when your project is Rust 2018 edition):

rust extern crate ip_network; extern crate ip_network_table;

and then you can use it like this:

```rust use std::net::{IpAddr, Ipv6Addr}; use ipnetwork::{IpNetwork, Ipv6Network}; use ipnetwork_table::IpNetworkTable;

let mut table = IpNetworkTable::new(); let network = IpNetwork::new(Ipv6Addr::new(0x2001, 0xdb8, 0xdead, 0xbeef, 0, 0, 0, 0), 64).unwrap(); let ip_address = Ipv6Addr::new(0x2001, 0xdb8, 0xdead, 0xbeef, 0, 0, 0, 0x1);

asserteq!(table.insert(network.clone(), "foo"), None); // Get value for network from table asserteq!(table.longestmatch(ipaddress), Some((network, &"foo"))); ```

Minimal required version of Rust compiler is 1.31 (because of ip_network crate).