Overview of the RouteViews Tool Suite from Purdue University




1. Introduction

RouteViews has BGP RIBs (Routing Information Bases) in various formats. One format is the Cisco format, which is what you get by running the command show IP BGP on cisco routers, and another is the Zebra format which contains each BGP updates and BGP withdrawals. This data can be used in a variety of ways. BGPlay is a Java application which displays animated graphs of the routing activity of a certain prefix within a specified time interval. Some researchers have worked on using this data for inferring relationships between ASes (Autonomous Systems).

The RouteViews webpage has a number of tools which can be used to work with the data. We developed some tools that take the RouteViews information as input and construct objects which are easy to manipulate, as discussed below. We also include an implementation of one of the algorithms for finding out the relationship between ASes.

The RouteViews data, in conjunction with traceroutes from servers all around the world, can be used to infer topologies for individual ASs. One of the tools soon to be released will create topologies which can be used as input configurations to testbeds like DETER or Emulab, or network simulators.

Below, we give a brief overview and examples. Our tools can be used in other ways as well which you can determine by reading the code.

2. Parsers

Our tools have been compiled for Linux and Solaris. They use the gnu autoconf and automake tools and should be able to work on any supporting platform.

2.1 Cisco Format Parser

The Cisco format parser is based on a tool called straightenRV which is maintained by CAIDA as a part of the Atoms software. This is available for download from CAIDA's webpage.

The straightenRV tool produces a number of processed files from the raw traces which are a result of the 'sh ip bgp' command and can be downloaded from the RouteViews website. The RouteViewBGPTableEntry objects can take a line of the .full file which is produced as the output of the straightenRV tool and provide an easy access to all the fields.
Examples of using this tool exist in the directory routeView/EXAMPLES. A sample is shown below.

Example

If there is file x.full with a line
33 * 3.0.0.0/8 65.106.7.139 2 2828 7018 80 i
Write a program like this to read the file:

//main.cpp
#include<iostream>
#include<fstream>
#include<RouteViewBGPTableEntry.h>

int main() {
std::istream ifn("x.full");
std::string s;
std::getline(ifn, s);
RouteViewBGPTableEntry rvbte(s);
}
To Compile: g++ -I<Directory for the .h files> main.cpp libRouteViewParser.a

2.2 Zebra Format Parser

The Zebra format includes raw BGP updates and withdrawals that can be downloaded from the Routeviews website. A tool named route_btoa can be used to convert the binary traces to machine-readable form. The tool is available from various sources: We used a tool suite named mrt-2.2.2a.tar.gz which is available on sourceforge.
For example, if x.update is the binary file, run
route_btoa -m x.update > machine_readable_file
This machine_readable_file can be given as a constructor parameter to make objects of class RouteViewParser. If there are multiple files consisting of data from a number of files, a vector of file names can be supplied to the constructor.
Examples of using this tool exist in the directory routeView/EXAMPLES. A sample is shown below:

Example

//main.cpp
#include<iostream>
#include<RouteViewParser.h>

int main() {
RouteViewParser rvp("machine_readable_file");
//use rvp, see class reference for details
}
To Compile: g++ -I<Directory for the .h files> main.cpp libRouteViewParser.a

3. AS Relationship Inferrer

This part implements Professor Lixin Gao's algorithm for inferring relationships between ASes [1]. To obtain AS relationships, the Cisco Format tables need to be analyzed. This tool also uses files which are produced by the straightenRV tool that is discussed in Section 2.1. The two output files of straightenRV that are used are the .full and .as files.

The constructor takes a .full and a .as file as input and a file to output the relationships. It also outputs a map from each pair of ASes to the relationships they have which can be used by a developer. The relationships can have multiple values [1], and the tool gives the user a choice of one of two options via the command line. The user can either choose to keep all the relationships output by the AS relationship algorithm via the command line option 'D' (for duplicate) or can only choose to see the last relationship between AS pairs by specifiying 'L' (for last) option.

Example //main.cpp
#include<iostream>
#include<fstream>
#include<ASRelationships.h>

int main() {
std::string DegreeFile="x.as";
std::string fullFile="x.full";
std::string outFile="relations";
ASRelationshipComputer grc(DegreeFile,fullFile,outFile)
//use grc, see class reference for details
}
To Compile: g++ -I<Directory for the .h files> main.cpp libasInference.a libRouteViewParser.a
To run: Either ./a.out L (for a unique relationship between AS pairs)
Or ./a.out D (for possible duplicate relationships between AS pairs)

A sample program which computes AS relations (using code like that shown above) is find_AS_relations.cpp. Please make any necessary changes to that program to point to your directories.

4. References

Wang, F. and Gao, L. 2003. On inferring and characterizing internet routing policies. In Proceedings of the 3rd ACM SIGCOMM Conference on internet Measurement (Miami Beach, FL, USA, October 27 - 29, 2003). IMC '03. ACM Press, New York, NY, 15-26, Available from the ACM Digital library.


Created by: Pankaj Kumar
Last updated by: Ravish Khosla on: December 4th, 2007