aboutsummaryrefslogtreecommitdiffstats
path: root/resources/libraries
diff options
context:
space:
mode:
Diffstat (limited to 'resources/libraries')
-rw-r--r--resources/libraries/python/NATUtil.py30
-rw-r--r--resources/libraries/robot/ip/nat.robot34
2 files changed, 61 insertions, 3 deletions
diff --git a/resources/libraries/python/NATUtil.py b/resources/libraries/python/NATUtil.py
index aabcd36cda..620e14aea1 100644
--- a/resources/libraries/python/NATUtil.py
+++ b/resources/libraries/python/NATUtil.py
@@ -13,6 +13,7 @@
"""NAT utilities library."""
+from math import log2, modf
from pprint import pformat
from enum import IntEnum
@@ -140,8 +141,10 @@ class NATUtil:
:param node: Topology node.
:type node: dict
+ :returns: NAT44 summary data.
+ :rtype: str
"""
- PapiSocketExecutor.run_cli_cmd(node, u"show nat44 summary")
+ return PapiSocketExecutor.run_cli_cmd(node, u"show nat44 summary")
@staticmethod
def show_nat_base_data(node):
@@ -197,10 +200,33 @@ class NATUtil:
: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
+ @staticmethod
+ def get_nat44_sessions_number(node, proto):
+ """Get number of established NAT44 sessions from actual NAT44 mapping
+ data.
+
+ :param node: DUT node.
+ :param proto: Required protocol - TCP/UDP/ICMP.
+ :type node: dict
+ :type proto: str
+ :returns: Number of established NAT44 sessions.
+ :rtype: int
+ :raises ValueError: If not supported protocol.
+ """
+ nat44_data = dict()
+ if proto in [u"UDP", u"TCP", u"ICMP"]:
+ for line in NATUtil.show_nat44_summary(node).splitlines():
+ sum_k, sum_v = line.split(u":") if u":" in line \
+ else (line, None)
+ nat44_data[sum_k] = sum_v.strip() if isinstance(sum_v, str) \
+ else sum_v
+ else:
+ raise ValueError(f"Unsupported protocol: {proto}!")
+ return nat44_data.get(f"total {proto.lower()} sessions", 0)
+
# DET44 PAPI calls
# DET44 means deterministic mode of NAT44
@staticmethod
diff --git a/resources/libraries/robot/ip/nat.robot b/resources/libraries/robot/ip/nat.robot
index b78575a960..e80e1e1c85 100644
--- a/resources/libraries/robot/ip/nat.robot
+++ b/resources/libraries/robot/ip/nat.robot
@@ -108,6 +108,38 @@
| | ... | ${dut2} | ${out_net} | ${out_mask} | gateway=${dut1_if2_ip4}
| | ... | interface=${DUT2_${int}1}[0]
+| Verify NAT44 TCP sessions number on DUT1 node
+| | [Documentation] | Verify that all required NAT44 TCP sessions are
+| | ... | established on DUT1 node.
+| |
+| | Verify NAT44 sessions number | ${nodes['DUT1']} | ${n_sessions} | TCP
+
+| Verify NAT44 UDP sessions number on DUT1 node
+| | [Documentation] | Verify that all required NAT44 UDP sessions are
+| | ... | established on DUT1 node.
+| |
+| | Verify NAT44 sessions number | ${nodes['DUT1']} | ${n_sessions} | UDP
+
+| Verify NAT44 sessions number
+| | [Documentation] | Verify that all required NAT44 sessions of required
+| | ... | protocol are established.
+| |
+| | ... | *Arguments:*
+| | ... | - node - DUT node. Type: dictionary
+| | ... | - exp_n_sessions - Expected number of NAT44 sessions. Type: integer
+| | ... | - proto - Required protocol. Type: string
+| |
+| | ... | *Example:*
+| |
+| | ... | \| Verify NAT44 sessions number \| ${nodes['DUT1']} \| ${64512} \
+| | ... | \| UDP \|
+| |
+| | [Arguments] | ${node} | ${exp_n_sessions} | ${proto}
+| |
+| | ${nat44_sessions}= | Get NAT44 Sessions Number | ${node} | ${proto}
+| | Should Be Equal As Integers | ${nat44_sessions} | ${exp_n_sessions}
+| | ... | Not all NAT44 ${proto} sessions have been established
+
# DET44 - NAT44 deterministic
| Enable DET44 plugin on DUT
| | [Documentation] | Enable DET44 plugin on DUT.
@@ -169,7 +201,7 @@
| Initialize NAT44 deterministic mode in circular topology
| | [Documentation] | Initialization of NAT44 deterministic mode (DET44)
-| | ... | on DUT1.
+| | ... | on DUT1 node.
| |
| | Enable DET44 plugin on DUT | ${dut1}
| | Configure DET44 interfaces