MiniNet as an SDN test platform

MiniNet is

a realistic virtual network, running real kernel, switch and application code, on a single machine in seconds, with a single command.

In other words MiniNet is an OpenFlow testing platform. MiniNet can be used with OpenDaylight project, Cisco XNC Controller and Floodlight (maybe more are available).

Installation and configuration

Download the latest MiniNet OVF Release from the official repository. Unpack the zip file, and import the OVF using, for example, VMware Player ot Workstation.

A X server should be used to export applications from MiniNet VM. Windows users should consider XMing. Be sure to Enable X11 Forwarding from PuTTY configuration. Login to the MiniNet VM using PuTTY, and launch xterm. If Xming and PuTTY are correctly configured, a xterm window will appear to the Windows desktop:

Using MiniNet

MiniNet VM default user is “mininet”, with password “mininet”. Login as mininet and start the MiniNet CLI:

sudo mn
-** 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
-** Starting CLI:
mininet>

If no parameters are specified, by default will be created two hosts (h1 and h2), connected by one switch (s1).

mininet> nodes
available nodes are:
c0 h1 h2 s1
mininet> net
h1 h1-eth0:s1-eth1
h2 h2-eth0:s1-eth2
s1 lo:  s1-eth1:h1-eth0 s1-eth2:h2-eth0
c0
mininet> dump
<Host h1: h1-eth0:10.0.0.1 pid=8683>
<Host h2: h2-eth0:10.0.0.2 pid=8684>
<OVSSwitch s1: lo:127.0.0.1,s1-eth1:None,s1-eth2:None pid=8687>
<OVSController c0: 127.0.0.1:6633 pid=8675>

The above commands will give an overview of MiniNet current topology. Nodes console are avaible using xterm:

mininet> xterm h1 h2 s1

By default a 10.0.0.0/8 network is used, host nodes are automatically configured:

mininet> pingall
-** Ping: testing ping reachability
h1 -> h2
h2 -> h1
-** Results: 0% dropped (2/2 received)

Ping is successful, but if h1-s1 link goes down, then ping fails:

mininet> link h1 s1 down
mininet> h1 ping -c 1 h2
connect: Network is unreachable

Default MiniNet topologies

MiniNet can easily creates more complex topologies. Few template are available by default: minimal, single, reversed, linear and tree.

Minimal

It’s a simple topology with one switch and two host:

minimal ~~~ sudo mn --topo minimal mininet> net h1 h1-eth0:s1-eth1 h2 h2-eth0:s1-eth2 s1 lo: s1-eth1:h1-eth0 s1-eth2:h2-eth0 ~~~ ### Single It's a simple topology with one switch and N hosts:

single ~~~ sudo mn --topo single,3 mininet> net h1 h1-eth0:s1-eth1 h2 h2-eth0:s1-eth2 h3 h3-eth0:s1-eth3 s1 lo: s1-eth1:h1-eth0 s1-eth2:h2-eth0 s1-eth3:h3-eth0 ~~~ ### Reversed Like Single, but connection order is reversed:

reversed ~~~ sudo mn --topo reversed,3 mininet> net h1 h1-eth0:s1-eth3 h2 h2-eth0:s1-eth2 h3 h3-eth0:s1-eth1 s1 lo: s1-eth1:h3-eth0 s1-eth2:h2-eth0 s1-eth3:h1-eth0 ~~~ ### Linear A serial connection with N switches and N hosts:

linear ~~~ sudo mn --topo linear,3 mininet> net h1 h1-eth0:s1-eth1 h2 h2-eth0:s2-eth1 h3 h3-eth0:s3-eth1 s1 lo: s1-eth1:h1-eth0 s1-eth2:s2-eth2 s2 lo: s2-eth1:h2-eth0 s2-eth2:s1-eth2 s2-eth3:s3-eth2 s3 lo: s3-eth1:h3-eth0 s3-eth2:s2-eth3 ~~~ ### Tree A multiple level topology with N levels and two hosts per switch: tree ~~~ sudo mn --topo tree,3 mininet> net h1 h1-eth0:s3-eth1 h2 h2-eth0:s3-eth2 h3 h3-eth0:s4-eth1 h4 h4-eth0:s4-eth2 h5 h5-eth0:s6-eth1 h6 h6-eth0:s6-eth2 h7 h7-eth0:s7-eth1 h8 h8-eth0:s7-eth2 s1 lo: s1-eth1:s2-eth3 s1-eth2:s5-eth3 s2 lo: s2-eth1:s3-eth3 s2-eth2:s4-eth3 s2-eth3:s1-eth1 s3 lo: s3-eth1:h1-eth0 s3-eth2:h2-eth0 s3-eth3:s2-eth1 s4 lo: s4-eth1:h3-eth0 s4-eth2:h4-eth0 s4-eth3:s2-eth2 s5 lo: s5-eth1:s6-eth3 s5-eth2:s7-eth3 s5-eth3:s1-eth2 s6 lo: s6-eth1:h5-eth0 s6-eth2:h6-eth0 s6-eth3:s5-eth1 s7 lo: s7-eth1:h7-eth0 s7-eth2:h8-eth0 s7-eth3:s5-eth2 ~~~ ## Custom MiniNet topology Additional topologies can be created with extenral scripts. The following example will create a two network separated by a router: custom The following Python file implement the above topology: ~~~ from mininet.topo import Topo class Router_Topo(Topo): def __init__(self): "Create P2P topology." # Initialize topology Topo.__init__(self) # Add hosts and switches H1 = self.addHost('h1') H2 = self.addHost('h2') H3 = self.addHost('h3') S1 = self.addSwitch('s1') S2 = self.addSwitch('s2') # Add links self.addLink(H1, S1) self.addLink(H2, S1) self.addLink(H2, S2) self.addLink(H3, S2) topos = { 'router': (lambda: Router_Topo()) } ~~~ ~~~ sudo mn --custom /home/mininet/Router.py --topo router mininet> net h1 h1-eth0:s1-eth1 h2 h2-eth0:s1-eth2 h2-eth1:s2-eth1 h3 h3-eth0:s2-eth2 s1 lo: s1-eth1:h1-eth0 s1-eth2:h2-eth0 s2 lo: s2-eth1:h2-eth1 s2-eth2:h3-eth0 ~~~ Let's how to configure all nodes for routing: ~~~ mininet> h1 ifconfig h1-eth0 192.168.12.1 netmask 255.255.255.0 mininet> h2 ifconfig h2-eth0 192.168.12.2 netmask 255.255.255.0 mininet> h2 ifconfig h2-eth1 192.168.23.2 netmask 255.255.255.0 mininet> h3 ifconfig h3-eth0 192.168.23.3 netmask 255.255.255.0 mininet> h1 route add default gw 192.168.12.2 mininet> h3 route add default gw 192.168.23.2 mininet> h2 sysctl net.ipv4.ip_forward=1 ~~~ And now ping should be routed correctly: ~~~ mininet> h1 ping -c 1 192.168.23.3 ~~~ ## Connecting MiniNet to a SDN controller A MiniNet topology can be created and connected to a SDN controller like OpenDaylight, XNC or FloodLight (default port is 6633): ~~~ sudo mn --controller=remote,ip=192.168.32.129 --topo=tree,3 ~~~

mininet_on_sdn_controller ## References - Project Floodlight - OpenDaylight Project - Mininet Walkthrough

Posted on 06 Nov 2013 by Andrea.
  • Gmail icon
  • Twitter icon
  • Facebook icon
  • LinkedIN icon
  • Google+ icon