CSIT-1597 NAT44 API: dynamic config 29/29529/10
authorJan Gelety <jgelety@cisco.com>
Wed, 16 Sep 2020 14:45:36 +0000 (16:45 +0200)
committerJan Gelety <jgelety@cisco.com>
Fri, 23 Oct 2020 12:53:19 +0000 (14:53 +0200)
- 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>
22 files changed:
VPP_STABLE_VER_CENTOS
VPP_STABLE_VER_UBUNTU_BIONIC
resources/api/vpp/supported_crcs.yaml
resources/libraries/python/NATUtil.py
resources/libraries/robot/ip/nat.robot
tests/vpp/device/ip4/eth2p-ethip4tcp-nat44ed-dev.robot
tests/vpp/device/ip4/eth2p-ethip4udp-nat44ed-dev.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4tcp-nat44ed-h1024-p63-s64512-cps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4tcp-nat44ed-h16384-p63-s1032192-cps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4tcp-nat44ed-h262144-p63-s16515072-cps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4tcp-nat44ed-h4096-p63-s258048-cps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4tcp-nat44ed-h65536-p63-s4128768-cps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h1024-p63-s64512-cps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h1024-p63-s64512-udir-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h16384-p63-s1032192-cps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h16384-p63-s1032192-udir-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h262144-p63-s16515072-cps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h262144-p63-s16515072-udir-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h4096-p63-s258048-cps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h4096-p63-s258048-udir-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h65536-p63-s4128768-cps-ndrpdr.robot
tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h65536-p63-s4128768-udir-ndrpdr.robot

index bc9af79..af95662 100644 (file)
@@ -1 +1 @@
-21.01-rc0~225_gdfffdd7~b128
+21.01-rc0~283-g5f4f208~b184
index a1a7752..c67eb74 100644 (file)
@@ -1 +1 @@
-21.01-rc0~225-gdfffdd7fa
+21.01-rc0~283-g5f4f2081c
index 7213f06..21b1490 100644 (file)
@@ -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
     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
index 620e14a..a9f7607 100644 (file)
@@ -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
@@ -52,6 +61,60 @@ class NATUtil:
     def __init__(self):
         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
 
index e80e1e1..dee04f0 100644 (file)
@@ -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
index 0a60b3f..c72fae1 100644 (file)
@@ -71,7 +71,7 @@
 | ${dst_port}= | 8080
 # NAT settings
 | ${nat_mode}= | endpoint-dependent
-| ${max_translations_per_thread}= | 81920
+| ${n_sessions}= | ${64512}
 | ${in_net}= | 192.168.0.0
 | ${in_mask}= | ${22}
 | ${out_net}= | 68.142.68.0
@@ -98,9 +98,6 @@
 | | Given Set Jumbo
 | | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
 | | And Pre-initialize layer driver | ${nic_driver}
-| | And Add NAT to all DUTs | nat_mode=${nat_mode}
-| | And Add NAT max translations per thread to all DUTs
-| | ... | ${max_translations_per_thread}
 | | And Apply startup configuration on all VPP DUTs | with_trace=${True}
 | | When Initialize layer driver | ${nic_driver}
 | | And Initialize layer interface
index e4e5241..18f648f 100644 (file)
@@ -71,7 +71,7 @@
 | ${dst_port}= | 8080
 # NAT settings
 | ${nat_mode}= | endpoint-dependent
-| ${max_translations_per_thread}= | 81920
+| ${n_sessions}= | ${64512}
 | ${in_net}= | 192.168.0.0
 | ${in_mask}= | ${22}
 | ${out_net}= | 68.142.68.0
@@ -98,9 +98,6 @@
 | | Given Set Jumbo
 | | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
 | | And Pre-initialize layer driver | ${nic_driver}
-| | And Add NAT to all DUTs | nat_mode=${nat_mode}
-| | And Add NAT max translations per thread to all DUTs
-| | ... | ${max_translations_per_thread}
 | | And Apply startup configuration on all VPP DUTs | with_trace=${True}
 | | When Initialize layer driver | ${nic_driver}
 | | And Initialize layer interface
index 905c552..75127b6 100644 (file)
 | | Given Set Jumbo
 | | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
 | | And Pre-initialize layer driver | ${nic_driver}
-| | And Add NAT to all DUTs | nat_mode=${nat_mode}
-| | ${max_translations_per_thread}= | Compute Max Translations Per Thread
-| | ... | ${n_sessions} | ${thr_count_int}
-| | And Add NAT max translations per thread to all DUTs
-| | ... | ${max_translations_per_thread}
 | | And Apply startup configuration on all VPP DUTs
 | | When Initialize layer driver | ${nic_driver}
 | | And Initialize layer interface
