fix unit test and start Ryu from DCNetwork init
diff --git a/emuvim/api/zerorpcapi_DCNetwork.py b/emuvim/api/zerorpcapi_DCNetwork.py
index b60093d..27527aa 100755
--- a/emuvim/api/zerorpcapi_DCNetwork.py
+++ b/emuvim/api/zerorpcapi_DCNetwork.py
@@ -6,8 +6,7 @@
import logging
import threading
import zerorpc
-import site
-from subprocess import Popen
+
logging.basicConfig(level=logging.INFO)
@@ -30,17 +29,6 @@
logging.debug("Created monitoring API endpoint %s(%s:%d)" % (
self.__class__.__name__, self.ip, self.port))
- # start Ryu controller with rest-API
- python_install_path = site.getsitepackages()[0]
- ryu_path = python_install_path + '/ryu/app/simple_switch_13.py'
- ryu_path2 = python_install_path + '/ryu/app/ofctl_rest.py'
- # change the default Openflow controller port to 6653 (official IANA-assigned port number), as used by Mininet
- # Ryu still uses 6633 as default
- ryu_option = '--ofp-tcp-listen-port'
- ryu_of_port = '6653'
- ryu_cmd = 'ryu-manager'
- self.ryu_process = Popen([ryu_cmd, ryu_path, ryu_path2, ryu_option, ryu_of_port])
-
def connectDCNetwork(self, net):
self.net = net
logging.info("Connected DCNetwork to API endpoint %s(%s:%d)" % (
@@ -59,17 +47,17 @@
s.run()
def stop(self):
- # stop ryu controller
logging.info("Stop the monitoring API endpoint")
- self.ryu_process.terminate()
- #self.ryu_process.kill()
return
class DCNetworkApi(object):
"""
+ The networking and monitoring commands need the scope of the
+ whole DC network to find the requested vnf. So this API is intended
+ to work with a DCNetwork.
Just pass through the corresponding request to the
- selected data center. Do not implement provisioning
+ selected data center network. Do not implement provisioning
logic here because will will have multiple API
endpoint implementations at the end.
"""
diff --git a/emuvim/dcemulator/net.py b/emuvim/dcemulator/net.py
index 324c4d3..20ab33a 100755
--- a/emuvim/dcemulator/net.py
+++ b/emuvim/dcemulator/net.py
@@ -4,6 +4,10 @@
"""
import logging
+import site
+from subprocess import Popen
+import os
+
from mininet.net import Dockernet
from mininet.node import Controller, OVSSwitch, OVSKernelSwitch, Switch, Docker, Host, RemoteController
from mininet.cli import CLI
@@ -39,6 +43,9 @@
# monitoring agent
self.monitor_agent = DCNetworkMonitor(self)
+ # start Ryu controller
+ self.startRyu()
+
def addDatacenter(self, label, metadata={}):
"""
@@ -133,6 +140,9 @@
Dockernet.start(self)
def stop(self):
+ # stop Ryu controller
+ self.ryu_process.terminate()
+ #self.ryu_process.kill()
Dockernet.stop(self)
def CLI(self):
@@ -179,4 +189,18 @@
current_hop = next_hop
- return "destination node: {0} not reached".format(vnf_dst_name)
\ No newline at end of file
+ return "destination node: {0} not reached".format(vnf_dst_name)
+
+ # start Ryu Openflow controller as Remote Controller for the DCNetwork
+ def startRyu(self):
+ # start Ryu controller with rest-API
+ python_install_path = site.getsitepackages()[0]
+ ryu_path = python_install_path + '/ryu/app/simple_switch_13.py'
+ ryu_path2 = python_install_path + '/ryu/app/ofctl_rest.py'
+ # change the default Openflow controller port to 6653 (official IANA-assigned port number), as used by Mininet
+ # Ryu still uses 6633 as default
+ ryu_option = '--ofp-tcp-listen-port'
+ ryu_of_port = '6653'
+ ryu_cmd = 'ryu-manager'
+ FNULL = open(os.devnull, 'w')
+ self.ryu_process = Popen([ryu_cmd, ryu_path, ryu_path2, ryu_option, ryu_of_port], stdout=FNULL, stderr=FNULL)
\ No newline at end of file
diff --git a/emuvim/example_topology.py b/emuvim/example_topology.py
index 2342fd1..5c459ce 100755
--- a/emuvim/example_topology.py
+++ b/emuvim/example_topology.py
@@ -110,7 +110,7 @@
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()
+ #mon_api.stop()
net.stop()