Mininet: A Simple Virtual Testbed for OpenFlow aka How to Squeeze a 1024-node OpenFlow Network onto your Laptop (Extremely Experimental Development Version 0.1, December 2009) --- Mininet creates simple OpenFlow test networks by using process-based virtualization and network namespaces. Simulated hosts (as well as switches and controllers with the user datapath) are created as processes in separate network namespaces. This allows a complete OpenFlow network to be simulated on top of a single Linux kernel. Mininet provides a set of Python classes and functions which enable creation of OpenFlow networks of varying sizes and topologies. In order to run Mininet, you must have: * A Linux 2.6.26 or greater kernel compiled with network namespace support enabled. (debian-testing seems to have such a kernel, but it doesn't work for compiling nox, unfortunately.) 2.6.33 or greater is recommended for faster switch shutdown. * The OpenFlow reference implementation (either the user or kernel datapath may be used, and the tun or ofdatapath kernel modules must be loaded, respectively) * Python, bash, ping, iperf, etc. * Root privileges (required for network device access) * The netns program (included as netns.c), or an equivalent program of the same name, installed in an appropriate path location * mininet.py installed in an appropriate Python path location Currently mininet includes: - A simple node infrastructure (Host, Switch, Controller classes) for creating virtual OpenFlow networks - A simple network infrastructure (class Network and its descendants TreeNet, GridNet and LinearNet) for creating scalable topologies and running experiments (e.g. TreeNet(2,3).run(pingTest) ) - Some simple tests which can be run using someNetwork.run( test ) - A simple command-line interface which may be invoked on a network using .run( Cli ). It provides useful diagnostic commands, as well as the ability to send a command to a node. For example, mininet> h11 ifconfig -a tells host h11 to run the command 'ifconfig -a' - A 'cleanup' script to get rid of junk (interfaces, processes, files in /tmp, etc.) which might be left around by mininet. Try this if things stop working! - Examples (in examples/ directory) to help you get started. Batteries are not included (yet!) However, some preliminary installation notes are included in the INSTALL file. Good luck! --- Bob Lantz rlantz@cs.stanford.edu
Bob Lantz
authored
I've changed the way things work a bit: 1. netns is replaced by mnexec, a general-purpose mininet helper. 2. For interactive commands, we now use mnexec -p, which prints out the pid, so we can kill it when someone hits control-C! 3. We close file descriptors for subshells. This might save memory, but who knows. 4. We detach our subshells from the tty using mnexec -s; thus control-C should not terminate everything. 5. Given 4, mn -c is now necessary if you kill mininet.