diff --git a/examples/README b/examples/README index 841486e..23cad6e 100644 --- a/examples/README +++ b/examples/README @@ -118,3 +118,8 @@ This example attempts to create a 1024-host network, and then runs the CLI on it. It may run into scalability limits, depending on available memory and sysctl configuration (see INSTALL.) +dynamicnet.py: + +This example builds a network based on command line arguments and uses +a remote controller. It is a good option to use with POX controller and +develop Software Defined Networks. diff --git a/examples/dynamicnet.py b/examples/dynamicnet.py new file mode 100755 index 0000000..334ce26 --- /dev/null +++ b/examples/dynamicnet.py @@ -0,0 +1,55 @@ +#!/usr/bin/python + +""" + 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 optparse import OptionParser + +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 + +def main(): + # Defines the log level + setLogLevel('info') + + # parses command line arguments + 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() + + # 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, + 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() + +if __name__ == "__main__": + main() diff --git a/mininet/topo.py b/mininet/topo.py index fa20e19..2619634 100644 --- a/mininet/topo.py +++ b/mininet/topo.py @@ -236,23 +236,30 @@ class SingleSwitchReversedTopo(Topo): 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