Open Routing, OpenR, is Facebook's internally designed and developed routing
protocol/platform. Originally built for performing routing on the Terragraph
network, its awesome design and flexibility have led to its adoption in
other networks at Facebook including our new WAN network, Express Backbone.
Please refer to openr/docs/Overview.md
to get
started with OpenR.
Please refer to the examples
directory to see some useful ways to
leverage the openr and fbzmq libraries to build software to run with OpenR.
- Developer Group: https://www.facebook.com/groups/openr/
- Github: https://github.com/facebook/openr/
Take a look at openr/docs/DeveloperGuide.md
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.
The code of conduct is described in CODE_OF_CONDUCT.md
We have tried OpenR
on Ubuntu-14.04, Ubuntu-16.04 and CentOS-7.
This should work on all Linux based platforms without any issues.
- Compiler supporting C++14 or higher
- libzmq-4.0.6 or greater
At the top level of this repo are the build
and openr
directories. Under the
former is a tool, fbcode_builder
, that contains scripts for generating a
docker context to build the project. The openr
directory contains the
source for the project.
If docker is not a good option for you, you can install these dependencies for your system and follow the traditional cmake build steps below.
cmake
gflags
gtest
libsodium
libzmq
zstd
folly
fbthrift
fbzmq
libnl
We've provided a script, build/build_openr.sh
, well tested on
Ubuntu-16.04, 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.
libnl
also requires custom patch, included herewith, for correct handling of add/remove multicast routes.
Learn more here.
// Step into `build` directory
cd build
// Install dependencies and openr
sudo bash ./build_openr.sh
// Run tests (some tests requires sudo privileges)
sudo make test
If you make any changes you can run cmake ../openr
and make
from the build
directory to build openr with your changes.
openr
builds both static and dynamic libraries and the install step installs
libraries and all header files to /usr/local/lib/
and /usr/local/include/
(under openr subdirectory) along with python modules in site-packages
.
Note: the build_openr.sh
script will run this step for you.
sudo make install
You will need python setup-tools
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.
cd openr/openr/py
python setup.py build
sudo python setup.py install
OpenR is MIT licensed.