All that makes it easy to allocate, experiment with, and evaluate an IXP-based application.
Currently, we have installed 8 ENP2505 cards (aka Bridalveil), with Intel SDK 2.01 software. We hope to incorporate more IXP1200 nodes as we make space in our machine room, and also IXP2400 cards as resources permit.
To start using IXP nodes in Emulab, you first need an account in Emulab. See Emulab Documentation for more details; especially if you are using Emulab for the first time.
Here's a sample ns file, which allocates an IXP1200 node and two
end-nodes connected in a simple linear topology.
When the above ns file is submitted, Emulab creates an experiment with
the requested nodes, creates the topology specified above, and does
the following:
# Boilerplate
source tb_compat.tcl
set ns [new Simulator]
# Create an ixp node
set myixp [$ns node]
# Set its hardware type to ixp-bv (bridalveil)
tb-set-hardware $myixp ixp-bv
# XXX temporary: explicitly name the IXP host, bind it to the IXP and
# set its OS. (We should automatically set the OS so these steps would
# not be required.)
set ixphost [$ns node]
tb-bind-parent $myixp $ixphost
tb-set-node-os $ixphost RHL73-IXPHOST
# Create end nodes
set n0 [$ns node]
set n1 [$ns node]
# Create links between the end nodes and the IXP
$ns duplex-link $n0 $myixp 100Mb 0ms DropTail
$ns duplex-link $myixp $n1 100Mb 0ms DropTail
# Set up static routing on all nodes,
$ns rtproto Static
# Boilerplate
$ns run
telnet -l root myixp.myexp.myproj.emulab.net
where myixp is the name of your ixp card in your ns file, myexp is your experiment name and myproj is your project name.
sudo minicom ixp
Once logged into the card, do the following:
cd /opt/ixasdk/bin/arm-be
./ixstart /opt/config/ixsys.l3fwdr
This will start up the reference L3Fwdr application on the card. You can then ping the end-nodes through the IXP router, or ping the end-nodes from the IXP.
You can use Netbuild , a Java GUI, for creating your experiment topology. See Netbuild Documentation for details. When setting the type of the IXP node, use ixp-bv.
Your ns script can include this:
tb-set-node-startup $myixp "/opt/ixasdk/bin/arm-be/mycustomapp /opt/ixasdk/bin/arm-be/mycustomapp.config"
This will start up the above command line on the IXP1200 card after the card has booted up. To create a config file for your custom application, you might need access to interface/route configuration that Emulab has generated. This information is stored by Emulab in a file whose path is exported on the card in the environment variable $USERCONFIG.
The $USERCONFIG file has interface/route configuration lines with the following format:
# route destination netmask gateway interface-number
route 10.1.2.2 255.255.255.0 0.0.0.0 0
# interface number IP Netmask Broadcast Mac
interface 0 10.1.2.2 10.1.2.255 255.255.255.0 00:00:AC:11:AC:00
This format is deliberatly similar to the format used by MicroAce config files. This information can be used by your startup command to generate config files on the fly and then invoke your custom application with the generated config files.
For example, consider an application which does routing (using the Intel L3Fwdr reference design) and adds its own functionality like Filtering. Your startup command can use the emulab config file to generate the route config files, then invoke your application with these config files. Your application (for example ixconfig) in turn will configure all the MicroAces, download code to the microengines etc.
tb-set-node-startup $myixp "/opt/ixasdk/bin/arm-be/ixstart /opt/config/ixsys.l3fwdr"
This will initialize and download Intel's L3Fwdr Reference design to the microengines.
cd /opt/ixasdk/bin/arm-be
./ixstart /opt/config/ixsys.l3fwdr
Test the application by using ping between the end-nodes.
/opt/ixasdk/bin/arm-be/ixstart /opt/config/ixsys.l3fwdr
Then reboot the IXP host, this time you do not have to manually start the routing application, it is started automatically by Emulab. Again try pinging between end-nodes to see if the application works.
Once you are familiar with how the IXP1200 is set up inside Emulab, you could try richer topologies and your own startup commands.