Taming the transient while reconfiguring BGP (SIGCOMM'23)

Related tags

Testing Chameleon
Overview

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).

You might also like...
ripgrep recursively searches directories for a regex pattern while respecting your gitignore
ripgrep recursively searches directories for a regex pattern while respecting your gitignore

ripgrep (rg) ripgrep is a line-oriented search tool that recursively searches the current directory for a regex pattern. By default, ripgrep will resp

A collection of algorithms that can do join between two parties while preserving the privacy of keys on which the join happens

Private-ID Private-ID is a collection of algorithms to match records between two parties, while preserving the privacy of these records. We present tw

handle some lichess.org/tournament load with rust, while learning rust

lila-http Take some of the HTTP load away from lila. WIP! Arena tournaments Clients connected to a tournament page request new data about the tourname

Canary - Distributed systems library for making communications through the network easier, while keeping minimalism and flexibility.
Canary - Distributed systems library for making communications through the network easier, while keeping minimalism and flexibility.

Canary Canary is a distributed systems and communications framework, focusing on minimalism, ease of use and performance. Development of Canary utiliz

Bitcoin Push Notification Service (BPNS) allows you to receive notifications of Bitcoin transactions of your non-custodial wallets on a provider of your choice, all while respecting your privacy

Bitcoin Push Notification Service (BPNS) Description Bitcoin Push Notification Service (BPNS) allows you to receive notifications of Bitcoin transacti

Handle some lichess.org/tournament load with Rust, while learning Rust

lila-http Take some of the HTTP load away from lila. WIP! Arena tournaments Clients connected to a tournament page request new data about the tourname

A simple CLI I made while practicing rust to easily make QR codes with just one command, all in your terminal.
A simple CLI I made while practicing rust to easily make QR codes with just one command, all in your terminal.

Welcome to rust-qrcode-cli 👋 A CLI I made while practicing rust to easily make QR codes with just one command, all in your terminal. Install git clon

Firefox used to have this feature a while back (from Firefox 11 to 46) and it is so good, that I feel it needs revival.
Firefox used to have this feature a while back (from Firefox 11 to 46) and it is so good, that I feel it needs revival.

