wiki:GENIExperimenter/Tutorials/SystematicExprCaseStudy/SmallTopoQuagga/DesignSetup

Version 4 (modified by pjayanth@bbn.com, 3 years ago) (diff)

--

A Tutorial on Systematic Experimental Design

Step I: Single Node

Step II: Small Topology

Image Map

1. Software Configuration

Once we have installed the software on the VM, we may need to configure the software, and automate the configuration process for every node used in an experiment. For this tutorial, since we are setting a virtual routing environment, we will need to configure the routing protocol (e.g., OSPF protocol) for Quagga. Again, let's start with the smallest reasonable topology, which is a four-router virtual topology as shown below. The reason that we chose the four-router topology is that we need at least one pair of routers that are not directly connected to each other and each router must have at least two virtual interfaces.

a. Create Virtual Network

As we have mentioned, a four-router topology is the smallest topology to configure and verify the OSPF routing. In this part, we illustrate how to create a virtual network with four virtual routers.

Create four VMs from the same InstaGENI aggregate and add the links. Modify each VM's name, set the Sliver Type to emulab-xen, and load the custom image by following the steps in the Load Custom Image section. You may use the the value urn:publicid:IDN+utahddc.geniracks.net+image+ch-geni-net:UbuntuQuagga in the Disk Image option for each router in this topology.

The network configuration address assignment is given below:

 router-1 (.1) <-----> router-2 (.2) on 192.168.1.0/24
 router-2 (.1) <-----> router-3 (.2) on 192.168.2.0/24
 router-3 (.1) <-----> router-4 (.2) on 192.168.3.0/24
 router-4 (.1) <-----> router-1 (.2) on 192.168.4.0/24
 router-2 (.1) <-----> router-4 (.2) on 192.168.5.0/24

ii. Configure Virtual Interfaces

Configure the virtual interfaces' IP addresses of each link as outlined in the network configuration address assignment list above:

(1) Click on the link to be configured
(2) Enter Address for one interface
(3) Scroll down and enter address for the other interface part of the link
(4) Repeat for each of the list shown in the network configuration address assignment list

iii. Save the Current RSpec

For version control purposes, it is important to save the resource request specification (RSpec) at each step. Thus, once we have defined the topology above, we select the Download button to save an intermediate version of your RSpec.

Note The download command does not allow naming it simply uses the slice name to generate a RSpec file. We have save a copy of this RSpec, which you may choose to download, available at here

You may now reserve your resources by scrolling to the bottom of the Add Resources page ans clicking on the Reserve Resources button:

b. Manually Configure OSPF for Quagga

In this tutorial we configure each VM as a virtual router running the OSPF routing protocol. The commands used for configuring OSPF can be found at http://www.nongnu.org/quagga/docs/docs-info.html#OSPFv2

To configure OSPF on router 1, do the following steps:

pjayant@router-1:~$ sudo su
root@router-1:/users/pjayant# vtysh

Hello, this is Quagga (version 0.99.22.4).
Copyright 1996-2005 Kunihiro Ishiguro, et al.

router-1.quagga.ch-geni-net.utahddc.geniracks.net# conf t
router-1.quagga.ch-geni-net.utahddc.geniracks.net(config)# router ospf
router-1.quagga.ch-geni-net.utahddc.geniracks.net(config-router)# network 192.168.1.0/24 area 0
router-1.quagga.ch-geni-net.utahddc.geniracks.net(config-router)# network 192.168.4.0/24 area 0

Similarly on routers 2,3 & 4; configure OSPF by following the above steps and adding networks 192.168.1.0/24, 192.168.2.0/24, 192.168.3.0/24, 192.168.4.0/24 & 192.168.5.0/24 to area 0.

c. Verify Routing

View the OSPF routing table on router 1:

router-1.quagga.ch-geni-net.utahddc.geniracks.net(config-router)# do sh ip ospf  route  
============ OSPF network routing table ============
N    192.168.1.0/24        [10] area: 0.0.0.0
                           directly attached to eth3
