From 00460a1ba11a6112a08256d39d927f2a309b1b99 Mon Sep 17 00:00:00 2001 From: Jan Gelety Date: Sat, 8 Aug 2020 16:41:24 +0200 Subject: Fix: NAT44 deterministic moved to separate det44 plugin - align CSIT code with VPP code changes for NAT44 deterministic (DET44) feature - align test names according to snat44ed tests - remove obsolete 3-node nat tests - remove 2n1l-10ge2p1x710-ethip4udp-snat44det-h1048576-p63-s66060288 tests (not enough memory for such high number of sessions) Change-Id: I9a22b99b4cfa56d18e9c7ef9c58296e202567d42 Signed-off-by: Jan Gelety --- resources/api/vpp/supported_crcs.yaml | 13 +- resources/libraries/python/NATUtil.py | 140 ++++++++++++++------- resources/libraries/robot/ip/nat.robot | 126 ++++++++++++------- .../libraries/robot/shared/test_teardown.robot | 9 +- 4 files changed, 195 insertions(+), 93 deletions(-) (limited to 'resources') diff --git a/resources/api/vpp/supported_crcs.yaml b/resources/api/vpp/supported_crcs.yaml index f616a94e5e..017589f030 100644 --- a/resources/api/vpp/supported_crcs.yaml +++ b/resources/api/vpp/supported_crcs.yaml @@ -77,6 +77,17 @@ create_vhost_user_if_reply: '0x5383d31f' # dev create_vlan_subif: '0xaf34ac8b' # dev create_vlan_subif_reply: '0x5383d31f' # dev + det44_add_del_map: '0x1150a190' # perf + det44_interface_add_del_feature: '0xdc17a836' # perf + det44_interface_add_del_feature_reply: '0xe8d4e804' # perf + det44_interface_details: '0xe60cc5be' # perf teardown + det44_interface_dump: '0x51077d14' # perf teardown + det44_map_details: '0xad91dc83' # perf teardown + det44_map_dump: '0x51077d14' # perf teardown + det44_add_del_map_reply: '0xe8d4e804' # perf teardown + det44_plugin_enable_disable: '0xfc4b5d73' # perf + det44_plugin_enable_disable_reply: '0xe8d4e804' # perf + det44_session_dump: '0xe45a3af7' # perf teardown # dhcp_proxy_dump / details # honeycomb gbp_bridge_domain_add: '0x8454bfdf' # dev gbp_bridge_domain_add_reply: '0xe8d4e804' # dev @@ -191,8 +202,6 @@ nat44_user_dump: '0x51077d14' # perf teardown nat44_user_session_details: '0x1965fd69' # perf teardown nat44_user_session_dump: '0xe1899c98' # perf teardown - nat_det_add_del_map: '0x112fde05' # perf - nat_det_add_del_map_reply: '0xe8d4e804' # perf nat_show_config: '0x51077d14' # perf teardown nat_show_config_reply: '0x7903ef06' # perf teardown nat_worker_details: '0x84bf06fc' # perf teardown diff --git a/resources/libraries/python/NATUtil.py b/resources/libraries/python/NATUtil.py index b43058b23f..4ce72d84b4 100644 --- a/resources/libraries/python/NATUtil.py +++ b/resources/libraries/python/NATUtil.py @@ -21,6 +21,7 @@ from robot.api import logger from resources.libraries.python.Constants import Constants from resources.libraries.python.InterfaceUtil import InterfaceUtil +from resources.libraries.python.topology import Topology from resources.libraries.python.PapiExecutor import PapiSocketExecutor @@ -55,7 +56,7 @@ class NATUtil: """Set inside and outside interfaces for NAT44. :param node: DUT node. - :param interface: Inside interface. + :param interface: NAT44 interface. :param flag: Interface NAT configuration flag name. :type node: dict :type interface: str @@ -88,35 +89,6 @@ class NATUtil: NATUtil.set_nat44_interface(node, int_in, u"NAT_IS_INSIDE") NATUtil.set_nat44_interface(node, int_out, u"NAT_IS_OUTSIDE") - @staticmethod - def set_nat44_deterministic(node, ip_in, subnet_in, ip_out, subnet_out): - """Set deterministic behaviour of NAT44. - - :param node: DUT node. - :param ip_in: Inside IP. - :param subnet_in: Inside IP subnet. - :param ip_out: Outside IP. - :param subnet_out: Outside IP subnet. - :type node: dict - :type ip_in: str - :type subnet_in: str or int - :type ip_out: str - :type subnet_out: str or int - """ - cmd = u"nat_det_add_del_map" - err_msg = f"Failed to set deterministic behaviour of NAT " \ - f"on host {node[u'host']}" - args_in = dict( - is_add=True, - in_addr=IPv4Address(str(ip_in)).packed, - in_plen=int(subnet_in), - out_addr=IPv4Address(str(ip_out)).packed, - out_plen=int(subnet_out) - ) - - with PapiSocketExecutor(node) as papi_exec: - papi_exec.add(cmd, **args_in).get_reply(err_msg) - @staticmethod def set_nat44_address_range( node, start_ip, end_ip, vrf_id=Constants.BITWISE_NON_ZERO, @@ -186,14 +158,6 @@ class NATUtil: :param node: DUT node. :type node: dict """ - cmd = u"nat_show_config" - err_msg = f"Failed to get NAT base data on host {node[u'host']}" - - with PapiSocketExecutor(node) as papi_exec: - reply = papi_exec.add(cmd).get_reply(err_msg) - - logger.debug(f"NAT Configuration:\n{pformat(reply)}") - cmds = [ u"nat_worker_dump", u"nat44_interface_addr_dump", @@ -215,16 +179,104 @@ class NATUtil: :param node: DUT node. :type node: dict """ - cmd = u"nat_show_config" - err_msg = f"Failed to get NAT user data on host {node[u'host']}" + cmds = [ + u"nat44_user_dump", + u"nat44_user_session_dump", + ] + PapiSocketExecutor.dump_and_log(node, cmds) + + # DET44 PAPI calls + # DET44 means deterministic mode of NAT + @staticmethod + def enable_det44_plugin(node, inside_vrf=0, outside_vrf=0): + """Enable DET44 plugin. + + :param node: DUT node. + :param inside_vrf: Inside VRF ID. + :param outside_vrf: Outside VRF ID. + :type node: dict + :type inside_vrf: str or int + :type outside_vrf: str or int + """ + cmd = u"det44_plugin_enable_disable" + err_msg = f"Failed to enable DET44 plugin on the host {node[u'host']}!" + args_in = dict( + enable=True, + inside_vrf=int(inside_vrf), + outside_vrf=int(outside_vrf) + ) with PapiSocketExecutor(node) as papi_exec: - reply = papi_exec.add(cmd).get_reply(err_msg) + papi_exec.add(cmd, **args_in).get_reply(err_msg) - logger.debug(f"NAT Configuration:\n{pformat(reply)}") + @staticmethod + def set_det44_interface(node, if_key, is_inside): + """Enable DET44 feature on the interface. + + :param node: DUT node. + :param if_key: Interface key from topology file of interface + to enable DET44 feature on. + :param is_inside: True if interface is inside, False if outside. + :type node: dict + :type if_key: str + :type is_inside: bool + """ + cmd = u"det44_interface_add_del_feature" + err_msg = f"Failed to enable DET44 feature on the interface {if_key} " \ + f"on the host {node[u'host']}!" + args_in = dict( + is_add=True, + is_inside=is_inside, + sw_if_index=Topology.get_interface_sw_index(node, if_key) + ) + + with PapiSocketExecutor(node) as papi_exec: + papi_exec.add(cmd, **args_in).get_reply(err_msg) + + @staticmethod + def set_det44_mapping(node, ip_in, subnet_in, ip_out, subnet_out): + """Set DET44 mapping. + :param node: DUT node. + :param ip_in: Inside IP. + :param subnet_in: Inside IP subnet. + :param ip_out: Outside IP. + :param subnet_out: Outside IP subnet. + :type node: dict + :type ip_in: str + :type subnet_in: str or int + :type ip_out: str + :type subnet_out: str or int + """ + cmd = u"det44_add_del_map" + err_msg = f"Failed to set DET44 mapping on the host {node[u'host']}!" + args_in = dict( + is_add=True, + in_addr=IPv4Address(str(ip_in)).packed, + in_plen=int(subnet_in), + out_addr=IPv4Address(str(ip_out)).packed, + out_plen=int(subnet_out) + ) + + with PapiSocketExecutor(node) as papi_exec: + papi_exec.add(cmd, **args_in).get_reply(err_msg) + + @staticmethod + def show_det44(node): + """Show DET44 data. + + Used data sources: + + det44_interface_dump + det44_map_dump + det44_session_dump + + :param node: DUT node. + :type node: dict + """ cmds = [ - u"nat44_user_dump", - u"nat44_user_session_dump", + u"det44_interface_dump", + u"det44_map_dump", + u"det44_session_dump", ] PapiSocketExecutor.dump_and_log(node, cmds) diff --git a/resources/libraries/robot/ip/nat.robot b/resources/libraries/robot/ip/nat.robot index 8a970cf556..25218af456 100644 --- a/resources/libraries/robot/ip/nat.robot +++ b/resources/libraries/robot/ip/nat.robot @@ -37,49 +37,6 @@ | | ... | ${node['interfaces']['${int_out}']['name']} | | Set NAT44 Interfaces | ${node} | ${int_in_name} | ${int_out_name} -| Configure deterministic mode for NAT44 -| | [Documentation] | Set deterministic behaviour of NAT44. -| | -| | ... | *Arguments:* -| | ... | - node - DUT node to set deterministic mode for NAT44 on. -| | ... | Type: dictionary -| | ... | - ip_in - Inside IP. Type: string -| | ... | - subnet_in - Inside IP subnet. Type: string -| | ... | - ip_out - Outside IP. Type: string -| | ... | - subnet_out - Outside IP subnet. Type: string -| | -| | ... | *Example:* -| | -| | ... | \| Configure deterministic mode for NAT44 \| ${nodes['DUT1']} \ -| | ... | \| 100.0.0.0 \| 12 \| 12.1.1.0 \| 24 \| -| | -| | [Arguments] | ${node} | ${ip_in} | ${subnet_in} | ${ip_out} | ${subnet_out} -| | -| | Set NAT44 deterministic | ${node} | ${ip_in} | ${subnet_in} | ${ip_out} -| | ... | ${subnet_out} - -| Show NAT verbose -| | [Documentation] | Get the NAT settings on the node. -| | -| | ... | *Arguments:* -| | ... | - node - DUT node to show NAT. Type: dictionary -| | -| | ... | *Example:* -| | -| | ... | \| Show NAT verbose \| ${nodes['DUT1']} \| -| | -| | [Arguments] | ${node} -| | -| | Show NAT | ${node} - -| Initialize NAT44 deterministic mode in circular topology -| | [Documentation] | Initialization of NAT44 deterministic mode on DUT1 -| | -| | Configure inside and outside interfaces -| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${DUT1_${int}2}[0] -| | Configure deterministic mode for NAT44 -| | ... | ${dut1} | ${in_net} | ${in_mask} | ${out_net} | ${out_mask} - | Initialize NAT44 endpoint-dependent mode in circular topology | | [Documentation] | Initialization of NAT44 endpoint-dependent mode on DUT1 | | @@ -150,3 +107,86 @@ | | ... | Vpp Route Add | | ... | ${dut2} | ${out_net} | ${out_mask} | gateway=${dut1_if2_ip4} | | ... | interface=${DUT2_${int}1}[0] + +# DET44 - NAT44 deterministic +| Enable DET44 plugin on DUT +| | [Documentation] | Enable DET44 plugin on DUT. +| | +| | ... | *Arguments:* +| | ... | - node - DUT node to enablr DET44 on. +| | ... | Type: dictionary +| | ... | - inside_vrf - Inside VRF ID; default value: 0. +| | ... | Type: string or integer +| | ... | - outside_vrf - Outside VRF ID; default value: 0. +| | ... | Type: string or integer +| | +| | ... | *Example:* +| | +| | ... | \| Enable DET44 plugin on all DUTs \| +| | +| | [Arguments] | ${node} | ${inside_vrf}=${0} | ${outside_vrf}=${0} +| | +| | Enable DET44 Plugin +| | ... | ${node} | inside_vrf=${inside_vrf} | outside_vrf=${outside_vrf} + +| Configure DET44 interfaces +| | [Documentation] | Configure inside and outside interfaces for DET44. +| | +| | ... | *Arguments:* +| | ... | - node - DUT node to set DET44 interfaces on. Type: dictionary +| | ... | - int_in - Inside interface key. Type: string +| | ... | - int_out - Outside interface key. Type: string +| | +| | ... | *Example:* +| | +| | ... | \| Configure DET44 interfaces \| ${nodes['DUT1']} \| port5 \| port6 \| +| | +| | [Arguments] | ${node} | ${int_in} | ${int_out} +| | +| | Set DET44 Interface | ${dut1} | ${int_in} | is_inside=${True} +| | Set DET44 Interface | ${dut1} | ${int_out} | is_inside=${False} + +| Configure deterministic mode for NAT44 +| | [Documentation] | Set deterministic behaviour of NAT44 (DET44). +| | +| | ... | *Arguments:* +| | ... | - node - DUT node to set deterministic mode for NAT44 on. +| | ... | Type: dictionary +| | ... | - ip_in - Inside IP. Type: string +| | ... | - subnet_in - Inside IP subnet. Type: string +| | ... | - ip_out - Outside IP. Type: string +| | ... | - subnet_out - Outside IP subnet. Type: string +| | +| | ... | *Example:* +| | +| | ... | \| Configure deterministic mode for NAT44 \| ${nodes['DUT1']} \ +| | ... | \| 100.0.0.0 \| 12 \| 12.1.1.0 \| 24 \| +| | +| | [Arguments] | ${node} | ${ip_in} | ${subnet_in} | ${ip_out} | ${subnet_out} +| | +| | Set DET44 Mapping +| | ... | ${node} | ${ip_in} | ${subnet_in} | ${ip_out} | ${subnet_out} + +| Initialize NAT44 deterministic mode in circular topology +| | [Documentation] | Initialization of NAT44 deterministic mode (DET44) +| | ... | on DUT1. +| | +| | Enable DET44 plugin on DUT | ${dut1} +| | Configure DET44 interfaces +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${DUT1_${int}2}[0] +| | Configure deterministic mode for NAT44 +| | ... | ${dut1} | ${in_net} | ${in_mask} | ${out_net} | ${out_mask} + +| Show DET44 verbose +| | [Documentation] | Get DET44 settings on the node. +| | +| | ... | *Arguments:* +| | ... | - node - DUT node to show NAT. Type: dictionary +| | +| | ... | *Example:* +| | +| | ... | \| Show DET44 verbose \| ${nodes['DUT1']} \| +| | +| | [Arguments] | ${node} +| | +| | Show DET44 | ${node} diff --git a/resources/libraries/robot/shared/test_teardown.robot b/resources/libraries/robot/shared/test_teardown.robot index 5d71db4edc..93c4574c83 100644 --- a/resources/libraries/robot/shared/test_teardown.robot +++ b/resources/libraries/robot/shared/test_teardown.robot @@ -101,13 +101,14 @@ | | ... | Keyword Should Exist | vnf_manager.Kill All VMs | | Run Keyword If | '${vnf_status}' == 'PASS' | vnf_manager.Kill All VMs -| Additional Test Tear Down Action For nat +| Additional Test Tear Down Action For det44 | | [Documentation] -| | ... | Additional teardown for tests which uses NAT feature. +| | ... | Additional teardown for tests which uses DET44 feature. | | | | FOR | ${dut} | IN | @{duts} -| | | Run Keyword If Test Failed -| | | ... | Show NAT verbose | ${nodes['${dut}']} +#| | | Run Keyword If Test Failed +#| | | ... | Show DET44 verbose | ${nodes['${dut}']} +| | | Show DET44 verbose | ${nodes['${dut}']} | | END | Additional Test Tear Down Action For nat-ed -- cgit 1.2.3-korg