index 836f602..6cfa95b 100644 (file)
 | | Given Set Jumbo
 | | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
 | | And Pre-initialize layer driver | ${nic_driver}
-| | And Add NAT to all DUTs | nat_mode=${nat_mode}
-| | ${max_translations_per_thread}= | Compute Max Translations Per Thread
-| | ... | ${n_sessions} | ${thr_count_int}
-| | And Add NAT max translations per thread to all DUTs
-| | ... | ${max_translations_per_thread}
 | | And Apply startup configuration on all VPP DUTs
 | | When Initialize layer driver | ${nic_driver}
 | | And Initialize layer interface
index 674cab0..2907e32 100644 (file)
@@ -92,7 +92,7 @@
 | ${trial_duration}= | ${1.1}
 | ${trial_multiplicity}= | ${1}
 # Main heap size multiplicator
-| ${heap_size_mult}= | ${3}
+| ${heap_size_mult}= | ${7}
 
 *** Keywords ***
 | Local Template
 | | Given Set Jumbo
 | | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
 | | And Pre-initialize layer driver | ${nic_driver}
-| | And Add NAT to all DUTs | nat_mode=${nat_mode}
-| | ${max_translations_per_thread}= | Compute Max Translations Per Thread
-| | ... | ${n_sessions} | ${thr_count_int}
-| | And Add NAT max translations per thread to all DUTs
-| | ... | ${max_translations_per_thread}
 | | And Apply startup configuration on all VPP DUTs
 | | When Initialize layer driver | ${nic_driver}
 | | And Initialize layer interface
index 873ac1a..5059253 100644 (file)
 | | Given Set Jumbo
 | | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
 | | And Pre-initialize layer driver | ${nic_driver}
-| | And Add NAT to all DUTs | nat_mode=${nat_mode}
-| | ${max_translations_per_thread}= | Compute Max Translations Per Thread
-| | ... | ${n_sessions} | ${thr_count_int}
-| | And Add NAT max translations per thread to all DUTs
-| | ... | ${max_translations_per_thread}
 | | And Apply startup configuration on all VPP DUTs
 | | When Initialize layer driver | ${nic_driver}
 | | And Initialize layer interface
index 39e81ec..32851f5 100644 (file)
 | | Given Set Jumbo
 | | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
 | | And Pre-initialize layer driver | ${nic_driver}
-| | And Add NAT to all DUTs | nat_mode=${nat_mode}
-| | ${max_translations_per_thread}= | Compute Max Translations Per Thread
-| | ... | ${n_sessions} | ${thr_count_int}
-| | And Add NAT max translations per thread to all DUTs
-| | ... | ${max_translations_per_thread}
 | | And Apply startup configuration on all VPP DUTs
 | | When Initialize layer driver | ${nic_driver}
 | | And Initialize layer interface
index cfdcfac..a9865fd 100644 (file)
 | | Given Set Jumbo
 | | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
 | | And Pre-initialize layer driver | ${nic_driver}
-| | And Add NAT to all DUTs | nat_mode=${nat_mode}
-| | ${max_translations_per_thread}= | Compute Max Translations Per Thread
-| | ... | ${n_sessions} | ${thr_count_int}
-| | And Add NAT max translations per thread to all DUTs
-| | ... | ${max_translations_per_thread}
 | | And Apply startup configuration on all VPP DUTs
 | | When Initialize layer driver | ${nic_driver}
 | | And Initialize layer interface
index 89ba6e4..57b25a2 100644 (file)
 | | Given Set Max Rate And Jumbo
 | | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
 | | And Pre-initialize layer driver | ${nic_driver}
-| | And Add NAT to all DUTs | nat_mode=${nat_mode}
-| | ${max_translations_per_thread}= | Compute Max Translations Per Thread
-| | ... | ${n_sessions} | ${thr_count_int}
-| | And Add NAT max translations per thread to all DUTs
-| | ... | ${max_translations_per_thread}
 | | And Apply startup configuration on all VPP DUTs
 | | When Initialize layer driver | ${nic_driver}
 | | And Initialize layer interface
index 7ecdf09..29e7e51 100644 (file)
 | | Given Set Jumbo
 | | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
 | | And Pre-initialize layer driver | ${nic_driver}
-| | And Add NAT to all DUTs | nat_mode=${nat_mode}
-| | ${max_translations_per_thread}= | Compute Max Translations Per Thread
-| | ... | ${n_sessions} | ${thr_count_int}
-| | And Add NAT max translations per thread to all DUTs
-| | ... | ${max_translations_per_thread}
 | | And Apply startup configuration on all VPP DUTs
 | | When Initialize layer driver | ${nic_driver}
 | | And Initialize layer interface
