All Projects â†’ Baisang â†’ BBB-routing

Baisang / BBB-routing

Licence: BSD-3-Clause license
🅱🅱🅱-routing - a simulation of Network layer protocols with Byzantine Robustness

Programming Languages

python
139335 projects - #7 most used programming language
Makefile
30231 projects

Projects that are alternatives of or similar to BBB-routing

everip
The Elastic Versatile Encrypted Relay for IP (EVER/IP) Networking Suite
Stars: ✭ 32 (+113.33%)
Mutual labels:  mesh-networks, routing
Cjdns
An encrypted IPv6 network using public-key cryptography for address allocation and a distributed hash table for routing.
Stars: ✭ 4,766 (+31673.33%)
Mutual labels:  mesh-networks, routing
Lime Packages
OpenWrt packages composing LibreMesh meta-firmware for wireless mesh networking
Stars: ✭ 204 (+1260%)
Mutual labels:  mesh-networks, routing
ertuo
Ertuo: quick routing for PHP
Stars: ✭ 29 (+93.33%)
Mutual labels:  routing
extjs-reactjs-examples
Code examples for ExtJS to React transition
Stars: ✭ 48 (+220%)
Mutual labels:  routing
craft3-fallback-site
Failing requests in a multi-site install can fall back to other sites, to prevent 404 errors from missing or disabled entries.
Stars: ✭ 14 (-6.67%)
Mutual labels:  routing
routy
Routy is a lightweight high performance HTTP request router for Racket
Stars: ✭ 20 (+33.33%)
Mutual labels:  routing
notes
CCIE routing and switching notes and references, with a general directory and specific topic directories.
Stars: ✭ 23 (+53.33%)
Mutual labels:  routing
api-router
👨 RESTful router for your API in Nette Framework (@nette). Created either directly or via annotation.
Stars: ✭ 18 (+20%)
Mutual labels:  routing
RouteConverter
The popular GPS conversion and editing tool
Stars: ✭ 123 (+720%)
Mutual labels:  routing
golgi
A composable routing library for Haxe.
Stars: ✭ 37 (+146.67%)
Mutual labels:  routing
awesome-full-stack-machine-courses
Curated list of publicly accessible machine learning engineering courses from CalTech, Columbia, Berkeley, MIT, and Stanford.
Stars: ✭ 283 (+1786.67%)
Mutual labels:  berkeley
Cortex-Plugin
Cortex Plugin, a routing system for WordPress
Stars: ✭ 21 (+40%)
Mutual labels:  routing
frontroute
front-end router library for single-page applications built with Scala.js, with an API inspired by Akka HTTP
Stars: ✭ 22 (+46.67%)
Mutual labels:  routing
easyRNRoute
https://medium.com/@kevinle/comprehensive-routing-and-navigation-in-react-native-made-easy-6383e6cdc293#.nttfeeq3p
Stars: ✭ 25 (+66.67%)
Mutual labels:  routing
horse-messaging
Open Source Messaging Framework. Queues, Channels, Events, Transactions, Distributed Cache
Stars: ✭ 65 (+333.33%)
Mutual labels:  routing
bce.design
minimal magic, minimal tooling, essential dependencies, high productivity, no transpilations and no migrations. The Web Components starter ships with integrated lit-html, redux-toolkit and vaadin router components.
Stars: ✭ 67 (+346.67%)
Mutual labels:  routing
url
Build and parse URLs. Useful for HTTP and "routing" in single-page apps (SPAs)
Stars: ✭ 69 (+360%)
Mutual labels:  routing
polymer-ui-router
UI-router wrapper for Web Components
Stars: ✭ 24 (+60%)
Mutual labels:  routing
routing
Aplus Framework Routing Library
Stars: ✭ 186 (+1140%)
Mutual labels:  routing

BBB-routing

🅱🅱🅱-routing - Berkeley Byzantine Block routing, a simulation of Radia Perlman's Network layer protocols with Byzantine robustness (NPBR) scheme with a blockchain database (currently BigchainDB) serving as a trustless public key database.

This project is under active development and details are likely to change radically in the near future.

Basic Structure

The simulation runs on top of the application layer using the python socket interface. Each node is a separate computer that has a simulated router running, which may be benign or malicious, and also an instance of BigchainDB functioning as a distributed public key database. A master node distributes network topologies to all of the nodes for simulation purposes.

Each router uses separate threads to emulate the time-sharing approach described in the NPBR paper. Separate threads are used to disseminate routing information to neighbors, sending data to neighbors, and receiving data from neighbors. Locks are used to guarantee synchronization amongst threads. For this reason, throughput is understandably slow but our intention was not to maximize throughput in our simulation, rather to demonstrate that it is feasible to implement. Routers keep internal state (sequence numbers, sockets between neighbors, etc.) and query BigchainDB for public keys when necessary.

Packets are defined using Python objects and serialized to JSON when needed. Using protobuf or another serialization format was considered, but not implemented due to time constraints.

Single Node Setup

We support installations on Debian Stretch, but this should all work on other Debian based systems as well.

  1. Dependencies. We require the following dependencies to be installed:

All should be install-able from apt or through other instructions linked.

  1. Setup your virtualenv like so:
virtualenv venv --python=python3
. venv/bin/activate

This will set up and activate your virtualenv

  1. Install python packages from requirements.txt:
pip3 install -r requirements.txt
  1. Generate an example BigchainDB configuration file
./scripts/bigchain-configure.py generate

This will create a file .bigchaindb inside of the build/ directory. This file is used for configuration by BigchainDB.

  1. Start MongoDB
docker-compose up -d mdb

The -d flag means deatched, so it'll run in the background. If you want to see the status of your containers, use the docker images command.

  1. Start BigchainDB
docker-compose up bdb

Feel free to use the -d flag here too, if you want.

  1. Start a router
python -m sim.basic_router <IP address to listen on>

We also have a sample malicious router provided that drops all data (FLOOD) packets, sim.byzantine_routers.

  1. Start the master We use a master node to send network topology to each router. The master node is in sim/master.py. It takes in a JSON config file that expresses the topology of the network. Some examples are in sim/topologies.

  2. Cleanup

docker-compose stop mdb
docker-compose stop bdb

You may also want to remove the stopped docker containers as well if you want to reset the BigchainDB database.

Multi-node Setup

We used desktops at the Open Computing Facility (OCF) for multi-node setup. We wrote a script to bootstrap multiple desktops in parallel. This script has many OCF-isms, but should be useful for writing your own script to bootstrap multiple machines as well. The script is in scripts/bigchain-ocf-setup.py and essentially follows the same commands as the single node setup, but on multiple machines.

After setting up BigchainDB on all machines, you can then log into each machine and run routers, have a master distribute the network topology, and then try sending messages from each router to another. A basic message can be sent with the command flood <IP of dest> <count>. Routers will print out each packet they receive and verify.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].