Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/osrg/rustybgp
BGP implemented in the Rust Programming Language
https://github.com/osrg/rustybgp
Last synced: 3 days ago
JSON representation
BGP implemented in the Rust Programming Language
- Host: GitHub
- URL: https://github.com/osrg/rustybgp
- Owner: osrg
- License: apache-2.0
- Created: 2019-11-26T22:36:33.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2025-01-02T09:38:59.000Z (13 days ago)
- Last Synced: 2025-01-05T10:03:11.699Z (10 days ago)
- Language: Rust
- Homepage:
- Size: 37.6 MB
- Stars: 497
- Watchers: 28
- Forks: 47
- Open Issues: 32
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-rust - RustyBGP - BGP (Applications / Routing protocols)
- awesome-rust - RustyBGP - BGP (Applications / Routing protocols)
- fucking-awesome-rust - RustyBGP - BGP (Applications / Routing protocols)
- fucking-awesome-rust - RustyBGP - BGP (Applications / Routing protocols)
README
# RustyBGP: BGP implementation in Rust
The mission is to develop a high-performance and safe BGP implementation; an experiment to implement aged and rusty BGP protocol in a modern language. RustyBGP is [much faster](https://elegantnetwork.github.io/posts/bgp-perf5-1000-internet-neighbors/) than other OSS implementations. One reason of the high performance is that RustyBGP is designed to exploit multicore processors. Here is a CPU usage comparison with FRR 7.5 during processing 32 peers with 800K prefixes each; RustyBGP (left) uses all the cores while FRR uses only few.
![](.github/assets/htop.gif)
RustyBGP supports the gRPC APIs same as GoBGP; your code to manage GoBGP via the APIs should work with RustyBGP. If you need CLI, [GoBGP CLI tool](https://github.com/osrg/gobgp/releases/tag/v3.0.0) allows you to manage RustyBGP. RustyBGP also supports the same configuration file format as GoBGP (only toml and yaml for now).
## Get Started
You can easily build RusyBGP on any system that has Docker running. You don't need Rust development environment. You can build the x86_64 statically-linked binary as follows:
```bash
$ git clone https://github.com/osrg/rustybgp.git
$ cd rustybgp
$ docker pull ghcr.io/rust-cross/rust-musl-cross:x86_64-unknown-linux-musl
$ docker run --rm -it -v "$(pwd)":/home/rust/src ghcr.io/rust-cross/rust-musl-cross:x86_64-unknown-linux-musl cargo build --release
$ ls target/x86_64-unknown-linux-musl/release/rustybgpd
target/x86_64-unknown-linux-musl/release/rustybgpd
``````bash
$ sudo ./target/x86_64-unknown-linux-musl/release/rustybgpd -f gobgpd.conf
Hello, RustyBGP (32 cpus)!
```Then you can manage the daemon on a different terminal with GoBGP's CLI command.
```bash
$ gobgp neighbor
Peer AS Up/Down State |#Received Accepted
198.51.100.2 65002 never Idle | 0 0
```If you just want to check out the performance, start the daemon with `--any-peers` option. The daemon accepts any peers without configuration.
```bash
$ sudo ./target/x86_64-unknown-linux-musl/release/rustybgpd --as-number 65001 --router-id 203.0.113.1 --any-peers
Hello, RustyBGP (32 cpus)!
```## Supported Features
Currently, the very basic BGP features are supported; eBGP and iBGP, active/passive connection, RPKI, BMP (BGP monitoring protocol), MRT, etc with the following gRPC APIs.
| API | Relevant CLI | Note |
| ---------------------- | ---------------------------------------------------------- | -------------------------------------------- |
| start_bgp | `gobgp global as router-id ` | |
| get_bgp | `gobgp global` | |
| add_peer | `gobgp neighbor add as router-id ` | v4/v6 families and addpath (rx) supported |
| delete_peer | `gobgp neighbor del ` | |
| list_peer | `gobgp neighbor`/`gobgp neighbor ` | |
| enable_peer | `gobgp neighbor enable` | |
| disable_peer | `gobgp neighbor disable` | |
| add_peer_group | | |
| add_dynamic_neighbor | | |
| add_path | `gobgp global rib add ` | |
| delete_path | `gobgp global rib del ` | |
| list_path | `gobgp global rib`/`gobgp neighbor [adj-in\|adj-out]` | |
| add_path_stream | `gobgp mrt global inject [FILE]` | |
| get_table | `gobgp global rib summary` | |
| add_policy | | |
| list_policy | | |
| add_defined_set | | |
| list_defined_set | | |
| add_statement | | |
| list_statement | | |
| add_policy_assignment | | |
| list_policy_assignment | | |
| add_rpki | `gobgp rpki server add` | |
| list_rpki | `gobgp rpki server` | |
| list_rpki_table | `gobgp rpki table` | |
| enable_mrt | | |
| add_bmp | `gobgp bmp add` | routemonitoring is supported only with adjin |
| list_bmp | `gobgp bmp` | |## Community, discussion and support
You have code or documentation for RustyBGP? Awesome! Send a pull request. No CLA, board members, governance, or other mess. See [`BUILD.md`](BUILD.md) for info on code contributing.