Merge branch 'master' of https://github.com/stevenvanrossem/son-emu
[osm/vim-emu.git] / emuvim / example_topology.py
old mode 100644 (file)
new mode 100755 (executable)
index ce267d5..2342fd1
@@ -17,8 +17,10 @@ The original Mininet API has to be completely hidden and not be used by this
 script.
 """
 import logging
+from mininet.log import setLogLevel
 from dcemulator.net import DCNetwork
 from api.zerorpcapi import ZeroRpcApiEndpoint
+from api.zerorpcapi_DCNetwork import ZeroRpcApiEndpointDCNetwork
 
 logging.basicConfig(level=logging.INFO)
 
@@ -29,15 +31,23 @@ def create_topology1():
     """
     net = DCNetwork()
 
+    """
+    1b. add a monitoring agent to the DCNetwork
+    """
+    mon_api = ZeroRpcApiEndpointDCNetwork("0.0.0.0", 5151)
+    mon_api.connectDCNetwork(net)
+    mon_api.start()
     """
     2. Add (logical) data centers to the topology
        (each data center is one "bigswitch" in our simplified
         first prototype)
     """
-    dc1 = net.addDatacenter("dc1")
-    dc2 = net.addDatacenter("dc2")
-    dc3 = net.addDatacenter("dc3")
-    dc4 = net.addDatacenter("dc4")
+    dc1 = net.addDatacenter("datacenter1")
+    dc2 = net.addDatacenter("datacenter2")
+    dc3 = net.addDatacenter("long_data_center_name3")
+    dc4 = net.addDatacenter(
+        "datacenter4",
+        metadata={"mydata": "we can also add arbitrary metadata to each DC"})
 
     """
     3. You can add additional SDN switches for data center
@@ -51,9 +61,9 @@ def create_topology1():
        These links can use Mininet's features to limit bw, add delay or jitter.
     """
     net.addLink(dc1, dc2)
-    net.addLink("dc1", s1)
-    net.addLink(s1, "dc3")
-    net.addLink(s1, dc4)
+    net.addLink("datacenter1", s1)
+    net.addLink(s1, dc3)
+    net.addLink(s1, "datacenter4")
 
     """
     5. We want to access and control our data centers from the outside,
@@ -70,6 +80,8 @@ def create_topology1():
     # connect data centers to this endpoint
     zapi1.connectDatacenter(dc1)
     zapi1.connectDatacenter(dc2)
+    zapi1.connectDatacenter(dc3)
+    zapi1.connectDatacenter(dc4)
     # run API endpoint server (in another thread, don't block)
     zapi1.start()
 
@@ -97,10 +109,13 @@ def create_topology1():
     net.start()
     net.CLI()
     # when the user types exit in the CLI, we stop the emulator
+    # we need to explicitly stop the monitoring api, so the Ryu controller is also terminated
+    mon_api.stop()
     net.stop()
 
 
 def main():
+    setLogLevel('info')  # set Mininet loglevel
     create_topology1()