feat(swasync): switch to polling mode
[csit.git] / resources / libraries / python / IPsecUtil.py
index 39c6a4c..873b6af 100644 (file)
@@ -318,6 +318,8 @@ class IPsecUtil:
     def vpp_ipsec_set_async_mode(node, async_enable=1):
         """Set IPsec async mode on|off.
 
+        Unconditionally, attempt to switch crypto dispatch into polling mode.
+
         :param node: VPP node to set IPsec async mode.
         :param async_enable: Async mode on or off.
         :type node: dict
@@ -325,13 +327,23 @@ class IPsecUtil:
         :raises RuntimeError: If failed to set IPsec async mode or if no API
             reply received.
         """
-        cmd = u"ipsec_set_async_mode"
-        err_msg = f"Failed to set IPsec async mode on host {node[u'host']}"
-        args = dict(
-            async_enable=async_enable
-        )
         with PapiSocketExecutor(node) as papi_exec:
+            cmd = u"ipsec_set_async_mode"
+            err_msg = f"Failed to set IPsec async mode on host {node[u'host']}"
+            args = dict(
+                async_enable=async_enable
+            )
             papi_exec.add(cmd, **args).get_reply(err_msg)
+            cmd = "crypto_set_async_dispatch_v2"
+            err_msg = "Failed to set dispatch mode."
+            args = dict(mode=0, adaptive=False)
+            try:
+                papi_exec.add(cmd, **args).get_reply(err_msg)
+            except (AttributeError, RuntimeError):
+                # Expected when VPP build does not have the _v2 yet
+                # (after and before the first CRC check).
+                # TODO: Fail here when testing of pre-23.10 builds is over.
+                pass
 
     @staticmethod
     def vpp_ipsec_crypto_sw_scheduler_set_worker(