From 95d9a374b205b2a4be7a244710533e291fa4cb6f Mon Sep 17 00:00:00 2001 From: Bob Lantz <rlantz@cs.stanford.edu> Date: Thu, 10 Dec 2009 00:21:26 -0800 Subject: [PATCH] Added README. Modified cleanup to use dpctl to remove kernel datapaths. --- README | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ cleanup | 2 +- mininet.py | 18 +++++++----- 3 files changed, 92 insertions(+), 8 deletions(-) create mode 100644 README diff --git a/README b/README new file mode 100644 index 00000000..4142c922 --- /dev/null +++ b/README @@ -0,0 +1,80 @@ + + 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-testing 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) + +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 by 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 + + diff --git a/cleanup b/cleanup index 2375e848..4c0a553d 100755 --- a/cleanup +++ b/cleanup @@ -12,7 +12,7 @@ echo "Removing excess controllers/ofprotocols/ofdatapaths/pings" killall -9 controller ofprotocol ofdatapath ping 2> /dev/null echo "Removing excess kernel datapath processes" -ps ax | grep 'dp[0-9]' | awk '{print $1;}' | xargs kill +ps ax | egrep -o 'dp[0-9]+' | sed 's/dp/nl:/' | xargs -l1 echo dpctl deldp echo "Removing vconn junk in /tmp" rm -f /tmp/vconn* /tmp/vlogs* /tmp/*.out /tmp/*.log diff --git a/mininet.py b/mininet.py index f2897bd1..78c2ddb9 100755 --- a/mininet.py +++ b/mininet.py @@ -429,6 +429,17 @@ class Network( object ): "Network topology (and test driver) base class." def __init__( self, kernel=True, startAddr=( 192, 168, 123, 1) ): self.kernel, self.startAddr = kernel, startAddr + # Check for kernel modules + tun = quietRun( [ 'sh', '-c', 'lsmod | grep tun' ] ) + ofdatapath = quietRun( [ 'sh', '-c', 'lsmod | grep ofdatapath' ] ) + if tun == '' and not kernel: + print "*** Error: kernel module tun not loaded:", + print " user datapath not supported" + exit( 1 ) + if ofdatapath == '' and kernel: + print "*** Error: ofdatapath not loaded:", + print " kernel datapath not supported" + exit( 1 ) # In progress: we probably want to decouple creating/starting/stopping # the network and running tests, since we might wish to run # multiple tests on the same network. It's not clear if the network @@ -736,13 +747,6 @@ def init(): # Perhaps we should do so automatically! if os.getuid() != 0: print "*** Mininet must run as root."; exit( 1 ) - # Check for kernel modules - tun = quietRun( [ 'sh', '-c', 'lsmod | grep tun' ] ) - ofdatapath = quietRun( [ 'sh', '-c', 'lsmod | grep ofdatapath' ] ) - if tun == '': - print "*** tun not found: user datapath not supported" - if ofdatapath == '': - print "*** ofdatapath not found: kernel datapath not supported" fixLimits() if __name__ == '__main__': -- GitLab