Changes between Initial Version and Version 1 of OpenFlow/GeniBackboneTest


Ignore:
Timestamp:
03/16/12 12:15:18 (12 years ago)
Author:
Josh Smift
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • OpenFlow/GeniBackboneTest

    v1 v1  
     1= Testing OpenFlow in the GENI backbone =
     2
     3This page describes a procedure for testing that an experimenter can allocate resources in the GENI OpenFlow backbone, and send traffic through them. We might want to do this to test a FOAM or FlowVisor upgrade at Internet2 or NLR, for example.
     4
     5Pre-requisites/assumptions:
     6
     7 * You're only testing the OpenFlow backbone in Internet2 and NLR, and not any GENI core resources at regionals.
     8 * You'll use 10.42.17.0/24 as the IP subnet to test with; this is normally reserved to jbs@bbn.com, so either check with him before using it, or use a different subnet.
     9 * You're using mesoscale MyPLC plnodes at BBN (via Internet2) and Indiana (via NLR), which have dataplane addresses already configured on this subnet, to send and receive traffic via VLAN 3716 in the core.
     10 * You're set up to use Omni in general, and have it in your path as 'omni', i.e. you've successfully used Omni to reserve GENI resources (and have the latest version of the software, a user credential signed by a CA that's trusted by the I2 and NLR FOAM aggregates and the GPO Lab MyPLC aggregate, a working omni_config file, etc).
     11 * You have valid request rspec files to test with. There are example rspecs [source:trunk/wikifiles/geni-backbone-test here], but NOTE that they do not contain a valid e-mail address, so they MUST be modified to include one (as of FOAM 0.6.3), and MAY need to be modified to point to a different controller, if you use something other than than what's below for $ofctrlhost and $ofctrlport.
     12 * You know what output to expect when common things succeed. (Expected output is described here only in cases where an error is the expected result, or where it otherwise might not be obvious; if you think the expected output isn't obvious for any given step, let us know.)
     13
     14= Procedure =
     15
     16Here's the full procedure for doing this.
     17
     18== Setup ==
     19
     20This section sets some variables that later sections use. The values below are the ones JBS uses when we do this at BBN; you may need to change some of them for your own use.
     21
     22Set your slicename:
     23
     24{{{
     25slicename=jbs17
     26}}}
     27
     28Set the names of your rspec files (if needed, modify these examples (which are BBN-specific) to use the path to your rspec files):
     29
     30{{{
     31foam_bbn_rspec=~/rspecs/request/$slicename/openflow-bbn-$slicename.rspec
     32foam_indiana_rspec=~/rspecs/request/$slicename/openflow-indiana-$slicename.rspec
     33foam_internet2_rspec=~/rspecs/request/$slicename/openflow-internet2-$slicename.rspec
     34foam_nlr_rspec=~/rspecs/request/$slicename/openflow-nlr-$slicename.rspec
     35myplc_bbn_rspec=~/rspecs/request/misc/myplc-bbn-all.rspec
     36}}}
     37
     38Set the URLs of the aggregate managers:
     39
     40{{{
     41foam_bbn_am=https://foam.gpolab.bbn.com:3626/foam/gapi/1
     42foam_indiana_am=https://foam.noc.iu.edu:3626/foam/gapi/1
     43foam_internet2_am=https://foam.net.internet2.edu:3626/foam/gapi/1
     44foam_nlr_am=https://foam.nlr.net:3626/foam/gapi/1
     45myplc_bbn_am=https://myplc.gpolab.bbn.com:12346/
     46}}}
     47
     48Set the name, address, and port of the OpenFlow control host:
     49
     50{{{
     51ofctrlhost=navis.gpolab.bbn.com
     52ofctrlport=33017
     53oflaviport=11017
     54}}}
     55
     56Set the names of the source and destination test hosts:
     57
     58{{{
     59src_host=ganel.gpolab.bbn.com
     60dst_host=pl4-net-10-42-17.indiana.dataplane.geni.net
     61}}}
     62
     63Set the MyPLC username you'll need to log in to your plnodes:
     64
     65{{{
     66username=pgenigpolabbbncom_$slicename
     67}}}
     68
     69== Get resources ==
     70
     71Create your slice, and make sure it won't expire for a few days:
     72
     73{{{
     74omni createslice $slicename
     75omni renewslice $slicename "$(date -d 'now + 3 days')"
     76}}}
     77
     78Create FOAM slivers at BBN, Indiana, Internet2, and NLR:
     79
     80{{{
     81omni -a $foam_bbn_am createsliver $slicename $foam_bbn_rspec
     82omni -a $foam_indiana_am createsliver $slicename $foam_indiana_rspec
     83omni -a $foam_internet2_am createsliver $slicename $foam_internet2_rspec
     84omni -a $foam_nlr_am createsliver $slicename $foam_nlr_rspec
     85}}}
     86
     87Create a MyPLC sliver at BBN:
     88
     89{{{
     90omni -a $myplc_bbn_am createsliver $slicename $myplc_bbn_rspec
     91}}}
     92
     93NOTE that you may need to wait until your FOAM slivers are approved; you should get e-mail from each of the four FOAM aggregates when they are. Until you do, you can continue with the next section ("Set up your OpenFlow controller") meanwhile, but not beyond that.
     94
     95== Set up your OpenFlow controller ==
     96
     97Log in to your OpenFlow controller host:
     98
     99{{{
     100ssh $username@$ofctrlhost
     101}}}
     102
     103All the rest of the commands in this section are run on that host.
     104
     105Add to your .bash_profile some of the variables that you set earlier, so you'll have them whenever you log in here:
     106
     107{{{
     108echo "export ofctrlport=33017" >> .bash_profile
     109echo "export oflaviport=11017" >> .bash_profile
     110. .bash_profile
     111}}}
     112
     113These next steps to download and install NOX are copied from http://groups.geni.net/geni/wiki/HowTo/RunNoxInFedora8. It may take an hour or more to complete all of these steps.
     114
     115Install the Development Tools packages:
     116
     117{{{
     118sudo yum groupinstall "Development Tools"
     119}}}
     120
     121Install other packages that NOX depends on:
     122
     123{{{
     124sudo yum install python-twisted libpcap-devel git-core openssl-devel boost-devel python-simplejson
     125}}}
     126
     127Download and and install GCC 4.2.4:
     128
     129{{{
     130cd
     131wget http://mirrors-us.seosue.com/gcc/releases/gcc-4.2.4/gcc-4.2.4.tar.bz2
     132tar -xvjpf gcc-4.2.4.tar.bz2
     133mkdir gcc-obj
     134cd gcc-obj
     135../gcc-4.2.4/configure
     136make
     137sudo make install
     138}}}
     139
     140That may take half an hour or so.
     141
     142Download and install NOX:
     143
     144{{{
     145cd
     146git clone git://noxrepo.org/nox
     147cd nox
     148./boot.sh
     149mkdir ../nox_build
     150cd ../nox_build
     151../nox/configure
     152make -j 5
     153}}}
     154
     155That may take another half hour or so.
     156
     157Start up the controller:
     158
     159{{{
     160cd ~/nox_build/src
     161./nox_core --info=$HOME/nox-${ofctrlport}.info -i ptcp:$ofctrlport switch lavi_switches lavi_swlinks jsonmessenger=tcpport=$oflaviport,sslport=0
     162}}}
     163
     164Your controller is now ready and listening; to do anything further, you need to wait until your FOAM slivers are approved.
     165
     166== Run tests ==
     167
     168Once your FOAM slivers are approved, you can confirm that the backbone OpenFlow switches are connecting to your controller, and test that you can send traffic on your subnet.
     169
     170=== Confirm connections ===
     171
     172Log in to your OpenFlow controller host:
     173
     174{{{
     175ssh $username@$ofctrlhost
     176}}}
     177
     178On your OpenFlow controller host, create a patched version of the nox-console program:
     179
     180{{{
     181cd
     182wget http://groups.geni.net/geni/export/HEAD/trunk/wikifiles/geni-backbone-test/nox-console.patch -O nox-console.patch
     183mkdir -p bin
     184patch -o ~/bin/nox-console ./nox/src/scripts/nox-console.py nox-console.patch
     185chmod 755 ~/bin/nox-console
     186rm nox-console.patch
     187}}}
     188
     189On your OpenFlow controller host, use nox-console to display a sorted list of DPIDs that are connected to your controller:
     190
     191{{{
     192nox-console -n localhost -p $oflaviport getnodes | sort
     193}}}
     194
     195This should produce output like:
     196
     197{{{
     19800:00:0e:84:40:39:18:1b
     19900:00:0e:84:40:39:18:58
     20000:00:0e:84:40:39:19:96
     20100:00:0e:84:40:39:1a:57
     20200:00:0e:84:40:39:1b:93
     20306:d6:00:12:e2:b8:a5:d0
     20406:d6:00:16:b9:cf:fc:40
     20506:d6:00:24:a8:c4:b9:00
     2060e:84:00:23:47:c8:bc:00
     2070e:84:00:23:47:ca:bc:40
     2080e:84:00:24:a8:d2:48:00
     2090e:84:00:24:a8:d2:b8:40
     2100e:84:00:26:f1:40:a8:00
     211}}}
     212
     213The first five are from Internet2, the last five are from NLR, and the middle three are from BBN, Indiana, and BBN, respectively.
     214
     215=== Test connectivity ===
     216
     217Log in to the source test host:
     218
     219{{{
     220ssh $username@src_host
     221}}}
     222
     223Add to your .bash_profile some of the variables that you set earlier, so you'll have them whenever you log in here:
     224
     225{{{
     226echo "dst_host=pl4-net-10-42-17.indiana.dataplane.geni.net" >> .bash_profile
     227. .bash_profile
     228}}}
     229
     230Ping the destination test host:
     231
     232{{{
     233ping -c 10 $dst_host
     234}}}
     235
     236The first few packets may take a second or two; the rest should have a consistent RTT.
     237
     238== Cleanup ==
     239
     240Stop your OF controller (with ctrl-c), and log out of any MyPLC plnodes that you're still logged in to.
     241
     242Delete your slivers:
     243
     244{{{
     245omni -a $foam_bbn_am deletesliver $slicename
     246omni -a $foam_indiana_am deletesliver $slicename
     247omni -a $foam_internet2_am deletesliver $slicename
     248omni -a $foam_nlr_am deletesliver $slicename
     249omni -a $myplc_bbn_am deletesliver $slicename
     250}}}
     251