Update 1n-tx2 testbed docs for new thx2 servers
[csit.git] / resources / libraries / python / NATUtil.py
index 4ce72d8..aabcd36 100644 (file)
@@ -185,8 +185,24 @@ class NATUtil:
         ]
         PapiSocketExecutor.dump_and_log(node, cmds)
 
+    @staticmethod
+    def compute_max_translations_per_thread(sessions, threads):
+        """Compute value of max_translations_per_thread NAT44 parameter based on
+        total number of worker threads.
+
+        :param sessions: Required number of NAT44 sessions.
+        :param threads: Number of worker threads.
+        :type sessions: int
+        :type threads: int
+        :returns: Value of max_translations_per_thread NAT44 parameter.
+        :rtype: int
+        """
+        from math import log2, modf
+        rest, mult = modf(log2(sessions/(10*threads)))
+        return 2 ** (int(mult) + (1 if rest else 0)) * 10
+
     # DET44 PAPI calls
-    # DET44 means deterministic mode of NAT
+    # DET44 means deterministic mode of NAT44
     @staticmethod
     def enable_det44_plugin(node, inside_vrf=0, outside_vrf=0):
         """Enable DET44 plugin.
@@ -261,6 +277,38 @@ class NATUtil:
         with PapiSocketExecutor(node) as papi_exec:
             papi_exec.add(cmd, **args_in).get_reply(err_msg)
 
+    @staticmethod
+    def get_det44_mapping(node):
+        """Get DET44 mapping data.
+
+        :param node: DUT node.
+        :type node: dict
+        :returns: Dictionary of DET44 mapping data.
+        :rtype: dict
+        """
+        cmd = u"det44_map_dump"
+        err_msg = f"Failed to get DET44 mapping data on the host " \
+            f"{node[u'host']}!"
+        args_in = dict()
+        with PapiSocketExecutor(node) as papi_exec:
+            details = papi_exec.add(cmd, **args_in).get_reply(err_msg)
+
+        return details
+
+    @staticmethod
+    def get_det44_sessions_number(node):
+        """Get number of established DET44 sessions from actual DET44 mapping
+        data.
+
+        :param node: DUT node.
+        :type node: dict
+        :returns: Number of established DET44 sessions.
+        :rtype: int
+        """
+        det44_data = NATUtil.get_det44_mapping(node)
+
+        return det44_data.get(u"ses_num", 0)
+
     @staticmethod
     def show_det44(node):
         """Show DET44 data.