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