42ba5d92c3f4d76ce2206f3fe4def4396616f5fa
(It also adds a route from the root namespace to the data network via the first OpenFlow switch, so when you ssh in you go through OpenFlow!) Modified Network() to optionally decouple starting the network, running tests, and stopping the network. This allows multiple tests to be run (or additional modifications to be made to the network before actually starting the switches and controller.) Still tweaking xterms - it sort of works but the screen sessions are not cleaned up, which leads to nasty garbage.
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.
In order to run Mininet, you must have:
* A Linux 2.6.26 or greater kernel compiled with network namespace support
enabled. (Debian 5.0 or greater should work.)
* 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, etc.
* Root privilieges (required for network device access)
* The netns program or equivalent (included as netns.c) 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 (using someNetwork.run( test ) )
- 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 )
- Examples (in examples/ directory) to help you get started.
Notes and Advice:
For scalable configurations, you may need to increase some of your kernel
limits. For example, you could add something like the following to
/etc/sysctl.conf:
# OpenFlow: get rid of ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
# Mininet: Increase open file limit
fs.file-max = 100000
# Mininet: increase network buffer space
net.core.wmem_max = 16777216
net.core.rmem_max = 16777216
net.ipv4.tcp_rmem = 10240 87380 16777216
net.ipv4.tcp_rmem = 10240 87380 16777216
net.core.netdev_max_backlog = 5000
# Mininet: increase arp cache size
net.ipv4.neigh.default.gc_thresh1 = 4096
net.ipv4.neigh.default.gc_thresh2 = 8192
net.ipv4.neigh.default.gc_thresh3 = 16384
# Mininet .... and increase routing table size
net.ipv4.route.max_size=32768
---
Bob Lantz
rlantz@cs.stanford.edu
Description
Languages
Python
76.5%
C
12.4%
Shell
10.4%
Makefile
0.7%