aboutsummaryrefslogtreecommitdiffstats
path: root/resources/libraries
diff options
context:
space:
mode:
Diffstat (limited to 'resources/libraries')
-rw-r--r--resources/libraries/python/NATUtil.py140
-rw-r--r--resources/libraries/robot/ip/nat.robot126
-rw-r--r--resources/libraries/robot/shared/test_teardown.robot9
3 files changed, 184 insertions, 91 deletions
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
@@ -89,35 +90,6 @@ class NATUtil:
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,
flag=u"NAT_IS_NONE"):
@@ -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