add birectional option for set Chain
[osm/vim-emu.git] / src / emuvim / api / zerorpc / compute.py
index 38b0a06..4815fa7 100644 (file)
@@ -7,6 +7,9 @@ import logging
 import threading
 import zerorpc
 
+import paramiko
+import ipaddress
+
 logging.basicConfig(level=logging.INFO)
 
 
@@ -68,7 +71,6 @@ class MultiDatacenterApi(object):
         """
         # TODO what to return UUID / given name / internal name ?
         logging.debug("RPC CALL: compute start")
-        logging.info('nwlist2: {0}'.format(network))
         try:
             c = self.dcs.get(dc_label).startCompute(
                 compute_name, image=image, command=command, network=network)
@@ -117,16 +119,53 @@ class MultiDatacenterApi(object):
     def compute_profile(self, dc_label, compute_name, image, kwargs):
         # note: zerorpc does not support keyword arguments
 
+        ## VIM/dummy gatekeeper's tasks:
         # start vnf
-        vnf_status = self.compute_action_start(self, dc_label, compute_name, image,
+        vnf_status = self.compute_action_start( dc_label, compute_name, image,
                                   kwargs.get('network'),
                                   kwargs.get('command'))
-
         # start traffic source (with fixed ip addres, no use for now...)
-        self.compute_action_start(self, dc_label, 'psrc', 'profile_source', [{'id':'output','ip':'10.0.10.1/24'}], None)
-
-
-
+        psrc_status = self.compute_action_start( dc_label, 'psrc', 'profile_source', [{'id':'output'}], None)
+        # link vnf to traffic source
+        DCNetwork = self.dcs.get(dc_label).net
+        DCNetwork.setChain('psrc', compute_name,
+                           vnf_src_interface='output',
+                           vnf_dst_interface=kwargs.get('input'),
+                           cmd='add-flow', weight=None)
+
+        ## SSM/SP tasks:
+        # start traffic generation
+        for nw in psrc_status.get('network'):
+            if nw.get('intf_name') == 'output':
+                psrc_output_ip = unicode(nw['ip'])
+                break
+        dummy_iperf_server_ip = ipaddress.IPv4Address(psrc_output_ip) + 1
+        iperf_cmd = 'iperf -c {0} -u -l18 -b10M -t1000 &'.format(dummy_iperf_server_ip)
+
+        psrc_mgmt_ip = psrc_status['docker_network']
+        psrc_user='root'
+        psrc_passw='root'
+
+        # use ssh login when starting command externally
+        ret = self.dcs.get(dc_label).containers.get('psrc').pexec(iperf_cmd)
+        logging.info(ret)
+        self.dcs.get(dc_label).containers.get('psrc').monitor()
+
+        #ssh does not work when exectuted via zerorpc command
+        #psrc_mgmt_ip = '172.17.0.3'
+        #ssh = paramiko.SSHClient()
+        #ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
+        #ssh.connect(psrc_mgmt_ip, username='steven', password='test')
+        #ssh.connect(psrc_mgmt_ip, username='root', password='root')
+
+        #iperf_cmd = 'iperf -c {0} -u -l18 -b10M -t1000'.format(dummy_iperf_server_ip)
+        #stdin, stdout, stderr = ssh.exec_command(iperf_cmd)
+        # get monitor data and analyze
+
+        # create table
+
+        ## VIM/dummy gatekeeper's tasks:
+        # remove vnfs and chain
 
 
     def datacenter_list(self):