#bgp #routing #prefix

bin+lib rotonda-store

A library for storing and retrieving IP Prefixes

12 releases

new 0.5.0 Apr 23, 2025
0.4.1 Jan 29, 2025
0.4.0 Nov 20, 2024
0.4.0-rc0 Jun 12, 2024
0.1.0 Jul 8, 2021

#1168 in Network programming

Download history 9/week @ 2025-01-03 18/week @ 2025-01-10 136/week @ 2025-01-24 155/week @ 2025-01-31 6/week @ 2025-02-07 51/week @ 2025-02-14 2/week @ 2025-02-21 3/week @ 2025-02-28 2/week @ 2025-03-07 8/week @ 2025-03-14 6/week @ 2025-04-11 123/week @ 2025-04-18

129 downloads per month
Used in rotonda

BSD-3-Clause

7MB
8K SLoC

A library that provides abstractions for a BGP Routing Information Base (RIB) for different AFI/SAFI types, as a database.

The data structures provided by this crate can be used to store and query routes (and route-like data) in memory and on-disk, for both current and historical data.

The main data structures that this crate implements are firstly a tree bitmap, largely as described in this paper^1 - but with a twist. There's also a blog post^2 about the tree bitmap, and similar data structures. Secondly, this repo implements a concurrent chained hash table (called cht throughout this repo), geared towards keys that are "prefix-like", i.e. variable-length bitfields, that fit within a primitive integer type.

The log-structured merge tree ("lsm_tree") used in this library is provided by the lsm_tree crate - the crate that powers fjall.


rotonda-store

An In-Memory Routing Information Base (RIB) for IPv4 and IPv6 Prefixes. Part of the Rotonda modular BGP engine.

Although this store is geared towards storing routing information, it can store any type of metadata for a prefix.

It features as secondary key a u32 value, which can be used to store multiple values for one prefix, e.g. representing different peers, or add_path routes.

The built-in tree-bitmap[^1] allows for fast querying of IP prefixes and their more- and less-specific prefixes.

This crate provides a data-structure intended for single-threaded use, and a data-structure for multi-threaded use.

[^1]: Read more about the data-structure in this blog post.

Dependencies

~12–25MB
~368K SLoC