N    192.168.2.0/24        [20] area: 0.0.0.0
                           via 192.168.1.2, eth3
N    192.168.3.0/24        [20] area: 0.0.0.0
                           via 192.168.4.1, eth1
N    192.168.4.0/24        [10] area: 0.0.0.0
                           directly attached to eth1
N    192.168.5.0/24        [20] area: 0.0.0.0
                           via 192.168.1.2, eth3
                           via 192.168.4.1, eth1

============ OSPF router routing table =============

View the OSPF routing table on router-3:

router-3.quagga.ch-geni-net.utahddc.geniracks.net(config-router)# do sh ip ospf  route  
============ OSPF network routing table ============
N    192.168.1.0/24        [20] area: 0.0.0.0
                           via 192.168.2.1, eth2
N    192.168.2.0/24        [10] area: 0.0.0.0
                           directly attached to eth2
N    192.168.3.0/24        [10] area: 0.0.0.0
                           directly attached to eth3
N    192.168.4.0/24        [20] area: 0.0.0.0
                           via 192.168.3.2, eth3
N    192.168.5.0/24        [20] area: 0.0.0.0
                           via 192.168.2.1, eth2
                           via 192.168.3.2, eth3

Since router-1 and router-3 are not directly connected, by OSPF routing, we should be able to run ping and traceroute between them.

router-3.quagga.ch-geni-net.utahddc.geniracks.net(config-router)# do ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=63 time=2.03 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=63 time=1.86 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=63 time=1.72 ms
^C
--- 192.168.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 1.722/1.871/2.031/0.131 ms
router-3.quagga.ch-geni-net.utahddc.geniracks.net(config-router)# do traceroute 192.168.1.1
traceroute to 192.168.1.1 (192.168.1.1), 30 hops max, 60 byte packets
 1  router-2-link-1 (192.168.2.1)  1.161 ms  1.117 ms  1.042 ms
 2  router-1-link-0 (192.168.1.1)  2.213 ms  2.161 ms  2.101 ms

d. Install Script

Launch Flack for your slice, and import the RSpec 4node-v1.rspec we just saved.

Click Import and select Import from file from the pull-down list, then select 4node-v1.rspec from the location where you have just saved to, and confirm it. You will see the four-node topology on your canvas, and each node has been configured to have the custom image.

Now, we are ready to add an install script by editing the node property. For each node, click to see the node information. By clicking , we are able to add a service that usually refers to an install script. In this tutorial, we will add an install script called xorp_autostart.tar.gz, by entering the link http://www.gpolab.bbn.com/exp/sysexpr/xorp_autostart.tar.gz, and the install path is set as /local. By clicking , we can add the commend that execute the install script. In the execute box, we enter /bin/bash /local/xorp_autostart/start-xorp.sh, and the shell type is sh.

Once we added the service and the execute service in Flack, apply the changes and submit the VM reservation request, the OSPF configuration file will be automatically created and the XORP will be started at router-1 once it is initialized.

Repeat the same procedures for the other three routers (i.e., router-2, router-3, router-4), and then submit the request. When all resources are ready, Save the RSpec as 4node-v2.rspec at this stage, we will load this RSpec in the next step to get the same setup. (You can download a sample RSpec for 4node-v2.rspec at here)

Setting up the install script will automate installation or configuration process at every node's postboot stage, and we do not need to login to every node to run start-xorp.sh manually.

2. Impact to Request RSpec

Whenever we make a change to node information or link information in Flack, the user request RSpec is modified accordingly. In other words, we can rely on Flack to easily modify the request RSpec.

Now let's take a look at how the steps Load a Custom Image and Adding Install Scripts will modify the request RSpec. For instance, before adding the custom image and install scripts, the RSpec describing router-1 was like:

