Skip to content

Commit

Permalink
Add ability to read custom Mininets
Browse files Browse the repository at this point in the history
  • Loading branch information
Brandon Heller committed Jan 12, 2010
1 parent 1b6a9c3 commit 3031d31
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 4 deletions.
25 changes: 21 additions & 4 deletions bin/mn_run.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
'''

from optparse import OptionParser
import os.path
import time

try:
Expand Down Expand Up @@ -100,6 +101,8 @@ def parse_args(self):
add_dict_option(opts, HOSTS, HOST_DEF, 'host')
add_dict_option(opts, CONTROLLERS, CONTROLLER_DEF, 'controller')

opts.add_option('--custom', type = 'string', default = None,
help = 'read custom mininet from current dir')
opts.add_option('--test', type = 'choice', choices = TESTS,
default = TESTS[0],
help = '[' + ' '.join(TESTS) + ']')
Expand Down Expand Up @@ -137,6 +140,10 @@ def setup(self):
raise Exception('multipath topos require multipath-capable '
'controller.')

if self.options.custom:
if not os.path.isfile(self.options.custom):
raise Exception('could not find custom file: %s' % custom)

def begin(self):
'''Create and run mininet.'''

Expand All @@ -156,10 +163,20 @@ def begin(self):
xterms = self.options.xterms
mac = self.options.mac
arp = self.options.arp
mn = Mininet(topo, switch, host, controller, controller_params,
in_namespace = in_namespace,
xterms = xterms, auto_set_macs = mac,
auto_static_arp = arp)
mn = None
if not self.options.custom:
mn = Mininet(topo, switch, host, controller, controller_params,
in_namespace = in_namespace,
xterms = xterms, auto_set_macs = mac,
auto_static_arp = arp)
else:
globals_ = {}
locals_ = {}
execfile(self.options.custom, globals_, locals_)
if 'mn' not in locals_:
raise Exception('could not find mn var in custom file')
else:
mn = locals_['mn']

test = self.options.test
if test != 'build':
Expand Down
9 changes: 9 additions & 0 deletions custom/README
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
This directory should hold configuration files for custom mininets.

See custom_example.py, which loads the default minimal topology. The advantage of defining a mininet in a separate file is that you then use the --custom option in mn_run.py to run the CLI or specific tests with it.

Each custom file must define a Mininet object for an 'mn' variable.

To start up a mininet with this custom topology, do:
sudo mn_run.py --custom custom_example.py

25 changes: 25 additions & 0 deletions custom/custom_example.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
'''Example of custom topo
@author Brandon Heller ([email protected])
'''

from mininet.topo import SingleSwitchTopo
from mininet.net import Mininet
from mininet.node import KernelSwitch, Host, Controller, ControllerParams

topo = SingleSwitchTopo(k = 2) # build topology object
switch = KernelSwitch
host = Host
controller = Controller
controller_params = ControllerParams(0x0a000000, 8) # 10.0.0.0/8
in_namespace = False
xterms = False
mac = True
arp = True

mn = Mininet(topo, switch, host, controller, controller_params,
in_namespace = in_namespace,
xterms = xterms, auto_set_macs = mac,
auto_static_arp = arp)

0 comments on commit 3031d31

Please sign in to comment.