diff options
author | Jan Gelety <jgelety@cisco.com> | 2020-09-16 16:45:36 +0200 |
---|---|---|
committer | Jan Gelety <jgelety@cisco.com> | 2020-10-23 14:53:19 +0200 |
commit | 07ec871862034f7f439ed269fc30c55f6f95e066 (patch) | |
tree | 8b92ced1bf561a16fcc2738e49c7dd98f5a52198 /resources | |
parent | 905ab17015b24183770e3b55517482e30904d7f4 (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.yaml | 6 | ||||
-rw-r--r-- | resources/libraries/python/NATUtil.py | 68 | ||||
-rw-r--r-- | resources/libraries/robot/ip/nat.robot | 3 |
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 |