Skip to content
Snippets Groups Projects
Commit 92112315 authored by Brian O'Connor's avatar Brian O'Connor
Browse files

Simplified and refactored examples/dynamicnet.py

Extended LinearTopo to support mulitple hosts per switch
parent bf97d21c
No related branches found
No related tags found
No related merge requests found
# -*- coding: utf-8 -*-
#!/usr/bin/python
"""
This script builds a network using mininet for using with
......@@ -17,118 +17,28 @@
"""
from os import environ
from sys import argv
from sys import exit
from getopt import getopt
from getopt import GetoptError
from optparse import OptionParser
from mininet.topo import Topo
from mininet.topo import LinearTopo
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__":
def main():
# Defines the log level
setLogLevel('info')
# parses command line arguments
parser = ArgParser(argv[1:])
# Build network topology
topo = MyTopo()
parser = OptionParser()
parser.add_option('-H', dest='hosts', default=5,
help='Number of hosts per switch')
parser.add_option('-S', dest='switches', default=2,
help='Number of switches')
(options, args) = parser.parse_args()
# 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
# Build network topology (see mininet/topo.py)
topo = LinearTopo(int(options.switches), int(options.hosts))
# Creates the Network using a remote controller
net = Mininet(topo,
......@@ -140,3 +50,6 @@ def usage(self):
CLI(net)
# Stop the network
net.stop()
if __name__ == "__main__":
main()
......@@ -236,23 +236,30 @@ def __init__(self, k=2, **opts):
port1=0, port2=(k - h + 1))
class LinearTopo(Topo):
"Linear topology of k switches, with one host per switch."
"Linear topology of k switches, with n hosts per switch."
def __init__(self, k=2, **opts):
def __init__(self, k=2, n=1, **opts):
"""Init.
k: number of switches (and hosts)
k: number of switches
n: number of hosts per switch
hconf: host configuration options
lconf: link configuration options"""
super(LinearTopo, self).__init__(**opts)
self.k = k
self.n = n
lastSwitch = None
for i in irange(1, k):
host = self.addHost('h%s' % i)
# Add switch
switch = self.addSwitch('s%s' % i)
self.addLink( host, switch)
# Add hosts to switch
for j in irange(1, n):
hostNum = (i-1)*n + j
host = self.addHost('h%s' % hostNum)
self.addLink(host, switch)
# Connect switch to previous
if lastSwitch:
self.addLink( switch, lastSwitch)
self.addLink(switch, lastSwitch)
lastSwitch = switch
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