Skip to content
Snippets Groups Projects
Commit 6f09dedf authored by Gustavo Pantuza Coelho Pinto's avatar Gustavo Pantuza Coelho Pinto
Browse files

Dynamic network creation using a remote controller

The script builds a network topology based on command line
arguments and uses a remote controller
parent c8b85746
No related branches found
No related tags found
No related merge requests found
# -*- coding: utf-8 -*-
"""
This script builds a network using mininet for using with
a remote controller like POX.
The script receives from command line two arguments. The number
of Switches and the number of Hosts per Switch. Then, it will build
the network topology based on this arguments.
First of all, it build a topology and add the Switches to the network.
After that, add the same number of Hosts for each Switch added. Lastly
it make links between each switch.
@author: Gustavo Pantuza
@since: 18.07.2013
"""
from os import environ
from sys import argv
from sys import exit
from getopt import getopt
from getopt import GetoptError
from mininet.topo import Topo
from mininet.log import setLogLevel
from mininet.net import Mininet
from mininet.cli import CLI
from mininet.node import RemoteController
class MyTopo(Topo):
""" Topology Class Used in all classes to add network components """
def __init__(self, **opts):
super(MyTopo, self).__init__(**opts)
class Switches():
""" Class to control switches addition """
def __init__(self, num, topo):
for i in xrange(num):
topo.addSwitch('s%s' % str(i))
class Hosts():
""" Class to control host addition """
def __init__(self):
self._seq = 0
def add(self, num, switch, topo):
""" Adds hosts and its links """
for i in xrange(num):
host = topo.addHost("h%s" % str(self._seq))
topo.addLink(host, switch)
self._seq += 1
class Links():
""" Create links between two switches """
def __init__(self, topo, switch0, switch1):
topo.addLink(switch0, switch1)
class ArgParser(object):
""" Command line arguments parser class """
# possible command line options
OPTS = "s:h:"
def __init__(self, argv):
""" Tries to get options from command line """
try:
self.opts, self.args = getopt(argv, ArgParser.OPTS, ["help"])
except GetoptError:
self.usage()
self.switches = 2 # default value for the number of switches
self.hosts = 5 # default value for the number of hosts
self.parse()
def parse(self):
""" Parses the arguments and set values to the script execution """
for opt, args in self.opts:
if opt == "--help":
self.usage()
elif opt == "-s":
self.switches = int(args)
elif opt == "-h":
self.hosts = int(args)
def usage(self):
""" Prints how to usage the program """
print "python dinamicnet.py -s <Number-of-Switches>" \
" -h <hosts-per-switch>"
exit()
if __name__ == "__main__":
# Defines the log level
setLogLevel('info')
# parses command line arguments
parser = ArgParser(argv[1:])
# Build network topology
topo = MyTopo()
# Adds Switches to network
Switches(parser.switches, topo)
# Adds Hosts to network
hosts = Hosts()
for i, switch in enumerate(topo.switches()):
hosts.add(parser.hosts, switch, topo)
try: # Add links between switches
Links(topo, switch, topo.switches()[i + 1])
except IndexError:
break
# Creates the Network using a remote controller
net = Mininet(topo,
controller=lambda a: RemoteController(a, ip='127.0.0.1'))
# Starts the network
net.start()
# Run the mininet client
CLI(net)
# Stop the network
net.stop()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment