[[PageOutline]] '''[wiki:GENIExperimenter/Tutorials/SystematicExprCaseStudy#ATutorialonSystematicExperimentalDesign A Tutorial on Systematic Experimental Design]''' '''[wiki:GENIExperimenter/Tutorials/SystematicExprCaseStudy/InstallSoftwareQuagga Step I: Single Node]''' '''[wiki:GENIExperimenter/Tutorials/SystematicExprCaseStudy/SmallTopoQuagga Step II: Small Topology]''' {{{ #!html
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. [[Image(GENIExperimenter/Tutorials/SystematicExprCaseStudy/SmallTopo/DesignSetup:4node-config.png, 50%)]] == 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. === i. Create VMs and Virtual Links === 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 [wiki:GENIExperimenter/Tutorials/SystematicExprCaseStudy/InstallSoftwareQuagga#a2.CustomizeYourVM Verify Custom Image] section. You may use the the value https://www.utahddc.geniracks.net/image_metadata.php?uuid=570dc911-2f2b-11e6-9a79-000099989701 in the `Disk Image` option for each router in this topology. [[Image(GENIExperimenter/Tutorials/SystematicExprCaseStudy/SmallTopo/DesignSetup:SmallTopo.jpg, 60%)]] 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: [[Image(GENIExperimenter/Tutorials/SystematicExprCaseStudy/SmallTopo/DesignSetup:ConfigIF.jpg, 60%)]] (1) Click on the link to be configured [[BR]] (2) Enter Address for one interface [[BR]] (3) Scroll down and enter address for the other interface part of the link. [[BR]] (4) Repeat for each of the list shown in the network configuration address assignment list. [[BR]] === iii. Delete Routes installed by InstaGENI === To overcome the issues faced in topologies with loops due to the way routes are installed in InstaGENI, we need to delete those routes on each node. This can be done by turning off and then turning on all the interfaces on a node except ''' ''eth0'' '''. The script to do this task can be found at ''' ''http://www.gpolab.bbn.com/experiment-support/Utilities/ClearRoutesIG.tar.gz'' '''. (1) Click on the node to be configured [[BR]] (2) Scroll down till you see ''Install Tarball'' and click on ''Add''. [[BR]] (3) Enter the url ''http://www.gpolab.bbn.com/experiment-support/Utilities/ClearRoutesIG.tar.gz''. Enter ''/local'' as the ''Install Path''. [[BR]] (4) Scroll down till you see ''Execute Command'' and click on ''Add''. Enter ''sh /local/ClearRoutesIG.sh'' in the box. [[BR]] === iv. Disable RP Filtering === Reverse Path Filtering is enabled by default in Linux. This creates issues for topologies with loops. Hence we have to disable Reverse Path Filtering on all interfaces except ''' ''eth0'' '''. The script to turn off Reverse Path Filtering can be found at ''' ''http://www.gpolab.bbn.com/experiment-support/Utilities/DisableRPFiltering.tar.gz'' '''. 1) Click on the node to be configured [[BR]] (2) Scroll down till you see ''Install Tarball'' and click on ''Add''. [[BR]] (3) Enter the url ''http://www.gpolab.bbn.com/experiment-support/Utilities/DisableRPFiltering.tar.gz''. Enter ''/local'' as the ''Install Path''. [[BR]] (4) Scroll down till you see ''Execute Command'' and click on ''Add''. Enter ''sh /local/DisableRPFiltering.sh'' in the box. [[BR]] === v. 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. [[Image(SaveRSpec.jpg,60%)]] {{{ #!html
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: [[Image(ReserveResources.jpg)]] == 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 }}} = 2. 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 `Quagga_4node_rspec.xml` on the GENI Portal 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, follow the same steps as we followed in the [wiki:GENIExperimenter/Tutorials/SystematicExprCaseStudy/InstallSoftwareQuagga#a4.VerifyInstaGENICustomImage Load Custom Image] section. We also need to delete any routes installed by InstaGENI. Follow the steps followed in ''section iii'' of ''Create a Virtual Network''. Also we need to install `iperf` separately. In this example, there are only two hosts which 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. The install scripts for client and server can be downloaded from [http://www.gpolab.bbn.com/exp/sysexpr/install_script.tar.gz here]. An sample RSpec with iperf install script and execute command can be downloaded at [http://www.gpolab.bbn.com/exp/sysexpr/rspec-for-wiki/4node-v4.rspec `4node-v4.rspec`]. [[Image(GENIExperimenter/Tutorials/SystematicExprCaseStudy/SmallTopo/DesignSetup:4node-add-endhosts.png)]] '''SAVE''' the new RSpec to `4node-v4.rspec`, when all nodes have been reserved. '''[wiki:GENIExperimenter/Tutorials/SystematicExprCaseStudy/SmallTopoQuagga Small Topology: Introduction]''' '''[wiki:GENIExperimenter/Tutorials/SystematicExprCaseStudy/SmallTopoQuagga/Execute Small Topology: Execute]'''