<node client_id="router-1" component_manager_id="urn:publicid:IDN+instageni.stanford.edu+authority+cm" component_id="urn:publicid:IDN+instageni.stanford.edu+node+pc3" component_name="pc3" exclusive="false">
    <vnode name="pcvm3-3" xmlns="http://www.protogeni.net/resources/rspec/ext/emulab/1"/>
    <location latitude="37.43" longitude="-122.17" country="US"/>
    <interface client_id="xen-0:if0">
      <ip address="192.168.1.1" netmask="255.255.255.0" type="ipv4"/>
      <flack:interface_info addressBound="true" bound="false"/>
    </interface>
    <interface client_id="xen-0:if1">
      <ip address="192.168.4.2" netmask="255.255.255.0" type="ipv4"/>
      <flack:interface_info addressBound="true" bound="false"/>
    </interface>
    <flack:node_info x="150" y="407" unbound="true"/>
  </node>

First, when we added the custom image (see Load a Custom Image), a new tag <sliver> will be added to router-1's RSpec, which is

  <sliver_type name="emulab-xen">
      <disk_image url="https://www.instageni.clemson.edu/image_metadata.php?uuid=5417bcef-224e-11e4-aa5a-000000000000"/>
  </sliver_type>

Secondly, when we added the install scripts (see Adding Install Scripts), a new tag <service> will be added to router-1's RSpec, which is

   <services>
      <execute command="/bin/bash /local/xorp_autostart/start-xorp.sh" shell="sh"/>
      <install install_path="/local" url="http://www.gpolab.bbn.com/exp/sysexpr/xorp_autostart.tar.gz"/>
   </services>

This indicates that we can add custom image and postboot scripts by directly modifying the request RSpec, this is helpful when we have a larger topology.

3. Script to Capture Routing Table Periodically

In this tutorial, one metric we would like to evaluate is how often the routing table will be updated when there is a link/node failure. To emulate a link failure, we can disable the virtual interfaces, and to emulate a virtual router failure, we can stop the XORP process at the virtual router. A short script (downloaded from here is available to be loaded as an install script.

Delete any existing resources or create a new slice, LOAD the RSpec 4node-v2.rspec, and add a new install service to every node in Flack. Now, the service portion for each node becomes to

    <services>
      <execute command="/bin/bash /local/xorp_autostart/start-xorp.sh" shell="sh"/>
      <install install_path="/local" url="http://www.gpolab.bbn.com/exp/sysexpr/xorp_autostart.tar.gz"/>
      <install install_path="/local" url="http://www.gpolab.bbn.com/exp/sysexpr/xorp_run.tar.gz"/>
    </services>

After adding the new install script to every node, send the resource reservation request. When all nodes are ready to login, we save the new modified RSpec as 4node-v3.rspec. (You can download a sample RSpec for 4node-v3.rspec at here)

In the next step, we will add two end hosts to current four-node topology, so now we can delete existing resources from the current slice.

4. Add End Hosts and Install iperf

Once we have verified the routing functions for the virtual router, we add end hosts to validate the end-to-end communication. As the figure shows below, we create the same four-node topology by loading 4node-v3.rspec in Flack, and create two more VMs as a client and a server, and add two virtual links. The links between end-hosts and edge routers are configured as below:

client ----- router-1: 192.168.10.0/24
server ----- router-3: 192.168.20.0/24
client: 192.168.10.11
server: 192.168.20.10

For client and server, we select regular Ubuntu 12.04 OS in the node information, so we need to install iperf separately. In this example, there are only two hosts need iperf installed, so one option is to login to each host, and manually install it by running

sudo apt-get install iperf

Or, we can also write a script to install iperf to the client and server, load it as an install script by following the same steps as we just did for XORP. The install scripts for client and server can be downloaded from here. An sample RSpec with iperf install script and execute command can be downloaded at `4node-v4.rspec`.

SAVE the new RSpec to 4node-v4.rspec, when all nodes have been reserved.

Small Topology: Introduction

Small Topology: Execute

Attachments (27)

Download all attachments as: .zip