3D WebPage Inspector By: Seanpm2001, Et; Al. Top README.md Read this article in a different language Sorted by: A-Z Sorting options unavailable ( af A

Functions for mapping plaintexts to a u64 while preserving sort order

ore_encoding.rs This is a companion package to ore.rs that can generate and manipulate u64 plaintexts before they are encrypted by ore.rs. Being able

Make friends while searching.
Make friends while searching.

searchbuddy Make friends while searching! Searchbuddy is a browser extension that lets you chat with people that are searching for what you're searchi

A webapp that reads your articles to you while you're on the subway
A webapp that reads your articles to you while you're on the subway

ReadToMyShoe Video Demo A website that reads articles to you, even when you're offline. Still in early development. This is a full-stack Rust webapp,

Proxies all incoming connections to a minecraft server of your choosing, while also logging all ping and login requests to a json file and discord webhook.

minecraft-honeypot Proxies all incoming connections to a minecraft server of your choosing, while also logging all ping and login requests to a json f

🍅 A command-line tool to get and set values in toml files while preserving comments and formatting

tomato Get, set, and delete values in TOML files while preserving comments and formatting. That's it. That's the feature set. I wrote tomato to satisf

zkPoEX enables white hat hackers to report live vulnerabilities in smart contracts while maintaining the confidentiality of the exploit
zkPoEX enables white hat hackers to report live vulnerabilities in smart contracts while maintaining the confidentiality of the exploit

zkPoEX enables white hat hackers to report live vulnerabilities in smart contracts while maintaining the confidentiality of the exploit, facilitating efficient communication and collaboration between hackers and project owners for a more secure DeFi ecosystem.

Grimsby is an Erlang Port written in Rust that can close its standard input while retaining standard output (and error)

Grimsby An Erlang Port provides the basic mechanism for communication from Erlang with the external world. From the Ports and Port Drivers: Erlang Ref

📱️🚫️🌝️💾️ 3FakeIM is a joke program meant to imitate various fictional characters, and the
📱️🚫️🌝️💾️ 3FakeIM is a joke program meant to imitate various fictional characters, and the "[CHARACTER] CALLED ME AT 3:00 AM" clickbait trend, while poking fun.

3FakeIM 📱️🚫️🌝️💾️ 3FakeIM is a joke program meant to imitate various fictional characters, and the "[CHARACTER] CALLED ME AT 3:00 AM" clickbait tre

A lightweight async Web crawler in Rust, optimized for concurrent scraping while respecting `robots.txt` rules.

🕷️ crawly A lightweight and efficient web crawler in Rust, optimized for concurrent scraping while respecting robots.txt rules. 🚀 Features Concurren

Allow DataFusion to resolve queries across remote query engines while pushing down as much compute as possible down.

DataFusion Federation The goal of this repo is to allow DataFusion to resolve queries across remote query engines while pushing down as much compute a

Hide the X11 mouse pointer while you're typing.

rxbanish: let's play hide the pointer rxbanish is a simple program to hide the X11 mouse pointer while you're typing. It's inspired by the C program x

Owner
Networked Systems Group (NSG)
Research group in Computer Networks at ETH Zürich
Networked Systems Group (NSG)
A library to access BGPKIT Broker API and enable searching for BGP data archive files over time from public available data sources.

BGPKIT Broker BGPKIT Broker is a online data API service that allows users to search for publicly available BGP archive files by time, collector, proj

BGPKIT 10 Nov 30, 2022
MRT/BGP data parser written in Rust.

BGPKIT Parser BGPKIT Parser aims to provides the most ergonomic MRT/BGP message parsing Rust API. BGPKIT Parser has the following features: performant

BGPKIT 46 Dec 19, 2022
BGPKIT Parser aims to provides the most ergonomic MRT/BGP/BMP message parsing Rust API.

BGPKIT Parser aims to provides the most ergonomic MRT/BGP/BMP message parsing Rust API.

BGPKIT 46 Dec 19, 2022
Rust SDK for working with RIS-Live real-time BGP data stream.

ris-live-rs Provides parsing functions for RIS-Live real-time BGP message stream JSON data. The main parsing function, parse_ris_live_message converts

BGPKIT 10 Oct 11, 2022
MASQ Network 121 Dec 20, 2022
ripgrep recursively searches directories for a regex pattern while respecting your gitignore

ripgrep (rg) ripgrep is a line-oriented search tool that recursively searches the current directory for a regex pattern. By default, ripgrep will resp

Andrew Gallant 35k Jan 2, 2023
A programming environment that aims to help people learn how to program in JavaScript, while giving them a tour on how old computers and their limitations used to be.

This repository is for the new under renovation rewrite of the LIKO-12 project. The legacy version with the original stars and contributions is still

null 1k Jan 5, 2023
Midnote is a terminal application that reads a MIDI file and displays you its notes bar-by-bar, while playing it.

MIDNOTE Midnote is a terminal application that reads a MIDI file and displays you its notes bar-by-bar, while playing it. Goals As a blind musician my

null 4 Oct 30, 2022
Collects accurate files while running in parallel through directories. (Simple, Fast, Powerful)

collectfiles Collects accurate files while running in parallel through directories. (Simple, Fast, Powerful) | Docs | Latest Note | [dependencies] col

Doha Lee 2 Jun 1, 2022
Auritia is a DAW coded in Rust and Vue in hopes of having cross platform compatability, while also providing enough features for anyone to use professionally

Steps Install WebView if you're not on Windows 11 Install Node deps npm i To run the dev server do npm run tauri dev Compiling Linux You will need to

Auritia 20 Aug 27, 2022