Pipeline
A Rotonda application consists of multiple components strung together into a pipeline. Currently Rotonda features three different types of components: Connectors, RIBs and Targets.
Data flows from West to East beginning with a connector, through one or more intermediate RIBs and out terminating at at least one target.
Additionally Rotonda has HTTP interfaces to the North and output stream interfaces to the South. The HTTP interfaces to the North may be used to inspect and interact with the application. A RIB extends the HTTP interface with additional capabilities. The target to the South provides support for alternate forms of output such as MQTT event publication and logging/capture to file.
Taken together one can think of the flow of information like so:
(North) HTTP/API │ ▲ │ │ ┌────────▼─┴────────┐ (West) Connector ─●───▶ RIB │───▶ Null Target (East) │ └─────────┬─────────┘ Connector ─┘ │ ▼ Optional MQTT Target (South)
Some type of connectors and all RIBs have programmable roto filters built into them.
Components
A Connector is a component that connects Rotonda to an external source of
BGP data. This may currently be a BGP speaker (a router through a peering
session), a BMP monitored router, or one or multiple MRT files. Rotonda
requires at least one connector to be present. The bmp-tcp-in
and the bgp-tcp-in
connector types have a programmable Roto filter built in.
A RIB is situated at an intermediate stage in the Rotonda pipeline and also has a Roto programmable filter in front of it. It allows users to filter, transform and store BGP (and related) data.
A Target is a component that is situated at a final output stage in Rotonda, it will output BGP data to an external system. Rotonda requires at least one target to be present.
Each component is able to process certain types of input and emit certain types of output. More information about each component type is given in the next sections.
Route & Route Context
All connectors create a session with a designated third-party system and
explode the incoming messages into a stream of (Prefix, Route, RouteContext)
tuples, where Prefix is a IP Prefix, Route is an object representing a
Route according to RFC 4271, i.e. a collection of Path Attributes and
the Next Hop. The RouteContext object contains meta-data about the session.
This RouteContext
object is passed from component to component without
being modified. One important field in this RouteContext
object is the
ingress_id
field. This field refers to a field that is globally assigned
by the Rotonda application to each unique source of routing data. Some
connectors create a stream that only has one ingress_id
, other connectors
produce multiple of these ids.
The RIB component stores — and allows user to retrieve — the routes it
receives per ingress_id
. In other words: the two-tuple (Prefix,
ingress_id)
is the key to a RIB, and the RIB overwrites older values for
this key with new values.
For the bmp-tcp-in
connector Rotonda creates an HTTP endpoint that gives
an overview of all ingress_ids
it produces.
Definition & Configuration
All components have their own section in the configuration file and names
must be unique, types must be valid and any mandatory settings specific to the
component type must be specified. Components are included in the
pipeline by setting the sources
field inside the receiving component to
include the name of the sending component.