#ip #ipv4 #ipv6 #network #address

ip_network_table

IPv4 and IPv6 network fast lookup table

4 releases

0.2.0 Jul 12, 2021
0.1.2 Mar 30, 2020
0.1.1 Jul 8, 2019
0.1.0 May 18, 2019

#429 in Network programming

Download history 3155/week @ 2022-02-05 2501/week @ 2022-02-12 2833/week @ 2022-02-19 2470/week @ 2022-02-26 2799/week @ 2022-03-05 3322/week @ 2022-03-12 2476/week @ 2022-03-19 1909/week @ 2022-03-26 3463/week @ 2022-04-02 2244/week @ 2022-04-09 3090/week @ 2022-04-16 8006/week @ 2022-04-23 7611/week @ 2022-04-30 7451/week @ 2022-05-07 7879/week @ 2022-05-14 7831/week @ 2022-05-21

31,993 downloads per month
Used in 3 crates (2 directly)

BSD-2-Clause

24KB
263 lines

ip_network_table

IPv4 and IPv6 network fast lookup table.

Documentation 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 fork of treebitmap (fork) 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:

[dependencies]
ip_network = "0.4"
ip_network_table = "0.2"

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

extern crate ip_network;
extern crate ip_network_table;

and then you can use it like this:

use std::net::{IpAddr, Ipv6Addr};
use ip_network::{IpNetwork, Ipv6Network};
use ip_network_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);

assert_eq!(table.insert(network.clone(), "foo"), None);
// Get value for network from table
assert_eq!(table.longest_match(ip_address), Some((network, &"foo")));

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

Dependencies

~235KB