index 0f421e3..d184ae9 100644 (file)
 | | Given Set Max Rate And Jumbo
 | | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
 | | And Pre-initialize layer driver | ${nic_driver}
-| | And Add NAT to all DUTs | nat_mode=${nat_mode}
-| | ${max_translations_per_thread}= | Compute Max Translations Per Thread
-| | ... | ${n_sessions} | ${thr_count_int}
-| | And Add NAT max translations per thread to all DUTs
-| | ... | ${max_translations_per_thread}
 | | And Apply startup configuration on all VPP DUTs
 | | When Initialize layer driver | ${nic_driver}
 | | And Initialize layer interface
index e375a75..0b25561 100644 (file)
@@ -92,7 +92,7 @@
 | ${trial_duration}= | ${1.1}
 | ${trial_multiplicity}= | ${1}
 # Main heap size multiplicator
-| ${heap_size_mult}= | ${3}
+| ${heap_size_mult}= | ${7}
 
 *** Keywords ***
 | Local Template
 | | Given Set Jumbo
 | | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
 | | And Pre-initialize layer driver | ${nic_driver}
-| | And Add NAT to all DUTs | nat_mode=${nat_mode}
-| | ${max_translations_per_thread}= | Compute Max Translations Per Thread
-| | ... | ${n_sessions} | ${thr_count_int}
-| | And Add NAT max translations per thread to all DUTs
-| | ... | ${max_translations_per_thread}
 | | And Apply startup configuration on all VPP DUTs
 | | When Initialize layer driver | ${nic_driver}
 | | And Initialize layer interface
index 0f1694a..564874f 100644 (file)
 | | Given Set Max Rate And Jumbo
 | | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
 | | And Pre-initialize layer driver | ${nic_driver}
-| | And Add NAT to all DUTs | nat_mode=${nat_mode}
-| | ${max_translations_per_thread}= | Compute Max Translations Per Thread
-| | ... | ${n_sessions} | ${thr_count_int}
-| | And Add NAT max translations per thread to all DUTs
-| | ... | ${max_translations_per_thread}
 | | And Apply startup configuration on all VPP DUTs
 | | When Initialize layer driver | ${nic_driver}
 | | And Initialize layer interface
index 98a00a6..f04a476 100644 (file)
 | | Given Set Jumbo
 | | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
 | | And Pre-initialize layer driver | ${nic_driver}
-| | And Add NAT to all DUTs | nat_mode=${nat_mode}
-| | ${max_translations_per_thread}= | Compute Max Translations Per Thread
-| | ... | ${n_sessions} | ${thr_count_int}
-| | And Add NAT max translations per thread to all DUTs
-| | ... | ${max_translations_per_thread}
 | | And Apply startup configuration on all VPP DUTs
 | | When Initialize layer driver | ${nic_driver}
 | | And Initialize layer interface
index b201e36..613687d 100644 (file)
 | | Given Set Max Rate And Jumbo
 | | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
 | | And Pre-initialize layer driver | ${nic_driver}
-| | And Add NAT to all DUTs | nat_mode=${nat_mode}
-| | ${max_translations_per_thread}= | Compute Max Translations Per Thread
-| | ... | ${n_sessions} | ${thr_count_int}
-| | And Add NAT max translations per thread to all DUTs
-| | ... | ${max_translations_per_thread}
 | | And Apply startup configuration on all VPP DUTs
 | | When Initialize layer driver | ${nic_driver}
 | | And Initialize layer interface
index 97c68d8..6f5f7dd 100644 (file)
 | | Given Set Jumbo
 | | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
 | | And Pre-initialize layer driver | ${nic_driver}
-| | And Add NAT to all DUTs | nat_mode=${nat_mode}
-| | ${max_translations_per_thread}= | Compute Max Translations Per Thread
-| | ... | ${n_sessions} | ${thr_count_int}
-| | And Add NAT max translations per thread to all DUTs
-| | ... | ${max_translations_per_thread}
 | | And Apply startup configuration on all VPP DUTs
 | | When Initialize layer driver | ${nic_driver}
 | | And Initialize layer interface
index dfc88b3..217af61 100644 (file)
 | | Given Set Max Rate And Jumbo
 | | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
 | | And Pre-initialize layer driver | ${nic_driver}
-| | And Add NAT to all DUTs | nat_mode=${nat_mode}
-| | ${max_translations_per_thread}= | Compute Max Translations Per Thread
-| | ... | ${n_sessions} | ${thr_count_int}
-| | And Add NAT max translations per thread to all DUTs
-| | ... | ${max_translations_per_thread}
 | | And Apply startup configuration on all VPP DUTs
 | | When Initialize layer driver | ${nic_driver}
 | | And Initialize layer interface