aboutsummaryrefslogtreecommitdiffstats
path: root/resources
diff options
context:
space:
mode:
authorJan Gelety <jgelety@cisco.com>2020-09-16 16:45:36 +0200
committerJan Gelety <jgelety@cisco.com>2020-10-23 14:53:19 +0200
commit07ec871862034f7f439ed269fc30c55f6f95e066 (patch)
tree8b92ced1bf561a16fcc2738e49c7dd98f5a52198 /resources
parent905ab17015b24183770e3b55517482e30904d7f4 (diff)
CSIT-1597 NAT44 API: dynamic config
- cover API changes in VPP: https://gerrit.fd.io/r/c/vpp/+/29463 - update vpp stable to version 21.01-rc0~283-g5f4f2081c Change-Id: I079c10e4537448c3b078f22c3fe4ed266a5e2e2c Signed-off-by: Jan Gelety <jgelety@cisco.com>
Diffstat (limited to 'resources')
-rw-r--r--resources/api/vpp/supported_crcs.yaml6
-rw-r--r--resources/libraries/python/NATUtil.py68
-rw-r--r--resources/libraries/robot/ip/nat.robot3
3 files changed, 74 insertions, 3 deletions
diff --git a/resources/api/vpp/supported_crcs.yaml b/resources/api/vpp/supported_crcs.yaml
index 7213f06389..21b14904f3 100644
--- a/resources/api/vpp/supported_crcs.yaml
+++ b/resources/api/vpp/supported_crcs.yaml
@@ -30,8 +30,8 @@
# Use bash command "env LC_COLLATE=C sort -u" if not clear.
# https://logs.fd.io/production/vex-yul-rot-jenkins-1
-# /vpp-merge-master-ubuntu1804-x86_64/65/
-21.01-rc0~163:
+# /vpp-merge-master-ubuntu1804-x86_64/184/
+21.01-rc0~283:
acl_add_replace: '0x1cabdeab' # dev
acl_add_replace_reply: '0xac407b0c' # dev
acl_details: '0x7a97f21c' # perf teardown
@@ -184,6 +184,8 @@
nat44_interface_addr_dump: '0x51077d14' # dev teardown
nat44_interface_details: '0x5d286289' # dev teardown
nat44_interface_dump: '0x51077d14' # dev teardown
+ nat44_plugin_enable_disable: '0xdea0d501' # dev
+ nat44_plugin_enable_disable_reply: '0xe8d4e804' # dev
nat44_static_mapping_details: '0x1a433ef7' # dev teardown
nat44_static_mapping_dump: '0x51077d14' # dev teardown
nat44_user_details: '0x355896c2' # dev teardown
diff --git a/resources/libraries/python/NATUtil.py b/resources/libraries/python/NATUtil.py
index 620e14aea1..a9f760768e 100644
--- a/resources/libraries/python/NATUtil.py
+++ b/resources/libraries/python/NATUtil.py
@@ -27,7 +27,7 @@ from resources.libraries.python.PapiExecutor import PapiSocketExecutor
class NatConfigFlags(IntEnum):
- """Common NAT plugin APIs"""
+ """NAT plugin configuration flags"""
NAT_IS_NONE = 0x00
NAT_IS_TWICE_NAT = 0x01
NAT_IS_SELF_TWICE_NAT = 0x02
@@ -39,6 +39,15 @@ class NatConfigFlags(IntEnum):
NAT_IS_EXT_HOST_VALID = 0x80
+class Nat44ConfigFlags(IntEnum):
+ """NAT44 configuration flags"""
+ NAT44_IS_ENDPOINT_INDEPENDENT = 0x00
+ NAT44_IS_ENDPOINT_DEPENDENT = 0x01
+ NAT44_IS_STATIC_MAPPING_ONLY = 0x02
+ NAT44_IS_CONNECTION_TRACKING = 0x04
+ NAT44_IS_OUT2IN_DPO = 0x08
+
+
class NatAddrPortAllocAlg(IntEnum):
"""NAT Address and port assignment algorithms."""
NAT_ALLOC_ALG_DEFAULT = 0
@@ -53,6 +62,60 @@ class NATUtil:
pass
@staticmethod
+ def enable_nat44_plugin(
+ node, inside_vrf=0, outside_vrf=0, users=0, user_memory=0,
+ sessions=0, session_memory=0, user_sessions=0, mode=u""):
+ """Enable NAT44 plugin.
+
+ :param node: DUT node.
+ :param inside_vrf: Inside VRF ID.
+ :param outside_vrf: Outside VRF ID.
+ :param users: Maximum number of users. Used only in endpoint-independent
+ mode.
+ :param user_memory: User memory size - overwrite auto calculated hash
+ allocation parameter if non-zero.
+ :param sessions: Maximum number of sessions.
+ :param session_memory: Session memory size - overwrite auto calculated
+ hash allocation parameter if non-zero.
+ :param user_sessions: Maximum number of sessions per user. Used only in
+ endpoint-independent mode.
+ :param mode: NAT44 mode. Valid values:
+ - endpoint-independent
+ - endpoint-dependent
+ - static-mapping-only
+ - connection-tracking
+ - out2in-dpo
+ :type node: dict
+ :type inside_vrf: str or int
+ :type outside_vrf: str or int
+ :type users: str or int
+ :type user_memory: str or int
+ :type sessions: str or int
+ :type session_memory: str or int
+ :type user_sessions: str or int
+ :type mode: str
+ """
+ cmd = u"nat44_plugin_enable_disable"
+ err_msg = f"Failed to enable NAT44 plugin on the host {node[u'host']}!"
+ args_in = dict(
+ enable=True,
+ inside_vrf=int(inside_vrf),
+ outside_vrf=int(outside_vrf),
+ users=int(users),
+ user_memory=int(user_memory),
+ sessions=int(sessions),
+ session_memory=int(session_memory),
+ user_sessions=int(user_sessions),
+ flags=getattr(
+ Nat44ConfigFlags,
+ f"NAT44_IS_{mode.replace(u'-', u'_').upper()}"
+ ).value
+ )
+
+ with PapiSocketExecutor(node) as papi_exec:
+ papi_exec.add(cmd, **args_in).get_reply(err_msg)
+
+ @staticmethod
def set_nat44_interface(node, interface, flag):
"""Set inside and outside interfaces for NAT44.
@@ -200,6 +263,9 @@ class NATUtil:
:returns: Value of max_translations_per_thread NAT44 parameter.
:rtype: int
"""
+ # vpp-device tests have not dedicated physical core so
+ # ${thr_count_int} == 0 but we need to use one thread
+ threads = 1 if not int(threads) else int(threads)
rest, mult = modf(log2(sessions/(10*threads)))
return 2 ** (int(mult) + (1 if rest else 0)) * 10
diff --git a/resources/libraries/robot/ip/nat.robot b/resources/libraries/robot/ip/nat.robot
index e80e1e1c85..dee04f0b61 100644
--- a/resources/libraries/robot/ip/nat.robot
+++ b/resources/libraries/robot/ip/nat.robot
@@ -40,6 +40,9 @@
| Initialize NAT44 endpoint-dependent mode in circular topology
| | [Documentation] | Initialization of NAT44 endpoint-dependent mode on DUT1
| |
+| | ${max_sessions}= | Compute Max Translations Per Thread
+| | ... | ${n_sessions} | ${thr_count_int}
+| | Enable NAT44 Plugin | ${dut1} | mode=${nat_mode} | sessions=${max_sessions}
| | Configure inside and outside interfaces
| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${DUT1_${int}2}[0]
| | Set NAT44 Address Range