X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2Fvim-emu.git;a=blobdiff_plain;f=src%2Femuvim%2Fdcemulator%2Fnet.py;h=056ef47e69f959907502d1ba539ccd391f304fbc;hp=1f30ba7abfcce8422fcd8189622944049d53edcd;hb=c9b2e409d09782a71f7a3ac0877892e30ab26d2e;hpb=37911563c8039bf129063a2674e88c830576bca5 diff --git a/src/emuvim/dcemulator/net.py b/src/emuvim/dcemulator/net.py index 1f30ba7..056ef47 100755 --- a/src/emuvim/dcemulator/net.py +++ b/src/emuvim/dcemulator/net.py @@ -25,7 +25,6 @@ # partner consortium (www.sonata-nfv.eu). import logging -import site import time from subprocess import Popen import re @@ -760,6 +759,7 @@ class DCNetwork(Containernet): cmd = kwargs.get('cmd') path = kwargs.get('path') index = kwargs.get('pathindex') + mod_dl_dst = kwargs.get('mod_dl_dst') vlan = kwargs.get('vlan') priority = kwargs.get('priority', DEFAULT_PRIORITY) @@ -827,6 +827,12 @@ class DCNetwork(Containernet): else: # middle nodes match += ',dl_vlan=%s' % vlan + if mod_dl_dst: + action = {} + action['type'] = 'SET_FIELD' + action['field'] = 'eth_dst' + action['value'] = mod_dl_dst + flow['actions'].append(action) # output action must come last action = {} @@ -898,14 +904,14 @@ class DCNetwork(Containernet): # start Ryu Openflow controller as Remote Controller for the DCNetwork def startRyu(self, learning_switch=True): # start Ryu controller with rest-API - python_install_path = site.getsitepackages()[0] + # ryu default learning switch - # ryu_path = python_install_path + '/ryu/app/simple_switch_13.py' + # ryu_learning_app = python_install_path + '/ryu/app/simple_switch_13.py' # custom learning switch that installs a default NORMAL action in the # ovs switches dir_path = os.path.dirname(os.path.realpath(__file__)) - ryu_path = dir_path + '/son_emu_simple_switch_13.py' - ryu_path2 = python_install_path + '/ryu/app/ofctl_rest.py' + ryu_learning_app = dir_path + '/son_emu_simple_switch_13.py' + ryu_rest_app = 'ryu.app.ofctl_rest' # 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' @@ -913,15 +919,13 @@ class DCNetwork(Containernet): ryu_cmd = 'ryu-manager' FNULL = open("/tmp/ryu.log", 'w') if learning_switch: - self.ryu_process = Popen( - [ryu_cmd, ryu_path, ryu_path2, ryu_option, ryu_of_port], stdout=FNULL, stderr=FNULL) - LOG.debug('starting ryu-controller with {0}'.format(ryu_path)) - LOG.debug('starting ryu-controller with {0}'.format(ryu_path2)) + # learning and rest api + args = [ryu_cmd, ryu_learning_app, ryu_rest_app, ryu_option, ryu_of_port] else: # no learning switch, but with rest api - self.ryu_process = Popen( - [ryu_cmd, ryu_path2, ryu_option, ryu_of_port], stdout=FNULL, stderr=FNULL) - LOG.debug('starting ryu-controller with {0}'.format(ryu_path2)) + args = [ryu_cmd, ryu_rest_app, ryu_option, ryu_of_port] + self.ryu_process = Popen(args, stdout=FNULL, stderr=FNULL) + LOG.debug('starting ryu-controller with %s' % args) time.sleep(1) def killRyu(self): @@ -949,7 +953,7 @@ class DCNetwork(Containernet): # do extra logging if status code is not 200 (OK) if req.status_code is not requests.codes.ok: - logging.info( + LOG.info( 'type {0} encoding: {1} text: {2} headers: {3} history: {4}'.format(req.headers['content-type'], req.encoding, req.text, req.headers, req.history))