Update of VPP_STABLE_VER files
[csit.git] / resources / libraries / python / VPPUtil.py
index 03d39d3..432a589 100644 (file)
 
 """VPP util library."""
 
-import binascii
-
 from robot.api import logger
 
 from resources.libraries.python.Constants import Constants
 from resources.libraries.python.DUTSetup import DUTSetup
-from resources.libraries.python.PapiExecutor import PapiExecutor
+from resources.libraries.python.PapiExecutor import PapiSocketExecutor
 from resources.libraries.python.ssh import exec_cmd_no_error
 from resources.libraries.python.topology import NodeType
 
@@ -114,6 +112,10 @@ class VPPUtil(object):
         :param node: Topology node.
         :type node: dict
         """
+        cmd = 'echo "show pci" | sudo socat - UNIX-CONNECT:/run/vpp/cli.sock'
+        exec_cmd_no_error(
+            node, cmd, sudo=False, message='VPP failed to start!', retries=120)
+
         cmd = ('vppctl show pci 2>&1 | '
                'fgrep -v "Connection refused" | '
                'fgrep -v "No such file or directory"')
@@ -135,6 +137,7 @@ class VPPUtil(object):
             VPPUtil.verify_vpp_started(node)
             # Verify responsivness of PAPI.
             VPPUtil.show_log(node)
+            VPPUtil.vpp_show_version(node)
         finally:
             DUTSetup.get_service_logs(node, Constants.VPP_UNIT)
 
@@ -161,17 +164,18 @@ class VPPUtil(object):
         :returns: VPP version.
         :rtype: str
         """
-        with PapiExecutor(node) as papi_exec:
-            data = papi_exec.add('show_version').get_replies().verify_reply()
-        version = ('VPP version:      {ver}\n'.
-                   format(ver=data['version'].rstrip('\0x00')))
+        cmd = 'show_version'
+        with PapiSocketExecutor(node) as papi_exec:
+            reply = papi_exec.add(cmd).get_reply()
+        return_version = reply['version'].rstrip('\0x00')
+        version = 'VPP version:      {ver}\n'.format(ver=return_version)
         if verbose:
             version += ('Compile date:     {date}\n'
-                        'Compile location: {cl}\n '.
-                        format(date=data['build_date'].rstrip('\0x00'),
-                               cl=data['build_directory'].rstrip('\0x00')))
+                        'Compile location: {cl}\n'.
+                        format(date=reply['build_date'].rstrip('\0x00'),
+                               cl=reply['build_directory'].rstrip('\0x00')))
         logger.info(version)
-        return data['version'].rstrip('\0x00')
+        return return_version
 
     @staticmethod
     def show_vpp_version_on_all_duts(nodes):
@@ -193,27 +197,28 @@ class VPPUtil(object):
         """
 
         cmd = 'sw_interface_dump'
-        cmd_reply = 'sw_interface_details'
-        args = dict(name_filter_valid=0, name_filter='')
+        args = dict(
+            name_filter_valid=False,
+            name_filter=''
+        )
         err_msg = 'Failed to get interface dump on host {host}'.format(
             host=node['host'])
-        with PapiExecutor(node) as papi_exec:
-            papi_resp = papi_exec.add(cmd, **args).get_replies(err_msg)
-
-        papi_if_dump = papi_resp.reply[0]['api_reply']
-
-        if_data = list()
-        for item in papi_if_dump:
-            data = item[cmd_reply]
-            data['interface_name'] = data['interface_name'].rstrip('\x00')
-            data['tag'] = data['tag'].rstrip('\x00')
-            data['l2_address'] = str(':'.join(binascii.hexlify(
-                data['l2_address'])[i:i + 2] for i in range(0, 12, 2)).
-                                     decode('ascii'))
-            if_data.append(data)
+        with PapiSocketExecutor(node) as papi_exec:
+            details = papi_exec.add(cmd, **args).get_details(err_msg)
+
+        for if_dump in details:
+            if_dump['l2_address'] = str(if_dump['l2_address'])
+            if_dump['b_dmac'] = str(if_dump['b_dmac'])
+            if_dump['b_smac'] = str(if_dump['b_smac'])
+            if_dump['flags'] = if_dump['flags'].value
+            if_dump['type'] = if_dump['type'].value
+            if_dump['link_duplex'] = if_dump['link_duplex'].value
+            if_dump['sub_if_flags'] = if_dump['sub_if_flags'].value \
+                if hasattr(if_dump['sub_if_flags'], 'value') \
+                else int(if_dump['sub_if_flags'])
         # TODO: return only base data
-        logger.trace('Interface data of host {host}:\n{if_data}'.format(
-            host=node['host'], if_data=if_data))
+        logger.trace('Interface data of host {host}:\n{details}'.format(
+            host=node['host'], details=details))
 
     @staticmethod
     def vpp_enable_traces_on_dut(node, fail_on_error=False):
@@ -228,12 +233,13 @@ class VPPUtil(object):
         cmds = [
             "trace add dpdk-input 50",
             "trace add vhost-user-input 50",
-            "trace add memif-input 50"
+            "trace add memif-input 50",
+            "trace add avf-input 50"
         ]
 
         for cmd in cmds:
             try:
-                PapiExecutor.run_cli_cmd(node, cmd)
+                PapiSocketExecutor.run_cli_cmd(node, cmd)
             except AssertionError:
                 if fail_on_error:
                     raise
@@ -259,7 +265,7 @@ class VPPUtil(object):
         :param node: DUT node to set up.
         :type node: dict
         """
-        PapiExecutor.run_cli_cmd(node, "elog trace api cli barrier")
+        PapiSocketExecutor.run_cli_cmd(node, "elog trace api cli barrier")
 
     @staticmethod
     def vpp_enable_elog_traces_on_all_duts(nodes):
@@ -279,7 +285,7 @@ class VPPUtil(object):
         :param node: DUT node to show traces on.
         :type node: dict
         """
-        PapiExecutor.run_cli_cmd(node, "show event-logger")
+        PapiSocketExecutor.run_cli_cmd(node, "show event-logger")
 
     @staticmethod
     def show_event_logger_on_all_duts(nodes):
@@ -301,7 +307,7 @@ class VPPUtil(object):
         :returns: VPP log data.
         :rtype: list
         """
-        return PapiExecutor.run_cli_cmd(node, "show log")["reply"]
+        return PapiSocketExecutor.run_cli_cmd(node, "show log")
 
     @staticmethod
     def vpp_show_threads(node):
@@ -312,12 +318,12 @@ class VPPUtil(object):
         :returns: VPP thread data.
         :rtype: list
         """
-        with PapiExecutor(node) as papi_exec:
-            data = papi_exec.add('show_threads').get_replies().\
-                verify_reply()["thread_data"]
+        cmd = 'show_threads'
+        with PapiSocketExecutor(node) as papi_exec:
+            reply = papi_exec.add(cmd).get_reply()
 
         threads_data = list()
-        for thread in data:
+        for thread in reply["thread_data"]:
             thread_data = list()
             for item in thread:
                 if isinstance(item, unicode):