What?
OpenVSwitch is a software defined networking switch for Linux. It supports its own protocol and also OpenFlow 1.3. OpenVSwitch is included in the Linux kernel and its user-space utilities ship in Debian Wheezy.
Mininet allows the simple creation of emulated networks, using Linux's namespace feature. Mininet is not packaged in Debian Wheezy.
Raspberry Pi kernel issue #377 enables the kernel features needed by OpenVSwitch and Mininet.
Installing OpenVSwitch
Since all the necessary parts are in packages, simply install the packages:
$ sudo apt-get install ovsdbmonitor openvswitch-switch openvswitch-controller openvswitch-pki openvswitch-ipsec
The packaging is done well, and automatically establishes the necessary databases and public key infrastructure.
Installing Mininet
The main Mininet installation instructions give three choices: we are using “Option 2: installation from source”.
Before going further enable memory control groups in the kernel. Edit the line in /boot/cmdline.txt to append:
cgroup_enable=memory swapaccount=1
Reboot so that those kernel parameters take effect.
Get the source:
$ sudo apt-get install git $ git clone git://github.com/mininet/mininet
There is an installation script in mininet/utils/install.sh. It won't run successfully as Raspberry Pi doesn't keep the Linux kernel in the expected package. In any case it tries to compile OpenVSwitch as a kernel module, which is no longer needed now that OpenVSwitch is part of the stock Linux kernel.
Looking at that script we can do the steps by hand. Starting with installing the runtime dependencies:
$ sudo apt-get install build-essential iperf telnet python-setuptools cgroup-bin ethtool ethtool help2man pyflakes pylint pep8 socat
Now install Mininet into /usr/local:
$ sudo make install
Finally, test that the installation worked:
$ sudo /etc/init.d/openvswitch-controller stop $ sudo mn --test pingall *** Creating network *** Adding controller *** Adding hosts: h1 h2 *** Adding switches: s1 *** Adding links: (h1, s1) (h2, s1) *** Configuring hosts h1 h2 *** Starting controller *** Starting 1 switches s1 *** Waiting for switches to connect s1 *** Ping: testing ping reachability h1 -> h2 h2 -> h1 *** Results: 0% dropped (2/2 received) *** Stopping 1 controllers c0 *** Stopping 1 switches s1 .. *** Stopping 2 links *** Stopping 2 hosts h1 h2 *** Done completed in 6.277 seconds