Skip to content

nsg-ethz/Chameleon

Repository files navigation

DOI

Chameleon: Taming the transient while reconfiguring BGP -- Sigcomm 2023

This is the implementation of the paper “Taming the transient while reconfiguring BGP”, published at SIGCOMM ’23. Please cite the following article:

@INPROCEEDINGS{schneider2023taming,
    year = {2023},
    booktitle = {Proceedings of the 2023 ACM Special Interest Group on Data Communication (SIGCOMM)},
    author = {Schneider, Tibor and Schmid, Roland and Vissicchio, Stefano and Vanbever, Laurent},
    title = {Taming the transient while reconfiguring BGP},
    Note = {37th ACM SiGCOMM Conference (SIGCOMM 2023); Conference Location: New York, NY, USA; Conference Date: September 10-14, 2023}
    doi = {10.1145/3603269.3604855}
    url = {https://doi.org/10.1145/3603269.3604855}
}

Abstract

BGP reconfigurations are a daily occurrence for most network operators, especially in large networks. Despite many recent efforts, performing safe and robust BGP reconfiguration changes is still an open problem. Existing techniques are indeed either (i) unsafe, because they ignore the impact of transient states which can easily lead to invariant violations; or (ii) impractical as they duplicate the entire routing and forwarding states and require hard- and software support.

This paper introduces Chameleon, the first BGP reconfiguration system capable of maintaining correctness throughout the entire reconfiguration process. Chameleon is akin to concurrency coordination in distributed systems. Specifically, we model the reconfiguration process with happens-before relations; show how to reason about (transient) violations; and how to avoid them by precisely controlling BGP route propagation and convergence during the reconfiguration.

We fully implement Chameleon and evaluate it in both testbeds and simulations, on real-world topologies and large-scale reconfiguration scenarios. In most experiments, our system computes reconfiguration plans within a minute, and performs them from start to finish in a few minutes, with minimal overhead and no impact on network resiliency.

Usage

You can use the library either using your native rust toolchain, or via Docker. For the artifact evaluation, please consider this document

Docker

The easiest way is to use the provided Docker file. Build the container using (this might take around 20 minutes):

docker build -t chameleon .

This command will setup the environment, all dependencies, and compile the executable. (See the Dockerfile for more info.)

You can generate the documentation using:

docker run -it -v $(pwd)/target:/chameleon/target chameleon cargo doc --all-features
firefox target/doc/chameleon/index.html

Then, you can run the program as follows:

docker run -it chameleon main --help

You can increase the log level (from err to info) by setting the RUST_LOG environment variable:

docker run -it -e RUST_LOG=info chameleon main --help

When running experiments, make sure to mount the folder results as a volume into the container:

docker run -it -v $(pwd)/results:/chameleon/results chameleon eval-overhead --help

Native Toolchain

Alternatively, you can setup your own toolchain. Make sure to install the rust toolchain (using rustup). Make sure you use the nightly toolchain:

rustup toolchain install nightly
rustup toolchain default nightly

Additionally, install coinor cbc (the library) under Ubuntu:

sudo apt-get install coinor-cbc coinor-libcbc-dev

To run the data analysis, install all python requirements listed in analysis/requirements.txt:

cd analysis
python -m venv ./.env
source ./.env/bin/activate
pip install --requirement requirements.txt

Web Application

This repository also contains the code for the web application to run the simulator. The simulator is built as a client-side WASM application, and thus does not require any special server to run it. The web application is hosted at bgpsim.github.io. If the website is down, you can build the web application from source:

To run the application locally (at http://127.0.0.1:8080/), do:

docker run -it -w /chameleon/bgpsim-web --network host chameleon trunk serve --all-features --release

To build the application to static HTML, CSS, JavaScript and WASM files, run the following command:

docker run -it -w /chameleon/bgpsim-web -v $(pwd)/bgpsim-web/dist:/chameleon/bgpsim-web/dist chameleon trunk build --all-features --release

This command will generate the folder bgpsim-web/dist with all needed files. You can simply serve those files from any simple HTTP server (static web server).

About

Taming the transient while reconfiguring BGP (SIGCOMM'23)

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages