/rustybgp

BGP implemented in the Rust Programming Language

Primary LanguageRustApache License 2.0Apache-2.0

RustyBGP: BGP implementation in Rust

The mission is to develop a high-performance, low-memory-footprint, and safe BGP implementation; an experiment to implement aged and rusty BGP protocol in a modern language.

RustyBGP supports the gRPC APIs same as GoBGP; GoBGP's CLI command allows you to manage RustyBGP. Currently, the very basic BGP features are supported; eBGP and iBGP, active/passive connection, v4 and v6 families, adding/deleting routes, showing the tables, etc. No policy, route server support, fancy families, etc.

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:

$ git clone https://github.com/osrg/rustybgp.git
$ cd rustybgp
$ docker run --rm -it -v "$(pwd)":/home/rust/src ekidd/rust-musl-builder cargo build --release
$ ls -hl target/x86_64-unknown-linux-musl/release/daemon
-rwxr-xr-x 2 fujita fujita 8.1M Dec  6 12:26 target/x86_64-unknown-linux-musl/release/daemon

No configuration file support; only via the gRPC API. You can use GoBGP's CLI command.

$ sudo ./target/debug/daemon
Hello, RustyBGP!

Then you can manage the daemon on a different terminal.

$ gobgp global as 65001 router-id 1.1.1.1
$ gobgp neighbor add 10.0.0.2 as 65002
$ gobgp neighbor
Peer        AS Up/Down State       |#Received  Accepted
10.0.0.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.

$ sudo ./target/debug/daemon --as-number 65001 --router-id 1.1.1.1 --any-peers
Hello, RustyBGP!

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 for info on code contributing.