Add ability to specify controllers on command line
Change-Id: Ic88189dbf33d834a79597f108dd283ab478c9923
diff --git a/trellis/trellislib.py b/trellis/trellislib.py
index 8cf3c6c..23bc5c3 100644
--- a/trellis/trellislib.py
+++ b/trellis/trellislib.py
@@ -6,8 +6,10 @@
import sys
sys.path.append('..')
-from mininet.node import Host
+from mininet.node import Host, RemoteController
from routinglib import RoutedHost, RoutedHost6, Router
+import argparse
+from mininet.net import Mininet
class TaggedRoutedHost(RoutedHost):
"""Host that can be configured with multiple IP addresses."""
@@ -204,3 +206,52 @@
low2 = mac_value & 0xffff
return 'fe80::{:04x}:{:02x}ff:fe{:02x}:{:04x}'.format(high2, high1, low1, low2)
+
+# Parses Trellis parameters
+def parse_trellis_args():
+ parser = argparse.ArgumentParser(description="Trellis Arguments")
+ parser.add_argument("-c", "--controllers", help = "Comma Separated List of ONOS controllers",
+ required = True, default = "")
+ return parser.parse_args()
+
+# Gets a mininet instance
+def get_mininet(arguments, topo, switch):
+ net = Mininet(topo=topo, controller=None, switch=switch)
+
+ if arguments.controllers:
+ controllers = arguments.controllers.split(',')
+ controller_number = 0
+ for controller in controllers:
+ net.addController(RemoteController('c' + str(controller_number), ip=controller))
+ controller_number += 1
+ return net
+
+# Generates the Zebra config files
+def set_up_zebra_config(controllers_string):
+ zebra_config = "log file /var/log/quagga/zebradbgp{}.log\n" \
+ "hostname zebra-bgp{}\n" \
+ "password quagga\n" \
+ "!\n" \
+ "! Default route via virtual management switch\n" \
+ "!\n" \
+ "ip route 0.0.0.0/0 172.16.0.1\n" \
+ "!\n" \
+ "fpm connection ip {} port 2620\n"
+ controllers = controllers_string.split(',')
+
+ controller1 = controllers[0]
+ if (len(controllers) > 1):
+ controller2 = controllers[1]
+ else:
+ controller2 = controller1
+
+
+ zebra1 = zebra_config.format("1", "1", controller1)
+ zebra2 = zebra_config.format("2", "2", controller2)
+
+ with open("zebradbgp1.conf", "w") as config_file_1:
+ config_file_1.write(zebra1)
+
+ with open("zebradbgp2.conf", "w") as config_file_2:
+ config_file_2.write(zebra2)
+