Mininet

Here's material on installing, running and using Mininet. It runs in a virtual machine; the first thing you have to do is to install VirtualBox, available at virtualbox.org/wiki/Downloads.

The next thing you need is the virtual machine itself. The best thing to do is to download just the (zipped) virtual-disk (.vmdk) file, and then build a new virtual machine around that disk file. To do this, click "new" on the VirtualBox console. Give it a name, such as "mininet". I recommend 1024 MB for the RAM, but you can get away with less (or change it later, though not while the virtual machine is running). There are three choices for the disk:

The middle one is the default. Choose the last one. This enables the disk-selection menu below; you'll have to click on the icon at the right to get it to allow you to choose arbitrary files. Select the unzipped .vmdk file, and you should be good to go.

After the machine is created, go to settings and click USB and disable USB access (from the virtual machine to your laptop's physical USB ports), unless you have installed the VirtualBox Extensions.

Apparently it's hard to get Windows to run 64-bit virtual machines. Therefore I recommend the 32-bit version below, though you can try the 64-bit if you have a newer 64-bit machine.

Once you get to the point where the Mininet virtual machine launches successfully, log in! The username and password are both "mininet". Once you log in, use the command startx to start the windowing system. At that point, you can create new terminal windows with Cntl-Alt-T.

Available editors are leafpad, and gedit if you install it. To edit a file, say myfile.py, type this on the commandline: "leafpad myfile.py &". Don't forget the & at the end, which allows the terminal to continue to be used for new commands while the editor is running.

A few Mininet python files are in the directory netmgmt. Remember that these must be run as root; I recommend leaving one terminal window logged in as root. To become root, use sudo bash.


Mininet example 1: switchline.py

Run "python switchline.py" as root. Mininet should start up. From the mininet> prompt, type h1 ping h2.

Try starting Wireshark. The easiest way is, from the mininet> prompt, to type s1 wireshark & (to start on switch s1). You can also start an xterm first, with xterm s1 (note the reversed order), and then start Wireshark in the xterm.


Mininet example 2: lineNstandalone.py

This file was not included in the netmgmt folder. Try copying it and pasting into a leafpad window. The topology created looks like this:

   h1    h2    h3        hN
   |     |     |         |
   s1----s2----s3--...---sN

But there's a catch: we specify controller=RemoteController in the configuration call. We need to run a remote controller. Without one, the switches don't forward, and h1 ping h4 fails. (I discovered I also needed c = RemoteController( 'c', ip='127.0.0.1', port=6633 ) and net.addController(c), which are now in place.)

In another window, also as root, navigate to the pox directory containing pox.py, and run ./pox.py misc.myswitch. Pox is a controller, also in python, and pox/misc/myswitch.py makes the switches behave like hubs. Do you get connectivity?

Next try ./pox.py forwarding.l2_pairs

Next try l2_loadbalance.py or l2_rev.py. To run these you need a more elaborate command line:

./pox.py openflow.nicira --convert-packet-in log.level --WARNING forwarding.l2_loadbalance

Some of these generate some output.

Next we'll look at what these programs do.