Important
If you are looking for the real-time version of BGPlay, please go here.

BGPlay has been installed on a great number of websites, included many for-profit services.
If you are using BGPlay, please consider using a proper acknowledgment on your page where you installed the tool. See here for more information.

Follow BGPlay on Twitter: @BGPlayJS (we cretated the account recently, we will slowly add contents)
What is BGPlay?
The main objective of BGPlay is to provide a graphical and intuitive representation of a portion of the inter-domain routing and its evolution over time. The portion can be specified by the user in terms of Route Collectors, time interval and prefixes, IPs, Autonomous Systems to reach.

The JavaScript web application has been developed as a part of the Master's Thesis of Massimo Candela. The project has been coordinated by the Computer Networks Research Group at Roma Tre University (Italy) in collaboration with the RIPE NCC.

BGPlay runs in a browser without third-party plug-ins. Without a tool like BGPlay, understanding the AS level topology from the data repositories is extremely complex. Even worse if the topology changes in time, like in a real inter-domain routing context where AS-paths change driven by BGP updates. In BGPlay, the evolution of routing can be accurately controlled by the user through an easily usable interface which allows to analyze the topology variations introduced by BGP updates step by step.
BGPlay demo
A demo of BGPlay is loading....
BGPlay main features
For a short but effective description of the main features of BGPlay, we recommend to read the "Main Features" section of the article on RIPE labs.

Visualization features:
Many of our efforts have focused on the visualization of large amount of routing history data in an understandable way. The list below summarize some features:
  • Automatic calculation of the position of the elements in the graphs in order to keep it clear and quickly readable; It is essential that the nodes do not change their position during the evolution of the routing in order to maintain the mental map. For this reason, the position of the nodes (including disconnected nodes) is computed once at initialization time.
  • The paths, except for static paths, are straight-lines coloured using different and unique colors. Each color is extracted from a predefined set filled with an algorithm that generates colors distinguishable by the human eye, so that each path can be unambiguously identified;
  • Paths that do not change their route for the entire time window are called static paths and represented by dashed lines;
    Static paths are divided in different colored trees and paths into the same tree are collapsed in a single dashed line.
    A path is part of a tree if and only if collapsing it does not introduces visualization ambiguities.
    This approach reduces dramatically the number of connections represented in the scene without losing information;
  • Paths between edges are arranged in a metro-line fashion. The consistency of the position of a path in a beam traversing the same set of edges is guaranteed. In this way it is easy to understand how a path connects a set of nodes;
  • You can focus in a portion of the graph hovering over a node or a path;
How can I visualize my data with BGPlay?
This version of BGPlay inherits the advantages of the BGPlay.js framework in which it is developed, including the flexibility in terms of usable data sources. You don't need a server-side manipulation or analysis of the data. You don't need a back-end for the computation of the graph. You only need to convert your routing data in our JSON format or use your JSON format and adapt it with a client-side wrapper.

For a good explanation of our JSON format read the BGPlay section of the documentation of the RIPE stat data api.

For a stable installation of BGPlay, you should take into account the possibility to develop a service providing the required JSON. In this way you can configure the connection layer to interact with the JSON service in order to dynamically satisfy queries.

Connection layer for your JSON service:
  1. Create or Edit a JSON Wrapper replacing in getJsonUrl() the URL of your JSON service;
  2. Edit getParams() and setParams() making it suitable for the exchange of parameters from/to the tool. In particular getParams() converts the parameters from the URL/HTML/external code in those valid inside the tool. Instead, setParams() converts the internal parameters in those valid for the URL/HTML/external code;
  3. If you changed the JSON structure, for example introducing new attributes for the objects in the scene, remember to change accordingly the JsonWrapper. In particular the createNodes(), createSources(), createTargets(), createEvents(), and createInitialState() methods.
How can I implement other visualizations/features?
Implement your module as a Backbone.js View and declare it in your modules.js.
Include any HTML snippet required to your module in the html directory and use the parseTemplate() method to automatically load and parse it. The template system is based on Mustache.js.
How can I embed BGPlay in my web page?
For a standard instance of BGPlay, we recommend to use the embedding code provided by the BGPlay RIPE stat widget.

If you wish to embed a personalized version of BGPlay:
  1. Load the initializer of the widget environment <script src="widget/bgplayjs-main-widget.js"></script>;
  2. Declare the DOM element where BGPlay will be placed <div id="bgplay"></div>;
  3. Initialize the widget as follows
Available parameters:
  • resource: a comma-separated list of resources (Prefixes, ASes or IPs);
  • starttime: a unix timestamp defining the start of the time interval covered in the query;
  • endtime: a unix timestamp defining the end of the time interval covered in the query;
  • rrcs: a comma-separated list of Route Collectors that will be used as a filter in the query;
  • ignoreReannouncements: a boolean, if true BGP reannouncement will be ignored;
  • showResourceController: a boolean to show or hide the Resource section of the query panel;
  • preventNewQueries: a boolean, if true the widget will show only the predefined query;
  • instant: a string describing the initial position of the time cursor inside the queried time window;
  • nodePositions: a JSON describing the position of all the objects in the scene. Useful in case of manual tuning;
Each module can introduce new parameters, read the documentation of the module for an extensive list.
A bit of history
The first version of BGPlay was a powerful Java applet created by the Computer Networks Research Group at Roma Tre University. The tool was hosted at the RIPE NCC (using the RIS database as a data source) from May 2004 to July 2009. Currently, an instance of BGPlay is hosted by the University of Oregon and uses ORV data.

The new JavaScript BGPlay integrated in RIPE stat was presented by Massimo Candela on 2013-05-16 during the RIPE 66 meeting. You can find the presentation (pdf + video) here.

Past publications:
Visualizing Interdomain Routing with BGPlay: Lorenzo Colitti, Giuseppe Di Battista, Federico Mariani, Maurizio Patrignani, Maurizio Pizzonia.