OpenR: Open Routing

Open Routing, OpenR, is Facebook’s internally designed and developed Interior Routing
Protocol/Platform. OpenR was originally designed and built for performing routing on the
Terragraph mesh network. OpenR’s flexible design has led to
its adoption in other networks, including Facebook’s new WAN network, Express Backbone.
Documentation
Please refer to our extensive Documentation to get started with OpenR.
Library Examples
Please refer to the examples directory to see some useful ways to
leverage the libraries to build software to run with OpenR.
Resources
Contribute
Take a look at Developer Guide
and CONTRIBUTING.md to get started contributing.
The Developer Guide outlines best practices for code contribution and testing.
Any single change should be well tested for regressions and version
compatibility.
Code of Conduct
The code of conduct is described in CODE_OF_CONDUCT.md
Requirements
We have tried OpenR on Ubuntu-16.04, Ubuntu-18.04 and CentOS 7/8.
OpenR should work on all Linux based platforms.
- Compiler supporting C++17 or higher
Build
Repo Directory Structure
At the top level of this repo are the build and openr directories. Under the
former is a tool, gen, that contains scripts for building the
project. The openr directory contains the source for the project.
Dependencies
OpenR requires these dependencies for
your system and follows the traditional cmake build steps below.
cmake
gflags
gtest
libsodium
zstd
folly
fbthrift
re2-devel
One Step Build - Ubuntu
We’ve provided a script, build/build_openr.sh, tested on Ubuntu LTS releases.
It uses gendeps.py to install all necessary dependencies, compile OpenR and install
C++ binaries as well as python tools. Please modify the script as needed for
your platform. Also, note that some library dependencies require a newer version
than provided by the default package manager on the system and hence we are
compiling them from source instead of installing via the package manager. Please
see the script for those instances and the required versions.
Build Steps
# Install dependencies and build openr
bash ./build/build_openr.sh
# To Run tests (some tests requires sudo privileges)
python3 build/fbcode_builder/getdeps.py test \
--src-dir=. \
--project-install-prefix openr:/opt/facebook \
openr
If you make any changes you can run cmake ../openr and make from the build
directory to build openr with your changes.
Installing
openr builds both static and dynamic libraries and the install step installs
libraries and all header files to /opt/facebook/openr/lib and
/opt/facebook/openr/include/ along with python modules in your Python’s
site-packages directory.
Note: the build_openr.sh script will run this step for you
- Manually you can drive
getdeps.py to install elsewhere
Installing Python Libraries + CLI
You will need python pip or setuptools to build and install python modules.
All library dependencies will be automatically installed except the
fbthrift-python module which you will need to install manually using steps
similar to those described below. This will install breeze, a cli tool to
interact with OpenR.
- Python install requires a
fbthrift / thrift1 compiler to be installed and in PATH
cd openr/openr/py
python setup.py build
sudo python setup.py install
Docker Building / Usage
OpenR now has a Dockerfile. It uses gendeps.py to build all dependencies + OpenR.
docker build --network host .
Running
You can specify a config file by bind mount a directory with a openr.cfg file in /config
docker run --name openr --network host openr_ubuntu
- To use a custom config bind mount
/config into the container
- OpenR binary will look for
/config/openr.conf
License
OpenR is MIT licensed.
OpenR: Open Routing
Open Routing, OpenR, is Facebook’s internally designed and developed Interior Routing Protocol/Platform. OpenR was originally designed and built for performing routing on the Terragraph mesh network. OpenR’s flexible design has led to its adoption in other networks, including Facebook’s new WAN network, Express Backbone.
Documentation
Please refer to our extensive Documentation to get started with OpenR.
Library Examples
Please refer to the
examplesdirectory to see some useful ways to leverage the libraries to build software to run with OpenR.Resources
Contribute
Take a look at
Developer GuideandCONTRIBUTING.mdto get started contributing. The Developer Guide outlines best practices for code contribution and testing. Any single change should be well tested for regressions and version compatibility.Code of Conduct
The code of conduct is described in
CODE_OF_CONDUCT.mdRequirements
We have tried
OpenRon Ubuntu-16.04, Ubuntu-18.04 and CentOS 7/8. OpenR should work on all Linux based platforms.Build
Repo Directory Structure
At the top level of this repo are the
buildandopenrdirectories. Under the former is a tool,gen, that contains scripts for building the project. Theopenrdirectory contains the source for the project.Dependencies
OpenR requires these dependencies for your system and follows the traditional cmake build steps below.
cmakegflagsgtestlibsodiumzstdfollyfbthriftre2-develOne Step Build - Ubuntu
We’ve provided a script,
build/build_openr.sh, tested on Ubuntu LTS releases. It usesgendeps.pyto install all necessary dependencies, compile OpenR and install C++ binaries as well as python tools. Please modify the script as needed for your platform. Also, note that some library dependencies require a newer version than provided by the default package manager on the system and hence we are compiling them from source instead of installing via the package manager. Please see the script for those instances and the required versions.Build Steps
If you make any changes you can run
cmake ../openrandmakefrom the build directory to build openr with your changes.Installing
openrbuilds both static and dynamic libraries and the install step installs libraries and all header files to/opt/facebook/openr/liband/opt/facebook/openr/include/along with python modules in your Python’ssite-packagesdirectory. Note: thebuild_openr.shscript will run this step for yougetdeps.pyto install elsewherebuild_openr.shInstalling Python Libraries + CLI
You will need python
piporsetuptoolsto build and install python modules. All library dependencies will be automatically installed except thefbthrift-pythonmodule which you will need to install manually using steps similar to those described below. This will installbreeze, a cli tool to interact with OpenR.fbthrift/thrift1compiler to be installed and in PATHDocker Building / Usage
OpenR now has a
Dockerfile. It usesgendeps.pyto build all dependencies + OpenR.Running
You can specify a config file by bind mount a directory with a
openr.cfgfile in /config/configinto the container/config/openr.confLicense
OpenR is MIT licensed.