CSIT-1459: Migrate IP libraries from VAT to PAPI 13/19913/28
authorJan Gelety <jgelety@cisco.com>
Thu, 30 May 2019 14:13:25 +0000 (16:13 +0200)
committerJan Gelety <jgelety@cisco.com>
Tue, 18 Jun 2019 19:07:12 +0000 (21:07 +0200)
Change-Id: Id84cf9c3afd53260b5bbf658a6a3870aa0c91333
Signed-off-by: Jan Gelety <jgelety@cisco.com>
125 files changed:
resources/libraries/python/IPUtil.py
resources/libraries/python/IPv4NodeAddress.py [deleted file]
resources/libraries/python/IPv4Setup.py [deleted file]
resources/libraries/python/IPv4Util.py [deleted file]
resources/libraries/python/IPv6NodesAddr.py [deleted file]
resources/libraries/python/IPv6Setup.py [deleted file]
resources/libraries/python/IPv6Util.py
resources/libraries/python/InterfaceUtil.py
resources/libraries/python/Routing.py [deleted file]
resources/libraries/python/ssh.py
resources/libraries/robot/crypto/ipsec.robot
resources/libraries/robot/features/policer.robot
resources/libraries/robot/honeycomb/interfaces.robot
resources/libraries/robot/honeycomb/persistence.robot
resources/libraries/robot/honeycomb/port_mirroring.robot
resources/libraries/robot/honeycomb/sub_interface.robot
resources/libraries/robot/ip/ip4.robot
resources/libraries/robot/ip/ip6.robot
resources/libraries/robot/overlay/lisp_static_adjacency.robot
resources/libraries/robot/overlay/vxlan.robot
resources/libraries/robot/performance/performance_configuration.robot
resources/libraries/robot/shared/traffic.robot
resources/libraries/robot/tcp/tcp_setup.robot
resources/templates/vat/add_fib_table.vat [deleted file]
resources/templates/vat/add_ip_address.vat [deleted file]
resources/templates/vat/add_ip_neighbor.vat [deleted file]
resources/templates/vat/add_l2_fib_entry.vat [deleted file]
resources/templates/vat/add_route.vat [deleted file]
resources/templates/vat/api_trace_dump.vat [deleted file]
resources/templates/vat/api_trace_save.vat [deleted file]
resources/templates/vat/create_avf_interface.vat [deleted file]
resources/templates/vat/create_bond_interface.vat [deleted file]
resources/templates/vat/create_gre.vat [deleted file]
resources/templates/vat/create_loopback.vat [deleted file]
resources/templates/vat/create_sub_interface.vat [deleted file]
resources/templates/vat/create_vhost_user_if.vat [deleted file]
resources/templates/vat/create_vlan_subif.vat [deleted file]
resources/templates/vat/del_fib_table.vat [deleted file]
resources/templates/vat/del_ip_address.vat [deleted file]
resources/templates/vat/del_route.vat [deleted file]
resources/templates/vat/enslave_physical_interface.vat [deleted file]
resources/templates/vat/flush_ip_addresses.vat [deleted file]
resources/templates/vat/hw_interface_set_mtu.vat [deleted file]
resources/templates/vat/input_acl_int.vat [deleted file]
resources/templates/vat/interface_dump.vat [deleted file]
resources/templates/vat/interface_vrf_dump.vat [deleted file]
resources/templates/vat/ip_address_dump.vat [deleted file]
resources/templates/vat/ip_source_check.vat [deleted file]
resources/templates/vat/l2_bd_add_sw_if_index.vat [deleted file]
resources/templates/vat/l2_bd_create.vat [deleted file]
resources/templates/vat/l2_bd_dump.vat [deleted file]
resources/templates/vat/l2_bridge_domain.vat [deleted file]
resources/templates/vat/l2_bridge_domain_delete.vat [deleted file]
resources/templates/vat/l2_fib_entry_delete.vat [deleted file]
resources/templates/vat/l2_fib_table_dump.vat [deleted file]
resources/templates/vat/l2_patch.vat [deleted file]
resources/templates/vat/l2_vlan_tag_rewrite.vat [deleted file]
resources/templates/vat/l2_xconnect.vat [deleted file]
resources/templates/vat/memif_create.vat [deleted file]
resources/templates/vat/memif_dump.vat [deleted file]
resources/templates/vat/memif_socket_filename_add_del.vat [deleted file]
resources/templates/vat/proxy_arp_intfc_enable.vat [deleted file]
resources/templates/vat/set_fib_to_interface.vat [deleted file]
resources/templates/vat/set_if_state.vat [deleted file]
resources/templates/vat/show_interface.vat [deleted file]
resources/templates/vat/show_ip_fib.vat [deleted file]
resources/templates/vat/show_memif.vat [deleted file]
resources/templates/vat/show_vhost.vat [deleted file]
resources/templates/vat/sw_interface_ip6nd_ra_config.vat [deleted file]
resources/templates/vat/tap_dump.vat [deleted file]
resources/templates/vat/vhost_user_dump.vat [deleted file]
resources/templates/vat/vxlan_create.vat [deleted file]
resources/templates/vat/vxlan_dump.vat [deleted file]
resources/templates/vat/vxlan_gpe_dump.vat [deleted file]
resources/test_data/honeycomb/interface_ip.py
resources/test_data/honeycomb/plugin_acl.py
tests/honeycomb/func/mgmt-cfg-dhcp-apihc-apivat-func.robot
tests/honeycomb/func/mgmt-cfg-intip4-intip6-apihc-apivat-func.robot
tests/honeycomb/func/mgmt-cfg-pluginacl-apihc-apivat-func.robot
tests/vpp/device/container_memif/eth2p-ethip4-ip4base-eth-2memif-1dcr-dev.robot
tests/vpp/device/container_memif/eth2p-ethip6-ip6base-eth-2memif-1dcr-dev.robot
tests/vpp/device/interfaces/eth2p-ethip4-ip4base-eth-1tap-dev.robot
tests/vpp/device/vm_vhost/ip4/eth2p-ethip4-ip4base-eth-2vhost-1vm-dev.robot
tests/vpp/device/vm_vhost/ip6/eth2p-ethip6-ip6base-eth-2vhost-1vm-dev.robot
tests/vpp/func/ip4/eth2p-dot1q-ip4base-func.robot
tests/vpp/func/ip4/eth2p-ethip4-ip4base-copblklistbase-func.robot
tests/vpp/func/ip4/eth2p-ethip4-ip4base-copwhlistbase-func.robot
tests/vpp/func/ip4/eth2p-ethip4-ip4base-iaclbase-func.robot
tests/vpp/func/ip4/eth2p-ethip4-ip4base-ip4arp-func.robot
tests/vpp/func/ip4/eth2p-ethip4-ip4base-ip4dhcpclient-func.robot
tests/vpp/func/ip4/eth2p-ethip4-ip4base-ip4dhcpproxy-func.robot
tests/vpp/func/ip4/eth2p-ethip4-ip4base-ip4ecmp-func.robot
tests/vpp/func/ip4/eth2p-ethip4-ip4base-ip4proxyarp-func.robot
tests/vpp/func/ip4/eth2p-ethip4-ip4base-rpf-func.robot
tests/vpp/func/ip4/eth2p-ethip4-ip4basevrf-func.robot
tests/vpp/func/ip4_tunnels/gre/eth2p-ethip4gre-ip4base-func.robot
tests/vpp/func/ip4_tunnels/lisp/eth2p-ethip4lisp-ip4base-func.robot
tests/vpp/func/ip4_tunnels/lisp/eth2p-ethip4lisp-l2bdbasemaclrn-func.robot
tests/vpp/func/ip4_tunnels/lisp/eth2p-ethip4lispgpe-ip4base-func.robot
tests/vpp/func/ip4_tunnels/lisp/eth2p-ethip4lispgpe-ip4basevrf-func.robot
tests/vpp/func/ip4_tunnels/lisp/eth2p-ethip4lispgpe-ip6base-func.robot
tests/vpp/func/ip4_tunnels/lisp/eth2p-ethip4lispgpe-ip6basevrf-func.robot
tests/vpp/func/ip4_tunnels/softwire/eth2p-ethip4--ethip6ip4-ip4base--ip6base-swirelw46-func.robot
tests/vpp/func/ip4_tunnels/softwire/eth2p-ethip4--ethip6ip4-ip4base--ip6base-swiremape-func.robot
tests/vpp/func/ip4_tunnels/softwire/eth2p-ethip4--ethip6ip4-ip4base--ip6base-swiremapt-func.robot
tests/vpp/func/ip4_tunnels/vxlan/eth4p-ethip4vxlan-l2bdbasemaclrn-l2shg-func.robot
tests/vpp/func/ip6/eth2p-ethip6-ip6base-copblklistbase-func.robot
tests/vpp/func/ip6/eth2p-ethip6-ip6base-copwhlistbase-func.robot
tests/vpp/func/ip6/eth2p-ethip6-ip6base-iaclbase-func.robot
tests/vpp/func/ip6/eth2p-ethip6-ip6base-ip6dhcpproxy-func.robot
tests/vpp/func/ip6/eth2p-ethip6-ip6base-ip6ecmp-func.robot
tests/vpp/func/ip6/eth2p-ethip6-ip6base-ip6ra-func.robot
tests/vpp/func/ip6/eth2p-ethip6-ip6basevrf-func.robot
tests/vpp/func/ip6_tunnels/lisp/eth2p-ethip6lisp-l2bdbasemaclrn-func.robot
tests/vpp/func/ip6_tunnels/lisp/eth2p-ethip6lispgpe-ip4base-func.robot
tests/vpp/func/ip6_tunnels/lisp/eth2p-ethip6lispgpe-ip6base-func.robot
tests/vpp/func/ip6_tunnels/lisp/eth2p-ethip6lispgpe-ip6basevrf-func.robot
tests/vpp/func/ip6_tunnels/vxlan/eth2p-ethip6vxlan-l2bdbasemaclrn-func.robot
tests/vpp/func/ip6_tunnels/vxlan/eth4p-ethip6vxlan-l2bdbasemaclrn-l2shg-func.robot
tests/vpp/func/telemetry/eth2p-ethip4-ip4base-ip4ipfixbase-func.robot
tests/vpp/func/telemetry/eth2p-ethip4-ip4base-ip4ipfixscale-func.robot
tests/vpp/func/telemetry/eth2p-ethip4-ip4base-spanrx-func.robot
tests/vpp/func/telemetry/eth2p-ethip6-ip6base-ip6ipfixbase-func.robot
tests/vpp/func/telemetry/eth2p-ethip6-ip6base-ip6ipfixscale-func.robot
tests/vpp/func/telemetry/eth2p-ethip6-ip6base-spanrx-func.robot

index cf7034c..52640d1 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2018 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 
 import re
 
 
 import re
 
-from ipaddress import IPv4Network, ip_address
+from socket import AF_INET, AF_INET6, inet_ntop, inet_pton
+
+from ipaddress import ip_address
+from ipaddress import IPv4Network, IPv6Network, IPv4Address, IPv6Address
+from ipaddress import AddressValueError, NetmaskValueError
 
 
-from resources.libraries.python.ssh import SSH
 from resources.libraries.python.Constants import Constants
 from resources.libraries.python.Constants import Constants
+from resources.libraries.python.InterfaceUtil import InterfaceUtil
+from resources.libraries.python.PapiExecutor import PapiExecutor
 from resources.libraries.python.ssh import exec_cmd_no_error, exec_cmd
 from resources.libraries.python.ssh import exec_cmd_no_error, exec_cmd
-from resources.libraries.python.topology import Topology
+from resources.libraries.python.topology import NodeType, Topology
 
 
 class IPUtil(object):
 
 
 class IPUtil(object):
@@ -51,36 +56,128 @@ class IPUtil(object):
         return str(ip_address(ip_int))
 
     @staticmethod
         return str(ip_address(ip_int))
 
     @staticmethod
-    def vpp_ip_probe(node, interface, addr, if_type="key"):
+    def vpp_get_interface_ip_addresses(node, interface, ip_version):
+        """Get list of IP addresses from an interface on a VPP node.
+
+        :param node: VPP node.
+        :param interface: Name of an interface on the VPP node.
+        :param ip_version: IP protocol version (ipv4 or ipv6).
+        :type node: dict
+        :type interface: str
+        :type ip_version: str
+        :returns: List of dictionaries, each containing IP address, subnet
+            prefix length and also the subnet mask for ipv4 addresses.
+            Note: A single interface may have multiple IP addresses assigned.
+        :rtype: list
+        """
+        try:
+            sw_if_index = Topology.convert_interface_reference(
+                node, interface, 'sw_if_index')
+        except RuntimeError:
+            if isinstance(interface, basestring):
+                sw_if_index = InterfaceUtil.get_sw_if_index(node, interface)
+            else:
+                raise
+
+        is_ipv6 = 1 if ip_version == 'ipv6' else 0
+
+        cmd = 'ip_address_dump'
+        cmd_reply = 'ip_address_details'
+        args = dict(sw_if_index=sw_if_index,
+                    is_ipv6=is_ipv6)
+        err_msg = 'Failed to get L2FIB dump on host {host}'.format(
+            host=node['host'])
+
+        with PapiExecutor(node) as papi_exec:
+            papi_resp = papi_exec.add(cmd, **args).get_dump(err_msg)
+
+        data = list()
+        for item in papi_resp.reply[0]['api_reply']:
+            item[cmd_reply]['ip'] = inet_ntop(AF_INET6, item[cmd_reply]['ip']) \
+                if is_ipv6 else inet_ntop(AF_INET, item[cmd_reply]['ip'][0:4])
+            item[cmd_reply]['netmask'] = str(
+                IPv6Network(unicode('::/{pl}'.format(
+                    pl=item[cmd_reply]['prefix_length']))).netmask) if is_ipv6 \
+                else str(IPv4Network(unicode('0.0.0.0/{pl}'.format(
+                    pl=item[cmd_reply]['prefix_length']))).netmask)
+            data.append(item[cmd_reply])
+
+        return data
+
+    @staticmethod
+    def get_interface_vrf_table(node, interface, ip_version='ipv4'):
+        """Get vrf ID for the given interface.
+
+        :param node: VPP node.
+        :param interface: Name or sw_if_index of a specific interface.
+        :type node: dict
+        :param ip_version: IP protocol version (ipv4 or ipv6).
+        :type interface: str or int
+        :type ip_version: str
+        :returns: vrf ID of the specified interface.
+        :rtype: int
+        """
+        if isinstance(interface, basestring):
+            sw_if_index = InterfaceUtil.get_sw_if_index(node, interface)
+        else:
+            sw_if_index = interface
+
+        is_ipv6 = 1 if ip_version == 'ipv6' else 0
+
+        cmd = 'sw_interface_get_table'
+        args = dict(sw_if_index=sw_if_index,
+                    is_ipv6=is_ipv6)
+        err_msg = 'Failed to get VRF id assigned to interface {ifc}'.format(
+            ifc=interface)
+
+        with PapiExecutor(node) as papi_exec:
+            papi_resp = papi_exec.add(cmd, **args).get_replies(err_msg). \
+                verify_reply(err_msg=err_msg)
+
+        return papi_resp['vrf_id']
+
+    @staticmethod
+    def vpp_ip_source_check_setup(node, if_name):
+        """Setup Reverse Path Forwarding source check on interface.
+
+        :param node: VPP node.
+        :param if_name: Interface name to setup RPF source check.
+        :type node: dict
+        :type if_name: str
+        """
+        cmd = 'ip_source_check_interface_add_del'
+        args = dict(
+            sw_if_index=InterfaceUtil.get_interface_index(node, if_name),
+            is_add=1,
+            loose=0)
+        err_msg = 'Failed to enable source check on interface {ifc}'.format(
+            ifc=if_name)
+        with PapiExecutor(node) as papi_exec:
+            papi_exec.add(cmd, **args).get_replies(err_msg). \
+                verify_reply(err_msg=err_msg)
+
+    @staticmethod
+    def vpp_ip_probe(node, interface, addr):
         """Run ip probe on VPP node.
 
         :param node: VPP node.
         :param interface: Interface key or name.
         :param addr: IPv4/IPv6 address.
         """Run ip probe on VPP node.
 
         :param node: VPP node.
         :param interface: Interface key or name.
         :param addr: IPv4/IPv6 address.
-        :param if_type: Interface type
         :type node: dict
         :type interface: str
         :type addr: str
         :type node: dict
         :type interface: str
         :type addr: str
-        :type if_type: str
-        :raises ValueError: If the if_type is unknown.
-        :raises Exception: If vpp probe fails.
         """
         """
-        ssh = SSH()
-        ssh.connect(node)
-
-        if if_type == "key":
-            iface_name = Topology.get_interface_name(node, interface)
-        elif if_type == "name":
-            iface_name = interface
-        else:
-            raise ValueError("if_type unknown: {0}".format(if_type))
-
-        cmd = "{c}".format(c=Constants.VAT_BIN_NAME)
-        cmd_input = 'exec ip probe {dev} {ip}'.format(dev=iface_name, ip=addr)
-        (ret_code, _, _) = ssh.exec_command_sudo(cmd, cmd_input)
-        if int(ret_code) != 0:
-            raise Exception('VPP ip probe {dev} {ip} failed on {h}'.format(
-                dev=iface_name, ip=addr, h=node['host']))
+        cmd = 'ip_probe_neighbor'
+        cmd_reply = 'proxy_arp_intfc_enable_disable_reply'
+        args = dict(
+            sw_if_index=InterfaceUtil.get_interface_index(node, interface),
+            dst=str(addr))
+        err_msg = 'VPP ip probe {dev} {ip} failed on {h}'.format(
+            dev=interface, ip=addr, h=node['host'])
+
+        with PapiExecutor(node) as papi_exec:
+            papi_exec.add(cmd, **args).get_replies(err_msg). \
+                verify_reply(cmd_reply=cmd_reply, err_msg=err_msg)
 
     @staticmethod
     def ip_addresses_should_be_equal(ip1, ip2):
 
     @staticmethod
     def ip_addresses_should_be_equal(ip1, ip2):
@@ -91,7 +188,6 @@ class IPUtil(object):
         :type ip1: str
         :type ip2: str
         """
         :type ip1: str
         :type ip2: str
         """
-
         addr1 = ip_address(unicode(ip1))
         addr2 = ip_address(unicode(ip2))
 
         addr1 = ip_address(unicode(ip1))
         addr2 = ip_address(unicode(ip2))
 
@@ -105,14 +201,14 @@ class IPUtil(object):
         """Setup namespace on given node and attach interface and IP to
         this namespace. Applicable also on TG node.
 
         """Setup namespace on given node and attach interface and IP to
         this namespace. Applicable also on TG node.
 
-        :param node: Node to set namespace on.
+        :param node: VPP node.
         :param namespace_name: Namespace name.
         :param interface_name: Interface name.
         :param ip_addr: IP address of namespace's interface.
         :param prefix: IP address prefix length.
         :type node: dict
         :type namespace_name: str
         :param namespace_name: Namespace name.
         :param interface_name: Interface name.
         :param ip_addr: IP address of namespace's interface.
         :param prefix: IP address prefix length.
         :type node: dict
         :type namespace_name: str
-        :type vhost_if: str
+        :type interface_name: str
         :type ip_addr: str
         :type prefix: int
         """
         :type ip_addr: str
         :type prefix: int
         """
@@ -131,7 +227,7 @@ class IPUtil(object):
     def linux_enable_forwarding(node, ip_ver='ipv4'):
         """Enable forwarding on a Linux node, e.g. VM.
 
     def linux_enable_forwarding(node, ip_ver='ipv4'):
         """Enable forwarding on a Linux node, e.g. VM.
 
-        :param node: Node to enable forwarding on.
+        :param node: VPP node.
         :param ip_ver: IP version, 'ipv4' or 'ipv6'.
         :type node: dict
         :type ip_ver: str
         :param ip_ver: IP version, 'ipv4' or 'ipv6'.
         :type node: dict
         :type ip_ver: str
@@ -143,7 +239,7 @@ class IPUtil(object):
     def get_linux_interface_name(node, pci_addr):
         """Get the interface name.
 
     def get_linux_interface_name(node, pci_addr):
         """Get the interface name.
 
-        :param node: Node where to execute command.
+        :param node: VPP/TG node.
         :param pci_addr: PCI address
         :type node: dict
         :type pci_addr: str
         :param pci_addr: PCI address
         :type node: dict
         :type pci_addr: str
@@ -151,7 +247,6 @@ class IPUtil(object):
         :rtype: str
         :raises RuntimeError: If cannot get the information about interfaces.
         """
         :rtype: str
         :raises RuntimeError: If cannot get the information about interfaces.
         """
-
         regex_intf_info = r"pci@" \
                           r"([0-9a-f]{4}:[0-9a-f]{2}:[0-9a-f]{2}.[0-9a-f])\s*" \
                           r"([a-zA-Z0-9]*)\s*network"
         regex_intf_info = r"pci@" \
                           r"([0-9a-f]{4}:[0-9a-f]{2}:[0-9a-f]{2}.[0-9a-f])\s*" \
                           r"([a-zA-Z0-9]*)\s*network"
@@ -159,8 +254,8 @@ class IPUtil(object):
         cmd = "lshw -class network -businfo"
         ret_code, stdout, stderr = exec_cmd(node, cmd, timeout=30, sudo=True)
         if ret_code != 0:
         cmd = "lshw -class network -businfo"
         ret_code, stdout, stderr = exec_cmd(node, cmd, timeout=30, sudo=True)
         if ret_code != 0:
-            raise RuntimeError('Could not get information about interfaces'
-                               'reason:{0}'.format(stderr))
+            raise RuntimeError('Could not get information about interfaces:\n'
+                               '{err}'.format(err=stderr))
 
         for line in stdout.splitlines()[2:]:
             try:
 
         for line in stdout.splitlines()[2:]:
             try:
@@ -174,25 +269,21 @@ class IPUtil(object):
     def set_linux_interface_up(node, interface):
         """Set the specified interface up.
 
     def set_linux_interface_up(node, interface):
         """Set the specified interface up.
 
-        :param node: Node where to execute command.
+        :param node: VPP/TG node.
         :param interface: Interface in namespace.
         :type node: dict
         :type interface: str
         :raises RuntimeError: If the interface could not be set up.
         """
         :param interface: Interface in namespace.
         :type node: dict
         :type interface: str
         :raises RuntimeError: If the interface could not be set up.
         """
-
         cmd = "ip link set {0} up".format(interface)
         cmd = "ip link set {0} up".format(interface)
-        ret_code, _, stderr = exec_cmd(node, cmd, timeout=30, sudo=True)
-        if ret_code != 0:
-            raise RuntimeError('Could not set the interface up, reason:{0}'.
-                               format(stderr))
+        exec_cmd_no_error(node, cmd, timeout=30, sudo=True)
 
     @staticmethod
     def set_linux_interface_ip(node, interface, ip_addr, prefix,
                                namespace=None):
         """Set IP address to interface in linux.
 
 
     @staticmethod
     def set_linux_interface_ip(node, interface, ip_addr, prefix,
                                namespace=None):
         """Set IP address to interface in linux.
 
-        :param node: Node where to execute command.
+        :param node: VPP/TG node.
         :param interface: Interface in namespace.
         :param ip_addr: IP to be set on interface.
         :param prefix: IP prefix.
         :param interface: Interface in namespace.
         :param ip_addr: IP to be set on interface.
         :param prefix: IP prefix.
@@ -205,52 +296,242 @@ class IPUtil(object):
         :raises RuntimeError: IP could not be set.
         """
         if namespace is not None:
         :raises RuntimeError: IP could not be set.
         """
         if namespace is not None:
-            cmd = 'ip netns exec {} ip addr add {}/{} dev {}'.format(
-                namespace, ip_addr, prefix, interface)
+            cmd = 'ip netns exec {ns} ip addr add {ip}/{p} dev {dev}'.format(
+                ns=namespace, ip=ip_addr, p=prefix, dev=interface)
         else:
         else:
-            cmd = 'ip addr add {}/{} dev {}'.format(ip_addr, prefix, interface)
-        (ret_code, _, stderr) = exec_cmd(node, cmd, timeout=5, sudo=True)
-        if ret_code != 0:
-            raise RuntimeError(
-                'Could not set IP for interface, reason:{}'.format(stderr))
+            cmd = 'ip addr add {ip}/{p} dev {dev}'.format(
+                ip=ip_addr, p=prefix, dev=interface)
+
+        exec_cmd_no_error(node, cmd, timeout=5, sudo=True)
 
     @staticmethod
 
     @staticmethod
-    def set_linux_interface_route(node, interface, route, namespace=None):
-        """Set route via interface in linux.
+    def add_linux_route(node, ip_addr, prefix, gateway, namespace=None):
+        """Add linux route in namespace.
 
         :param node: Node where to execute command.
 
         :param node: Node where to execute command.
-        :param interface: Interface in namespace.
-        :param route: Route to be added via interface.
-        :param namespace: Execute command in namespace. Optional parameter.
+        :param ip_addr: Route destination IP address.
+        :param prefix: IP prefix.
+        :param namespace: Execute command in namespace. Optional.
+        :param gateway: Gateway address.
         :type node: dict
         :type node: dict
-        :type interface: str
-        :type route: str
+        :type ip_addr: str
+        :type prefix: int
+        :type gateway: str
         :type namespace: str
         """
         if namespace is not None:
         :type namespace: str
         """
         if namespace is not None:
-            cmd = 'ip netns exec {} ip route add {} dev {}'.format(
-                namespace, route, interface)
+            cmd = 'ip netns exec {} ip route add {}/{} via {}'.format(
+                namespace, ip_addr, prefix, gateway)
         else:
         else:
-            cmd = 'ip route add {} dev {}'.format(route, interface)
+            cmd = 'ip route add {}/{} via {}'.format(ip_addr, prefix, gateway)
         exec_cmd_no_error(node, cmd, sudo=True)
 
         exec_cmd_no_error(node, cmd, sudo=True)
 
+    @staticmethod
+    def vpp_interface_set_ip_address(node, interface, address,
+                                     prefix_length=None):
+        """Set IP address to VPP interface.
+
+        :param node: VPP node.
+        :param interface: Interface name.
+        :param address: IP address.
+        :param prefix_length: Prefix length.
+        :type node: dict
+        :type interface: str
+        :type address: str
+        :type prefix_length: int
+        """
+        try:
+            ip_addr = IPv6Address(unicode(address))
+            af_inet = AF_INET6
+            is_ipv6 = 1
+        except (AddressValueError, NetmaskValueError):
+            ip_addr = IPv4Address(unicode(address))
+            af_inet = AF_INET
+            is_ipv6 = 0
+
+        cmd = 'sw_interface_add_del_address'
+        args = dict(
+            sw_if_index=InterfaceUtil.get_interface_index(node, interface),
+            is_add=1,
+            is_ipv6=is_ipv6,
+            del_all=0,
+            address_length=int(prefix_length) if prefix_length else 128
+            if is_ipv6 else 32,
+            address=inet_pton(af_inet, str(ip_addr)))
+        err_msg = 'Failed to add IP address on interface {ifc}'.format(
+            ifc=interface)
+        with PapiExecutor(node) as papi_exec:
+            papi_exec.add(cmd, **args).get_replies(err_msg). \
+                verify_reply(err_msg=err_msg)
+
+    @staticmethod
+    def vpp_add_ip_neighbor(node, iface_key, ip_addr, mac_address):
+        """Add IP neighbor on DUT node.
+
+        :param node: VPP node.
+        :param iface_key: Interface key.
+        :param ip_addr: IP address of the interface.
+        :param mac_address: MAC address of the interface.
+        :type node: dict
+        :type iface_key: str
+        :type ip_addr: str
+        :type mac_address: str
+        """
+        try:
+            dst_ip = IPv6Address(unicode(ip_addr))
+        except (AddressValueError, NetmaskValueError):
+            dst_ip = IPv4Address(unicode(ip_addr))
+
+        neighbor = dict(
+            sw_if_index=Topology.get_interface_sw_index(
+                node, iface_key),
+            flags=0,
+            mac_address=str(mac_address),
+            ip_address=str(dst_ip))
+        cmd = 'ip_neighbor_add_del'
+        args = dict(
+            is_add=1,
+            neighbor=neighbor)
+        err_msg = 'Failed to add IP neighbor on interface {ifc}'.format(
+            ifc=iface_key)
+        with PapiExecutor(node) as papi_exec:
+            papi_exec.add(cmd, **args).get_replies(err_msg). \
+                verify_reply(err_msg=err_msg)
+
+    @staticmethod
+    def vpp_route_add(node, network, prefix_len, **kwargs):
+        """Add route to the VPP node.
+
+        :param node: VPP node.
+        :param network: Route destination network address.
+        :param prefix_len: Route destination network prefix length.
+        :param kwargs: Optional key-value arguments:
+
+            gateway: Route gateway address. (str)
+            interface: Route interface. (str)
+            vrf: VRF table ID. (int)
+            count: number of IP addresses to add starting from network IP (int)
+            local: The route is local with same prefix (increment is 1).
+                If None, then is not used. (bool)
+            lookup_vrf: VRF table ID for lookup. (int)
+            multipath: Enable multipath routing. (bool)
+            weight: Weight value for unequal cost multipath routing. (int)
+
+        :type node: dict
+        :type network: str
+        :type prefix_len: int
+        :type kwargs: dict
+        """
+        interface = kwargs.get('interface', None)
+        gateway = kwargs.get('gateway', None)
+
+        try:
+            net_addr = IPv6Address(unicode(network))
+            af_inet = AF_INET6
+            is_ipv6 = 1
+        except (AddressValueError, NetmaskValueError):
+            net_addr = IPv4Address(unicode(network))
+            af_inet = AF_INET
+            is_ipv6 = 0
+
+        if gateway:
+            try:
+                gt_addr = IPv6Address(unicode(gateway))
+                af_inet_gt = AF_INET6
+            except (AddressValueError, NetmaskValueError):
+                gt_addr = IPv4Address(unicode(gateway))
+                af_inet_gt = AF_INET
+
+        cmd = 'ip_add_del_route'
+        args = dict(
+            next_hop_sw_if_index=InterfaceUtil.get_interface_index(
+                node, interface) if interface else Constants.BITWISE_NON_ZERO,
+            table_id=int(kwargs.get('vrf', 0)),
+            is_add=1,
+            is_ipv6=is_ipv6,
+            is_local=int(kwargs.get('local', False)),
+            is_multipath=int(kwargs.get('multipath', False)),
+            next_hop_weight=int(kwargs.get('weight', 1)),
+            next_hop_proto=1 if is_ipv6 else 0,
+            dst_address_length=int(prefix_len),
+            next_hop_address=inet_pton(af_inet_gt, str(gt_addr)) if gateway
+            else 0,
+            next_hop_table_id=int(kwargs.get('lookup_vrf', 0)))
+        err_msg = 'Failed to add route(s) on host {host}'.format(
+            host=node['host'])
+        with PapiExecutor(node) as papi_exec:
+            for i in xrange(kwargs.get('count', 1)):
+                papi_exec.add(cmd, dst_address=inet_pton(
+                    af_inet, str(net_addr+i)), **args)
+            papi_exec.get_replies(err_msg).verify_replies(err_msg=err_msg)
+
+    @staticmethod
+    def vpp_nodes_set_ipv4_addresses(nodes, nodes_addr):
+        """Set IPv4 addresses on all VPP nodes in topology.
+
+        :param nodes: Nodes of the test topology.
+        :param nodes_addr: Available nodes IPv4 addresses.
+        :type nodes: dict
+        :type nodes_addr: dict
+        :returns: Affected interfaces as list of (node, interface) tuples.
+        :rtype: list
+        """
+        interfaces = []
+        for net in nodes_addr.values():
+            for port in net['ports'].values():
+                host = port.get('node')
+                if host is None:
+                    continue
+                topo = Topology()
+                node = topo.get_node_by_hostname(nodes, host)
+                if node is None:
+                    continue
+                if node['type'] != NodeType.DUT:
+                    continue
+                iface_key = topo.get_interface_by_name(node, port['if'])
+                IPUtil.vpp_interface_set_ip_address(
+                    node, iface_key, port['addr'], net['prefix'])
+                interfaces.append((node, port['if']))
+
+        return interfaces
+
+    @staticmethod
+    def flush_ip_addresses(node, interface):
+        """Flush all IPv4addresses from specified interface.
+
+        :param node: VPP node.
+        :param interface: Interface name.
+        :type node: dict
+        :type interface: str
+        """
+        cmd = 'sw_interface_add_del_address'
+        args = dict(
+            sw_if_index=InterfaceUtil.get_interface_index(node, interface),
+            del_all=1)
+        err_msg = 'Failed to flush IP address on interface {ifc}'.format(
+            ifc=interface)
+        with PapiExecutor(node) as papi_exec:
+            papi_exec.add(cmd, **args).get_replies(err_msg). \
+                verify_reply(err_msg=err_msg)
+
+    @staticmethod
+    def add_fib_table(node, table_id, ipv6=False):
+        """Create new FIB table according to ID.
 
 
-def convert_ipv4_netmask_prefix(network):
-    """Convert network mask to equivalent network prefix length or vice versa.
-
-    Example: mask 255.255.0.0 -> prefix length 16
-    :param network: Network mask or network prefix length.
-    :type network: str or int
-    :returns: Network mask or network prefix length.
-    :rtype: str or int
-    """
-    temp_address = "0.0.0.0"
-    net = IPv4Network(u"{0}/{1}".format(temp_address, network), False)
-
-    if isinstance(network, int) and (0 < network < 33):
-        return str(net.netmask)
-    elif isinstance(network, basestring):
-        return int(net.prefixlen)
-    else:
-        raise Exception("Value {0} is not a valid ipv4 netmask or network"
-                        " prefix length".format(network))
+        :param node: Node to add FIB on.
+        :param table_id: FIB table ID.
+        :param ipv6: Is this an IPv6 table
+        :type node: dict
+        :type table_id: int
+        :type ipv6: bool
+        """
+        cmd = 'ip_table_add_del'
+        args = dict(
+            table_id=int(table_id),
+            is_ipv6=int(ipv6),
+            is_add=1)
+        err_msg = 'Failed to add FIB table on host {host}'.format(
+            host=node['host'])
+        with PapiExecutor(node) as papi_exec:
+            papi_exec.add(cmd, **args).get_replies(err_msg). \
+                verify_reply(err_msg=err_msg)
diff --git a/resources/libraries/python/IPv4NodeAddress.py b/resources/libraries/python/IPv4NodeAddress.py
deleted file mode 100644 (file)
index de96c18..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-# Copyright (c) 2018 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Robot framework variable file.
-
-Create dictionary variable nodes_ipv4_addr of IPv4 addresses from
-available networks.
-"""
-
-from ipaddress import IPv4Network
-
-from resources.libraries.python.topology import Topology
-
-# Default list of IPv4 subnets
-IPV4_NETWORKS = ['192.168.{}.0/24'.format(i) for i in range(1, 100)]
-
-
-class IPv4NetworkGenerator(object):
-    """IPv4 network generator.
-
-    TODO: Conform to https://docs.python.org/2/library/stdtypes.html#typeiter
-    """
-
-    def __init__(self, networks):
-        """Populate internal list of valid networks.
-
-        :param networks: List of strings containing IPv4 subnet
-            with prefix length.
-        :type networks: list
-        :raise RuntimeError: If no IPv4 networks are added.
-        """
-        self._networks = []
-        for network in networks:
-            net = IPv4Network(unicode(network))
-            self._networks.append(net)
-        if not self._networks:
-            raise RuntimeError("No IPv4 networks")
-
-    def next_network(self):
-        """Pop and return network from internal list.
-
-        :returns: Next network in form (IPv4Network, subnet).
-        :raises StopIteration: If there are no more elements.
-        """
-        if self._networks:
-            return self._networks.pop()
-        else:
-            raise StopIteration()
-
-
-def get_variables(nodes, networks=IPV4_NETWORKS[:]):
-    """Special robot framework method that returns dictionary nodes_ipv4_addr,
-    mapping of node and interface name to IPv4 address.
-
-    :param nodes: Nodes of the test topology.
-    :param networks: List of available IPv4 networks.
-    :type nodes: dict
-    :type networks: list
-
-    .. note::
-       Robot framework calls it automatically.
-    """
-    topo = Topology()
-    links = topo.get_links(nodes)
-
-    if len(links) > len(networks):
-        raise Exception('Not enough available IPv4 networks for topology.')
-
-    ip4_n = IPv4NetworkGenerator(networks)
-
-    nets = {}
-
-    for link in links:
-        ip4_net = ip4_n.next_network()
-        net_hosts = ip4_net.hosts()
-        port_idx = 0
-        ports = {}
-        for node in nodes.values():
-            if_key = topo.get_interface_by_link_name(node, link)
-            if_name = topo.get_interface_name(node, if_key)
-            if if_name is not None:
-                port = {'addr': str(next(net_hosts)),
-                        'node': node['host'],
-                        'if': if_name}
-                port_idx += 1
-                port_id = 'port{0}'.format(port_idx)
-                ports.update({port_id: port})
-        nets.update({link: {'net_addr': str(ip4_net.network_address),
-                            'prefix': ip4_net.prefixlen,
-                            'ports': ports}})
-
-    return {'DICT__nodes_ipv4_addr': nets}
diff --git a/resources/libraries/python/IPv4Setup.py b/resources/libraries/python/IPv4Setup.py
deleted file mode 100644 (file)
index b018bce..0000000
+++ /dev/null
@@ -1,363 +0,0 @@
-# Copyright (c) 2018 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""IPv4 setup library"""
-
-from socket import inet_ntoa
-from struct import pack
-from abc import ABCMeta, abstractmethod
-
-from robot.api.deco import keyword
-
-from resources.libraries.python.ssh import exec_cmd_no_error
-from resources.libraries.python.Routing import Routing
-from resources.libraries.python.topology import NodeType, Topology
-from resources.libraries.python.VatExecutor import VatExecutor
-
-
-class IPv4Node(object):
-    """Abstract class of a node in a topology."""
-    __metaclass__ = ABCMeta
-
-    def __init__(self, node_info):
-        self.node_info = node_info
-
-    @staticmethod
-    def _get_netmask(prefix_length):
-        """Convert IPv4 network prefix length into IPV4 network mask.
-
-        :param prefix_length: Length of network prefix.
-        :type prefix_length: int
-        :returns: Network mask.
-        :rtype: str
-        """
-
-        bits = 0xffffffff ^ (1 << 32 - prefix_length) - 1
-        return inet_ntoa(pack('>I', bits))
-
-    @abstractmethod
-    def set_ip(self, interface, address, prefix_length):
-        """Configure IPv4 address on interface.
-
-        :param interface: Interface name.
-        :param address: IPv4 address.
-        :param prefix_length: IPv4 prefix length.
-        :type interface: str
-        :type address: str
-        :type prefix_length: int
-        :returns: nothing
-        """
-        pass
-
-    @abstractmethod
-    def set_route(self, network, prefix_length, gateway, interface, count=1):
-        """Configure IPv4 route.
-
-        :param network: Network IPv4 address.
-        :param prefix_length: IPv4 prefix length.
-        :param gateway: IPv4 address of the gateway.
-        :param interface: Interface name.
-        :param count: Number of consecutive routes to add.
-        :type network: str
-        :type prefix_length: int
-        :type gateway: str
-        :type interface: str
-        :type route: int
-        :returns: nothing
-        """
-        pass
-
-    @abstractmethod
-    def unset_route(self, network, prefix_length, gateway, interface):
-        """Remove specified IPv4 route.
-
-        :param network: Network IPv4 address.
-        :param prefix_length: IPv4 prefix length.
-        :param gateway: IPv4 address of the gateway.
-        :param interface: Interface name.
-        :type network: str
-        :type prefix_length: int
-        :type gateway: str
-        :type interface: str
-        :returns: nothing
-        """
-        pass
-
-    @abstractmethod
-    def flush_ip_addresses(self, interface):
-        """Flush all IPv4 addresses from specified interface.
-
-        :param interface: Interface name.
-        :type interface: str
-        :returns: nothing
-        """
-        pass
-
-    @abstractmethod
-    def ping(self, destination_address, source_interface):
-        """Send an ICMP request to destination node.
-
-        :param destination_address: Address to send the ICMP request.
-        :param source_interface: Source interface name.
-        :type destination_address: str
-        :type source_interface: str
-        :returns: nothing
-        """
-        pass
-
-
-class Tg(IPv4Node):
-    """Traffic generator node"""
-
-    # Implicit constructor is inherited.
-
-    def _execute(self, cmd):
-        """Executes the specified command on TG using SSH.
-
-        :param cmd: Command to be executed.
-        :type cmd: str
-        :returns: Content of stdout and stderr returned by command.
-        :rtype: tuple
-        """
-        return exec_cmd_no_error(self.node_info, cmd)
-
-    def _sudo_execute(self, cmd):
-        """Executes the specified command with sudo on TG using SSH.
-
-        :param cmd: Command to be executed.
-        :type cmd: str
-        :returns: Content of stdout and stderr returned by command.
-        :rtype: tuple
-        """
-        return exec_cmd_no_error(self.node_info, cmd, sudo=True)
-
-    def set_ip(self, interface, address, prefix_length):
-        cmd = 'ip -4 addr flush dev {}'.format(interface)
-        self._sudo_execute(cmd)
-        cmd = 'ip addr add {}/{} dev {}'.format(address, prefix_length,
-                                                interface)
-        self._sudo_execute(cmd)
-
-    def set_route(self, network, prefix_length, gateway, interface, count=1):
-        netmask = self._get_netmask(prefix_length)
-        cmd = 'route add -net {} netmask {} gw {}'.\
-            format(network, netmask, gateway)
-        self._sudo_execute(cmd)
-
-    def unset_route(self, network, prefix_length, gateway, interface):
-        self._sudo_execute('ip route delete {}/{}'.
-                           format(network, prefix_length))
-
-    def arp_ping(self, destination_address, source_interface):
-        """Execute 'arping' command to send one ARP packet from the TG node.
-
-        :param destination_address: Destination IP address for the ARP packet.
-        :param source_interface: Name of an interface to send ARP packet from.
-        :type destination_address: str
-        :type source_interface: str
-        """
-        self._sudo_execute('arping -c 1 -I {} {}'.format(source_interface,
-                                                         destination_address))
-
-    def ping(self, destination_address, source_interface):
-        self._execute('ping -c 1 -w 5 -I {} {}'.format(source_interface,
-                                                       destination_address))
-
-    def flush_ip_addresses(self, interface):
-        self._sudo_execute('ip addr flush dev {}'.format(interface))
-
-
-class Dut(IPv4Node):
-    """Device under test"""
-
-    # Implicit contructor is inherited.
-
-    def get_sw_if_index(self, interface):
-        """Get sw_if_index of specified interface from current node.
-
-        :param interface: Interface name.
-        :type interface: str
-        :returns: sw_if_index of the interface or None.
-        :rtype: int
-        """
-        return Topology().get_interface_sw_index(self.node_info, interface)
-
-    def exec_vat(self, script, **args):
-        """Wrapper for VAT executor.
-
-        :param script: Script to execute.
-        :param args: Parameters to the script.
-        :type script: str
-        :type args: dict
-        :returns: nothing
-        """
-        # TODO: check return value
-        VatExecutor.cmd_from_template(self.node_info, script, **args)
-
-    def set_arp(self, iface_key, ip_address, mac_address):
-        """Set entry in ARP cache.
-
-        :param iface_key: Interface key.
-        :param ip_address: IP address.
-        :param mac_address: MAC address.
-        :type iface_key: str
-        :type ip_address: str
-        :type mac_address: str
-        """
-        self.exec_vat('add_ip_neighbor.vat',
-                      sw_if_index=self.get_sw_if_index(iface_key),
-                      ip_address=ip_address, mac_address=mac_address)
-
-    def set_ip(self, interface, address, prefix_length):
-        self.exec_vat('add_ip_address.vat',
-                      sw_if_index=self.get_sw_if_index(interface),
-                      address=address, prefix_length=prefix_length)
-
-    def set_route(self, network, prefix_length, gateway, interface, count=1):
-        Routing.vpp_route_add(self.node_info,
-                              network=network, prefix_len=prefix_length,
-                              gateway=gateway, interface=interface, count=count)
-
-    def unset_route(self, network, prefix_length, gateway, interface):
-        self.exec_vat('del_route.vat', network=network,
-                      prefix_length=prefix_length, gateway=gateway,
-                      sw_if_index=self.get_sw_if_index(interface))
-
-    def arp_ping(self, destination_address, source_interface):
-        """Does nothing."""
-        pass
-
-    def flush_ip_addresses(self, interface):
-        self.exec_vat('flush_ip_addresses.vat',
-                      sw_if_index=self.get_sw_if_index(interface))
-
-    def ping(self, destination_address, source_interface):
-        pass
-
-
-def get_node(node_info):
-    """Creates a class instance derived from Node based on type.
-
-    :param node_info: Dictionary containing information on nodes in topology.
-    :type node_info: dict
-    :returns: Class instance that is derived from Node.
-    """
-    if node_info['type'] == NodeType.TG:
-        return Tg(node_info)
-    elif node_info['type'] == NodeType.DUT:
-        return Dut(node_info)
-    else:
-        raise NotImplementedError('Node type "{}" unsupported!'.
-                                  format(node_info['type']))
-
-
-class IPv4Setup(object):
-    """IPv4 setup in topology."""
-
-    @staticmethod
-    def vpp_nodes_set_ipv4_addresses(nodes, nodes_addr):
-        """Set IPv4 addresses on all VPP nodes in topology.
-
-        :param nodes: Nodes of the test topology.
-        :param nodes_addr: Available nodes IPv4 addresses.
-        :type nodes: dict
-        :type nodes_addr: dict
-        :returns: Affected interfaces as list of (node, interface) tuples.
-        :rtype: list
-        """
-        interfaces = []
-        for net in nodes_addr.values():
-            for port in net['ports'].values():
-                host = port.get('node')
-                if host is None:
-                    continue
-                topo = Topology()
-                node = topo.get_node_by_hostname(nodes, host)
-                if node is None:
-                    continue
-                if node['type'] != NodeType.DUT:
-                    continue
-                iface_key = topo.get_interface_by_name(node, port['if'])
-                get_node(node).set_ip(iface_key, port['addr'], net['prefix'])
-                interfaces.append((node, port['if']))
-
-        return interfaces
-
-    @staticmethod
-    @keyword('Get IPv4 address of node "${node}" interface "${port}" '
-             'from "${nodes_addr}"')
-    def get_ip_addr(node, iface_key, nodes_addr):
-        """Return IPv4 address of the node port.
-
-        :param node: Node in the topology.
-        :param iface_key: Interface key of the node.
-        :param nodes_addr: Nodes IPv4 addresses.
-        :type node: dict
-        :type iface_key: str
-        :type nodes_addr: dict
-        :returns: IPv4 address.
-        :rtype: str
-        """
-        interface = Topology.get_interface_name(node, iface_key)
-        for net in nodes_addr.values():
-            for port in net['ports'].values():
-                host = port.get('node')
-                dev = port.get('if')
-                if host == node['host'] and dev == interface:
-                    ip_addr = port.get('addr')
-                    if ip_addr is not None:
-                        return ip_addr
-                    else:
-                        raise Exception(
-                            'Node {n} port {p} IPv4 address is not set'.format(
-                                n=node['host'], p=interface))
-
-        raise Exception('Node {n} port {p} IPv4 address not found.'.format(
-            n=node['host'], p=interface))
-
-    @staticmethod
-    def setup_arp_on_all_duts(nodes_info, nodes_addr):
-        """For all DUT nodes extract MAC and IP addresses of adjacent
-        interfaces from topology and use them to setup ARP entries.
-
-        :param nodes_info: Dictionary containing information on all nodes
-            in topology.
-        :param nodes_addr: Nodes IPv4 addresses.
-        :type nodes_info: dict
-        :type nodes_addr: dict
-        """
-        for node in nodes_info.values():
-            if node['type'] == NodeType.TG:
-                continue
-            for iface_key in node['interfaces'].keys():
-                adj_node, adj_int = Topology.\
-                    get_adjacent_node_and_interface(nodes_info, node, iface_key)
-                ip_address = IPv4Setup.get_ip_addr(adj_node, adj_int,
-                                                   nodes_addr)
-                mac_address = Topology.get_interface_mac(adj_node, adj_int)
-                get_node(node).set_arp(iface_key, ip_address, mac_address)
-
-    @staticmethod
-    def add_arp_on_dut(node, iface_key, ip_address, mac_address):
-        """Set ARP cache entree on DUT node.
-
-        :param node: VPP Node in the topology.
-        :param iface_key: Interface key.
-        :param ip_address: IP address of the interface.
-        :param mac_address: MAC address of the interface.
-        :type node: dict
-        :type iface_key: str
-        :type ip_address: str
-        :type mac_address: str
-        """
-        get_node(node).set_arp(iface_key, ip_address, mac_address)
diff --git a/resources/libraries/python/IPv4Util.py b/resources/libraries/python/IPv4Util.py
deleted file mode 100644 (file)
index c40e391..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-# Copyright (c) 2018 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Implements IPv4 RobotFramework keywords"""
-
-from robot.api import logger as log
-from robot.api.deco import keyword
-
-from resources.libraries.python.topology import Topology
-from resources.libraries.python.IPv4Setup import get_node
-from resources.libraries.python.VatExecutor import VatTerminal
-from resources.libraries.python.ssh import exec_cmd
-
-
-class IPv4Util(object):
-    """Implements keywords for IPv4 tests."""
-
-    @staticmethod
-    @keyword('From node "${node}" interface "${port}" ARP-ping '
-             'IPv4 address "${ip_address}"')
-    def arp_ping(node, interface, ip_address):
-        """Send an ARP ping from the specified node.
-
-        :param node: Node in topology.
-        :param ip_address: Destination IP address for the ARP packet.
-        :param interface: Name of an interface to send the ARP packet from.
-        :type node: dict
-        :type ip_address: str
-        :type interface: str
-        """
-        log.debug('From node {} interface {} ARP-ping IPv4 address {}'.
-                  format(Topology.get_node_hostname(node),
-                         interface, ip_address))
-        get_node(node).arp_ping(ip_address, interface)
-
-    @staticmethod
-    def set_interface_address(node, interface, address, prefix_length):
-        """See IPv4Node.set_ip for more information.
-
-        :param node: Node where IP address should be set to.
-        :param interface: Interface name.
-        :param address: IP address.
-        :param prefix_length: Prefix length.
-        :type node: dict
-        :type interface: str
-        :type address: str
-        :type prefix_length: int
-        """
-        log.debug('Node {} interface {} has IPv4 address {} with prefix '
-                  'length {}'.format(Topology.get_node_hostname(node),
-                                     interface, address, prefix_length))
-        get_node(node).set_ip(interface, address, int(prefix_length))
-
-    @staticmethod
-    def set_route(node, network, prefix_length, interface, gateway):
-        """See IPv4Node.set_route for more information.
-
-        :param node: Node where IP address should be set to.
-        :param network: IP network.
-        :param prefix_length: Prefix length.
-        :param interface: Interface name.
-        :param gateway: Gateway.
-        :type node: dict
-        :type network: str
-        :type prefix_length: int
-        :type interface: str
-        :type gateway: str
-        """
-        log.debug('Node {} routes to network {} with prefix length {} '
-                  'via {} interface {}'.format(Topology.get_node_hostname(node),
-                                               network, prefix_length,
-                                               gateway, interface))
-        get_node(node).set_route(network, int(prefix_length),
-                                 gateway, interface)
-
-    @staticmethod
-    @keyword('Get IPv4 address prefix of node "${node}" interface "${port}" '
-             'from "${nodes_addr}"')
-    def get_ip_addr_prefix_length(node, port, nodes_addr):
-        """ Get IPv4 address prefix for specified interface.
-
-        :param node: Node dictionary.
-        :param port: Interface name.
-        :param nodes_addr: Available nodes IPv4 addresses.
-        :type node: dict
-        :type port: str
-        :type nodes_addr: dict
-        :returns: IPv4 prefix length.
-        :rtype: int
-        """
-        for net in nodes_addr.values():
-            for net_port in net['ports'].values():
-                if net_port['node'] == node['host'] and net_port['if'] == port:
-                    return net['prefix']
-
-        raise Exception('Subnet not found for node {n} port {p}'.
-                        format(n=node['host'], p=port))
-
-    @staticmethod
-    @keyword('Get IPv4 subnet of node "${node}" interface "${port}" from '
-             '"${nodes_addr}"')
-    def get_ip_addr_subnet(node, port, nodes_addr):
-        """ Get IPv4 subnet of specified interface.
-
-        :param node: Node dictionary.
-        :param port: Interface name.
-        :param nodes_addr: Available nodes IPv4 addresses.
-        :type node: dict
-        :type port: int
-        :type nodes_addr: dict
-        :returns: IPv4 subnet.
-        :rtype: str
-        """
-        for net in nodes_addr.values():
-            for net_port in net['ports'].values():
-                if net_port['node'] == node['host'] and net_port['if'] == port:
-                    return net['net_addr']
-
-        raise Exception('Subnet not found for node {n} port {p}'.
-                        format(n=node['host'], p=port))
-
-    @staticmethod
-    @keyword('Flush IPv4 addresses "${port}" "${node}"')
-    def flush_ip_addresses(port, node):
-        """See IPv4Node.flush_ip_addresses for more information.
-
-        :param port: FIXME
-        :param node: FIXME
-        :returns: FIXME
-        """
-        get_node(node).flush_ip_addresses(port)
-
-    @staticmethod
-    def get_link_address(link, nodes_addr):
-        """Get link IPv4 address.
-
-        :param link: Link name.
-        :param nodes_addr: Available nodes IPv4 addresses.
-        :type link: str
-        :type nodes_addr: dict
-        :returns: Link IPv4 address.
-        :rtype: str
-        """
-        net = nodes_addr.get(link)
-        if net is None:
-            raise ValueError('Link "{0}" not found'.format(link))
-        return net.get('net_addr')
-
-    @staticmethod
-    def get_link_prefix(link, nodes_addr):
-        """Get link IPv4 address prefix.
-
-        :param link: Link name.
-        :param nodes_addr: Available nodes IPv4 addresses.
-        :type link: str
-        :type nodes_addr: dict
-        :returns: Link IPv4 address prefix.
-        :rtype: int
-        """
-        net = nodes_addr.get(link)
-        if net is None:
-            raise ValueError('Link "{0}" not found'.format(link))
-        return net.get('prefix')
-
-    @staticmethod
-    def send_ping_from_node_to_dst(node, destination, namespace=None,
-                                   ping_count=3, interface=None):
-        """Send a ping from node to destination. Optionally, you can define a
-        namespace and interface from where to send a ping.
-
-        :param node: Node to start ping on.
-        :param destination: IPv4 address where to send ping.
-        :param namespace: Namespace to send ping from. Optional
-        :param ping_count: Number of pings to send. Default 3
-        :param interface: Interface from where to send ping. Optional
-        :type node: dict
-        :type destination: str
-        :type namespace: str
-        :type ping_count: int
-        :type interface: str
-        :raises RuntimeError: If no response for ping, raise error
-        """
-        cmd = ''
-        if namespace is not None:
-            cmd = 'ip netns exec {0} ping -c{1} {2}'.format(
-                namespace, ping_count, destination)
-        elif interface is not None:
-            cmd = 'ping -I {0} -c{1} {2}'.format(
-                interface, ping_count, destination)
-        else:
-            cmd = 'ping -c{0} {1}'.format(ping_count, destination)
-        ret_code, _, _ = exec_cmd(node, cmd, sudo=True)
-        if ret_code != 0:
-            raise RuntimeError("Ping Not Successful")
-
-    @staticmethod
-    def set_linux_interface_arp(node, interface, ip_addr, mac, namespace=None):
-        """Set arp on interface in linux.
-
-        :param node: Node where to execute command.
-        :param interface: Interface in namespace.
-        :param ip_addr: IP address for ARP entry.
-        :param mac: MAC address.
-        :param namespace: Execute command in namespace. Optional
-        :type node: dict
-        :type interface: str
-        :type ip_addr: str
-        :type mac: str
-        :type namespace: str
-        :raises RuntimeError: Could not set ARP properly.
-        """
-        if namespace is not None:
-            cmd = 'ip netns exec {} arp -i {} -s {} {}'.format(
-                namespace, interface, ip_addr, mac)
-        else:
-            cmd = 'arp -i {} -s {} {}'.format(interface, ip_addr, mac)
-        ret_code, _, stderr = exec_cmd(node, cmd, sudo=True)
-        if ret_code != 0:
-            raise RuntimeError("Arp set not successful, reason:{}".
-                               format(stderr))
-
-    @staticmethod
-    def vpp_show_ip_table(node):
-        """Get IP FIB table data from a VPP node.
-
-        :param node: VPP node.
-        :type node: dict
-        """
-        with VatTerminal(node, json_param=False) as vat:
-            vat.vat_terminal_exec_cmd_from_template("show_ip_fib.vat")
diff --git a/resources/libraries/python/IPv6NodesAddr.py b/resources/libraries/python/IPv6NodesAddr.py
deleted file mode 100644 (file)
index 0482cf3..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Robot framework variable file.
-
-Create dictionary variable nodes_ipv6_addr with IPv6 addresses from available
-networks.
-"""
-
-from resources.libraries.python.IPv6Setup import IPv6Networks
-from resources.libraries.python.topology import Topology
-
-# Default list of available IPv6 networks
-IPV6_NETWORKS = ['3ffe:{0:04x}::/64'.format(i) for i in range(1, 100)]
-
-
-def get_variables(nodes, networks=IPV6_NETWORKS):
-    """Special robot framework method that returns dictionary nodes_ipv6_addr,
-    mapping of node and interface name to IPv6 address.
-
-    :param nodes: Nodes of the test topology.
-    :param networks: List of available IPv6 networks.
-    :type nodes: dict
-    :type networks: list
-
-    .. note::
-       Robot framework calls it automatically.
-    """
-    topo = Topology()
-    links = topo.get_links(nodes)
-
-    if len(links) > len(networks):
-        raise Exception('Not enough available IPv6 networks for topology.')
-
-    ip6_n = IPv6Networks(networks)
-
-    nets = {}
-
-    for link in links:
-        ip6_net = ip6_n.next_network()
-        net_hosts = ip6_net.hosts()
-        port_idx = 0
-        ports = {}
-        for node in nodes.values():
-            if_key = topo.get_interface_by_link_name(node, link)
-            if_name = topo.get_interface_name(node, if_key)
-            if if_name is not None:
-                port = {'addr': str(next(net_hosts)),
-                        'node': node['host'],
-                        'if': if_name}
-                port_idx += 1
-                port_id = 'port{0}'.format(port_idx)
-                ports.update({port_id: port})
-        nets.update({link: {'net_addr': str(ip6_net.network_address),
-                            'prefix': ip6_net.prefixlen,
-                            'ports': ports}})
-
-    return {'DICT__nodes_ipv6_addr': nets}
diff --git a/resources/libraries/python/IPv6Setup.py b/resources/libraries/python/IPv6Setup.py
deleted file mode 100644 (file)
index 72aeb30..0000000
+++ /dev/null
@@ -1,297 +0,0 @@
-# Copyright (c) 2018 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Library to set up IPv6 in topology."""
-
-from ipaddress import IPv6Network
-from robot.api import logger
-
-from resources.libraries.python.ssh import SSH
-from resources.libraries.python.topology import NodeType, Topology
-from resources.libraries.python.Constants import Constants
-from resources.libraries.python.VatExecutor import VatTerminal, VatExecutor
-
-
-class IPv6Networks(object):
-    """IPv6 network iterator.
-
-    TODO: Conform to https://docs.python.org/2/library/stdtypes.html#typeiter
-    """
-
-    def __init__(self, networks):
-        """Initialize internal list of valid networks.
-
-        :param networks: List of the available IPv6 networks.
-        :type networks: list
-        :raise RuntimeError: If no networks were added.
-        """
-        self._networks = []
-        for network in networks:
-            net = IPv6Network(unicode(network))
-            self._networks.append(net)
-        if not self._networks:
-            raise RuntimeError('No IPv6 networks')
-
-    def next_network(self):
-        """Get the next element of the iterator.
-
-        :returns: IPv6 network.
-        :rtype: IPv6Network object
-        :raises StopIteration: If there is no more elements.
-        """
-        if self._networks:
-            return self._networks.pop()
-        else:
-            raise StopIteration()
-
-
-class IPv6Setup(object):
-    """IPv6 setup in topology."""
-
-    def __init__(self):
-        pass
-
-    def nodes_set_ipv6_addresses(self, nodes, nodes_addr):
-        """Set IPv6 addresses on all VPP nodes in topology.
-
-        :param nodes: Nodes of the test topology.
-        :param nodes_addr: Available nodes IPv6 addresses.
-        :type nodes: dict
-        :type nodes_addr: dict
-        :returns: Affected interfaces as list of (node, interface) tuples.
-        :rtype: list
-        """
-        interfaces = []
-
-        for net in nodes_addr.values():
-            for port in net['ports'].values():
-                host = port.get('node')
-                if host is None:
-                    continue
-                topo = Topology()
-                node = topo.get_node_by_hostname(nodes, host)
-                if node is None:
-                    continue
-                if node['type'] == NodeType.DUT:
-                    port_key = topo.get_interface_by_name(node, port['if'])
-                    self.vpp_set_if_ipv6_addr(node, port_key, port['addr'],
-                                              net['prefix'])
-
-                    interfaces.append((node, port['if']))
-        return interfaces
-
-    def nodes_clear_ipv6_addresses(self, nodes, nodes_addr):
-        """Remove IPv6 addresses from all VPP nodes in topology.
-
-        :param nodes: Nodes of the test topology.
-        :param nodes_addr: Available nodes IPv6 addresses.
-        :type nodes: dict
-        :type nodes_addr: dict
-        """
-        for net in nodes_addr.values():
-            for port in net['ports'].values():
-                host = port.get('node')
-                if host is None:
-                    continue
-                topo = Topology()
-                node = topo.get_node_by_hostname(nodes, host)
-                if node is None:
-                    continue
-                if node['type'] == NodeType.DUT:
-                    self.vpp_del_if_ipv6_addr(node, port['if'], port['addr'],
-                                              net['prefix'])
-
-    @staticmethod
-    def linux_set_if_ipv6_addr(node, interface, addr, prefix):
-        """Set IPv6 address on linux host.
-
-        :param node: Linux node.
-        :param interface: Node interface.
-        :param addr: IPv6 address.
-        :param prefix: IPv6 address prefix.
-        :type node: dict
-        :type interface: str
-        :type addr: str
-        :type prefix: str
-        """
-        ssh = SSH()
-        ssh.connect(node)
-
-        cmd = "ifconfig {dev} inet6 add {ip}/{p} up".format(dev=interface,
-                                                            ip=addr, p=prefix)
-        (ret_code, _, _) = ssh.exec_command_sudo(cmd)
-        if int(ret_code) != 0:
-            raise Exception('TG ifconfig failed')
-
-    @staticmethod
-    def linux_del_if_ipv6_addr(node, interface, addr, prefix):
-        """Delete IPv6 address on linux host.
-
-        :param node: Linux node.
-        :param interface: Node interface.
-        :param addr: IPv6 address.
-        :param prefix: IPv6 address prefix.
-        :type node: dict
-        :type interface: str
-        :type addr: str
-        :type prefix: str
-        """
-        ssh = SSH()
-        ssh.connect(node)
-
-        cmd = "ifconfig {dev} inet6 del {ip}/{p}".format(dev=interface,
-                                                         ip=addr,
-                                                         p=prefix)
-        (ret_code, _, _) = ssh.exec_command_sudo(cmd)
-        if int(ret_code) != 0:
-            raise Exception('TG ifconfig failed')
-
-        cmd = "ifconfig {dev} down".format(dev=interface)
-        (ret_code, _, _) = ssh.exec_command_sudo(cmd)
-        if int(ret_code) != 0:
-            raise Exception('TG ifconfig failed')
-
-    @staticmethod
-    def vpp_set_if_ipv6_addr(node, iface_key, addr, prefix):
-        """Set IPv6 address on VPP.
-
-        :param node: VPP node.
-        :param iface_key: Node interface key.
-        :param addr: IPv6 address.
-        :param prefix: IPv6 address prefix.
-        :type node: dict
-        :type iface_key: str
-        :type addr: str
-        :type prefix: str
-        """
-        sw_if_index = Topology.get_interface_sw_index(node, iface_key)
-        with VatTerminal(node) as vat:
-            vat.vat_terminal_exec_cmd_from_template('add_ip_address.vat',
-                                                    sw_if_index=sw_if_index,
-                                                    address=addr,
-                                                    prefix_length=prefix)
-            vat.vat_terminal_exec_cmd_from_template('set_if_state.vat',
-                                                    sw_if_index=sw_if_index,
-                                                    state='admin-up')
-
-        ssh = SSH()
-        ssh.connect(node)
-        cmd_input = 'exec show int'
-        (ret_code, stdout, stderr) = ssh.exec_command_sudo(
-            Constants.VAT_BIN_NAME, cmd_input)
-        logger.debug('ret: {0}'.format(ret_code))
-        logger.debug('stdout: {0}'.format(stdout))
-        logger.debug('stderr: {0}'.format(stderr))
-
-    @staticmethod
-    def vpp_del_if_ipv6_addr(node, interface, addr, prefix):
-        """Delete IPv6 address on VPP.
-
-        :param node: VPP node.
-        :param interface: Node interface.
-        :param addr: IPv6 address.
-        :param prefix: IPv6 address prefix.
-        :type node: dict
-        :type interface: str
-        :type addr: str
-        :type prefix: str
-        """
-        sw_if_index = Topology.get_interface_sw_index(node, interface)
-        with VatTerminal(node) as vat:
-            vat.vat_terminal_exec_cmd_from_template('del_ip_address.vat',
-                                                    sw_if_index=sw_if_index,
-                                                    address=addr,
-                                                    prefix_length=prefix)
-            vat.vat_terminal_exec_cmd_from_template('set_if_state.vat',
-                                                    sw_if_index=sw_if_index,
-                                                    state='admin-down')
-
-    @staticmethod
-    def vpp_ra_suppress_link_layer(node, interface):
-        """Suppress ICMPv6 router advertisement message for link scope address.
-
-        :param node: VPP node.
-        :param interface: Interface name.
-        :type node: dict
-        :type interface: str
-        """
-        sw_if_index = Topology.get_interface_sw_index(node, interface)
-        if sw_if_index:
-            VatExecutor.cmd_from_template(node,
-                                          'sw_interface_ip6nd_ra_config.vat',
-                                          sw_if_id=sw_if_index,
-                                          param='surpress')
-
-    @staticmethod
-    def vpp_ra_send_after_interval(node, interface, interval=2):
-        """Setup vpp router advertisement(RA) in such way it sends RA packet
-        after and every interval value.
-
-        :param node: VPP node.
-        :param interface: Interface name.
-        :param interval: Interval for RA resend
-        :type node: dict
-        :type interface: str
-        :type interval: int
-        """
-        sw_if_index = Topology.get_interface_sw_index(node, interface)
-        if sw_if_index:
-            VatExecutor.cmd_from_template(node,
-                                          'sw_interface_ip6nd_ra_config.vat',
-                                          sw_if_id=sw_if_index,
-                                          param='interval {0}'.format(interval))
-
-    def vpp_all_ra_suppress_link_layer(self, nodes):
-        """Suppress ICMPv6 router advertisement message for link scope address
-        on all VPP nodes in the topology.
-
-        :param nodes: Nodes of the test topology.
-        :type nodes: dict
-        """
-        for node in nodes.values():
-            if node['type'] == NodeType.TG:
-                continue
-            for port_k in node['interfaces'].keys():
-                self.vpp_ra_suppress_link_layer(node, port_k)
-
-    @staticmethod
-    def get_link_address(link, nodes_addr):
-        """Get link IPv6 address.
-
-        :param link: Link name.
-        :param nodes_addr: Available nodes IPv6 addresses.
-        :type link: str
-        :type nodes_addr: dict
-        :returns: Link IPv6 address.
-        :rtype: str
-        """
-        net = nodes_addr.get(link)
-        if net is None:
-            raise ValueError('Link "{0}" address not found'.format(link))
-        return net.get('net_addr')
-
-    @staticmethod
-    def get_link_prefix(link, nodes_addr):
-        """Get link IPv6 address prefix.
-
-        :param link: Link name.
-        :param nodes_addr: Available nodes IPv6 addresses.
-        :type link: str
-        :type nodes_addr: dict
-        :returns: Link IPv6 address prefix.
-        :rtype: int
-        """
-        net = nodes_addr.get(link)
-        if net is None:
-            raise ValueError('Link "{0}" address not found'.format(link))
-        return net.get('prefix')
index f89d171..28e5f7d 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2018 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 
 """IPv6 utilities library."""
 
 
 """IPv6 utilities library."""
 
-import re
-
-from resources.libraries.python.ssh import SSH
-from resources.libraries.python.VatExecutor import VatTerminal
-from resources.libraries.python.topology import Topology
+from resources.libraries.python.InterfaceUtil import InterfaceUtil
+from resources.libraries.python.IPUtil import IPUtil
+from resources.libraries.python.PapiExecutor import PapiExecutor
+from resources.libraries.python.topology import NodeType
 
 
 class IPv6Util(object):
     """IPv6 utilities"""
 
     @staticmethod
 
 
 class IPv6Util(object):
     """IPv6 utilities"""
 
     @staticmethod
-    def ipv6_ping(src_node, dst_addr, count=3, data_size=56, timeout=1):
-        """IPv6 ping.
+    def vpp_ra_suppress_link_layer(node, interface):
+        """Suppress ICMPv6 router advertisement message for link scope address.
 
 
-        :param src_node: Node where ping run.
-        :param dst_addr: Destination IPv6 address.
-        :param count: Number of echo requests. (Optional)
-        :param data_size: Number of the data bytes. (Optional)
-        :param timeout: Time to wait for a response, in seconds. (Optional)
-        :type src_node: dict
-        :type dst_addr: str
-        :type count: int
-        :type data_size: int
-        :type timeout: int
-        :returns: Number of lost packets.
-        :rtype: int
+        :param node: VPP node.
+        :param interface: Interface name.
+        :type node: dict
+        :type interface: str
         """
         """
-        ssh = SSH()
-        ssh.connect(src_node)
-
-        cmd = "ping6 -c {c} -s {s} -W {W} {dst}".format(c=count, s=data_size,
-                                                        W=timeout,
-                                                        dst=dst_addr)
-        (_, stdout, _) = ssh.exec_command(cmd)
-
-        regex = re.compile(r'(\d+) packets transmitted, (\d+) received')
-        match = regex.search(stdout)
-        sent, received = match.groups()
-        packet_lost = int(sent) - int(received)
-
-        return packet_lost
+        cmd = 'sw_interface_ip6nd_ra_config'
+        args = dict(
+            sw_if_index=InterfaceUtil.get_interface_index(node, interface),
+            suppress=1)
+        err_msg = 'Failed to suppress ICMPv6 router advertisement message on ' \
+                  'interface {ifc}'.format(ifc=interface)
 
 
-    @staticmethod
-    def ipv6_ping_port(nodes_ip, src_node, dst_node, port, cnt=3,
-                       size=56, timeout=1):
-        """Send IPv6 ping to the node port.
-
-        :param nodes_ip: Nodes IPv6 addresses.
-        :param src_node: Node where ping run.
-        :param dst_node: Destination node.
-        :param port: Port on the destination node.
-        :param cnt: Number of echo requests. (Optional)
-        :param size: Number of the data bytes. (Optional)
-        :param timeout: Time to wait for a response, in seconds. (Optional)
-        :type nodes_ip: dict
-        :type src_node: dict
-        :type dst_node: dict
-        :type port: str
-        :type cnt: int
-        :type size: int
-        :type timeout: int
-        :returns: Number of lost packets.
-        :rtype: int
-        """
-        dst_ip = IPv6Util.get_node_port_ipv6_address(dst_node, port, nodes_ip)
-        return IPv6Util.ipv6_ping(src_node, dst_ip, cnt, size, timeout)
+        with PapiExecutor(node) as papi_exec:
+            papi_exec.add(cmd, **args).get_replies(err_msg). \
+                verify_reply(err_msg=err_msg)
 
     @staticmethod
 
     @staticmethod
-    def get_node_port_ipv6_address(node, iface_key, nodes_addr):
-        """Return IPv6 address of the node port.
+    def vpp_ra_send_after_interval(node, interface, interval=2):
+        """Setup vpp router advertisement(RA) in such way it sends RA packet
+        after every interval value.
 
 
-        :param node: Node in the topology.
-        :param iface_key: Interface key of the node.
-        :param nodes_addr: Nodes IPv6 addresses.
+        :param node: VPP node.
+        :param interface: Interface name.
+        :param interval: Interval in seconds for RA resend.
         :type node: dict
         :type node: dict
-        :type iface_key: str
-        :type nodes_addr: dict
-        :returns: IPv6 address string.
-        :rtype: str
+        :type interface: str
+        :type interval: int
         """
         """
-        interface = Topology.get_interface_name(node, iface_key)
-        for net in nodes_addr.values():
-            for port in net['ports'].values():
-                host = port.get('node')
-                dev = port.get('if')
-                if host == node['host'] and dev == interface:
-                    ip_addr = port.get('addr')
-                    if ip_addr is not None:
-                        return ip_addr
-                    else:
-                        raise Exception(
-                            'Node {n} port {p} IPv6 address is not set'.format(
-                                n=node['host'], p=interface))
+        cmd = 'sw_interface_ip6nd_ra_config'
+        args = dict(
+            sw_if_index=InterfaceUtil.get_interface_index(node, interface),
+            initial_interval=int(interval))
+        err_msg = 'Failed to set router advertisement interval on ' \
+                  'interface {ifc}'.format(ifc=interface)
 
 
-        raise Exception('Node {n} port {p} IPv6 address not found.'.format(
-            n=node['host'], p=interface))
+        with PapiExecutor(node) as papi_exec:
+            papi_exec.add(cmd, **args).get_replies(err_msg). \
+                verify_reply(err_msg=err_msg)
 
     @staticmethod
 
     @staticmethod
-    def add_ip_neighbor(node, interface, ip_address, mac_address):
-        """Add IP neighbor.
+    def vpp_all_ra_suppress_link_layer(nodes):
+        """Suppress ICMPv6 router advertisement message for link scope address
+        on all VPP nodes in the topology.
 
 
-        :param node: VPP node to add ip neighbor.
-        :param interface: Interface name or sw_if_index.
-        :param ip_address: IP address.
-        :param mac_address: MAC address.
-        :type node: dict
-        :type interface: str or int
-        :type ip_address: str
-        :type mac_address: str
+        :param nodes: Nodes of the test topology.
+        :type nodes: dict
         """
         """
-        if isinstance(interface, basestring):
-            sw_if_index = Topology.get_interface_sw_index(node, interface)
-        else:
-            sw_if_index = interface
-
-        with VatTerminal(node) as vat:
-            vat.vat_terminal_exec_cmd_from_template("add_ip_neighbor.vat",
-                                                    sw_if_index=sw_if_index,
-                                                    ip_address=ip_address,
-                                                    mac_address=mac_address)
+        for node in nodes.values():
+            if node['type'] == NodeType.TG:
+                continue
+            for port_k in node['interfaces'].keys():
+                ip6_addr_list = IPUtil.vpp_get_interface_ip_addresses(
+                    node, port_k, 'ipv6')
+                if ip6_addr_list:
+                    IPv6Util.vpp_ra_suppress_link_layer(node, port_k)
index 6e00124..46b1ffb 100644 (file)
@@ -24,7 +24,6 @@ from robot.api import logger
 from resources.libraries.python.Constants import Constants
 from resources.libraries.python.CpuUtils import CpuUtils
 from resources.libraries.python.DUTSetup import DUTSetup
 from resources.libraries.python.Constants import Constants
 from resources.libraries.python.CpuUtils import CpuUtils
 from resources.libraries.python.DUTSetup import DUTSetup
-from resources.libraries.python.IPUtil import convert_ipv4_netmask_prefix
 from resources.libraries.python.L2Util import L2Util
 from resources.libraries.python.PapiExecutor import PapiExecutor
 from resources.libraries.python.parsers.JsonParser import JsonParser
 from resources.libraries.python.L2Util import L2Util
 from resources.libraries.python.PapiExecutor import PapiExecutor
 from resources.libraries.python.parsers.JsonParser import JsonParser
@@ -64,7 +63,6 @@ class InterfaceUtil(object):
         :returns: Integer representation of PCI address.
         :rtype: int
         """
         :returns: Integer representation of PCI address.
         :rtype: int
         """
-
         pci = list(pci_str.split(':')[0:2])
         pci.extend(pci_str.split(':')[2].split('.'))
 
         pci = list(pci_str.split(':')[0:2])
         pci.extend(pci_str.split(':')[2].split('.'))
 
@@ -82,7 +80,6 @@ class InterfaceUtil(object):
         :returns: SW interface index.
         :rtype: int
         """
         :returns: SW interface index.
         :rtype: int
         """
-
         try:
             sw_if_index = int(interface)
         except ValueError:
         try:
             sw_if_index = int(interface)
         except ValueError:
@@ -115,7 +112,6 @@ class InterfaceUtil(object):
         :raises ValueError: If the state of interface is unexpected.
         :raises ValueError: If the node has an unknown node type.
         """
         :raises ValueError: If the state of interface is unexpected.
         :raises ValueError: If the node has an unknown node type.
         """
-
         if if_type == 'key':
             if isinstance(interface, basestring):
                 sw_if_index = Topology.get_interface_sw_index(node, interface)
         if if_type == 'key':
             if isinstance(interface, basestring):
                 sw_if_index = Topology.get_interface_sw_index(node, interface)
@@ -170,7 +166,6 @@ class InterfaceUtil(object):
         :raises ValueError: If the node type is "DUT".
         :raises ValueError: If the node has an unknown node type.
         """
         :raises ValueError: If the node type is "DUT".
         :raises ValueError: If the node has an unknown node type.
         """
-
         if node['type'] == NodeType.DUT:
             raise ValueError('Node {}: Setting Ethernet MTU for interface '
                              'on DUT nodes not supported', node['host'])
         if node['type'] == NodeType.DUT:
             raise ValueError('Node {}: Setting Ethernet MTU for interface '
                              'on DUT nodes not supported', node['host'])
@@ -192,7 +187,6 @@ class InterfaceUtil(object):
         :type node: dict
         :returns: Nothing.
         """
         :type node: dict
         :returns: Nothing.
         """
-
         for ifc in node['interfaces']:
             InterfaceUtil.set_interface_ethernet_mtu(node, ifc, 1500)
 
         for ifc in node['interfaces']:
             InterfaceUtil.set_interface_ethernet_mtu(node, ifc, 1500)
 
@@ -207,7 +201,6 @@ class InterfaceUtil(object):
         :type interface: str or int
         :type mtu: int
         """
         :type interface: str or int
         :type mtu: int
         """
-
         if isinstance(interface, basestring):
             sw_if_index = Topology.get_interface_sw_index(node, interface)
         else:
         if isinstance(interface, basestring):
             sw_if_index = Topology.get_interface_sw_index(node, interface)
         else:
@@ -231,7 +224,6 @@ class InterfaceUtil(object):
         :type node: dict
         :type mtu: int
         """
         :type node: dict
         :type mtu: int
         """
-
         for interface in node['interfaces']:
             InterfaceUtil.vpp_set_interface_mtu(node, interface, mtu)
 
         for interface in node['interfaces']:
             InterfaceUtil.vpp_set_interface_mtu(node, interface, mtu)
 
@@ -244,7 +236,6 @@ class InterfaceUtil(object):
         :type nodes: dict
         :type mtu: int
         """
         :type nodes: dict
         :type mtu: int
         """
-
         for node in nodes.values():
             if node['type'] == NodeType.DUT:
                 InterfaceUtil.vpp_set_interfaces_mtu_on_node(node, mtu)
         for node in nodes.values():
             if node['type'] == NodeType.DUT:
                 InterfaceUtil.vpp_set_interfaces_mtu_on_node(node, mtu)
@@ -262,7 +253,6 @@ class InterfaceUtil(object):
         :raises RuntimeError: If any interface is not in link-up state after
             defined number of retries.
         """
         :raises RuntimeError: If any interface is not in link-up state after
             defined number of retries.
         """
-
         for _ in xrange(0, retries):
             not_ready = list()
             out = InterfaceUtil.vpp_get_interface_data(node)
         for _ in xrange(0, retries):
             not_ready = list()
             out = InterfaceUtil.vpp_get_interface_data(node)
@@ -293,7 +283,6 @@ class InterfaceUtil(object):
         :type retries: int
         :returns: Nothing.
         """
         :type retries: int
         :returns: Nothing.
         """
-
         for node in nodes.values():
             if node['type'] == NodeType.DUT:
                 InterfaceUtil.vpp_node_interfaces_ready_wait(node, retries)
         for node in nodes.values():
             if node['type'] == NodeType.DUT:
                 InterfaceUtil.vpp_node_interfaces_ready_wait(node, retries)
@@ -314,7 +303,6 @@ class InterfaceUtil(object):
         :raises TypeError: if the data type of interface is neither basestring
             nor int.
         """
         :raises TypeError: if the data type of interface is neither basestring
             nor int.
         """
-
         if interface is not None:
             if isinstance(interface, basestring):
                 param = 'interface_name'
         if interface is not None:
             if isinstance(interface, basestring):
                 param = 'interface_name'
@@ -376,7 +364,6 @@ class InterfaceUtil(object):
         :returns: Name of the given interface.
         :rtype: str
         """
         :returns: Name of the given interface.
         :rtype: str
         """
-
         if_data = InterfaceUtil.vpp_get_interface_data(node, sw_if_index)
         if if_data['sup_sw_if_index'] != if_data['sw_if_index']:
             if_data = InterfaceUtil.vpp_get_interface_data(
         if_data = InterfaceUtil.vpp_get_interface_data(node, sw_if_index)
         if if_data['sup_sw_if_index'] != if_data['sw_if_index']:
             if_data = InterfaceUtil.vpp_get_interface_data(
@@ -396,7 +383,6 @@ class InterfaceUtil(object):
         :returns: Name of the given interface.
         :rtype: str
         """
         :returns: Name of the given interface.
         :rtype: str
         """
-
         if_data = InterfaceUtil.vpp_get_interface_data(node, interface_name)
 
         return if_data.get('sw_if_index')
         if_data = InterfaceUtil.vpp_get_interface_data(node, interface_name)
 
         return if_data.get('sw_if_index')
@@ -412,7 +398,6 @@ class InterfaceUtil(object):
         :returns: MAC address.
         :rtype: str
         """
         :returns: MAC address.
         :rtype: str
         """
-
         if_data = InterfaceUtil.vpp_get_interface_data(node, interface)
         if if_data['sup_sw_if_index'] != if_data['sw_if_index']:
             if_data = InterfaceUtil.vpp_get_interface_data(
         if_data = InterfaceUtil.vpp_get_interface_data(node, interface)
         if if_data['sup_sw_if_index'] != if_data['sw_if_index']:
             if_data = InterfaceUtil.vpp_get_interface_data(
@@ -420,56 +405,6 @@ class InterfaceUtil(object):
 
         return if_data.get('l2_address')
 
 
         return if_data.get('l2_address')
 
-    @staticmethod
-    def vpp_get_interface_ip_addresses(node, interface, ip_version):
-        """Get list of IP addresses from an interface on a VPP node.
-
-        TODO: Move to IPUtils
-
-        :param node: VPP node to get data from.
-        :param interface: Name of an interface on the VPP node.
-        :param ip_version: IP protocol version (ipv4 or ipv6).
-        :type node: dict
-        :type interface: str
-        :type ip_version: str
-        :returns: List of dictionaries, each containing IP address, subnet
-            prefix length and also the subnet mask for ipv4 addresses.
-            Note: A single interface may have multiple IP addresses assigned.
-        :rtype: list
-        """
-
-        try:
-            sw_if_index = Topology.convert_interface_reference(
-                node, interface, 'sw_if_index')
-        except RuntimeError:
-            if isinstance(interface, basestring):
-                sw_if_index = InterfaceUtil.get_sw_if_index(node, interface)
-            else:
-                raise
-
-        is_ipv6 = 1 if ip_version == 'ipv6' else 0
-
-        cmd = 'ip_address_dump'
-        cmd_reply = 'ip_address_details'
-        args = dict(sw_if_index=sw_if_index,
-                    is_ipv6=is_ipv6)
-        err_msg = 'Failed to get L2FIB dump on host {host}'.format(
-            host=node['host'])
-        with PapiExecutor(node) as papi_exec:
-            papi_resp = papi_exec.add(cmd, **args).get_dump(err_msg)
-
-        data = list()
-        for item in papi_resp.reply[0]['api_reply']:
-            item[cmd_reply]['ip'] = inet_ntop(AF_INET6, item[cmd_reply]['ip']) \
-                if is_ipv6 else inet_ntop(AF_INET, item[cmd_reply]['ip'][0:4])
-            data.append(item[cmd_reply])
-
-        if ip_version == 'ipv4':
-            for item in data:
-                item['netmask'] = convert_ipv4_netmask_prefix(
-                    item['prefix_length'])
-        return data
-
     @staticmethod
     def tg_set_interface_driver(node, pci_addr, driver):
         """Set interface driver on the TG node.
     @staticmethod
     def tg_set_interface_driver(node, pci_addr, driver):
         """Set interface driver on the TG node.
@@ -586,7 +521,6 @@ class InterfaceUtil(object):
         :param node: Node selected from DICT__nodes.
         :type node: dict
         """
         :param node: Node selected from DICT__nodes.
         :type node: dict
         """
-
         interface_list = InterfaceUtil.vpp_get_interface_data(node)
         interface_dict = dict()
         for ifc in interface_list:
         interface_list = InterfaceUtil.vpp_get_interface_data(node)
         interface_dict = dict()
         for ifc in interface_list:
@@ -789,7 +723,6 @@ class InterfaceUtil(object):
         :raises RuntimeError: if it is unable to create VLAN subinterface on the
             node.
         """
         :raises RuntimeError: if it is unable to create VLAN subinterface on the
             node.
         """
-
         iface_key = Topology.get_interface_by_name(node, interface)
         sw_if_index = Topology.get_interface_sw_index(node, iface_key)
 
         iface_key = Topology.get_interface_by_name(node, interface)
         sw_if_index = Topology.get_interface_sw_index(node, iface_key)
 
@@ -827,7 +760,6 @@ class InterfaceUtil(object):
         :raises RuntimeError: if it is unable to create VxLAN interface on the
             node.
         """
         :raises RuntimeError: if it is unable to create VxLAN interface on the
             node.
         """
-
         try:
             src_address = IPv6Address(unicode(source_ip))
             dst_address = IPv6Address(unicode(destination_ip))
         try:
             src_address = IPv6Address(unicode(source_ip))
             dst_address = IPv6Address(unicode(destination_ip))
@@ -878,7 +810,6 @@ class InterfaceUtil(object):
         :raises TypeError: if the data type of interface is neither basestring
             nor int.
         """
         :raises TypeError: if the data type of interface is neither basestring
             nor int.
         """
-
         if interface is not None:
             sw_if_index = InterfaceUtil.get_interface_index(node, interface)
         else:
         if interface is not None:
             sw_if_index = InterfaceUtil.get_interface_index(node, interface)
         else:
@@ -936,7 +867,6 @@ class InterfaceUtil(object):
         :returns: List of dictionaries with all vhost-user interfaces.
         :rtype: list
         """
         :returns: List of dictionaries with all vhost-user interfaces.
         :rtype: list
         """
-
         cmd = 'sw_interface_vhost_user_dump'
         cmd_reply = 'sw_interface_vhost_user_details'
         err_msg = 'Failed to get vhost-user dump on host {host}'.format(
         cmd = 'sw_interface_vhost_user_dump'
         cmd_reply = 'sw_interface_vhost_user_details'
         err_msg = 'Failed to get vhost-user dump on host {host}'.format(
@@ -982,7 +912,6 @@ class InterfaceUtil(object):
             a List of dictionaries containing all TAP data for the given node.
         :rtype: dict or list
         """
             a List of dictionaries containing all TAP data for the given node.
         :rtype: dict or list
         """
-
         cmd = 'sw_interface_tap_v2_dump'
         cmd_reply = 'sw_interface_tap_v2_details'
         err_msg = 'Failed to get TAP dump on host {host}'.format(
         cmd = 'sw_interface_tap_v2_dump'
         cmd_reply = 'sw_interface_tap_v2_details'
         err_msg = 'Failed to get TAP dump on host {host}'.format(
@@ -1047,7 +976,6 @@ class InterfaceUtil(object):
         :rtype: tuple
         :raises RuntimeError: If it is not possible to create sub-interface.
         """
         :rtype: tuple
         :raises RuntimeError: If it is not possible to create sub-interface.
         """
-
         subif_types = type_subif.split()
 
         cmd = 'create_subif'
         subif_types = type_subif.split()
 
         cmd = 'create_subif'
@@ -1092,7 +1020,6 @@ class InterfaceUtil(object):
         :rtype: tuple
         :raises RuntimeError: If unable to create GRE tunnel interface.
         """
         :rtype: tuple
         :raises RuntimeError: If unable to create GRE tunnel interface.
         """
-
         cmd = 'gre_tunnel_add_del'
         tunnel = dict(type=0,
                       instance=Constants.BITWISE_NON_ZERO,
         cmd = 'gre_tunnel_add_del'
         tunnel = dict(type=0,
                       instance=Constants.BITWISE_NON_ZERO,
@@ -1127,7 +1054,6 @@ class InterfaceUtil(object):
         :raises RuntimeError: If it is not possible to create loopback on the
             node.
         """
         :raises RuntimeError: If it is not possible to create loopback on the
             node.
         """
-
         cmd = 'create_loopback'
         args = dict(mac_address=0)
         err_msg = 'Failed to create loopback interface on host {host}'.format(
         cmd = 'create_loopback'
         args = dict(mac_address=0)
         err_msg = 'Failed to create loopback interface on host {host}'.format(
@@ -1162,7 +1088,6 @@ class InterfaceUtil(object):
         :raises RuntimeError: If it is not possible to create bond interface on
             the node.
         """
         :raises RuntimeError: If it is not possible to create bond interface on
             the node.
         """
-
         cmd = 'bond_create'
         args = dict(id=int(Constants.BITWISE_NON_ZERO),
                     use_custom_mac=0 if mac is None else 1,
         cmd = 'bond_create'
         args = dict(id=int(Constants.BITWISE_NON_ZERO),
                     use_custom_mac=0 if mac is None else 1,
@@ -1198,7 +1123,6 @@ class InterfaceUtil(object):
         :type sw_if_idx: int
         :type ifc_pfx: str
         """
         :type sw_if_idx: int
         :type ifc_pfx: str
         """
-
         if_key = Topology.add_new_port(node, ifc_pfx)
 
         if ifc_name and sw_if_idx is None:
         if_key = Topology.add_new_port(node, ifc_pfx)
 
         if ifc_name and sw_if_idx is None:
@@ -1225,7 +1149,6 @@ class InterfaceUtil(object):
         :raises RuntimeError: If it is not possible to create AVF interface on
             the node.
         """
         :raises RuntimeError: If it is not possible to create AVF interface on
             the node.
         """
-
         cmd = 'avf_create'
         args = dict(pci_addr=InterfaceUtil.pci_to_int(vf_pci_addr),
                     enable_elog=0,
         cmd = 'avf_create'
         args = dict(pci_addr=InterfaceUtil.pci_to_int(vf_pci_addr),
                     enable_elog=0,
@@ -1258,7 +1181,6 @@ class InterfaceUtil(object):
         :raises RuntimeError: If it is not possible to enslave physical
             interface to bond interface on the node.
         """
         :raises RuntimeError: If it is not possible to enslave physical
             interface to bond interface on the node.
         """
-
         cmd = 'bond_enslave'
         args = dict(
             sw_if_index=Topology.get_interface_sw_index(node, interface),
         cmd = 'bond_enslave'
         args = dict(
             sw_if_index=Topology.get_interface_sw_index(node, interface),
@@ -1282,7 +1204,6 @@ class InterfaceUtil(object):
         :type node: dict
         :type details: bool
         """
         :type node: dict
         :type details: bool
         """
-
         cmd = 'sw_interface_bond_dump'
         cmd_reply = 'sw_interface_bond_details'
         err_msg = 'Failed to get bond interface dump on host {host}'.format(
         cmd = 'sw_interface_bond_dump'
         cmd_reply = 'sw_interface_bond_details'
         err_msg = 'Failed to get bond interface dump on host {host}'.format(
@@ -1391,7 +1312,6 @@ class InterfaceUtil(object):
         :type ip_version: str
         :type table_index: int
         """
         :type ip_version: str
         :type table_index: int
         """
-
         cmd = 'input_acl_set_interface'
         args = dict(
             sw_if_index=InterfaceUtil.get_interface_index(node, interface),
         cmd = 'input_acl_set_interface'
         args = dict(
             sw_if_index=InterfaceUtil.get_interface_index(node, interface),
@@ -1436,39 +1356,6 @@ class InterfaceUtil(object):
 
         return papi_resp
 
 
         return papi_resp
 
-    @staticmethod
-    def get_interface_vrf_table(node, interface, ip_version='ipv4'):
-        """Get vrf ID for the given interface.
-
-        TODO: Move to proper IP library when implementing CSIT-1459.
-
-        :param node: VPP node.
-        :param interface: Name or sw_if_index of a specific interface.
-        :type node: dict
-        :param ip_version: IP protocol version (ipv4 or ipv6).
-        :type interface: str or int
-        :type ip_version: str
-        :returns: vrf ID of the specified interface.
-        :rtype: int
-        """
-        if isinstance(interface, basestring):
-            sw_if_index = InterfaceUtil.get_sw_if_index(node, interface)
-        else:
-            sw_if_index = interface
-
-        is_ipv6 = 1 if ip_version == 'ipv6' else 0
-
-        cmd = 'sw_interface_get_table'
-        args = dict(sw_if_index=sw_if_index,
-                    is_ipv6=is_ipv6)
-        err_msg = 'Failed to get VRF id assigned to interface {ifc}'.format(
-            ifc=interface)
-        with PapiExecutor(node) as papi_exec:
-            papi_resp = papi_exec.add(cmd, **args).get_replies(err_msg). \
-                verify_reply(err_msg=err_msg)
-
-        return papi_resp['vrf_id']
-
     @staticmethod
     def get_sw_if_index(node, interface_name):
         """Get sw_if_index for the given interface from actual interface dump.
     @staticmethod
     def get_sw_if_index(node, interface_name):
         """Get sw_if_index for the given interface from actual interface dump.
@@ -1480,7 +1367,6 @@ class InterfaceUtil(object):
         :returns: sw_if_index of the given interface.
         :rtype: str
         """
         :returns: sw_if_index of the given interface.
         :rtype: str
         """
-
         interface_data = InterfaceUtil.vpp_get_interface_data(
             node, interface=interface_name)
         return interface_data.get('sw_if_index')
         interface_data = InterfaceUtil.vpp_get_interface_data(
             node, interface=interface_name)
         return interface_data.get('sw_if_index')
@@ -1499,7 +1385,6 @@ class InterfaceUtil(object):
             interfaces.
         :rtype: dict or list
         """
             interfaces.
         :rtype: dict or list
         """
-
         if interface_name is not None:
             sw_if_index = InterfaceUtil.get_interface_index(
                 node, interface_name)
         if interface_name is not None:
             sw_if_index = InterfaceUtil.get_interface_index(
                 node, interface_name)
@@ -1548,29 +1433,6 @@ class InterfaceUtil(object):
             vxlan_gpe_data=data))
         return data
 
             vxlan_gpe_data=data))
         return data
 
-    @staticmethod
-    def vpp_ip_source_check_setup(node, if_name):
-        """Setup Reverse Path Forwarding source check on interface.
-
-        TODO: Move to proper IP library when implementing CSIT-1459.
-
-        :param node: Node to setup RPF source check.
-        :param if_name: Interface name to setup RPF source check.
-        :type node: dict
-        :type if_name: str
-        """
-
-        cmd = 'ip_source_check_interface_add_del'
-        args = dict(
-            sw_if_index=InterfaceUtil.get_interface_index(node, if_name),
-            is_add=1,
-            loose=0)
-        err_msg = 'Failed to enable source check on interface {ifc}'.format(
-            ifc=if_name)
-        with PapiExecutor(node) as papi_exec:
-            papi_exec.add(cmd, **args).get_replies(err_msg). \
-                verify_reply(err_msg=err_msg)
-
     @staticmethod
     def assign_interface_to_fib_table(node, interface, table_id, ipv6=False):
         """Assign VPP interface to specific VRF/FIB table.
     @staticmethod
     def assign_interface_to_fib_table(node, interface, table_id, ipv6=False):
         """Assign VPP interface to specific VRF/FIB table.
@@ -1584,7 +1446,6 @@ class InterfaceUtil(object):
         :type table_id: int
         :type ipv6: bool
         """
         :type table_id: int
         :type ipv6: bool
         """
-
         cmd = 'sw_interface_set_table'
         args = dict(
             sw_if_index=InterfaceUtil.get_interface_index(node, interface),
         cmd = 'sw_interface_set_table'
         args = dict(
             sw_if_index=InterfaceUtil.get_interface_index(node, interface),
@@ -1827,7 +1688,6 @@ class InterfaceUtil(object):
         :returns: Number of created VXLAN interfaces.
         :rtype: int
         """
         :returns: Number of created VXLAN interfaces.
         :rtype: int
         """
-
         try:
             src_address_start = IPv6Address(unicode(src_ip_start))
             dst_address_start = IPv6Address(unicode(dst_ip_start))
         try:
             src_address_start = IPv6Address(unicode(src_ip_start))
             dst_address_start = IPv6Address(unicode(dst_ip_start))
@@ -1896,7 +1756,6 @@ class InterfaceUtil(object):
         :type vxlan_count: int
         :type node_vlan_if: str
         """
         :type vxlan_count: int
         :type node_vlan_if: str
         """
-
         if_data = InterfaceUtil.vpp_get_interface_data(node)
 
         with PapiExecutor(node) as papi_exec:
         if_data = InterfaceUtil.vpp_get_interface_data(node)
 
         with PapiExecutor(node) as papi_exec:
@@ -1965,7 +1824,6 @@ class InterfaceUtil(object):
         :type ip_step: int
         :type bd_id_start: int
         """
         :type ip_step: int
         :type bd_id_start: int
         """
-
         try:
             dst_address_start = IPv6Address(unicode(dst_ip_start))
             af_inet = AF_INET6
         try:
             dst_address_start = IPv6Address(unicode(dst_ip_start))
             af_inet = AF_INET6
@@ -2031,7 +1889,6 @@ class InterfaceUtil(object):
         :returns: Thread mapping information as a list of dictionaries.
         :rtype: list
         """
         :returns: Thread mapping information as a list of dictionaries.
         :rtype: list
         """
-
         cmd = 'sw_interface_rx_placement_dump'
         cmd_reply = 'sw_interface_rx_placement_details'
         err_msg = "Failed to run '{cmd}' PAPI command on host {host}!".format(
         cmd = 'sw_interface_rx_placement_dump'
         cmd_reply = 'sw_interface_rx_placement_details'
         err_msg = "Failed to run '{cmd}' PAPI command on host {host}!".format(
@@ -2061,7 +1918,6 @@ class InterfaceUtil(object):
         :raises RuntimeError: If failed to run command on host or if no API
             reply received.
         """
         :raises RuntimeError: If failed to run command on host or if no API
             reply received.
         """
-
         cmd = 'sw_interface_set_rx_placement'
         err_msg = "Failed to set interface RX placement to worker on host " \
                   "{host}!".format(host=node['host'])
         cmd = 'sw_interface_set_rx_placement'
         err_msg = "Failed to set interface RX placement to worker on host " \
                   "{host}!".format(host=node['host'])
diff --git a/resources/libraries/python/Routing.py b/resources/libraries/python/Routing.py
deleted file mode 100644 (file)
index a682c90..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-# Copyright (c) 2018 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Routing utilities library."""
-
-from resources.libraries.python.VatExecutor import VatTerminal
-from resources.libraries.python.topology import Topology
-from resources.libraries.python.ssh import exec_cmd_no_error
-
-
-class Routing(object):
-    """Routing utilities."""
-
-    @staticmethod
-    def vpp_route_add(node, network, prefix_len, **kwargs):
-        """Add route to the VPP node.
-
-        :param node: Node to add route on.
-        :param network: Route destination network address.
-        :param prefix_len: Route destination network prefix length.
-        :param kwargs: Optional key-value arguments:
-
-            gateway: Route gateway address. (str)
-            interface: Route interface. (str)
-            vrf: VRF table ID. (int)
-            use_sw_index: Use sw_if_index in VAT command. (bool)
-            resolve_attempts: Resolve attempts IP route add parameter. (int)
-            count: number of IP addresses to add starting from network IP (int)
-            local: The route is local with same prefix (increment is 1).
-                If None, then is not used. (bool)
-            lookup_vrf: VRF table ID for lookup. (int)
-            multipath: Enable multipath routing. (bool)
-            weight: Weight value for unequal cost multipath routing. (int)
-
-        :type node: dict
-        :type network: str
-        :type prefix_len: int
-        :type kwargs: dict
-        """
-
-        gateway = kwargs.get("gateway", '')
-        intf = kwargs.get("interface", '')
-        use_sw_index = kwargs.get("use_sw_index", True)
-        resolve_attempts = kwargs.get("resolve_attempts", 10)
-        count = kwargs.get("count", 1)
-        vrf = kwargs.get("vrf", None)
-        l_vrf = kwargs.get("lookup_vrf", None)
-        multipath = kwargs.get("multipath", False)
-        weight = kwargs.get("weight", None)
-        local = kwargs.get("local", False)
-
-        if intf:
-            if use_sw_index:
-                int_cmd = ('sw_if_index {}'.
-                           format(Topology.get_interface_sw_index(node, intf)))
-            else:
-                int_cmd = intf
-        else:
-            int_cmd = ''
-
-        with VatTerminal(node, json_param=False) as vat:
-            vat.vat_terminal_exec_cmd_from_template(
-                'add_route.vat',
-                network=network,
-                prefix_length=prefix_len,
-                via='via {}'.format(gateway) if gateway else '',
-                vrf='vrf {}'.format(vrf) if vrf else '',
-                interface=int_cmd,
-                resolve_attempts='resolve-attempts {}'.
-                format(resolve_attempts) if resolve_attempts else '',
-                count='count {}'.format(count) if count else '',
-                lookup_vrf='lookup-in-vrf {}'.format(l_vrf) if l_vrf else '',
-                multipath='multipath' if multipath else '',
-                weight='weight {}'.format(weight) if weight else '',
-                local='local' if local else '')
-
-    @staticmethod
-    def add_fib_table(node, table_id, ipv6=False):
-        """Create new FIB table according to ID.
-
-        :param node: Node to add FIB on.
-        :param table_id: FIB table ID.
-        :param ipv6: Is this an IPv6 table
-        :type node: dict
-        :type table_id: int
-        :type ipv6: bool
-        """
-        with VatTerminal(node) as vat:
-            vat.vat_terminal_exec_cmd_from_template('add_fib_table.vat',
-                                                    table_id=table_id,
-                                                    ipv6="ipv6" if ipv6 else "")
-
-    @staticmethod
-    def add_route(node, ip_addr, prefix, gateway, namespace=None):
-        """Add route in namespace.
-
-        :param node: Node where to execute command.
-        :param ip_addr: Route destination IP address.
-        :param prefix: IP prefix.
-        :param namespace: Execute command in namespace. Optional.
-        :param gateway: Gateway address.
-        :type node: dict
-        :type ip_addr: str
-        :type prefix: int
-        :type gateway: str
-        :type namespace: str
-        """
-        if namespace is not None:
-            cmd = 'ip netns exec {} ip route add {}/{} via {}'.format(
-                namespace, ip_addr, prefix, gateway)
-        else:
-            cmd = 'ip route add {}/{} via {}'.format(ip_addr, prefix, gateway)
-        exec_cmd_no_error(node, cmd, sudo=True)
index e89daf2..3523d57 100644 (file)
@@ -507,6 +507,7 @@ def exec_cmd_no_error(
 
     return stdout, stderr
 
 
     return stdout, stderr
 
+
 def scp_node(
         node, local_path, remote_path, get=False, timeout=30, disconnect=False):
     """Copy files from local_path to remote_path or vice versa.
 def scp_node(
         node, local_path, remote_path, get=False, timeout=30, disconnect=False):
     """Copy files from local_path to remote_path or vice versa.
index 5c0fc86..b571fcd 100644 (file)
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
-| Resource | resources/libraries/robot/shared/default.robot
+| Library | String
+| Library | resources.libraries.python.InterfaceUtil
 | Library | resources.libraries.python.IPsecUtil
 | Library | resources.libraries.python.IPsecUtil
+| Library | resources.libraries.python.IPUtil
+| Library | resources.libraries.python.IPv6Util
 | Library | resources.libraries.python.NodePath
 | Library | resources.libraries.python.TrafficScriptExecutor
 | Library | resources.libraries.python.NodePath
 | Library | resources.libraries.python.TrafficScriptExecutor
-| Library | resources.libraries.python.IPv4Util.IPv4Util
-| Library | resources.libraries.python.InterfaceUtil
-| Library | resources.libraries.python.Routing
-| Library | String
-| Library | resources.libraries.python.IPv6Util
-| Library | resources.libraries.python.IPv6Setup
-| Library | resources.libraries.python.IPv4Setup.Dut | ${nodes['DUT1']}
-| ...     | WITH NAME | dut1_v4
-| Documentation | *IPsec keywords.*
+| ...
+| Resource | resources/libraries/robot/shared/default.robot
+| ...
+| Documentation | IPsec keywords
 
 *** Keywords ***
 | Generate keys for IPSec
 
 *** Keywords ***
 | Generate keys for IPSec
 | | ... | *Example:*
 | | ... | \| Configure topology for IPv4 IPsec testing \|
 | | Configure path for IPSec test
 | | ... | *Example:*
 | | ... | \| Configure topology for IPv4 IPsec testing \|
 | | Configure path for IPSec test
-| | Set Interface Address | ${dut_node} | ${dut_if} | ${dut_if_ip4}
+| | VPP Interface Set IP Address | ${dut_node} | ${dut_if} | ${dut_if_ip4}
 | | ... | ${ip4_plen}
 | | ... | ${ip4_plen}
-| | Set Interface Address | ${dut_node} | ${dut_lo} | ${dut_lo_ip4}
+| | VPP Interface Set IP Address | ${dut_node} | ${dut_lo} | ${dut_lo_ip4}
 | | ... | ${ip4_plen}
 | | ... | ${ip4_plen}
-| | dut1_v4.Set Arp | ${dut_if} | ${tg_if_ip4} | ${tg_if_mac}
+| | VPP Add IP Neighbor | ${dut_node} | ${dut_if} | ${tg_if_ip4} | ${tg_if_mac}
 | | Vpp Route Add | ${dut_node} | ${tg_lo_ip4} | ${ip4_plen}
 | | ... | gateway=${tg_if_ip4} | interface=${dut_if}
 | | Set Test Variable | ${dut_tun_ip} | ${dut_if_ip4}
 | | Vpp Route Add | ${dut_node} | ${tg_lo_ip4} | ${ip4_plen}
 | | ... | gateway=${tg_if_ip4} | interface=${dut_if}
 | | Set Test Variable | ${dut_tun_ip} | ${dut_if_ip4}
 | | ... | *Example:*
 | | ... | \| Configure topology for IPv6 IPsec testing \|
 | | Configure path for IPSec test
 | | ... | *Example:*
 | | ... | \| Configure topology for IPv6 IPsec testing \|
 | | Configure path for IPSec test
-| | VPP Set If IPv6 Addr | ${dut_node} | ${dut_if} | ${dut_if_ip6} | ${ip6_plen}
-| | VPP Set If IPv6 Addr | ${dut_node} | ${dut_lo} | ${dut_lo_ip6} | ${ip6_plen}
-| | Add IP Neighbor | ${dut_node} | ${dut_if} | ${tg_if_ip6} | ${tg_if_mac}
+| | VPP Interface Set IP Address
+| | ... | ${dut_node} | ${dut_if} | ${dut_if_ip6} | ${ip6_plen}
+| | VPP Interface Set IP Address
+| | ... | ${dut_node} | ${dut_lo} | ${dut_lo_ip6} | ${ip6_plen}
+| | VPP Add IP Neighbor | ${dut_node} | ${dut_if} | ${tg_if_ip6} | ${tg_if_mac}
 | | Vpp All RA Suppress Link Layer | ${nodes}
 | | Vpp Route Add | ${dut_node} | ${tg_lo_ip6} | ${ip6_plen_rt}
 | | ... | gateway=${tg_if_ip6} | interface=${dut_if}
 | | Vpp All RA Suppress Link Layer | ${nodes}
 | | Vpp Route Add | ${dut_node} | ${tg_lo_ip6} | ${ip6_plen_rt}
 | | ... | gateway=${tg_if_ip6} | interface=${dut_if}
index 321488b..8fdfa39 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
-| Resource | resources/libraries/robot/shared/default.robot
-| Resource | resources/libraries/robot/shared/testing_path.robot
-| Library | resources.libraries.python.Policer
 | Library | resources.libraries.python.InterfaceUtil
 | Library | resources.libraries.python.InterfaceUtil
-| Library | resources.libraries.python.IPv4Util
-| Library | resources.libraries.python.TrafficScriptExecutor
+| Library | resources.libraries.python.IPUtil
 | Library | resources.libraries.python.IPv6Util
 | Library | resources.libraries.python.IPv6Util
-| Library | resources.libraries.python.IPv6Setup
-| Library | resources.libraries.python.IPv4Setup.Dut | ${nodes['DUT1']}
-| ...     | WITH NAME | dut1_v4
-| Documentation | *Policer keywords*
+| Library | resources.libraries.python.Policer
+| Library | resources.libraries.python.TrafficScriptExecutor
+| ...
+| Resource | resources/libraries/robot/shared/default.robot
+| Resource | resources/libraries/robot/shared/testing_path.robot
+| ...
+| Documentation | Policer keywords
 
 *** Keywords ***
 | Configure topology for IPv4 policer test
 
 *** Keywords ***
 | Configure topology for IPv4 policer test
 | | ... | - dut_to_tg_if2_ip - DUT second interface IP address. Type: string
 | | ... | - tg_to_dut_if1_ip - TG first interface IP address. Type: string
 | | ... | - tg_to_dut_if2_ip - TG second interface IP address. Type: string
 | | ... | - dut_to_tg_if2_ip - DUT second interface IP address. Type: string
 | | ... | - tg_to_dut_if1_ip - TG first interface IP address. Type: string
 | | ... | - tg_to_dut_if2_ip - TG second interface IP address. Type: string
-| | Configure path in 2-node circular topology | ${nodes['TG']} | ${nodes['DUT1']}
-| | ...                            | ${nodes['TG']}
+| | Configure path in 2-node circular topology | ${nodes['TG']}
+| | ... | ${nodes['DUT1']} | ${nodes['TG']}
 | | Set interfaces in 2-node circular topology up
 | | Set interfaces in 2-node circular topology up
-| | Set Interface Address | ${dut_node} | ${dut_to_tg_if1}
-| | ...                   | ${dut_to_tg_if1_ip4} | ${ip4_plen}
-| | Set Interface Address | ${dut_node} | ${dut_to_tg_if2}
-| | ...                   | ${dut_to_tg_if2_ip4} | ${ip4_plen}
-| | dut1_v4.Set ARP | ${dut_to_tg_if2} | ${tg_to_dut_if2_ip4}
-| | ...             | ${tg_to_dut_if2_mac}
+| | VPP Interface Set IP Address | ${dut_node} | ${dut_to_tg_if1}
+| | ... | ${dut_to_tg_if1_ip4} | ${ip4_plen}
+| | VPP Interface Set IP Address | ${dut_node} | ${dut_to_tg_if2}
+| | ... | ${dut_to_tg_if2_ip4} | ${ip4_plen}
+| | VPP Add IP Neighbor | ${dut_node} | ${dut_to_tg_if2} | ${tg_to_dut_if2_ip4}
+| | ... | ${tg_to_dut_if2_mac}
 | | Set Test Variable | ${dut_to_tg_if1_ip} | ${dut_to_tg_if1_ip4}
 | | Set Test Variable | ${dut_to_tg_if2_ip} | ${dut_to_tg_if2_ip4}
 | | Set Test Variable | ${tg_to_dut_if1_ip} | ${tg_to_dut_if1_ip4}
 | | Set Test Variable | ${dut_to_tg_if1_ip} | ${dut_to_tg_if1_ip4}
 | | Set Test Variable | ${dut_to_tg_if2_ip} | ${dut_to_tg_if2_ip4}
 | | Set Test Variable | ${tg_to_dut_if1_ip} | ${tg_to_dut_if1_ip4}
 | | ... | - dut_to_tg_if2_ip - DUT second interface IP address. Type: string
 | | ... | - tg_to_dut_if1_ip - TG first interface IP address. Type: string
 | | ... | - tg_to_dut_if2_ip - TG second interface IP address. Type: string
 | | ... | - dut_to_tg_if2_ip - DUT second interface IP address. Type: string
 | | ... | - tg_to_dut_if1_ip - TG first interface IP address. Type: string
 | | ... | - tg_to_dut_if2_ip - TG second interface IP address. Type: string
-| | Configure path in 2-node circular topology | ${nodes['TG']} | ${nodes['DUT1']}
-| | ...                            | ${nodes['TG']}
+| | Configure path in 2-node circular topology | ${nodes['TG']}
+| | ... | ${nodes['DUT1']} | ${nodes['TG']}
 | | Set interfaces in 2-node circular topology up
 | | Set interfaces in 2-node circular topology up
-| | Vpp Set If IPv6 Addr | ${dut_node} | ${dut_to_tg_if1}
-| | ...                  | ${dut_to_tg_if1_ip6} | ${ip6_plen}
-| | Vpp Set If IPv6 Addr | ${dut_node} | ${dut_to_tg_if2}
-| | ...                  | ${dut_to_tg_if2_ip6} | ${ip6_plen}
-| | Add IP Neighbor | ${dut_node} | ${dut_to_tg_if2} | ${tg_to_dut_if2_ip6}
-| | ...             | ${tg_to_dut_if2_mac}
+| | VPP Interface Set IP Address
+| | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_to_tg_if1_ip6} | ${ip6_plen}
+| | VPP Interface Set IP Address
+| | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_to_tg_if2_ip6} | ${ip6_plen}
+| | VPP Add IP Neighbor | ${dut_node} | ${dut_to_tg_if2} | ${tg_to_dut_if2_ip6}
+| | ... | ${tg_to_dut_if2_mac}
 | | Vpp All RA Suppress Link Layer | ${nodes}
 | | Set Test Variable | ${dut_to_tg_if1_ip} | ${dut_to_tg_if1_ip6}
 | | Set Test Variable | ${dut_to_tg_if2_ip} | ${dut_to_tg_if2_ip6}
 | | Vpp All RA Suppress Link Layer | ${nodes}
 | | Set Test Variable | ${dut_to_tg_if1_ip} | ${dut_to_tg_if1_ip6}
 | | Set Test Variable | ${dut_to_tg_if2_ip} | ${dut_to_tg_if2_ip6}
 | | ... | \| 08:00:27:87:4d:f7 \| 52:54:00:d4:d8:22 \| 192.168.122.2 \
 | | ... | \| 192.168.122.1 \| ${dscp} \|
 | | [Arguments] | ${node} | ${tx_if} | ${rx_if} | ${src_mac} | ${dst_mac}
 | | ... | \| 08:00:27:87:4d:f7 \| 52:54:00:d4:d8:22 \| 192.168.122.2 \
 | | ... | \| 192.168.122.1 \| ${dscp} \|
 | | [Arguments] | ${node} | ${tx_if} | ${rx_if} | ${src_mac} | ${dst_mac}
-| | ...         | ${src_ip} | ${dst_ip} | ${dscp}
+| | ... | ${src_ip} | ${dst_ip} | ${dscp}
 | | ${tx_if_name}= | Get Interface Name | ${node} | ${tx_if}
 | | ${rx_if_name}= | Get Interface Name | ${node} | ${rx_if}
 | | ${args}= | Traffic Script Gen Arg | ${rx_if_name} | ${tx_if_name}
 | | ${tx_if_name}= | Get Interface Name | ${node} | ${tx_if}
 | | ${rx_if_name}= | Get Interface Name | ${node} | ${rx_if}
 | | ${args}= | Traffic Script Gen Arg | ${rx_if_name} | ${tx_if_name}
-| | ...      | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
+| | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
 | | ${dscp_num}= | Get DSCP Num Value | ${dscp}
 | | ${args}= | Set Variable | ${args} --dscp ${dscp_num}
 | | Run Traffic Script On Node | policer.py | ${node} | ${args}
 | | ${dscp_num}= | Get DSCP Num Value | ${dscp}
 | | ${args}= | Set Variable | ${args} --dscp ${dscp_num}
 | | Run Traffic Script On Node | policer.py | ${node} | ${args}
index 7159124..06428c0 100644 (file)
@@ -14,7 +14,7 @@
 *** Settings ***
 | Library | resources.libraries.python.InterfaceUtil
 | Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords
 *** Settings ***
 | Library | resources.libraries.python.InterfaceUtil
 | Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords
-| Library | resources.libraries.python.IPv4Util
+| Library | resources.libraries.python.IPUtil
 | Library | resources.libraries.python.TrafficScriptExecutor
 
 *** Keywords ***
 | Library | resources.libraries.python.TrafficScriptExecutor
 
 *** Keywords ***
 | | ...
 | | ... | \| IPv6 address from VAT should contain \| ${nodes['DUT1']} \
 | | ... | \| GigabitEthernet0/8/0 \| 10::10 \| 64 \|
 | | ...
 | | ... | \| IPv6 address from VAT should contain \| ${nodes['DUT1']} \
 | | ... | \| GigabitEthernet0/8/0 \| 10::10 \| 64 \|
-| | [Arguments] | ${node} | ${interface} | ${address} | ${prefix}
+| | [Arguments] | ${node} | ${interface} | ${address} | ${prefix} | ${netmask}
 | | ${sw_if_index}= | Vpp Get Interface Sw Index | ${node} | ${interface}
 | | ${vpp_data}= | VPP get interface ip addresses
 | | ... | ${node} | ${interface} | ipv6
 | | ${settings}= | Create Dictionary
 | | ${sw_if_index}= | Vpp Get Interface Sw Index | ${node} | ${interface}
 | | ${vpp_data}= | VPP get interface ip addresses
 | | ... | ${node} | ${interface} | ipv6
 | | ${settings}= | Create Dictionary
-| | ... | ip=${address} | sw_if_index=${sw_if_index} | prefix_length=${prefix}
-| | ... | is_ipv6=${1}
+| | ... | ip=${address} | netmask=${netmask} | sw_if_index=${sw_if_index}
+| | ... | prefix_length=${prefix} | is_ipv6=${1}
 | | Should contain | ${vpp_data} | ${settings}
 
 | Honeycomb removes interface IPv6 addresses
 | | Should contain | ${vpp_data} | ${settings}
 
 | Honeycomb removes interface IPv6 addresses
index 01336f3..bc2b167 100644 (file)
 | | IPv6 address from Honeycomb should contain
 | | ... | ${node} | ${interface} | ${ipv6_address} | ${ipv6_prefix}
 | | IPv6 address from VAT should contain
 | | IPv6 address from Honeycomb should contain
 | | ... | ${node} | ${interface} | ${ipv6_address} | ${ipv6_prefix}
 | | IPv6 address from VAT should contain
-| | ... | ${node} | ${interface} | ${ipv6_address} | ${ipv6_prefix}
+| | ... | ${node} | ${interface} | ${ipv6_address}
+| | ... | ${ipv6_prefix} | ${ipv6_mask}
 | | IPv6 neighbor from Honeycomb should be
 | | ... | ${node} | ${interface} | ${ipv6_neighbor} | ${neighbor_mac}
 
 | | IPv6 neighbor from Honeycomb should be
 | | ... | ${node} | ${interface} | ${ipv6_neighbor} | ${neighbor_mac}
 
index 1ce233f..5ae0c46 100644 (file)
@@ -15,8 +15,7 @@
 | Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords
 | Library | resources.libraries.python.telemetry.SPAN
 | Library  | resources.libraries.python.InterfaceUtil
 | Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords
 | Library | resources.libraries.python.telemetry.SPAN
 | Library  | resources.libraries.python.InterfaceUtil
-| Library  | resources.libraries.python.IPv4Util
-| Library  | resources.libraries.python.IPv4Setup
+| Library  | resources.libraries.python.IPUtil
 | Library  | resources.libraries.python.Trace
 
 *** Keywords ***
 | Library  | resources.libraries.python.Trace
 
 *** Keywords ***
index 6e60b23..8bb95f5 100644 (file)
@@ -13,6 +13,7 @@
 
 *** Settings ***
 | Library | resources.libraries.python.InterfaceUtil
 
 *** Settings ***
 | Library | resources.libraries.python.InterfaceUtil
+| Library | resources.libraries.python.IPUtil
 | Library | resources.libraries.python.L2Util
 | Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords
 | Resource | resources/libraries/robot/honeycomb/bridge_domain.robot
 | Library | resources.libraries.python.L2Util
 | Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords
 | Resource | resources/libraries/robot/honeycomb/bridge_domain.robot
index bb0ae5b..1307eb8 100644 (file)
 
 *** Settings ***
 | Library | resources.libraries.python.InterfaceUtil
 
 *** Settings ***
 | Library | resources.libraries.python.InterfaceUtil
-| Library | resources.libraries.python.IPv4Util.IPv4Util
-| Library | resources.libraries.python.IPv4Setup.IPv4Setup
+| Library | resources.libraries.python.IPUtil
 | Library | resources.libraries.python.NodePath
 | Library | resources.libraries.python.NodePath
-| Library | resources.libraries.python.Routing
 | Library | resources.libraries.python.TrafficScriptExecutor
 | Library | resources.libraries.python.TrafficScriptExecutor
+| ...
 | Resource | resources/libraries/robot/shared/counters.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/counters.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
-| Variables | resources/libraries/python/IPv4NodeAddress.py | ${nodes}
 | ...
 | Documentation | IPv4 keywords
 
 *** Keywords ***
 | ...
 | Documentation | IPv4 keywords
 
 *** Keywords ***
-| Show IP FIB On All DUTs
-| | [Documentation] | Show IP FIB on all DUTs.
-| | ...
-| | ${duts}= | Get Matches | ${nodes} | DUT*
-| | :FOR | ${dut} | IN | @{duts}
-| | | VPP Show IP Table | ${nodes['${dut}']}
-
-| Configure IPv4 addresses on all DUTs
-| | [Documentation] | Setup IPv4 address on all DUTs in topology
-| | [Arguments] | ${nodes} | ${nodes_addr}
-| | ${interfaces}= | VPP nodes set ipv4 addresses | ${nodes} | ${nodes_addr}
-| | :FOR | ${interface} | IN | @{interfaces}
-| | | Set Interface State | @{interface} | up | if_type=name
-
 | Get interface Ipv4 addresses
 | | [Documentation] | Get IPv4 address for the given interface of the node.
 | | ...
 | Get interface Ipv4 addresses
 | | [Documentation] | Get IPv4 address for the given interface of the node.
 | | ...
 | | ${ip_data}= | VPP get interface ip addresses
 | | ... | ${node} | ${interface} | ipv4
 
 | | ${ip_data}= | VPP get interface ip addresses
 | | ... | ${node} | ${interface} | ipv4
 
-| Configure routes for IPv4 test
-| | [Documentation] | Setup routing on all VPP nodes required for IPv4 tests
-| | [Arguments] | ${nodes} | ${nodes_addr}
-| | Append Nodes | ${nodes['DUT1']} | ${nodes['DUT2']}
-| | Compute Path
-| | ${tg}= | Set Variable | ${nodes['TG']}
-| | ${dut1_if} | ${dut1}= | First Interface
-| | ${dut2_if} | ${dut2}= | Last Interface
-| | ${dut1_if_addr}= | Get IPv4 address of node "${dut1}" interface "${dut1_if}" from "${nodes_addr}"
-| | ${dut2_if_addr}= | Get IPv4 address of node "${dut2}" interface "${dut2_if}" from "${nodes_addr}"
-| | @{tg_dut1_links}= | Get active links connecting "${tg}" and "${dut1}"
-| | @{tg_dut2_links}= | Get active links connecting "${tg}" and "${dut2}"
-| | :FOR | ${link} | IN | @{tg_dut1_links}
-| | | ${net}= | Get Link Address | ${link} | ${nodes_addr}
-| | | ${prefix}= | Get Link Prefix | ${link} | ${nodes_addr}
-| | | Vpp Route Add | ${dut2} | ${net} | ${prefix}
-| | | ... | gateway=${dut1_if_addr} | interface=${dut2_if}
-| | :FOR | ${link} | IN | @{tg_dut2_links}
-| | | ${net}= | Get Link Address | ${link} | ${nodes_addr}
-| | | ${prefix}= | Get Link Prefix | ${link} | ${nodes_addr}
-| | | Vpp Route Add | ${dut1} | ${net} | ${prefix}
-| | | ... | gateway=${dut2_if_addr} | interface=${dut1_if}
-
-| Configure DUT nodes for IPv4 testing
-| | Configure IPv4 addresses on all DUTs | ${nodes} | ${nodes_ipv4_addr}
-| | Setup ARP on all DUTs | ${nodes} | ${nodes_ipv4_addr}
-| | Configure routes for IPv4 test | ${nodes} | ${nodes_ipv4_addr}
-| | All Vpp Interfaces Ready Wait | ${nodes}
-
-| Route traffic from interface '${from_port}' on node '${from_node}' to interface '${to_port}' on node '${to_node}' '${hops}' hops away using IPv4
-| | ${src_ip}= | Get IPv4 address of node "${from_node}" interface "${from_port}" from "${nodes_ipv4_addr}"
-| | ${dst_ip}= | Get IPv4 address of node "${to_node}" interface "${to_port}" from "${nodes_ipv4_addr}"
-| | ${src_mac}= | Get interface mac | ${from_node} | ${from_port}
-| | ${dst_mac}= | Get interface mac | ${to_node} | ${to_port}
-| | ${is_dst_tg}= | Is TG node | ${to_node}
-| | ${adj_node} | ${adj_int}= | Get adjacent node and interface | ${nodes}
-| | ... | ${from_node} | ${from_port}
-| | ${from_port_name}= | Get interface name | ${from_node} | ${from_port}
-| | ${to_port_name}= | Get interface name | ${to_node} | ${to_port}
-| | ${adj_int_mac}= | Get interface MAC | ${adj_node} | ${adj_int}
-| | ${args}= | Traffic Script Gen Arg | ${to_port_name} | ${from_port_name}
-| | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
-| | ${args}= | Catenate | ${args} | --hops ${hops}
-| | ... | --first_hop_mac ${adj_int_mac} | --is_dst_tg ${is_dst_tg}
-| | Run Traffic Script On Node | ipv4_ping_ttl_check.py | ${from_node} | ${args}
-
-| Execute IPv4 ICMP echo sweep
-| | [Documentation] | Type of the src_node must be TG and dst_node must be DUT
-| | [Arguments] | ${src_node} | ${dst_node} | ${start_size} | ${end_size}
-| | ... | ${step}
-| | Append Nodes | ${src_node} | ${dst_node}
-| | Compute Path
-| | ${src_port} | ${src_node}= | First Interface
-| | ${dst_port} | ${dst_node}= | Last Interface
-| | ${src_ip}= | Get IPv4 address of node "${src_node}" interface "${src_port}" from "${nodes_ipv4_addr}"
-| | ${dst_ip}= | Get IPv4 address of node "${dst_node}" interface "${dst_port}" from "${nodes_ipv4_addr}"
-| | ${src_mac}= | Get Interface Mac | ${src_node} | ${src_port}
-| | ${dst_mac}= | Get Interface Mac | ${dst_node} | ${dst_port}
-| | ${src_port_name}= | Get interface name | ${src_node} | ${src_port}
-| | ${args}= | Traffic Script Gen Arg | ${src_port_name} | ${src_port_name}
-| | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
-| | ${args}= | Catenate | ${args} | --start_size ${start_size}
-| | ... | --end_size ${end_size} | --step ${step}
-| | Run Traffic Script On Node | ipv4_sweep_ping.py | ${src_node} | ${args}
-| | ... | timeout=${180}
-
-| Send ARP request and verify response
-| | [Arguments] | ${tg_node} | ${vpp_node}
-| | ${link_name}= | Get first active connecting link between node "${tg_node}" and "${vpp_node}"
-| | ${src_if}= | Get interface by link name | ${tg_node} | ${link_name}
-| | ${dst_if}= | Get interface by link name | ${vpp_node} | ${link_name}
-| | ${src_ip}= | Get IPv4 address of node "${tg_node}" interface "${src_if}" from "${nodes_ipv4_addr}"
-| | ${dst_ip}= | Get IPv4 address of node "${vpp_node}" interface "${dst_if}" from "${nodes_ipv4_addr}"
-| | ${src_mac}= | Get node link mac | ${tg_node} | ${link_name}
-| | ${dst_mac}= | Get node link mac | ${vpp_node} | ${link_name}
-| | ${src_if_name}= | Get interface name | ${tg_node} | ${src_if}
-| | ${args}= | Traffic Script Gen Arg | ${src_if_name} | ${src_if_name}
-| | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
-| | Run Traffic Script On Node | arp_request.py | ${tg_node} | ${args}
-
 | Configure IP addresses on interfaces
 | Configure IP addresses on interfaces
-| | [Documentation] | Iterates through @{args} list and Set Interface Address
+| | [Documentation] | Iterates through @{args} list and set interface IP address
 | | ... | for every (${dut_node}, ${interface}, ${address},
 | | ... | ${prefix}) tuple.
 | | ...
 | | ... | for every (${dut_node}, ${interface}, ${address},
 | | ... | ${prefix}) tuple.
 | | ...
 | | ...
 | | [Arguments] | @{args}
 | | :FOR | ${dut_node} | ${interface} | ${address} | ${prefix} | IN | @{args}
 | | ...
 | | [Arguments] | @{args}
 | | :FOR | ${dut_node} | ${interface} | ${address} | ${prefix} | IN | @{args}
-| | | Set Interface Address | ${dut_node} | ${interface} | ${address}
-| | | ... | ${prefix}
+| | | VPP Interface Set IP Address
+| | | ... | ${dut_node} | ${interface} | ${address} | ${prefix}
 
 | Send ICMP echo request and verify answer
 | | [Documentation] | Run traffic script that waits for ICMP reply and ignores
 
 | Send ICMP echo request and verify answer
 | | [Documentation] | Run traffic script that waits for ICMP reply and ignores
 | | ...
 | | ${dut_tg_ip4_prefix}= | Set Variable | 24
 | | ...
 | | ...
 | | ${dut_tg_ip4_prefix}= | Set Variable | 24
 | | ...
-| | Add arp on dut | ${dut_node} | ${dut_to_tg_if1} | ${tg_if1_ip4}
+| | VPP Add IP Neighbor | ${dut_node} | ${dut_to_tg_if1} | ${tg_if1_ip4}
 | | ... | ${tg_to_dut_if1_mac}
 | | ... | ${tg_to_dut_if1_mac}
-| | Add arp on dut | ${dut_node} | ${dut_to_tg_if2} | ${tg_if2_ip4}
+| | VPP Add IP Neighbor | ${dut_node} | ${dut_to_tg_if2} | ${tg_if2_ip4}
 | | ... | ${tg_to_dut_if2_mac}
 | | ...
 | | Configure IP addresses on interfaces | ${dut_node} | ${dut_to_tg_if1}
 | | ... | ${tg_to_dut_if2_mac}
 | | ...
 | | Configure IP addresses on interfaces | ${dut_node} | ${dut_to_tg_if1}
 | | ${dut_tg_ip4_prefix}= | Set Variable | 24
 | | ${dut_link_ip4_prefix}= | Set Variable | 30
 | | ...
 | | ${dut_tg_ip4_prefix}= | Set Variable | 24
 | | ${dut_link_ip4_prefix}= | Set Variable | 30
 | | ...
-| | Add arp on dut | ${dut1_node} | ${dut1_to_tg} | ${tg_if1_ip4}
+| | VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg_if1_ip4}
 | | ... | ${tg_to_dut1_mac}
 | | ... | ${tg_to_dut1_mac}
-| | Add arp on dut | ${dut1_node} | ${dut1_to_dut2} | ${dut2_if1_ip4}
+| | VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2} | ${dut2_if1_ip4}
 | | ... | ${dut2_to_dut1_mac}
 | | ... | ${dut2_to_dut1_mac}
-| | Add arp on dut | ${dut2_node} | ${dut2_to_dut1} | ${dut1_if2_ip4}
+| | VPP Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1} | ${dut1_if2_ip4}
 | | ... | ${dut1_to_dut2_mac}
 | | ... | ${dut1_to_dut2_mac}
-| | Add arp on dut | ${dut2_node} | ${dut2_to_tg} | ${tg_if2_ip4}
+| | VPP Add IP Neighbor | ${dut2_node} | ${dut2_to_tg} | ${tg_if2_ip4}
 | | ... | ${tg_to_dut2_mac}
 | | ...
 | | Configure IP addresses on interfaces | ${dut1_node} | ${dut1_to_tg}
 | | ... | ${tg_to_dut2_mac}
 | | ...
 | | Configure IP addresses on interfaces | ${dut1_node} | ${dut1_to_tg}
index 6ef781f..8de3021 100644 (file)
 
 *** Settings ***
 | Library | resources.libraries.python.InterfaceUtil
 
 *** Settings ***
 | Library | resources.libraries.python.InterfaceUtil
+| Library | resources.libraries.python.IPUtil
 | Library | resources.libraries.python.IPv6Util
 | Library | resources.libraries.python.IPv6Util
-| Library | resources.libraries.python.IPv6Setup
 | Library | resources.libraries.python.NodePath
 | Library | resources.libraries.python.NodePath
-| Library | resources.libraries.python.Routing
 | Library | resources.libraries.python.topology.Topology
 | Library | resources.libraries.python.TrafficScriptExecutor
 | Library | resources.libraries.python.topology.Topology
 | Library | resources.libraries.python.TrafficScriptExecutor
+| ...
 | Resource | resources/libraries/robot/shared/counters.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/counters.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | | ${ip_data}= | VPP get interface ip addresses
 | | ... | ${node} | ${interface} | ipv6
 
 | | ${ip_data}= | VPP get interface ip addresses
 | | ... | ${node} | ${interface} | ipv6
 
-| Send IPv6 icmp echo request to DUT1 ingress inteface and verify answer
-| | [Documentation] | Type of the src_node must be TG and dst_node must be DUT
-| | [Arguments] | ${tg_node} | ${dut_node} | ${nodes_addr}
-| | Append Nodes | ${tg_node} | ${dut_node}
-| | Compute Path
-| | ${src_port} | ${src_node}= | First Interface
-| | ${dst_port} | ${dst_node}= | Last Interface
-| | ${src_ip}= | Get Node Port Ipv6 Address | ${src_node} | ${src_port}
-| | ... | ${nodes_addr}
-| | ${dst_ip}= | Get Node Port Ipv6 Address | ${dst_node} | ${dst_port}
-| | ... | ${nodes_addr}
-| | ${src_mac}= | Get Interface Mac | ${src_node} | ${src_port}
-| | ${dst_mac}= | Get Interface Mac | ${dst_node} | ${dst_port}
-| | ${src_port_name}= | Get interface name | ${src_node} | ${src_port}
-| | ${args}= | Traffic Script Gen Arg | ${src_port_name} | ${src_port_name}
-| | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
-| | Run Traffic Script On Node | icmpv6_echo.py | ${tg_node} | ${args}
-
-| Execute IPv6 ICMP echo sweep
-| | [Documentation] | Type of the src_node must be TG and dst_node must be DUT
-| | [Arguments] | ${src_node} | ${dst_node} | ${start_size} | ${end_size}
-| | ... | ${step} | ${nodes_addr}
-| | Append Nodes | ${src_node} | ${dst_node}
-| | Compute Path
-| | ${src_port} | ${src_node}= | First Interface
-| | ${dst_port} | ${dst_node}= | Last Interface
-| | ${src_ip}= | Get Node Port Ipv6 Address | ${src_node} | ${src_port}
-| | ... | ${nodes_addr}
-| | ${dst_ip}= | Get Node Port Ipv6 Address | ${dst_node} | ${dst_port}
-| | ... | ${nodes_addr}
-| | ${src_mac}= | Get Interface Mac | ${src_node} | ${src_port}
-| | ${dst_mac}= | Get Interface Mac | ${dst_node} | ${dst_port}
-| | ${src_port_name}= | Get interface name | ${src_node} | ${src_port}
-| | ${args}= | Traffic Script Gen Arg | ${src_port_name} | ${src_port_name}
-| | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
-| | ${args}= | Catenate | ${args} | --start_size ${start_size}
-| | ... | --end_size ${end_size} | --step ${step}
-| | Run Traffic Script On Node | ipv6_sweep_ping.py | ${src_node} | ${args}
-| | ... | timeout=${180}
-
-| Send IPv6 ICMP echo request to DUT1 egress interface and verify answer
-| | [Documentation] | Send traffic from TG to first DUT egress interface
-| | [Arguments] | ${tg_node} | ${first_dut} | ${second_dut} | ${nodes_addr}
-| | Append Nodes | ${tg_node} | ${first_dut} | ${second_dut}
-| | Compute Path
-| | ${src_port} | ${src_node}= | First Interface
-| | ${dst_port} | ${dst_node}= | Last Egress Interface
-| | ${hop_port} | ${hop_node}= | First Ingress Interface
-| | ${src_ip}= | Get Node Port Ipv6 Address | ${src_node} | ${src_port}
-| | ... | ${nodes_addr}
-| | ${dst_ip}= | Get Node Port Ipv6 Address | ${dst_node} | ${dst_port}
-| | ... | ${nodes_addr}
-| | ${src_mac}= | Get Interface Mac | ${src_node} | ${src_port}
-| | ${dst_mac}= | Get Interface Mac | ${hop_node} | ${hop_port}
-| | ${src_port_name}= | Get interface name | ${src_node} | ${src_port}
-| | ${args}= | Traffic Script Gen Arg | ${src_port_name} | ${src_port_name}
-| | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
-| | Run Traffic Script On Node | icmpv6_echo.py | ${tg_node} | ${args}
-
-
-| Send IPv6 ICMP echo request to DUT2 via DUT1 and verify answer
-| | [Documentation] | Send traffic from TG to second DUT through first DUT
-| | [Arguments] | ${tg_node} | ${first_dut} | ${second_dut} | ${nodes_addr}
-| | Append Nodes | ${tg_node} | ${first_dut} | ${second_dut}
-| | Compute Path
-| | ${src_port} | ${src_node}= | First Interface
-| | ${dst_port} | ${dst_node}= | Last Interface
-| | ${hop_port} | ${hop_node}= | First Ingress Interface
-| | ${src_ip}= | Get Node Port Ipv6 Address | ${src_node} | ${src_port}
-| | ... | ${nodes_addr}
-| | ${dst_ip}= | Get Node Port Ipv6 Address | ${dst_node} | ${dst_port}
-| | ... | ${nodes_addr}
-| | ${src_mac}= | Get Interface Mac | ${src_node} | ${src_port}
-| | ${dst_mac}= | Get Interface Mac | ${hop_node} | ${hop_port}
-| | ${src_port_name}= | Get interface name | ${src_node} | ${src_port}
-| | ${args}= | Traffic Script Gen Arg | ${src_port_name} | ${src_port_name}
-| | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
-| | Run Traffic Script On Node | icmpv6_echo.py | ${tg_node} | ${args}
-
-| Send IPv6 ICMP echo request to DUT2 egress interface via DUT1 and verify answer
-| | [Documentation] | Send traffic from TG to second DUT egress interface
-| | ... | through first DUT
-| | [Arguments] | ${tg_node} | ${first_dut} | ${second_dut} | ${nodes_addr}
-| | Append Nodes | ${tg_node} | ${first_dut} | ${second_dut} | ${tg_node}
-| | Compute Path
-| | ${src_port} | ${src_node}= | First Interface
-| | ${dst_port} | ${dst_node}= | Last Egress Interface
-| | ${hop_port} | ${hop_node}= | First Ingress Interface
-| | ${src_ip}= | Get Node Port Ipv6 Address | ${src_node} | ${src_port}
-| | ... | ${nodes_addr}
-| | ${dst_ip}= | Get Node Port Ipv6 Address | ${dst_node} | ${dst_port}
-| | ... | ${nodes_addr}
-| | ${src_mac}= | Get Interface Mac | ${src_node} | ${src_port}
-| | ${dst_mac}= | Get Interface Mac | ${hop_node} | ${hop_port}
-| | ${src_port_name}= | Get interface name | ${src_node} | ${src_port}
-| | ${args}= | Traffic Script Gen Arg | ${src_port_name} | ${src_port_name}
-| | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
-| | Run Traffic Script On Node | icmpv6_echo.py | ${tg_node} | ${args}
-
-| Ipv6 tg to tg routed
-| | [Documentation] | Send traffic from one TG port to another through DUT nodes
-| | ... | and send reply back, also verify hop limit processing
-| | [Arguments] | ${tg_node} | ${first_dut} | ${second_dut} | ${nodes_addr}
-| | Append Nodes | ${tg_node} | ${first_dut} | ${second_dut} | ${tg_node}
-| | Compute Path
-| | ${src_port} | ${src_node}= | First Interface
-| | ${dst_port} | ${dst_node}= | Last Interface
-| | ${src_nh_port} | ${src_nh_node}= | First Ingress Interface
-| | ${dst_nh_port} | ${dst_nh_node}= | Last Egress Interface
-| | ${src_ip}= | Get Node Port Ipv6 Address | ${src_node} | ${src_port}
-| | ... | ${nodes_addr}
-| | ${dst_ip}= | Get Node Port Ipv6 Address | ${dst_node} | ${dst_port}
-| | ... | ${nodes_addr}
-| | ${src_mac}= | Get Interface Mac | ${src_node} | ${src_port}
-| | ${dst_mac}= | Get Interface Mac | ${src_node} | ${dst_port}
-| | ${src_nh_mac}= | Get Interface Mac | ${src_nh_node} | ${src_nh_port}
-| | ${dst_nh_mac}= | Get Interface Mac | ${dst_nh_node} | ${dst_nh_port}
-| | ${src_port_name}= | Get interface name | ${src_node} | ${src_port}
-| | ${dst_port_name}= | Get interface name | ${dst_node} | ${dst_port}
-| | ${args}= | Traffic Script Gen Arg | ${dst_port_name} | ${src_port_name}
-| | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
-| | ${args}= | Catenate | ${args} | --src_nh_mac ${src_nh_mac}
-| | ... | --dst_nh_mac ${dst_nh_mac} | --h_num 2
-| | Run Traffic Script On Node | icmpv6_echo_req_resp.py | ${tg_node} | ${args}
-
-| Send IPv6 neighbor solicitation and verify answer
-| | [Documentation] | Send IPv6 neighbor solicitation from TG to DUT
-| | [Arguments] | ${tg_node} | ${dut_node} | ${nodes_addr}
-| | Append Nodes | ${tg_node} | ${dut_node}
-| | Compute Path
-| | ${src_port} | ${src_node}= | First Interface
-| | ${dst_port} | ${dst_node}= | Last Interface
-| | ${src_ip}= | Get Node Port Ipv6 Address | ${src_node} | ${src_port}
-| | ... | ${nodes_addr}
-| | ${dst_ip}= | Get Node Port Ipv6 Address | ${dst_node} | ${dst_port}
-| | ... | ${nodes_addr}
-| | ${src_mac}= | Get Interface Mac | ${src_node} | ${src_port}
-| | ${dst_mac}= | Get Interface Mac | ${dst_node} | ${dst_port}
-| | ${src_port_name}= | Get interface name | ${src_node} | ${src_port}
-| | ${args}= | Traffic Script Gen Arg | ${src_port_name} | ${src_port_name}
-| | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
-| | Run Traffic Script On Node | ipv6_ns.py | ${src_node} | ${args}
-
-| Configure IPv6 on all DUTs in topology
-| | [Documentation] | Setup IPv6 address on all DUTs
-| | [Arguments] | ${nodes} | ${nodes_addr}
-| | Restart Vpp Service On All Duts | ${nodes}
-| | Verify Vpp On All Duts | ${nodes}
-| | VPP Enable Traces On All Duts | ${nodes}
-| | ${interfaces}= | Nodes Set Ipv6 Addresses | ${nodes} | ${nodes_addr}
-| | :FOR | ${interface} | IN | @{interfaces}
-| | | Set Interface State | @{interface} | up | if_type=name
-| | All Vpp Interfaces Ready Wait | ${nodes}
-
 | Suppress ICMPv6 router advertisement message
 | | [Documentation] | Suppress ICMPv6 router advertisement message for link
 | | ... | scope address
 | | [Arguments] | ${nodes}
 | | Vpp All Ra Suppress Link Layer | ${nodes}
 
 | Suppress ICMPv6 router advertisement message
 | | [Documentation] | Suppress ICMPv6 router advertisement message for link
 | | ... | scope address
 | | [Arguments] | ${nodes}
 | | Vpp All Ra Suppress Link Layer | ${nodes}
 
-| Configure IPv6 routing on all DUTs
-| | [Documentation] | Setup routing on all VPP nodes required for IPv6 tests
-| | [Arguments] | ${nodes} | ${nodes_addr}
-| | Append Nodes | ${nodes['DUT1']} | ${nodes['DUT2']}
-| | Compute Path
-| | ${tg}= | Set Variable | ${nodes['TG']}
-| | ${dut1_if} | ${dut1}= | First Interface
-| | ${dut2_if} | ${dut2}= | Last Interface
-| | ${dut1_if_addr}= | Get Node Port Ipv6 Address | ${dut1} | ${dut1_if}
-| | ... | ${nodes_addr}
-| | ${dut2_if_addr}= | Get Node Port Ipv6 Address | ${dut2} | ${dut2_if}
-| | ... | ${nodes_addr}
-| | @{tg_dut1_links}= | Get active links connecting "${tg}" and "${dut1}"
-| | @{tg_dut2_links}= | Get active links connecting "${tg}" and "${dut2}"
-| | :FOR | ${link} | IN | @{tg_dut1_links}
-| | | ${net}= | Get Link Address | ${link} | ${nodes_addr}
-| | | ${prefix}= | Get Link Prefix | ${link} | ${nodes_addr}
-| | | Vpp Route Add | ${dut2} | ${net} | ${prefix} | gateway=${dut1_if_addr}
-| | | ... | interface=${dut2_if}
-| | :FOR | ${link} | IN | @{tg_dut2_links}
-| | | ${net}= | Get Link Address | ${link} | ${nodes_addr}
-| | | ${prefix}= | Get Link Prefix | ${link} | ${nodes_addr}
-| | | Vpp Route Add | ${dut1} | ${net} | ${prefix} | gateway=${dut2_if_addr}
-| | | ... | interface=${dut1_if}
-
 | Configure IPv6 forwarding in circular topology
 | | [Documentation]
 | | ... | Set UP state on VPP interfaces in path on nodes in 2-node / 3-node
 | Configure IPv6 forwarding in circular topology
 | | [Documentation]
 | | ... | Set UP state on VPP interfaces in path on nodes in 2-node / 3-node
 | | ...
 | | ${dut_tg_ip6_prefix}= | Set Variable | 64
 | | ...
 | | ...
 | | ${dut_tg_ip6_prefix}= | Set Variable | 64
 | | ...
-| | Add IP neighbor | ${dut_node} | ${dut_to_tg_if1} | ${tg_if1_ip6}
-| | ... | ${tg_to_dut_if1_mac}
-| | Add IP neighbor | ${dut_node} | ${dut_to_tg_if2} | ${tg_if2_ip6}
-| | ... | ${tg_to_dut_if2_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut_node} | ${dut_to_tg_if1} | ${tg_if1_ip6} | ${tg_to_dut_if1_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut_node} | ${dut_to_tg_if2} | ${tg_if2_ip6} | ${tg_to_dut_if2_mac}
 | | ...
 | | ...
-| | VPP set If IPv6 addr | ${dut_node} | ${dut_to_tg_if1} | ${dut1_if1_ip6}
-| | ... | ${dut_tg_ip6_prefix}
-| | VPP set If IPv6 addr | ${dut_node} | ${dut_to_tg_if2} | ${dut1_if2_ip6}
-| | ... | ${dut_tg_ip6_prefix}
+| | VPP Interface Set IP Address | ${dut_node}
+| | ... | ${dut_to_tg_if1} | ${dut1_if1_ip6} | ${dut_tg_ip6_prefix}
+| | VPP Interface Set IP Address | ${dut_node}
+| | ... | ${dut_to_tg_if2} | ${dut1_if2_ip6} | ${dut_tg_ip6_prefix}
 | | ...
 | | Run Keyword Unless | '${remote_host1_ip6}' == '${NONE}'
 | | ... | Vpp Route Add | ${dut_node} | ${remote_host1_ip6}
 | | ...
 | | Run Keyword Unless | '${remote_host1_ip6}' == '${NONE}'
 | | ... | Vpp Route Add | ${dut_node} | ${remote_host1_ip6}
 | | ${dut_tg_ip6_prefix}= | Set Variable | 64
 | | ${dut_link_ip6_prefix}= | Set Variable | 96
 | | ...
 | | ${dut_tg_ip6_prefix}= | Set Variable | 64
 | | ${dut_link_ip6_prefix}= | Set Variable | 96
 | | ...
-| | Add IP neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg_if1_ip6}
-| | ... | ${tg_to_dut1_mac}
-| | Add IP neighbor | ${dut1_node} | ${dut1_to_dut2} | ${dut2_if1_ip6}
-| | ... | ${dut2_to_dut1_mac}
-| | Add IP neighbor | ${dut2_node} | ${dut2_to_dut1} | ${dut1_if2_ip6}
-| | ... | ${dut1_to_dut2_mac}
-| | Add IP neighbor | ${dut2_node} | ${dut2_to_tg} | ${tg_if2_ip6}
-| | ... | ${tg_to_dut2_mac}
-| | ...
-| | VPP set If IPv6 addr | ${dut1_node} | ${dut1_to_tg} | ${dut1_if1_ip6}
-| | ... | ${dut_tg_ip6_prefix}
-| | VPP set If IPv6 addr | ${dut1_node} | ${dut1_to_dut2} | ${dut1_if2_ip6}
-| | ... | ${dut_link_ip6_prefix}
-| | VPP set If IPv6 addr | ${dut2_node} | ${dut2_to_dut1} | ${dut2_if1_ip6}
-| | ... | ${dut_link_ip6_prefix}
-| | VPP set If IPv6 addr | ${dut2_node} | ${dut2_to_tg} | ${dut2_if2_ip6}
-| | ... | ${dut_tg_ip6_prefix}
+| | VPP Add IP Neighbor
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${tg_if1_ip6} | ${tg_to_dut1_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut2_if1_ip6} | ${dut2_to_dut1_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut1_if2_ip6} | ${dut1_to_dut2_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${tg_if2_ip6} | ${tg_to_dut2_mac}
+| | ...
+| | VPP Interface Set IP Address
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_if1_ip6} | ${dut_tg_ip6_prefix}
+| | VPP Interface Set IP Address | ${dut1_node}
+| | ... | ${dut1_to_dut2} | ${dut1_if2_ip6} | ${dut_link_ip6_prefix}
+| | VPP Interface Set IP Address | ${dut2_node}
+| | ... | ${dut2_to_dut1} | ${dut2_if1_ip6} | ${dut_link_ip6_prefix}
+| | VPP Interface Set IP Address
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_if2_ip6} | ${dut_tg_ip6_prefix}
 | | ...
 | | Vpp Route Add | ${dut1_node} | ${tg_if2_ip6} | ${dut_tg_ip6_prefix}
 | | ... | gateway=${dut2_if1_ip6} | interface=${dut1_to_dut2}
 | | ...
 | | Vpp Route Add | ${dut1_node} | ${tg_if2_ip6} | ${dut_tg_ip6_prefix}
 | | ... | gateway=${dut2_if1_ip6} | interface=${dut1_to_dut2}
index 389b1bf..55dab37 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
-| Documentation | Lisp static adjacency suite keywords
-| Resource | resources/libraries/robot/overlay/lisp_api.robot
-| Library  | resources.libraries.python.LispSetup.LispLocatorSet
+| Library  | resources.libraries.python.IPUtil
+| Library  | resources.libraries.python.LispSetup.LispAdjacency
 | Library  | resources.libraries.python.LispSetup.LispLocator
 | Library  | resources.libraries.python.LispSetup.LispLocalEid
 | Library  | resources.libraries.python.LispSetup.LispLocator
 | Library  | resources.libraries.python.LispSetup.LispLocalEid
-| Library  | resources.libraries.python.LispSetup.LispAdjacency
+| Library  | resources.libraries.python.LispSetup.LispLocatorSet
 | Library  | resources.libraries.python.LispSetup.LispRemoteMapping
 | Library  | resources.libraries.python.LispSetup.LispRemoteMapping
-| Library  | resources.libraries.python.IPv4Util.IPv4Util
+| ...
+| Resource | resources/libraries/robot/overlay/lisp_api.robot
+| ...
+| Documentation | Lisp static adjacency suite keywords
 
 *** Keywords ***
 | Configure LISP topology in 3-node circular topology
 
 *** Keywords ***
 | Configure LISP topology in 3-node circular topology
 | | ... | \| ${dut1_static_adjacency} \| ${dut2_static_adjacency} \|
 | | ...
 | | [Arguments] | ${dut1_node} | ${dut1_int_name} | ${dut1_int_index}
 | | ... | \| ${dut1_static_adjacency} \| ${dut2_static_adjacency} \|
 | | ...
 | | [Arguments] | ${dut1_node} | ${dut1_int_name} | ${dut1_int_index}
-| | ...         | ${dut2_node} | ${dut2_int_name} | ${dut2_int_index}
-| | ...         | ${locator_set} | ${dut1_eid} | ${dut2_eid}
-| | ...         | ${dut1_static_adjacency} | ${dut2_static_adjacency}
+| | ... | ${dut2_node} | ${dut2_int_name} | ${dut2_int_index}
+| | ... | ${locator_set} | ${dut1_eid} | ${dut2_eid}
+| | ... | ${dut1_static_adjacency} | ${dut2_static_adjacency}
 | | ${dut1_int_index}= | Run Keyword If | ${dut1_int_index} is None
 | | ${dut1_int_index}= | Run Keyword If | ${dut1_int_index} is None
-| |                    | ... | Get Interface Sw Index | ${dut1_node}
-| |                    | ...                          | ${dut1_int_name}
-| |                    | ... | ELSE | Set Variable | ${dut1_int_index}
+| | ... | Get Interface Sw Index | ${dut1_node} | ${dut1_int_name}
+| | ... | ELSE | Set Variable | ${dut1_int_index}
 | | ${dut2_int_index}= | Run Keyword If | ${dut2_int_index} is None
 | | ${dut2_int_index}= | Run Keyword If | ${dut2_int_index} is None
-| |                    | ... | Get Interface Sw Index | ${dut2_node}
-| |                    | ...                          | ${dut2_int_name}
-| |                    | ... | ELSE | Set Variable | ${dut2_int_index}
+| | ... | Get Interface Sw Index | ${dut2_node} | ${dut2_int_name}
+| | ... | ELSE | Set Variable | ${dut2_int_index}
 | | Enable Lisp | ${dut1_node}
 | | Vpp Add Lisp Locator Set | ${dut1_node} | ${locator_set['locator_name']}
 | | Vpp Add Lisp Locator | ${dut1_node} | ${locator_set['locator_name']}
 | | Enable Lisp | ${dut1_node}
 | | Vpp Add Lisp Locator Set | ${dut1_node} | ${locator_set['locator_name']}
 | | Vpp Add Lisp Locator | ${dut1_node} | ${locator_set['locator_name']}
-| | ...                  | ${dut1_int_index} | ${locator_set['priority']}
-| | ...                  | ${locator_set['weight']}
+| | ... | ${dut1_int_index} | ${locator_set['priority']}
+| | ... | ${locator_set['weight']}
 | | Vpp Add Lisp Local Eid | ${dut1_node} | ${dut1_eid['locator_name']}
 | | Vpp Add Lisp Local Eid | ${dut1_node} | ${dut1_eid['locator_name']}
-| | ...                    | ${dut1_eid['vni']} | ${dut1_eid['eid']}
-| | ...                    | ${dut1_eid['prefix']}
+| | ... | ${dut1_eid['vni']} | ${dut1_eid['eid']} | ${dut1_eid['prefix']}
 | | Vpp Add Lisp Remote Mapping | ${dut1_node} | ${dut1_static_adjacency['vni']}
 | | Vpp Add Lisp Remote Mapping | ${dut1_node} | ${dut1_static_adjacency['vni']}
-| | ...                         | ${dut1_static_adjacency['deid']}
-| | ...                         | ${dut1_static_adjacency['prefix']}
-| | ...                         | ${dut1_static_adjacency['seid']}
-| | ...                         | ${dut1_static_adjacency['prefix']}
-| | ...                         | ${dut1_static_adjacency['rloc']}
+| | ... | ${dut1_static_adjacency['deid']}
+| | ... | ${dut1_static_adjacency['prefix']}
+| | ... | ${dut1_static_adjacency['seid']}
+| | ... | ${dut1_static_adjacency['prefix']}
+| | ... | ${dut1_static_adjacency['rloc']}
 | | Vpp Add Lisp Adjacency | ${dut1_node} | ${dut1_static_adjacency['vni']}
 | | Vpp Add Lisp Adjacency | ${dut1_node} | ${dut1_static_adjacency['vni']}
-| | ...                    | ${dut1_static_adjacency['deid']}
-| | ...                    | ${dut1_static_adjacency['prefix']}
-| | ...                    | ${dut1_static_adjacency['seid']}
-| | ...                    | ${dut1_static_adjacency['prefix']}
+| | ... | ${dut1_static_adjacency['deid']}
+| | ... | ${dut1_static_adjacency['prefix']}
+| | ... | ${dut1_static_adjacency['seid']}
+| | ... | ${dut1_static_adjacency['prefix']}
 | | Enable Lisp | ${dut2_node}
 | | Vpp Add Lisp Locator Set | ${dut2_node} | ${locator_set['locator_name']}
 | | Vpp Add Lisp Locator | ${dut2_node} | ${locator_set['locator_name']}
 | | Enable Lisp | ${dut2_node}
 | | Vpp Add Lisp Locator Set | ${dut2_node} | ${locator_set['locator_name']}
 | | Vpp Add Lisp Locator | ${dut2_node} | ${locator_set['locator_name']}
-| | ...                  | ${dut2_int_index} | ${locator_set['priority']}
-| | ...                  | ${locator_set['weight']}
+| | ... | ${dut2_int_index} | ${locator_set['priority']}
+| | ... | ${locator_set['weight']}
 | | Vpp Add Lisp Local Eid | ${dut2_node} | ${dut2_eid['locator_name']}
 | | Vpp Add Lisp Local Eid | ${dut2_node} | ${dut2_eid['locator_name']}
-| | ...                    | ${dut2_eid['vni']} | ${dut2_eid['eid']}
-| | ...                    | ${dut2_eid['prefix']}
+| | ... | ${dut2_eid['vni']} | ${dut2_eid['eid']} | ${dut2_eid['prefix']}
 | | Vpp Add Lisp Remote Mapping | ${dut2_node} | ${dut2_static_adjacency['vni']}
 | | Vpp Add Lisp Remote Mapping | ${dut2_node} | ${dut2_static_adjacency['vni']}
-| | ...                         | ${dut2_static_adjacency['deid']}
-| | ...                         | ${dut2_static_adjacency['prefix']}
-| | ...                         | ${dut2_static_adjacency['seid']}
-| | ...                         | ${dut2_static_adjacency['prefix']}
-| | ...                         | ${dut2_static_adjacency['rloc']}
+| | ... | ${dut2_static_adjacency['deid']}
+| | ... | ${dut2_static_adjacency['prefix']}
+| | ... | ${dut2_static_adjacency['seid']}
+| | ... | ${dut2_static_adjacency['prefix']}
+| | ... | ${dut2_static_adjacency['rloc']}
 | | Vpp Add Lisp Adjacency | ${dut2_node} | ${dut2_static_adjacency['vni']}
 | | Vpp Add Lisp Adjacency | ${dut2_node} | ${dut2_static_adjacency['vni']}
-| | ...                    | ${dut2_static_adjacency['deid']}
-| | ...                    | ${dut2_static_adjacency['prefix']}
-| | ...                    | ${dut2_static_adjacency['seid']}
-| | ...                    | ${dut2_static_adjacency['prefix']}
+| | ... | ${dut2_static_adjacency['deid']}
+| | ... | ${dut2_static_adjacency['prefix']}
+| | ... | ${dut2_static_adjacency['seid']}
+| | ... | ${dut2_static_adjacency['prefix']}
 
 | Change LISP Configuration
 | | [Documentation] | Change configuration of the Lisp protocol.
 
 | Change LISP Configuration
 | | [Documentation] | Change configuration of the Lisp protocol.
 | | ... | - dut1_to_dut2 - DUT1 towards DUT2 interface name. Type: string
 | | ... | - dut2_to_dut1 - DUT2 towards DUT1 interface name. Type: string
 | | ... | - dut1_to_dut2_mac - DUT1 towards DUT2 interface mac address.
 | | ... | - dut1_to_dut2 - DUT1 towards DUT2 interface name. Type: string
 | | ... | - dut2_to_dut1 - DUT2 towards DUT1 interface name. Type: string
 | | ... | - dut1_to_dut2_mac - DUT1 towards DUT2 interface mac address.
-| | ... |                      Type: string
+| | ... | Type: string
 | | ... | - dut2_to_dut1_mac - DUT2 towards DUT1 interface mac address.
 | | ... | - dut2_to_dut1_mac - DUT2 towards DUT1 interface mac address.
-| | ... |                      Type: string
+| | ... | Type: string
 | | ... | - new_dut1_ip - New DUT1 towards DUT2 interface IP address.
 | | ... | - new_dut1_ip - New DUT1 towards DUT2 interface IP address.
-| | ... |                 Type: string
+| | ... | Type: string
 | | ... | - new_dut2_ip - New DUT2 towards DUT1 interface IP address.
 | | ... | - new_dut2_ip - New DUT2 towards DUT1 interface IP address.
-| | ... |                 Type: string
+| | ... | Type: string
 | | ... | - prefix - Prefix of the DUT nodes. Type: integer
 | | ... | - old_dut1_static_adjacency - Old DUT1 static adjacency.
 | | ... | - prefix - Prefix of the DUT nodes. Type: integer
 | | ... | - old_dut1_static_adjacency - Old DUT1 static adjacency.
-| | ... |                               Type: dictionary
+| | ... | Type: dictionary
 | | ... | - new_dut1_static_adjacency - New DUT1 static adjacency.
 | | ... | - new_dut1_static_adjacency - New DUT1 static adjacency.
-| | ... |                               Type: dictionary
+| | ... | Type: dictionary
 | | ...
 | | ... | *Return:*
 | | ... | - No value returned
 | | ...
 | | ... | *Return:*
 | | ... | - No value returned
 | | ... | \| ${old_dut1_static_adjacency} \| ${new_dut1_static_adjacency} \|
 | | ...
 | | [Arguments] | ${dut1_node} | ${dut2_node} | ${dut1_to_dut2}
 | | ... | \| ${old_dut1_static_adjacency} \| ${new_dut1_static_adjacency} \|
 | | ...
 | | [Arguments] | ${dut1_node} | ${dut2_node} | ${dut1_to_dut2}
-| | ...         | ${dut2_to_dut1} | ${dut1_to_dut2_mac} | ${dut2_to_dut1_mac}
-| | ...         | ${new_dut1_ip} | ${new_dut2_ip} | ${prefix}
-| | ...         | ${old_dut1_static_adjacency} | ${new_dut1_static_adjacency}
-| | Flush IPv4 Addresses "${dut2_to_dut1}" "${dut2_node}"
+| | ... | ${dut2_to_dut1} | ${dut1_to_dut2_mac} | ${dut2_to_dut1_mac}
+| | ... | ${new_dut1_ip} | ${new_dut2_ip} | ${prefix}
+| | ... | ${old_dut1_static_adjacency} | ${new_dut1_static_adjacency}
+| | Flush IP Addresses | ${dut2_node} | ${dut2_to_dut1}
 | | Vpp Del Lisp Remote Mapping | ${dut1_node}
 | | Vpp Del Lisp Remote Mapping | ${dut1_node}
-| | ...                         | ${old_dut1_static_adjacency['vni']}
-| | ...                         | ${old_dut1_static_adjacency['deid']}
-| | ...                         | ${old_dut1_static_adjacency['prefix']}
-| | ...                         | ${old_dut1_static_adjacency['seid']}
-| | ...                         | ${old_dut1_static_adjacency['prefix']}
-| | ...                         | ${old_dut1_static_adjacency['rloc']}
+| | ... | ${old_dut1_static_adjacency['vni']}
+| | ... | ${old_dut1_static_adjacency['deid']}
+| | ... | ${old_dut1_static_adjacency['prefix']}
+| | ... | ${old_dut1_static_adjacency['seid']}
+| | ... | ${old_dut1_static_adjacency['prefix']}
+| | ... | ${old_dut1_static_adjacency['rloc']}
 | | Vpp Del Lisp Adjacency | ${dut1_node}
 | | Vpp Del Lisp Adjacency | ${dut1_node}
-| | ...                    | ${old_dut1_static_adjacency['vni']}
-| | ...                    | ${old_dut1_static_adjacency['deid']}
-| | ...                    | ${old_dut1_static_adjacency['prefix']}
-| | ...                    | ${old_dut1_static_adjacency['seid']}
-| | ...                    | ${old_dut1_static_adjacency['prefix']}
-| | Set Interface Address | ${dut2_node} | ${dut2_to_dut1}
-| | ...                   | ${new_dut2_ip} | ${prefix}
-| | Add Arp On Dut | ${dut1_node} | ${dut1_to_dut2} | ${new_dut2_ip}
-| | ...            | ${dut2_to_dut1_mac}
-| | Add Arp On Dut | ${dut2_node} | ${dut2_to_dut1} | ${new_dut1_ip}
-| | ...            | ${dut1_to_dut2_mac}
+| | ... | ${old_dut1_static_adjacency['vni']}
+| | ... | ${old_dut1_static_adjacency['deid']}
+| | ... | ${old_dut1_static_adjacency['prefix']}
+| | ... | ${old_dut1_static_adjacency['seid']}
+| | ... | ${old_dut1_static_adjacency['prefix']}
+| | VPP Interface Set IP Address | ${dut2_node} | ${dut2_to_dut1}
+| | ... | ${new_dut2_ip} | ${prefix}
+| | VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2} | ${new_dut2_ip}
+| | ... | ${dut2_to_dut1_mac}
+| | VPP Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1} | ${new_dut1_ip}
+| | ... | ${dut1_to_dut2_mac}
 | | Vpp Add Lisp Remote Mapping | ${dut1_node}
 | | Vpp Add Lisp Remote Mapping | ${dut1_node}
-| | ...                         | ${new_dut1_static_adjacency['vni']}
-| | ...                         | ${new_dut1_static_adjacency['deid']}
-| | ...                         | ${new_dut1_static_adjacency['prefix']}
-| | ...                         | ${new_dut1_static_adjacency['seid']}
-| | ...                         | ${new_dut1_static_adjacency['prefix']}
-| | ...                         | ${new_dut1_static_adjacency['rloc']}
+| | ... | ${new_dut1_static_adjacency['vni']}
+| | ... | ${new_dut1_static_adjacency['deid']}
+| | ... | ${new_dut1_static_adjacency['prefix']}
+| | ... | ${new_dut1_static_adjacency['seid']}
+| | ... | ${new_dut1_static_adjacency['prefix']}
+| | ... | ${new_dut1_static_adjacency['rloc']}
 | | Vpp Add Lisp Adjacency | ${dut1_node}
 | | Vpp Add Lisp Adjacency | ${dut1_node}
-| | ...                    | ${new_dut1_static_adjacency['vni']}
-| | ...                    | ${new_dut1_static_adjacency['deid']}
-| | ...                    | ${new_dut1_static_adjacency['prefix']}
-| | ...                    | ${new_dut1_static_adjacency['seid']}
-| | ...                    | ${new_dut1_static_adjacency['prefix']}
+| | ... | ${new_dut1_static_adjacency['vni']}
+| | ... | ${new_dut1_static_adjacency['deid']}
+| | ... | ${new_dut1_static_adjacency['prefix']}
+| | ... | ${new_dut1_static_adjacency['seid']}
+| | ... | ${new_dut1_static_adjacency['prefix']}
index 66ffa3d..5e9fa3d 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 
 *** Settings ***
 | Library  | Collections
 
 *** Settings ***
 | Library  | Collections
-| Resource | resources/libraries/robot/shared/default.robot
-| Resource | resources/libraries/robot/shared/interfaces.robot
-| Resource | resources/libraries/robot/l2/l2_bridge_domain.robot
-| Resource | resources/libraries/robot/l2/l2_xconnect.robot
 | Library  | resources.libraries.python.InterfaceUtil
 | Library  | resources.libraries.python.IPUtil
 | Library  | resources.libraries.python.InterfaceUtil
 | Library  | resources.libraries.python.IPUtil
-| Library  | resources.libraries.python.IPv4Util
 | Library  | resources.libraries.python.IPv6Util
 | Library  | resources.libraries.python.IPv6Util
-| Library  | resources.libraries.python.IPv4Setup
 | Library  | resources.libraries.python.L2Util
 | Library  | resources.libraries.python.NodePath
 | Library  | resources.libraries.python.L2Util
 | Library  | resources.libraries.python.NodePath
+| ...
+| Resource | resources/libraries/robot/l2/l2_bridge_domain.robot
+| Resource | resources/libraries/robot/l2/l2_xconnect.robot
+| Resource | resources/libraries/robot/shared/default.robot
+| Resource | resources/libraries/robot/shared/interfaces.robot
+| ...
+| Documentation | VXLAN keywords
 
 *** Keywords ***
 | Configure IP addresses and neighbors on interfaces
 
 *** Keywords ***
 | Configure IP addresses and neighbors on interfaces
 | | ... | ELSE | Set Variable | ${DUT2_INT_INDEX}
 | | ${DUT1_INT_MAC}= | Vpp Get Interface Mac | ${DUT1} | ${DUT1_INT_INDEX}
 | | ${DUT2_INT_MAC}= | Vpp Get Interface Mac | ${DUT2} | ${DUT2_INT_INDEX}
 | | ... | ELSE | Set Variable | ${DUT2_INT_INDEX}
 | | ${DUT1_INT_MAC}= | Vpp Get Interface Mac | ${DUT1} | ${DUT1_INT_INDEX}
 | | ${DUT2_INT_MAC}= | Vpp Get Interface Mac | ${DUT2} | ${DUT2_INT_INDEX}
-| | Set Interface Address | ${DUT1} | ${DUT1_INT_INDEX}
+| | VPP Interface Set IP Address | ${DUT1} | ${DUT1_INT_INDEX}
 | | ... | ${dut1s_ip_address} | ${duts_ip_address_prefix}
 | | ... | ${dut1s_ip_address} | ${duts_ip_address_prefix}
-| | Set Interface Address | ${DUT2} | ${DUT2_INT_INDEX}
+| | VPP Interface Set IP Address | ${DUT2} | ${DUT2_INT_INDEX}
 | | ... | ${dut2s_ip_address} | ${duts_ip_address_prefix}
 | | ... | ${dut2s_ip_address} | ${duts_ip_address_prefix}
-| | Add IP Neighbor | ${DUT1} | ${DUT1_INT_INDEX} | ${dut2s_ip_address}
-| | ... | ${DUT2_INT_MAC}
-| | Add IP Neighbor | ${DUT2} | ${DUT2_INT_INDEX} | ${dut1s_ip_address}
-| | ... | ${DUT1_INT_MAC}
+| | VPP Add IP Neighbor
+| | ... | ${DUT1} | ${DUT1_INT_INDEX} | ${dut2s_ip_address} | ${DUT2_INT_MAC}
+| | VPP Add IP Neighbor
+| | ... | ${DUT2} | ${DUT2_INT_INDEX} | ${dut1s_ip_address} | ${DUT1_INT_MAC}
 
 | Add interfaces to L2BD
 | | [Arguments] | ${DUT} | ${BID} | ${INTERFACE_1} | ${INTERFACE_2}
 
 | Add interfaces to L2BD
 | | [Arguments] | ${DUT} | ${BID} | ${INTERFACE_1} | ${INTERFACE_2}
index 2aa2dc4..0f13730 100644 (file)
 *** Settings ***
 | Library | Collections
 | Library | String
 *** Settings ***
 | Library | Collections
 | Library | String
-| Library | resources.libraries.python.topology.Topology
-| Library | resources.libraries.python.NodePath
+| Library | resources.libraries.python.Classify
 | Library | resources.libraries.python.DpdkUtil
 | Library | resources.libraries.python.InterfaceUtil
 | Library | resources.libraries.python.DpdkUtil
 | Library | resources.libraries.python.InterfaceUtil
-| Library | resources.libraries.python.VhostUser
-| Library | resources.libraries.python.TrafficGenerator
-| Library | resources.libraries.python.TrafficGenerator.TGDropRateSearchImpl
-| Library | resources.libraries.python.Classify
 | Library | resources.libraries.python.IPUtil
 | Library | resources.libraries.python.L2Util
 | Library | resources.libraries.python.IPUtil
 | Library | resources.libraries.python.L2Util
-| Resource | resources/libraries/robot/shared/default.robot
-| Resource | resources/libraries/robot/shared/interfaces.robot
-| Resource | resources/libraries/robot/shared/counters.robot
-| Resource | resources/libraries/robot/l2/l2_bridge_domain.robot
-| Resource | resources/libraries/robot/l2/l2_xconnect.robot
-| Resource | resources/libraries/robot/l2/l2_patch.robot
+| Library | resources.libraries.python.NodePath
+| Library | resources.libraries.python.topology.Topology
+| Library | resources.libraries.python.TrafficGenerator
+| Library | resources.libraries.python.TrafficGenerator.TGDropRateSearchImpl
+| Library | resources.libraries.python.VhostUser
+| ...
 | Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/ip/ip6.robot
 | Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/ip/ip6.robot
+| Resource | resources/libraries/robot/l2/l2_bridge_domain.robot
+| Resource | resources/libraries/robot/l2/l2_patch.robot
+| Resource | resources/libraries/robot/l2/l2_xconnect.robot
 | Resource | resources/libraries/robot/l2/tagging.robot
 | Resource | resources/libraries/robot/overlay/srv6.robot
 | Resource | resources/libraries/robot/l2/tagging.robot
 | Resource | resources/libraries/robot/overlay/srv6.robot
-| Documentation | Performance suite keywords - configuration.
+| Resource | resources/libraries/robot/shared/counters.robot
+| Resource | resources/libraries/robot/shared/default.robot
+| Resource | resources/libraries/robot/shared/interfaces.robot
+| ...
+| Documentation | Performance suite keywords - configuration
 
 *** Keywords ***
 | Set interfaces in path up
 
 *** Keywords ***
 | Set interfaces in path up
 | | ... | ${dut1_if1_ip4} | 24
 | | Configure IP addresses on interfaces | ${dut2} | ${dut2_if2}
 | | ... | ${dut2_if2_ip4} | 24
 | | ... | ${dut1_if1_ip4} | 24
 | | Configure IP addresses on interfaces | ${dut2} | ${dut2_if2}
 | | ... | ${dut2_if2_ip4} | 24
-| | Add arp on dut | ${dut1} | ${dut1_if1} | ${tg_if1_ip4} | ${tg_if1_mac}
-| | Add arp on dut | ${dut2} | ${dut2_if2} | ${tg_if2_ip4} | ${tg_if2_mac}
+| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | ${tg_if1_ip4} | ${tg_if1_mac}
+| | VPP Add IP Neighbor | ${dut2} | ${dut2_if2} | ${tg_if2_ip4} | ${tg_if2_mac}
 | | Vpp Route Add | ${dut1} | ${laddr_ip4} | 8 | gateway=${tg_if1_ip4}
 | | ... | interface=${dut1_if1}
 | | Vpp Route Add | ${dut2} | ${raddr_ip4} | 8 | gateway=${tg_if2_ip4}
 | | Vpp Route Add | ${dut1} | ${laddr_ip4} | 8 | gateway=${tg_if1_ip4}
 | | ... | interface=${dut1_if1}
 | | Vpp Route Add | ${dut2} | ${raddr_ip4} | 8 | gateway=${tg_if2_ip4}
 | | ${dut2_if1_mac}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Get Interface MAC | ${dut2} | ${dut2_if1}
 | | ...
 | | ${dut2_if1_mac}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Get Interface MAC | ${dut2} | ${dut2_if1}
 | | ...
-| | Add arp on dut | ${dut1} | ${dut1_if1} | 10.10.10.2 | ${tg1_if1_mac}
+| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 10.10.10.2 | ${tg1_if1_mac}
 | | Run Keyword If | '${dut2_status}' == 'PASS'
 | | Run Keyword If | '${dut2_status}' == 'PASS'
-| | ... | Add arp on dut | ${dut1} | ${dut1_if2} | 1.1.1.2 | ${dut2_if1_mac}
+| | ... | VPP Add IP Neighbor
+| | ... | ${dut1} | ${dut1_if2} | 1.1.1.2 | ${dut2_if1_mac}
 | | Run Keyword If | '${dut2_status}' == 'PASS'
 | | Run Keyword If | '${dut2_status}' == 'PASS'
-| | ... | Add arp on dut | ${dut2} | ${dut2_if1} | 1.1.1.1 | ${dut1_if2_mac}
+| | ... | VPP Add IP Neighbor
+| | ... | ${dut2} | ${dut2_if1} | 1.1.1.1 | ${dut1_if2_mac}
 | | ${dut}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Set Variable | ${dut2}
 | | ... | ELSE | Set Variable | ${dut1}
 | | ${dut_if2}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Set Variable | ${dut2_if2}
 | | ... | ELSE | Set Variable | ${dut1_if2}
 | | ${dut}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Set Variable | ${dut2}
 | | ... | ELSE | Set Variable | ${dut1}
 | | ${dut_if2}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Set Variable | ${dut2_if2}
 | | ... | ELSE | Set Variable | ${dut1_if2}
-| | Add arp on dut | ${dut} | ${dut_if2} | 20.20.20.2 | ${tg1_if2_mac}
+| | VPP Add IP Neighbor | ${dut} | ${dut_if2} | 20.20.20.2 | ${tg1_if2_mac}
 | | ...
 | | Configure IP addresses on interfaces | ${dut1} | ${dut1_if1}
 | | ... | 10.10.10.1 | 24
 | | ...
 | | Configure IP addresses on interfaces | ${dut1} | ${dut1_if1}
 | | ... | 10.10.10.1 | 24
 | | ... | Get Interface MAC | ${dut1} | ${dut1_if2}
 | | ${dut2_if1_mac}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Get Interface MAC | ${dut2} | ${dut2_if1}
 | | ... | Get Interface MAC | ${dut1} | ${dut1_if2}
 | | ${dut2_if1_mac}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Get Interface MAC | ${dut2} | ${dut2_if1}
-| | Add arp on dut | ${dut1} | ${dut1_if1} | 1.1.1.1 | ${tg1_if1_mac}
+| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 1.1.1.1 | ${tg1_if1_mac}
 | | Run Keyword If | '${dut2_status}' == 'PASS'
 | | Run Keyword If | '${dut2_status}' == 'PASS'
-| | ... | Add arp on dut | ${dut1} | ${dut1_if2} | 2.2.2.2 | ${dut2_if1_mac}
+| | ... | VPP Add IP Neighbor
+| | ... | ${dut1} | ${dut1_if2} | 2.2.2.2 | ${dut2_if1_mac}
 | | Run Keyword If | '${dut2_status}' == 'PASS'
 | | Run Keyword If | '${dut2_status}' == 'PASS'
-| | ... | Add arp on dut | ${dut2} | ${dut2_if1} | 2.2.2.1 | ${dut1_if2_mac}
+| | ... | VPP Add IP Neighbor
+| | ... | ${dut2} | ${dut2_if1} | 2.2.2.1 | ${dut1_if2_mac}
 | | ${dut}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Set Variable | ${dut2}
 | | ... | ELSE | Set Variable | ${dut1}
 | | ${dut_if2}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Set Variable | ${dut2_if2}
 | | ... | ELSE | Set Variable | ${dut1_if2}
 | | ${dut}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Set Variable | ${dut2}
 | | ... | ELSE | Set Variable | ${dut1}
 | | ${dut_if2}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Set Variable | ${dut2_if2}
 | | ... | ELSE | Set Variable | ${dut1_if2}
-| | Add arp on dut | ${dut} | ${dut_if2} | 3.3.3.1 | ${tg1_if2_mac}
+| | VPP Add IP Neighbor | ${dut} | ${dut_if2} | 3.3.3.1 | ${tg1_if2_mac}
 | | Configure IP addresses on interfaces | ${dut1} | ${dut1_if1} | 1.1.1.2 | 30
 | | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Configure IP addresses on interfaces | ${dut1} | ${dut1_if2} | 2.2.2.1
 | | Configure IP addresses on interfaces | ${dut1} | ${dut1_if1} | 1.1.1.2 | 30
 | | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Configure IP addresses on interfaces | ${dut1} | ${dut1_if2} | 2.2.2.1
 | | ... | ${dut1} | ${dut1_if2} | 200.0.0.1 | 30
 | | ${tg1_if1_mac}= | Get Interface MAC | ${tg} | ${tg_if1}
 | | ${tg1_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
 | | ... | ${dut1} | ${dut1_if2} | 200.0.0.1 | 30
 | | ${tg1_if1_mac}= | Get Interface MAC | ${tg} | ${tg_if1}
 | | ${tg1_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
-| | Add arp on dut | ${dut1} | ${dut1_if1} | 100.0.0.2 | ${tg1_if1_mac}
-| | Add arp on dut | ${dut1} | ${dut1_if2} | 200.0.0.2 | ${tg1_if2_mac}
+| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 100.0.0.2 | ${tg1_if1_mac}
+| | VPP Add IP Neighbor | ${dut1} | ${dut1_if2} | 200.0.0.2 | ${tg1_if2_mac}
 | | Vpp Route Add | ${dut1} | 10.0.0.0 | 8 | gateway=100.0.0.2
 | | ... | interface=${dut1_if1} | vrf=${fib_table_1}
 | | Vpp Route Add | ${dut1} | 20.0.0.0 | 8 | gateway=200.0.0.2
 | | Vpp Route Add | ${dut1} | 10.0.0.0 | 8 | gateway=100.0.0.2
 | | ... | interface=${dut1_if1} | vrf=${fib_table_1}
 | | Vpp Route Add | ${dut1} | 20.0.0.0 | 8 | gateway=200.0.0.2
 | | ... | ${dut2} | ${dut2_if1} | 150.0.0.2 | 30
 | | Configure IP addresses on interfaces
 | | ... | ${dut2} | ${dut2_if2} | 200.0.0.1 | 30
 | | ... | ${dut2} | ${dut2_if1} | 150.0.0.2 | 30
 | | Configure IP addresses on interfaces
 | | ... | ${dut2} | ${dut2_if2} | 200.0.0.1 | 30
-| | Add arp on dut | ${dut1} | ${dut1_if1} | 100.0.0.2 | ${tg_if1_mac}
-| | Add arp on dut | ${dut2} | ${dut2_if2} | 200.0.0.2 | ${tg_if2_mac}
+| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 100.0.0.2 | ${tg_if1_mac}
+| | VPP Add IP Neighbor | ${dut2} | ${dut2_if2} | 200.0.0.2 | ${tg_if2_mac}
 | | Vpp Route Add | ${dut1} | 10.0.0.0 | 8 | gateway=100.0.0.2
 | | ... | interface=${dut1_if1} | vrf=${fib_table_1}
 | | Vpp Route Add | ${dut1} | 20.0.0.0 | 8 | gateway=150.0.0.2
 | | Vpp Route Add | ${dut1} | 10.0.0.0 | 8 | gateway=100.0.0.2
 | | ... | interface=${dut1_if1} | vrf=${fib_table_1}
 | | Vpp Route Add | ${dut1} | 20.0.0.0 | 8 | gateway=150.0.0.2
 | | ... | Get Interface MAC | ${dut1} | ${dut1_if2}
 | | ${dut2_if1_mac}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Get Interface MAC | ${dut2} | ${dut2_if1}
 | | ... | Get Interface MAC | ${dut1} | ${dut1_if2}
 | | ${dut2_if1_mac}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Get Interface MAC | ${dut2} | ${dut2_if1}
-| | Add arp on dut | ${dut1} | ${dut1_if1} | 1.1.1.1 | ${tg1_if1_mac}
+| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 1.1.1.1 | ${tg1_if1_mac}
 | | Run Keyword If | '${dut2_status}' == 'PASS'
 | | Run Keyword If | '${dut2_status}' == 'PASS'
-| | ... | Add arp on dut | ${dut1} | ${subif_index_1} | 2.2.2.2
-| | ... | ${dut2_if1_mac}
+| | ... | VPP Add IP Neighbor
+| | ... | ${dut1} | ${subif_index_1} | 2.2.2.2 | ${dut2_if1_mac}
 | | Run Keyword If | '${dut2_status}' == 'PASS'
 | | Run Keyword If | '${dut2_status}' == 'PASS'
-| | ... | Add arp on dut | ${dut2} | ${subif_index_2} | 2.2.2.1
-| | ... | ${dut1_if2_mac}
+| | ... | VPP Add IP Neighbor
+| | ... | ${dut2} | ${subif_index_2} | 2.2.2.1 | ${dut1_if2_mac}
 | | ${dut}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Set Variable | ${dut2}
 | | ... | ELSE | Set Variable | ${dut1}
 | | ${dut_if2}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Set Variable | ${dut2_if2}
 | | ... | ELSE | Set Variable | ${subif_index_1}
 | | ${dut}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Set Variable | ${dut2}
 | | ... | ELSE | Set Variable | ${dut1}
 | | ${dut_if2}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Set Variable | ${dut2_if2}
 | | ... | ELSE | Set Variable | ${subif_index_1}
-| | Add arp on dut | ${dut} | ${dut_if2} | 3.3.3.1 | ${tg1_if2_mac}
+| | VPP Add IP Neighbor | ${dut} | ${dut_if2} | 3.3.3.1 | ${tg1_if2_mac}
 | | Configure IP addresses on interfaces | ${dut1} | ${dut1_if1} | 1.1.1.2 | 30
 | | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Configure IP addresses on interfaces | ${dut1} | ${subif_index_1}
 | | Configure IP addresses on interfaces | ${dut1} | ${dut1_if1} | 1.1.1.2 | 30
 | | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Configure IP addresses on interfaces | ${dut1} | ${subif_index_1}
 | | ${prefix}= | Set Variable | 64
 | | ${tg1_if1_mac}= | Get Interface MAC | ${tg} | ${tg_if1}
 | | ${tg1_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
 | | ${prefix}= | Set Variable | 64
 | | ${tg1_if1_mac}= | Get Interface MAC | ${tg} | ${tg_if1}
 | | ${tg1_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
-| | VPP Set If IPv6 Addr | ${dut1} | ${dut1_if1} | 2001:1::1 | ${prefix}
-| | VPP Set If IPv6 Addr | ${dut1} | ${dut1_if2} | 2001:2::1 | ${prefix}
+| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 2001:1::1 | ${prefix}
+| | VPP Interface Set IP Address | ${dut1} | ${dut1_if2} | 2001:2::1 | ${prefix}
 | | Suppress ICMPv6 router advertisement message | ${nodes}
 | | Suppress ICMPv6 router advertisement message | ${nodes}
-| | Add Ip Neighbor | ${dut1} | ${dut1_if1} | 2001:1::2 | ${tg1_if1_mac}
-| | Add Ip Neighbor | ${dut1} | ${dut1_if2} | 2001:2::2 | ${tg1_if2_mac}
+| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 2001:1::2 | ${tg1_if1_mac}
+| | VPP Add IP Neighbor | ${dut1} | ${dut1_if2} | 2001:2::2 | ${tg1_if2_mac}
 
 | Initialize IPv6 forwarding in 3-node circular topology
 | | [Documentation]
 
 | Initialize IPv6 forwarding in 3-node circular topology
 | | [Documentation]
 | | ${tg1_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
 | | ${dut1_if2_mac}= | Get Interface MAC | ${dut1} | ${dut1_if2}
 | | ${dut2_if1_mac}= | Get Interface MAC | ${dut2} | ${dut2_if1}
 | | ${tg1_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
 | | ${dut1_if2_mac}= | Get Interface MAC | ${dut1} | ${dut1_if2}
 | | ${dut2_if1_mac}= | Get Interface MAC | ${dut2} | ${dut2_if1}
-| | VPP Set If IPv6 Addr | ${dut1} | ${dut1_if1} | 2001:1::1 | ${prefix}
-| | VPP Set If IPv6 Addr | ${dut1} | ${dut1_if2} | 2001:3::1 | ${prefix}
-| | VPP Set If IPv6 Addr | ${dut2} | ${dut2_if1} | 2001:3::2 | ${prefix}
-| | VPP Set If IPv6 Addr | ${dut2} | ${dut2_if2} | 2001:2::1 | ${prefix}
+| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 2001:1::1 | ${prefix}
+| | VPP Interface Set IP Address | ${dut1} | ${dut1_if2} | 2001:3::1 | ${prefix}
+| | VPP Interface Set IP Address | ${dut2} | ${dut2_if1} | 2001:3::2 | ${prefix}
+| | VPP Interface Set IP Address | ${dut2} | ${dut2_if2} | 2001:2::1 | ${prefix}
 | | Suppress ICMPv6 router advertisement message | ${nodes}
 | | Suppress ICMPv6 router advertisement message | ${nodes}
-| | Add Ip Neighbor | ${dut1} | ${dut1_if1} | 2001:1::2 | ${tg1_if1_mac}
-| | Add Ip Neighbor | ${dut2} | ${dut2_if2} | 2001:2::2 | ${tg1_if2_mac}
-| | Add Ip Neighbor | ${dut1} | ${dut1_if2} | 2001:3::2 | ${dut2_if1_mac}
-| | Add Ip Neighbor | ${dut2} | ${dut2_if1} | 2001:3::1 | ${dut1_if2_mac}
+| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 2001:1::2 | ${tg1_if1_mac}
+| | VPP Add IP Neighbor | ${dut2} | ${dut2_if2} | 2001:2::2 | ${tg1_if2_mac}
+| | VPP Add IP Neighbor | ${dut1} | ${dut1_if2} | 2001:3::2 | ${dut2_if1_mac}
+| | VPP Add IP Neighbor | ${dut2} | ${dut2_if1} | 2001:3::1 | ${dut1_if2_mac}
 | | Vpp Route Add | ${dut1} | 2001:2::0 | ${prefix} | gateway=2001:3::2
 | | ... | interface=${dut1_if2}
 | | Vpp Route Add | ${dut2} | 2001:1::0 | ${prefix} | gateway=2001:3::1
 | | Vpp Route Add | ${dut1} | 2001:2::0 | ${prefix} | gateway=2001:3::2
 | | ... | interface=${dut1_if2}
 | | Vpp Route Add | ${dut2} | 2001:1::0 | ${prefix} | gateway=2001:3::1
 | | ... | Get Interface MAC | ${dut2} | ${dut2_if1}
 | | ${prefix}= | Set Variable | 64
 | | ${host_prefix}= | Set Variable | 128
 | | ... | Get Interface MAC | ${dut2} | ${dut2_if1}
 | | ${prefix}= | Set Variable | 64
 | | ${host_prefix}= | Set Variable | 128
-| | VPP Set If IPv6 Addr | ${dut1} | ${dut1_if1} | 2001:3::1 | ${prefix}
+| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 2001:3::1 | ${prefix}
 | | Run Keyword If | '${dut2_status}' == 'PASS'
 | | Run Keyword If | '${dut2_status}' == 'PASS'
-| | ... | VPP Set If IPv6 Addr | ${dut1} | ${dut1_if2} | 2001:4::1 | ${prefix}
+| | ... | VPP Interface Set IP Address
+| | ... | ${dut1} | ${dut1_if2} | 2001:4::1 | ${prefix}
 | | Run Keyword If | '${dut2_status}' == 'PASS'
 | | Run Keyword If | '${dut2_status}' == 'PASS'
-| | ... | VPP Set If IPv6 Addr | ${dut2} | ${dut2_if1} | 2001:4::2 | ${prefix}
+| | ... | VPP Interface Set IP Address
+| | ... | ${dut2} | ${dut2_if1} | 2001:4::2 | ${prefix}
 | | ${dut}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Set Variable | ${dut2}
 | | ... | ELSE | Set Variable | ${dut1}
 | | ${dut_if2}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Set Variable | ${dut2_if2}
 | | ... | ELSE | Set Variable | ${dut1_if2}
 | | ${dut}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Set Variable | ${dut2}
 | | ... | ELSE | Set Variable | ${dut1}
 | | ${dut_if2}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Set Variable | ${dut2_if2}
 | | ... | ELSE | Set Variable | ${dut1_if2}
-| | VPP Set If IPv6 Addr | ${dut} | ${dut_if2} | 2001:5::1 | ${prefix}
+| | VPP Interface Set IP Address | ${dut} | ${dut_if2} | 2001:5::1 | ${prefix}
 | | Suppress ICMPv6 router advertisement message | ${nodes}
 | | Suppress ICMPv6 router advertisement message | ${nodes}
-| | Add Ip Neighbor | ${dut1} | ${dut1_if1} | 2001:3::2 | ${tg1_if1_mac}
+| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 2001:3::2 | ${tg1_if1_mac}
 | | Run Keyword If | '${dut2_status}' == 'PASS'
 | | Run Keyword If | '${dut2_status}' == 'PASS'
-| | ... | Add Ip Neighbor | ${dut1} | ${dut1_if2} | 2001:4::2 | ${dut2_if1_mac}
+| | ... | VPP Add Ip Neighbor
+| | ... | ${dut1} | ${dut1_if2} | 2001:4::2 | ${dut2_if1_mac}
 | | Run Keyword If | '${dut2_status}' == 'PASS'
 | | Run Keyword If | '${dut2_status}' == 'PASS'
-| | ... | Add Ip Neighbor | ${dut2} | ${dut2_if1} | 2001:4::1 | ${dut1_if2_mac}
-| | Add Ip Neighbor | ${dut} | ${dut_if2} | 2001:5::2 | ${tg1_if2_mac}
+| | ... | VPP Add Ip Neighbor
+| | ... | ${dut2} | ${dut2_if1} | 2001:4::1 | ${dut1_if2_mac}
+| | VPP Add IP Neighbor | ${dut} | ${dut_if2} | 2001:5::2 | ${tg1_if2_mac}
 | | Vpp Route Add | ${dut1} | 2001:1::0 | ${host_prefix} | gateway=2001:3::2
 | | ... | interface=${dut1_if1} | count=${count}
 | | Run Keyword If | '${dut2_status}' == 'PASS'
 | | Vpp Route Add | ${dut1} | 2001:1::0 | ${host_prefix} | gateway=2001:3::2
 | | ... | interface=${dut1_if1} | count=${count}
 | | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Get Interface MAC | ${dut1} | ${dut1_if2}
 | | ${dut2_if1_mac}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Get Interface MAC | ${dut2} | ${dut2_if1}
 | | ... | Get Interface MAC | ${dut1} | ${dut1_if2}
 | | ${dut2_if1_mac}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Get Interface MAC | ${dut2} | ${dut2_if1}
-| | Add Ip Neighbor | ${dut1} | ${dut1_if1} | 2002:1::1 | ${tg1_if1_mac}
+| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 2002:1::1 | ${tg1_if1_mac}
 | | Run Keyword If | '${dut2_status}' == 'PASS'
 | | Run Keyword If | '${dut2_status}' == 'PASS'
-| | ... | Add Ip Neighbor | ${dut1} | ${subif_index_1} | 2002:2::2
-| | ... | ${dut2_if1_mac}
+| | ... | VPP Add Ip Neighbor
+| | ... | ${dut1} | ${subif_index_1} | 2002:2::2 | ${dut2_if1_mac}
 | | Run Keyword If | '${dut2_status}' == 'PASS'
 | | Run Keyword If | '${dut2_status}' == 'PASS'
-| | ... | Add Ip Neighbor | ${dut2} | ${subif_index_2} | 2002:2::1
-| | ... | ${dut1_if2_mac}
+| | ... | VPP Add Ip Neighbor
+| | ... | ${dut2} | ${subif_index_2} | 2002:2::1 | ${dut1_if2_mac}
 | | ${dut}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Set Variable | ${dut2}
 | | ... | ELSE | Set Variable | ${dut1}
 | | ${dut_if2}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Set Variable | ${dut2_if2}
 | | ... | ELSE | Set Variable | ${subif_index_1}
 | | ${dut}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Set Variable | ${dut2}
 | | ... | ELSE | Set Variable | ${dut1}
 | | ${dut_if2}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Set Variable | ${dut2_if2}
 | | ... | ELSE | Set Variable | ${subif_index_1}
-| | Add Ip Neighbor | ${dut} | ${dut_if2} | 2002:3::1 | ${tg1_if2_mac}
-| | VPP Set If IPv6 Addr | ${dut1} | ${dut1_if1} | 2002:1::2 | ${prefix}
+| | VPP Add IP Neighbor | ${dut} | ${dut_if2} | 2002:3::1 | ${tg1_if2_mac}
+| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 2002:1::2 | ${prefix}
 | | Run Keyword If | '${dut2_status}' == 'PASS'
 | | Run Keyword If | '${dut2_status}' == 'PASS'
-| | ... | VPP Set If IPv6 Addr | ${dut1} | ${subif_index_1} | 2002:2::1
+| | ... | VPP Interface Set IP Address | ${dut1} | ${subif_index_1} | 2002:2::1
 | | ... | ${prefix}
 | | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | ${prefix}
 | | Run Keyword If | '${dut2_status}' == 'PASS'
-| | ... | VPP Set If IPv6 Addr | ${dut2} | ${subif_index_2} | 2002:2::2
+| | ... | VPP Interface Set IP Address | ${dut2} | ${subif_index_2} | 2002:2::2
 | | ... | ${prefix}
 | | ... | ${prefix}
-| | VPP Set If IPv6 Addr | ${dut} | ${dut_if2} | 2002:3::2 | ${prefix}
+| | VPP Interface Set IP Address | ${dut} | ${dut_if2} | 2002:3::2 | ${prefix}
 | | Suppress ICMPv6 router advertisement message | ${nodes}
 | | Vpp Route Add | ${dut1} | ${tg_if1_net} | ${host_prefix}
 | | ... | gateway=2002:1::1 | interface=${dut1_if1}
 | | Suppress ICMPv6 router advertisement message | ${nodes}
 | | Vpp Route Add | ${dut1} | ${tg_if1_net} | ${host_prefix}
 | | ... | gateway=2002:1::1 | interface=${dut1_if1}
 | | ${tg1_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
 | | ${dut1_if2_mac}= | Get Interface MAC | ${dut1} | ${dut1_if2}
 | | ${dut2_if1_mac}= | Get Interface MAC | ${dut2} | ${dut2_if1}
 | | ${tg1_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
 | | ${dut1_if2_mac}= | Get Interface MAC | ${dut1} | ${dut1_if2}
 | | ${dut2_if1_mac}= | Get Interface MAC | ${dut2} | ${dut2_if1}
-| | VPP Set If IPv6 Addr | ${dut1} | ${dut1_if1} | ${dut1_if1_ip6} | ${prefix}
-| | VPP Set If IPv6 Addr | ${dut1} | ${dut1_if2} | ${dut1_if2_ip6} | ${prefix}
-| | VPP Set If IPv6 Addr | ${dut2} | ${dut2_if1} | ${dut2_if1_ip6} | ${prefix}
-| | VPP Set If IPv6 Addr | ${dut2} | ${dut2_if2} | ${dut2_if2_ip6} | ${prefix}
+| | VPP Interface Set IP Address
+| | ... | ${dut1} | ${dut1_if1} | ${dut1_if1_ip6} | ${prefix}
+| | VPP Interface Set IP Address
+| | ... | ${dut1} | ${dut1_if2} | ${dut1_if2_ip6} | ${prefix}
+| | VPP Interface Set IP Address
+| | ... | ${dut2} | ${dut2_if1} | ${dut2_if1_ip6} | ${prefix}
+| | VPP Interface Set IP Address
+| | ... | ${dut2} | ${dut2_if2} | ${dut2_if2_ip6} | ${prefix}
 | | Suppress ICMPv6 router advertisement message | ${nodes}
 | | :FOR | ${number} | IN RANGE | 2 | ${dst_addr_nr}+2
 | | | ${hexa_nr}= | Convert To Hex | ${number}
 | | Suppress ICMPv6 router advertisement message | ${nodes}
 | | :FOR | ${number} | IN RANGE | 2 | ${dst_addr_nr}+2
 | | | ${hexa_nr}= | Convert To Hex | ${number}
-| | | Add Ip Neighbor | ${dut1} | ${dut1_if1} | ${tg_if1_ip6_subnet}${hexa_nr}
-| | | ... | ${tg1_if1_mac}
-| | | Add Ip Neighbor | ${dut2} | ${dut2_if2} | ${tg_if2_ip6_subnet}${hexa_nr}
-| | | ... | ${tg1_if2_mac}
-| | Add Ip Neighbor | ${dut1} | ${dut1_if2} | ${dut2_if1_ip6} | ${dut2_if1_mac}
-| | Add Ip Neighbor | ${dut2} | ${dut2_if1} | ${dut1_if2_ip6} | ${dut1_if2_mac}
+| | | VPP Add IP Neighbor | ${dut1}
+| | | ... | ${dut1_if1} | ${tg_if1_ip6_subnet}${hexa_nr} | ${tg1_if1_mac}
+| | | VPP Add IP Neighbor | ${dut2}
+| | | ... | ${dut2_if2} | ${tg_if2_ip6_subnet}${hexa_nr} | ${tg1_if2_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut1} | ${dut1_if2} | ${dut2_if1_ip6} | ${dut2_if1_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut2} | ${dut2_if1} | ${dut1_if2_ip6} | ${dut1_if2_mac}
 | | ${sid1}= | Set Variable If
 | | ... | "${n}" == "1" | ${dut2_sid1}
 | | ... | "${n}" == "2" | ${dut2_sid1_1}
 | | ${sid1}= | Set Variable If
 | | ... | "${n}" == "1" | ${dut2_sid1}
 | | ... | "${n}" == "2" | ${dut2_sid1_1}
 | | ${duts}= | Get Matches | ${nodes} | DUT*
 | | :FOR | ${dut} | IN | @{duts}
 | | | Show Memif | ${nodes['${dut}']}
 | | ${duts}= | Get Matches | ${nodes} | DUT*
 | | :FOR | ${dut} | IN | @{duts}
 | | | Show Memif | ${nodes['${dut}']}
-| | VPP Set If IPv6 Addr | ${dut1} | ${dut1_if1} | ${dut1_if1_ip6} | ${prefix}
-| | VPP Set If IPv6 Addr | ${dut1} | ${dut1_if2} | ${dut1_if2_ip6} | ${prefix}
-| | VPP Set If IPv6 Addr | ${dut1} | ${dut1-memif-1-if1}
+| | VPP Interface Set IP Address
+| | ... | ${dut1} | ${dut1_if1} | ${dut1_if1_ip6} | ${prefix}
+| | VPP Interface Set IP Address
+| | ... | ${dut1} | ${dut1_if2} | ${dut1_if2_ip6} | ${prefix}
+| | VPP Interface Set IP Address | ${dut1} | ${dut1-memif-1-if1}
 | | ... | ${dut1-memif-1-if1_ip6} | ${prefix}
 | | ... | ${dut1-memif-1-if1_ip6} | ${prefix}
-| | VPP Set If IPv6 Addr | ${dut1} | ${dut1-memif-1-if2}
+| | VPP Interface Set IP Address | ${dut1} | ${dut1-memif-1-if2}
 | | ... | ${dut1-memif-1-if2_ip6} | ${prefix}
 | | ... | ${dut1-memif-1-if2_ip6} | ${prefix}
-| | VPP Set If IPv6 Addr | ${dut2} | ${dut2_if1} | ${dut2_if1_ip6} | ${prefix}
-| | VPP Set If IPv6 Addr | ${dut2} | ${dut2_if2} | ${dut2_if2_ip6} | ${prefix}
-| | VPP Set If IPv6 Addr | ${dut2} | ${dut2-memif-1-if1}
+| | VPP Interface Set IP Address
+| | ... | ${dut2} | ${dut2_if1} | ${dut2_if1_ip6} | ${prefix}
+| | VPP Interface Set IP Address
+| | ... | ${dut2} | ${dut2_if2} | ${dut2_if2_ip6} | ${prefix}
+| | VPP Interface Set IP Address | ${dut2} | ${dut2-memif-1-if1}
 | | ... | ${dut2-memif-1-if1_ip6} | ${prefix}
 | | ... | ${dut2-memif-1-if1_ip6} | ${prefix}
-| | VPP Set If IPv6 Addr | ${dut2} | ${dut2-memif-1-if2}
+| | VPP Interface Set IP Address | ${dut2} | ${dut2-memif-1-if2}
 | | ... | ${dut2-memif-1-if2_ip6} | ${prefix}
 | | Suppress ICMPv6 router advertisement message | ${nodes}
 | | ... | ${dut2-memif-1-if2_ip6} | ${prefix}
 | | Suppress ICMPv6 router advertisement message | ${nodes}
-| | Add Ip Neighbor | ${dut1} | ${dut1_if2} | ${dut2_if1_ip6} | ${dut2_if1_mac}
-| | Add Ip Neighbor | ${dut2} | ${dut2_if1} | ${dut1_if2_ip6} | ${dut1_if2_mac}
-| | Add Ip Neighbor | ${dut1} | ${dut1_if1} | ${tg_if1_ip6_subnet}2
-| | ... | ${tg1_if1_mac}
-| | Add Ip Neighbor | ${dut2} | ${dut2_if2} | ${tg_if2_ip6_subnet}2
-| | ... | ${tg1_if2_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut1} | ${dut1_if2} | ${dut2_if1_ip6} | ${dut2_if1_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut2} | ${dut2_if1} | ${dut1_if2_ip6} | ${dut1_if2_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut1} | ${dut1_if1} | ${tg_if1_ip6_subnet}2 | ${tg1_if1_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut2} | ${dut2_if2} | ${tg_if2_ip6_subnet}2 | ${tg1_if2_mac}
 | | ${dut1-memif-1-if2_mac}= | Get Interface MAC | ${dut1} | memif2
 | | ${dut2-memif-1-if2_mac}= | Get Interface MAC | ${dut2} | memif2
 | | ${dut1-memif-1-if2_mac}= | Get Interface MAC | ${dut1} | memif2
 | | ${dut2-memif-1-if2_mac}= | Get Interface MAC | ${dut2} | memif2
-| | Add Ip Neighbor | ${dut1} | ${dut1-memif-1-if1} | ${dut1_nh}
-| | ... | ${dut1-memif-1-if2_mac}
-| | Add Ip Neighbor | ${dut2} | ${dut2-memif-1-if1} | ${dut2_nh}
-| | ... | ${dut2-memif-1-if2_mac}
+| | VPP Add IP Neighbor | ${dut1}
+| | ... | ${dut1-memif-1-if1} | ${dut1_nh} | ${dut1-memif-1-if2_mac}
+| | VPP Add IP Neighbor | ${dut2}
+| | ... | ${dut2-memif-1-if1} | ${dut2_nh} | ${dut2-memif-1-if2_mac}
 | | Vpp Route Add | ${dut1} | ${dut2_sid1} | ${sid_prefix}
 | | ... | gateway=${dut2_if1_ip6} | interface=${dut1_if2}
 | | Vpp Route Add | ${dut1} | ${out_sid2_1} | ${sid_prefix}
 | | Vpp Route Add | ${dut1} | ${dut2_sid1} | ${sid_prefix}
 | | ... | gateway=${dut2_if1_ip6} | interface=${dut1_if2}
 | | Vpp Route Add | ${dut1} | ${out_sid2_1} | ${sid_prefix}
 | | ... | interfaces.
 | | ...
 | | Set interfaces in path up
 | | ... | interfaces.
 | | ...
 | | Set interfaces in path up
-| | Configure IP addresses on interfaces | ${dut1} | ${dut1_if2} | 172.16.0.1 | 24
-| | Configure IP addresses on interfaces | ${dut2} | ${dut2_if1} | 172.16.0.2 | 24
+| | VPP Interface Set IP Address | ${dut1} | ${dut1_if2} | 172.16.0.1 | 24
+| | VPP Interface Set IP Address | ${dut2} | ${dut2_if1} | 172.16.0.2 | 24
 | | ${dut1_if2_mac}= | Get Interface MAC | ${dut1} | ${dut1_if2}
 | | ${dut2_if1_mac}= | Get Interface MAC | ${dut2} | ${dut2_if1}
 | | ${dut1_if2_mac}= | Get Interface MAC | ${dut1} | ${dut1_if2}
 | | ${dut2_if1_mac}= | Get Interface MAC | ${dut2} | ${dut2_if1}
-| | Add arp on dut | ${dut1} | ${dut1_if2} | 172.16.0.2 | ${dut2_if1_mac}
-| | Add arp on dut | ${dut2} | ${dut2_if1} | 172.16.0.1 | ${dut1_if2_mac}
+| | VPP Add IP Neighbor | ${dut1} | ${dut1_if2} | 172.16.0.2 | ${dut2_if1_mac}
+| | VPP Add IP Neighbor | ${dut2} | ${dut2_if1} | 172.16.0.1 | ${dut1_if2_mac}
 | | ${dut1s_vxlan}= | Create VXLAN interface | ${dut1} | 24
 | | ... | 172.16.0.1 | 172.16.0.2
 | | Configure L2XC | ${dut1} | ${dut1_if1} | ${dut1s_vxlan}
 | | ${dut1s_vxlan}= | Create VXLAN interface | ${dut1} | 24
 | | ... | 172.16.0.1 | 172.16.0.2
 | | Configure L2XC | ${dut1} | ${dut1_if1} | ${dut1s_vxlan}
 | | ... | Get Interface MAC | ${dut2} | ${dut2_if1}
 | | ...
 | | :FOR | ${number} | IN RANGE | 2 | ${ip_nr}+2
 | | ... | Get Interface MAC | ${dut2} | ${dut2_if1}
 | | ...
 | | :FOR | ${number} | IN RANGE | 2 | ${ip_nr}+2
-| | | Add arp on dut | ${dut1} | ${dut1_if1} | 10.10.10.${number}
-| | | ... | ${tg1_if1_mac}
-| | | Add arp on dut | ${dut} | ${dut_if2} | 20.20.20.${number}
-| | | ... | ${tg1_if2_mac}
+| | | VPP Add IP Neighbor
+| | | ... | ${dut1} | ${dut1_if1} | 10.10.10.${number} | ${tg1_if1_mac}
+| | | VPP Add IP Neighbor
+| | | ... | ${dut} | ${dut_if2} | 20.20.20.${number} | ${tg1_if2_mac}
 | | Run Keyword If | '${dut2_status}' == 'PASS'
 | | Run Keyword If | '${dut2_status}' == 'PASS'
-| | ... | Add arp on dut | ${dut1} | ${dut1_if2} | 1.1.1.2 | ${dut2_if1_mac}
+| | ... | VPP Add IP Neighbor
+| | ... | ${dut1} | ${dut1_if2} | 1.1.1.2 | ${dut2_if1_mac}
 | | Run Keyword If | '${dut2_status}' == 'PASS'
 | | Run Keyword If | '${dut2_status}' == 'PASS'
-| | ... | Add arp on dut | ${dut2} | ${dut2_if1} | 1.1.1.1 | ${dut1_if2_mac}
+| | ... | VPP Add IP Neighbor
+| | ... | ${dut2} | ${dut2_if1} | 1.1.1.1 | ${dut1_if2_mac}
 | | ...
 | | Configure IP addresses on interfaces
 | | ... | ${dut1} | ${dut1_if1} | 10.10.10.1 | 24
 | | ...
 | | Configure IP addresses on interfaces
 | | ... | ${dut1} | ${dut1_if1} | 10.10.10.1 | 24
 | | ... | 24
 | | ${dut1_if2_mac}= | Get Interface MAC | ${dut1} | ${dut1_if2}
 | | ${dut2_if1_mac}= | Get Interface MAC | ${dut2} | ${dut2_if1}
 | | ... | 24
 | | ${dut1_if2_mac}= | Get Interface MAC | ${dut1} | ${dut1_if2}
 | | ${dut2_if1_mac}= | Get Interface MAC | ${dut2} | ${dut2_if1}
-| | Add arp on dut | ${dut1} | ${dut1_if2} | 172.16.0.2 | ${dut2_if1_mac}
-| | Add arp on dut | ${dut2} | ${dut2_if1} | 172.16.0.1 | ${dut1_if2_mac}
+| | VPP Add IP Neighbor | ${dut1} | ${dut1_if2} | 172.16.0.2 | ${dut2_if1_mac}
+| | VPP Add IP Neighbor | ${dut2} | ${dut2_if1} | 172.16.0.1 | ${dut1_if2_mac}
 | | ${dut1s_vxlan}= | Create VXLAN interface | ${dut1} | 24
 | | ... | 172.16.0.1 | 172.16.0.2
 | | ${dut2s_vxlan}= | Create VXLAN interface | ${dut2} | 24
 | | ${dut1s_vxlan}= | Create VXLAN interface | ${dut1} | 24
 | | ... | 172.16.0.1 | 172.16.0.2
 | | ${dut2s_vxlan}= | Create VXLAN interface | ${dut2} | 24
 | | | Add interface to bridge domain | ${dut2} | ${dut2s_vxlan} | ${dut2_bd_id1}
 | | ${tg_if1_mac}= | Get Interface MAC | ${tg} | ${tg_if1}
 | | ${tg_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
 | | | Add interface to bridge domain | ${dut2} | ${dut2s_vxlan} | ${dut2_bd_id1}
 | | ${tg_if1_mac}= | Get Interface MAC | ${tg} | ${tg_if1}
 | | ${tg_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
-| | Add arp on dut | ${dut1} | ${dut1_if1} | ${dut1_gw} | ${tg_if1_mac}
-| | Add arp on dut | ${dut2} | ${dut2_if2} | ${dut2_gw} | ${tg_if2_mac}
+| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | ${dut1_gw} | ${tg_if1_mac}
+| | VPP Add IP Neighbor | ${dut2} | ${dut2_if2} | ${dut2_gw} | ${tg_if2_mac}
 | | Vpp Route Add | ${dut1} | ${dut1_route_subnet} | ${dut1_route_mask}
 | | ... | gateway=${dut1_gw} | interface=${dut1_if1}
 | | Vpp Route Add | ${dut2} | ${dut2_route_subnet} | ${dut2_route_mask}
 | | Vpp Route Add | ${dut1} | ${dut1_route_subnet} | ${dut1_route_mask}
 | | ... | gateway=${dut1_gw} | interface=${dut1_if1}
 | | Vpp Route Add | ${dut2} | ${dut2_route_subnet} | ${dut2_route_mask}
 | | ...
 | | ${duts}= | Get Matches | ${nodes} | DUT*
 | | :FOR | ${dut} | IN | @{duts}
 | | ...
 | | ${duts}= | Get Matches | ${nodes} | DUT*
 | | :FOR | ${dut} | IN | @{duts}
-| | | ${if1_pci}= |  Get Interface PCI Addr | ${nodes['${dut}']} | ${${dut}_if1}
+| | | ${if1_pci}= | Get Interface PCI Addr | ${nodes['${dut}']} | ${${dut}_if1}
 | | | Run keyword | ${dut}.Add DPDK Dev | ${if1_pci}
 | | | Set Test Variable | ${${dut}_if1_pci} | ${if1_pci}
 
 | | | Run keyword | ${dut}.Add DPDK Dev | ${if1_pci}
 | | | Set Test Variable | ${${dut}_if1_pci} | ${if1_pci}
 
 | | ${tg1_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
 | | ${dut1_if2_mac}= | Get Interface MAC | ${dut1} | ${dut1_if2}
 | | ${dut2_if1_mac}= | Get Interface MAC | ${dut2} | ${dut2_if1}
 | | ${tg1_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
 | | ${dut1_if2_mac}= | Get Interface MAC | ${dut1} | ${dut1_if2}
 | | ${dut2_if1_mac}= | Get Interface MAC | ${dut2} | ${dut2_if1}
-| | Add arp on dut | ${dut1} | ${dut1_if1} | 10.10.10.2 | ${tg1_if1_mac}
-| | Add arp on dut | ${dut1} | ${dut1_if2} | ${dut2_dut1_address}
-| | ... | ${dut2_if1_mac}
-| | Add arp on dut | ${dut2} | ${dut2_if1} | ${dut1_dut2_address}
-| | ... | ${dut1_if2_mac}
-| | Add arp on dut | ${dut2} | ${dut2_if2} | 20.20.20.2 | ${tg1_if2_mac}
+| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 10.10.10.2 | ${tg1_if1_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut1} | ${dut1_if2} | ${dut2_dut1_address} | ${dut2_if1_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut2} | ${dut2_if1} | ${dut1_dut2_address} | ${dut1_if2_mac}
+| | VPP Add IP Neighbor | ${dut2} | ${dut2_if2} | 20.20.20.2 | ${tg1_if2_mac}
 | | Configure IP addresses on interfaces | ${dut1} | ${dut1_if1}
 | | ... | ${dut1_tg_address} | ${duts_prefix}
 | | Configure IP addresses on interfaces | ${dut1} | ${dut1_if2}
 | | Configure IP addresses on interfaces | ${dut1} | ${dut1_if1}
 | | ... | ${dut1_tg_address} | ${duts_prefix}
 | | Configure IP addresses on interfaces | ${dut1} | ${dut1_if2}
 | | ${tg1_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
 | | ${dut1_if2_mac}= | Get Interface MAC | ${dut1} | ${dut1_if2}
 | | ${dut2_if1_mac}= | Get Interface MAC | ${dut2} | ${dut2_if1}
 | | ${tg1_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
 | | ${dut1_if2_mac}= | Get Interface MAC | ${dut1} | ${dut1_if2}
 | | ${dut2_if1_mac}= | Get Interface MAC | ${dut2} | ${dut2_if1}
-| | VPP Set If IPv6 Addr | ${dut1} | ${dut1_if1} | ${dut1_tg_address}
-| | ... | ${prefix}
-| | VPP Set If IPv6 Addr | ${dut1} | ${dut1_if2} | ${dut1_dut2_address}
-| | ... | ${prefix}
-| | VPP Set If IPv6 Addr | ${dut2} | ${dut2_if1} | ${dut2_dut1_address}
-| | ... | ${prefix}
-| | VPP Set If IPv6 Addr | ${dut2} | ${dut2_if2} | ${dut2_tg_address}
-| | ... | ${prefix}
+| | VPP Interface Set IP Address
+| | ... | ${dut1} | ${dut1_if1} | ${dut1_tg_address} | ${prefix}
+| | VPP Interface Set IP Address
+| | ... | ${dut1} | ${dut1_if2} | ${dut1_dut2_address} | ${prefix}
+| | VPP Interface Set IP Address
+| | ... | ${dut2} | ${dut2_if1} | ${dut2_dut1_address} | ${prefix}
+| | VPP Interface Set IP Address
+| | ... | ${dut2} | ${dut2_if2} | ${dut2_tg_address} | ${prefix}
 | | Suppress ICMPv6 router advertisement message | ${nodes}
 | | Suppress ICMPv6 router advertisement message | ${nodes}
-| | Add Ip Neighbor | ${dut1} | ${dut1_if1} | 2001:1::2 | ${tg1_if1_mac}
-| | Add Ip Neighbor | ${dut2} | ${dut2_if2} | 2001:2::2 | ${tg1_if2_mac}
-| | Add Ip Neighbor | ${dut1} | ${dut1_if2} | ${dut2_dut1_address}
-| | ... | ${dut2_if1_mac}
-| | Add Ip Neighbor | ${dut2} | ${dut2_if1} | ${dut1_dut2_address}
-| | ... | ${dut1_if2_mac}
+| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 2001:1::2 | ${tg1_if1_mac}
+| | VPP Add IP Neighbor | ${dut2} | ${dut2_if2} | 2001:2::2 | ${tg1_if2_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut1} | ${dut1_if2} | ${dut2_dut1_address} | ${dut2_if1_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut2} | ${dut2_if1} | ${dut1_dut2_address} | ${dut1_if2_mac}
 
 | Initialize LISP IPv4 over IPv6 forwarding in 3-node circular topology
 | | [Documentation] | Custom setup of IPv4 over IPv6 topology on all DUT nodes \
 
 | Initialize LISP IPv4 over IPv6 forwarding in 3-node circular topology
 | | [Documentation] | Custom setup of IPv4 over IPv6 topology on all DUT nodes \
 | | ${dut2_if1_mac}= | Get Interface MAC | ${dut2} | ${dut2_if1}
 | | Configure IP addresses on interfaces | ${dut1} | ${dut1_if1}
 | | ... | ${dut1_tg_ip4_address} | ${prefix4}
 | | ${dut2_if1_mac}= | Get Interface MAC | ${dut2} | ${dut2_if1}
 | | Configure IP addresses on interfaces | ${dut1} | ${dut1_if1}
 | | ... | ${dut1_tg_ip4_address} | ${prefix4}
-| | VPP Set If IPv6 Addr | ${dut1} | ${dut1_if2} | ${dut1_dut2_ip6_address}
-| | ... | ${prefix6}
-| | VPP Set If IPv6 Addr | ${dut2} | ${dut2_if1} | ${dut2_dut1_ip6_address}
-| | ... | ${prefix6}
+| | VPP Interface Set IP Address
+| | ... | ${dut1} | ${dut1_if2} | ${dut1_dut2_ip6_address} | ${prefix6}
+| | VPP Interface Set IP Address
+| | ... | ${dut2} | ${dut2_if1} | ${dut2_dut1_ip6_address} | ${prefix6}
 | | Configure IP addresses on interfaces | ${dut2} | ${dut2_if2}
 | | ... | ${dut2_tg_ip4_address} | ${prefix4}
 | | Suppress ICMPv6 router advertisement message | ${nodes}
 | | Configure IP addresses on interfaces | ${dut2} | ${dut2_if2}
 | | ... | ${dut2_tg_ip4_address} | ${prefix4}
 | | Suppress ICMPv6 router advertisement message | ${nodes}
-| | Add arp on dut | ${dut1} | ${dut1_if1} | 10.10.10.2 | ${tg1_if1_mac}
-| | Add arp on dut | ${dut2} | ${dut2_if2} | 20.20.20.2 | ${tg1_if2_mac}
-| | Add Ip Neighbor | ${dut1} | ${dut1_if2} | ${dut2_dut1_ip6_address}
-| | ... | ${dut2_if1_mac}
-| | Add Ip Neighbor | ${dut2} | ${dut2_if1} | ${dut1_dut2_ip6_address}
-| | ... | ${dut1_if2_mac}
+| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 10.10.10.2 | ${tg1_if1_mac}
+| | VPP Add IP Neighbor | ${dut2} | ${dut2_if2} | 20.20.20.2 | ${tg1_if2_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut1} | ${dut1_if2} | ${dut2_dut1_ip6_address} | ${dut2_if1_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut2} | ${dut2_if1} | ${dut1_dut2_ip6_address} | ${dut1_if2_mac}
 
 | Initialize LISP IPv6 over IPv4 forwarding in 3-node circular topology
 | | [Documentation] | Custom setup of IPv4 over IPv6 topology on all DUT nodes \
 
 | Initialize LISP IPv6 over IPv4 forwarding in 3-node circular topology
 | | [Documentation] | Custom setup of IPv4 over IPv6 topology on all DUT nodes \
 | | ${tg1_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
 | | ${dut1_if2_mac}= | Get Interface MAC | ${dut1} | ${dut1_if2}
 | | ${dut2_if1_mac}= | Get Interface MAC | ${dut2} | ${dut2_if1}
 | | ${tg1_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
 | | ${dut1_if2_mac}= | Get Interface MAC | ${dut1} | ${dut1_if2}
 | | ${dut2_if1_mac}= | Get Interface MAC | ${dut2} | ${dut2_if1}
-| | VPP Set If IPv6 Addr | ${dut1} | ${dut1_if1} | ${dut1_tg_ip6_address}
-| | ... | ${prefix6}
-| | Configure IP addresses on interfaces | ${dut1} | ${dut1_if2}
-| | ... | ${dut1_dut2_ip4_address} | ${prefix4}
-| | Configure IP addresses on interfaces | ${dut2} | ${dut2_if1}
-| | ... | ${dut2_dut1_ip4_address} | ${prefix4}
-| | VPP Set If IPv6 Addr | ${dut2} | ${dut2_if2} | ${dut2_tg_ip6_address}
-| | ... | ${prefix6}
+| | VPP Interface Set IP Address
+| | ... | ${dut1} | ${dut1_if1} | ${dut1_tg_ip6_address} | ${prefix6}
+| | VPP Interface Set IP Address
+| | ... | ${dut1} | ${dut1_if2} | ${dut1_dut2_ip4_address} | ${prefix4}
+| | VPP Interface Set IP Address
+| | ... | ${dut2} | ${dut2_if1} | ${dut2_dut1_ip4_address} | ${prefix4}
+| | VPP Interface Set IP Address
+| | ... | ${dut2} | ${dut2_if2} | ${dut2_tg_ip6_address} | ${prefix6}
 | | Suppress ICMPv6 router advertisement message | ${nodes}
 | | Suppress ICMPv6 router advertisement message | ${nodes}
-| | Add Ip Neighbor | ${dut1} | ${dut1_if1} | 2001:1::2 | ${tg1_if1_mac}
-| | Add Ip Neighbor | ${dut2} | ${dut2_if2} | 2001:2::2 | ${tg1_if2_mac}
-| | Add arp on dut | ${dut1} | ${dut1_if2} | ${dut2_dut1_ip4_address}
-| | ... | ${dut2_if1_mac}
-| | Add arp on dut | ${dut2} | ${dut2_if1} | ${dut1_dut2_ip4_address}
-| | ... | ${dut1_if2_mac}
+| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 2001:1::2 | ${tg1_if1_mac}
+| | VPP Add IP Neighbor | ${dut2} | ${dut2_if2} | 2001:2::2 | ${tg1_if2_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut1} | ${dut1_if2} | ${dut2_dut1_ip4_address} | ${dut2_if1_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut2} | ${dut2_if1} | ${dut1_dut2_ip4_address} | ${dut1_if2_mac}
 
 | Initialize NAT44 in circular topology
 | | [Documentation] | Initialization of 2-node / 3-node topology with NAT44
 
 | Initialize NAT44 in circular topology
 | | [Documentation] | Initialization of 2-node / 3-node topology with NAT44
 | | ...
 | | Configure IP addresses on interfaces | ${dut1} | ${dut1_if1} | 10.0.0.1 | 20
 | | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ...
 | | Configure IP addresses on interfaces | ${dut1} | ${dut1_if1} | 10.0.0.1 | 20
 | | Run Keyword If | '${dut2_status}' == 'PASS'
-| | ... | Configure IP addresses on interfaces | ${dut1} | ${dut1_if2} | 11.0.0.1 | 20
+| | ... | Configure IP addresses on interfaces | ${dut1} | ${dut1_if2}
+| | ... | 11.0.0.1 | 20
 | | Run Keyword If | '${dut2_status}' == 'PASS'
 | | Run Keyword If | '${dut2_status}' == 'PASS'
-| | ... | Configure IP addresses on interfaces | ${dut2} | ${dut2_if1} | 11.0.0.2 | 20
+| | ... | Configure IP addresses on interfaces | ${dut2} | ${dut2_if1}
+| | ... | 11.0.0.2 | 20
 | | ${dut}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Set Variable | ${dut2}
 | | ... | ELSE | Set Variable | ${dut1}
 | | ${dut}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Set Variable | ${dut2}
 | | ... | ELSE | Set Variable | ${dut1}
 | | ${dut2_if1_mac}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Get Interface MAC | ${dut2} | ${dut2_if1}
 | | ...
 | | ${dut2_if1_mac}= | Run Keyword If | '${dut2_status}' == 'PASS'
 | | ... | Get Interface MAC | ${dut2} | ${dut2_if1}
 | | ...
-| | Add arp on dut | ${dut1} | ${dut1_if1} | 10.0.0.2 | ${tg_if1_mac}
+| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 10.0.0.2 | ${tg_if1_mac}
 | | Run Keyword If | '${dut2_status}' == 'PASS'
 | | Run Keyword If | '${dut2_status}' == 'PASS'
-| | ... | Add arp on dut | ${dut1} | ${dut1_if2} | 11.0.0.2 | ${dut2_if1_mac}
+| | ... | VPP Add IP Neighbor
+| | ... | ${dut1} | ${dut1_if2} | 11.0.0.2 | ${dut2_if1_mac}
 | | Run Keyword If | '${dut2_status}' == 'PASS'
 | | Run Keyword If | '${dut2_status}' == 'PASS'
-| | ... | Add arp on dut | ${dut2} | ${dut2_if1} | 11.0.0.1 | ${dut1_if2_mac}
-| | Add arp on dut | ${dut} | ${dut_if2} | 12.0.0.2 | ${tg_if2_mac}
+| | ... | VPP Add IP Neighbor
+| | ... | ${dut2} | ${dut2_if1} | 11.0.0.1 | ${dut1_if2_mac}
+| | VPP Add IP Neighbor | ${dut} | ${dut_if2} | 12.0.0.2 | ${tg_if2_mac}
 | | ...
 | | Vpp Route Add | ${dut1} | 20.0.0.0 | 18 | gateway=10.0.0.2
 | | ... | interface=${dut1_if1}
 | | ...
 | | Vpp Route Add | ${dut1} | 20.0.0.0 | 18 | gateway=10.0.0.2
 | | ... | interface=${dut1_if1}
 | | ... | ELSE | Set Variable | if2
 | | ${prev_if_mac}= | Get Interface MAC | ${nodes['${prev_node}']}
 | | ... | ${${prev_node}_${prev_if}}
 | | ... | ELSE | Set Variable | if2
 | | ${prev_if_mac}= | Get Interface MAC | ${nodes['${prev_node}']}
 | | ... | ${${prev_node}_${prev_if}}
-| | Add ARP on DUT | ${nodes['${dut}']} | ${${dut}_if1} | ${ip_net_if1}.1
-| | ... | ${prev_if_mac}
+| | VPP Add IP Neighbor
+| | ... | ${nodes['${dut}']} | ${${dut}_if1} | ${ip_net_if1}.1 | ${prev_if_mac}
 | | ...
 | | ${fib_table_2}= | Evaluate | ${fib_table_1} + ${count}
 | | Add Fib Table | ${nodes['${dut}']} | ${fib_table_2}
 | | ...
 | | ${fib_table_2}= | Evaluate | ${fib_table_1} + ${count}
 | | Add Fib Table | ${nodes['${dut}']} | ${fib_table_2}
 | | ... | ELSE | Set Variable | if1
 | | ${next_if_mac}= | Get Interface MAC | ${nodes['${next_node}']}
 | | ... | ${${next_node}_${next_if}}
 | | ... | ELSE | Set Variable | if1
 | | ${next_if_mac}= | Get Interface MAC | ${nodes['${next_node}']}
 | | ... | ${${next_node}_${next_if}}
-| | Add ARP on DUT | ${nodes['${dut}']} | ${${dut}_if2} | ${ip_net_if2}.2
-| | ... | ${next_if_mac}
+| | VPP Add IP Neighbor
+| | ... | ${nodes['${dut}']} | ${${dut}_if2} | ${ip_net_if2}.2 | ${next_if_mac}
 | | ...
 | | ${fib_table_1}= | Evaluate | ${fib_table_1} - ${1}
 | | ${ip_base_start}= | Set Variable | ${31}
 | | ...
 | | ${fib_table_1}= | Evaluate | ${fib_table_1} - ${1}
 | | ${ip_base_start}= | Set Variable | ${31}
 | | | ... | ${memif2}
 | | | ${memif_if2_mac}= | Get interface mac | ${nodes['${dut}']}
 | | | ... | ${memif_if2_key}
 | | | ... | ${memif2}
 | | | ${memif_if2_mac}= | Get interface mac | ${nodes['${dut}']}
 | | | ... | ${memif_if2_key}
-| | | Add arp on dut | ${nodes['${dut}']} | ${memif1} | ${ip_net_memif2}.1
-| | | ... | ${memif_if2_mac}
-| | | Add arp on dut | ${nodes['${dut}']} | ${memif2} | ${ip_net_memif1}.1
-| | | ... | ${memif_if1_mac}
+| | | VPP Add IP Neighbor | ${nodes['${dut}']}
+| | | ... | ${memif1} | ${ip_net_memif2}.1 | ${memif_if2_mac}
+| | | VPP Add IP Neighbor | ${nodes['${dut}']}
+| | | ... | ${memif2} | ${ip_net_memif1}.1 | ${memif_if1_mac}
 
 | Initialize IPv4 routing with memif pairs
 | | [Documentation]
 
 | Initialize IPv4 routing with memif pairs
 | | [Documentation]
index f002850..4ec5496 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 """Traffic keywords"""
 
 *** Settings ***
 """Traffic keywords"""
 
 *** Settings ***
+| Library | resources.libraries.python.InterfaceUtil
 | Library | resources.libraries.python.IPv6Util
 | Library | resources.libraries.python.IPv6Util
-| Library | resources.libraries.python.IPv6Setup
-| Library | resources.libraries.python.TrafficScriptExecutor
 | Library | resources.libraries.python.NodePath
 | Library | resources.libraries.python.NodePath
-| Library | resources.libraries.python.Routing
-| Library | resources.libraries.python.InterfaceUtil
 | Library | resources.libraries.python.topology.Topology
 | Library | resources.libraries.python.topology.Topology
+| Library | resources.libraries.python.TrafficScriptExecutor
+| ...
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/counters.robot
 | ...
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/counters.robot
 | ...
index d2bc41f..8a39a0b 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2018 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
-| Library | resources.libraries.python.IPv4Util.IPv4Util
 | Library | resources.libraries.python.InterfaceUtil
 | Library | resources.libraries.python.InterfaceUtil
+| Library | resources.libraries.python.IPUtil
 | Library | resources.libraries.python.tcp.TCPUtils
 | Library | resources.libraries.python.tcp.TCPUtils
+| ...
 | Resource | resources/libraries/robot/ip/ip4.robot
 | ...
 | Documentation | L2 keywords to set up VPP to test tcp.
 | Resource | resources/libraries/robot/ip/ip4.robot
 | ...
 | Documentation | L2 keywords to set up VPP to test tcp.
 | | [Arguments] | ${prealloc_fifos} | ${fifo_size} | ${private_segment_size}
 | | ...
 | | Set Interface State | ${dut1} | ${dut1_if1} | up
 | | [Arguments] | ${prealloc_fifos} | ${fifo_size} | ${private_segment_size}
 | | ...
 | | Set Interface State | ${dut1} | ${dut1_if1} | up
-| | Set Interface Address | ${dut1} | ${dut1_if1} | 192.168.10.2 | 24
-| | Set Interface Address | ${dut1} | ${dut1_if1} | 192.168.20.2 | 24
-| | Set Interface Address | ${dut1} | ${dut1_if1} | 192.168.30.2 | 24
-| | Set Interface Address | ${dut1} | ${dut1_if1} | 192.168.40.2 | 24
-| | Set Interface Address | ${dut1} | ${dut1_if1} | 192.168.50.2 | 24
-| | Set Interface Address | ${dut1} | ${dut1_if1} | 192.168.60.2 | 24
-| | Set Interface Address | ${dut1} | ${dut1_if1} | 192.168.70.2 | 24
-| | Set Interface Address | ${dut1} | ${dut1_if1} | 192.168.80.2 | 24
+| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 192.168.10.2 | 24
+| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 192.168.20.2 | 24
+| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 192.168.30.2 | 24
+| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 192.168.40.2 | 24
+| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 192.168.50.2 | 24
+| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 192.168.60.2 | 24
+| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 192.168.70.2 | 24
+| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 192.168.80.2 | 24
 | | Vpp Node Interfaces Ready Wait | ${dut1}
 | | Start HTTP server params | ${dut1} | ${prealloc_fifos} | ${fifo_size}
 | | ... | ${private_segment_size}
 | | Vpp Node Interfaces Ready Wait | ${dut1}
 | | Start HTTP server params | ${dut1} | ${prealloc_fifos} | ${fifo_size}
 | | ... | ${private_segment_size}
diff --git a/resources/templates/vat/add_fib_table.vat b/resources/templates/vat/add_fib_table.vat
deleted file mode 100644 (file)
index 2182be4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-ip_table_add_del table {table_id} {ipv6}
diff --git a/resources/templates/vat/add_ip_address.vat b/resources/templates/vat/add_ip_address.vat
deleted file mode 100644 (file)
index d59480c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-sw_interface_add_del_address sw_if_index {sw_if_index} {address}/{prefix_length}
diff --git a/resources/templates/vat/add_ip_neighbor.vat b/resources/templates/vat/add_ip_neighbor.vat
deleted file mode 100644 (file)
index 730e711..0000000
+++ /dev/null
@@ -1 +0,0 @@
-ip_neighbor_add_del sw_if_index {sw_if_index} dst {ip_address} mac {mac_address}
diff --git a/resources/templates/vat/add_l2_fib_entry.vat b/resources/templates/vat/add_l2_fib_entry.vat
deleted file mode 100644 (file)
index 2920c4b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-l2fib_add_del mac {mac} bd_id {bd} sw_if_index {interface}
diff --git a/resources/templates/vat/add_route.vat b/resources/templates/vat/add_route.vat
deleted file mode 100644 (file)
index 64c6a6c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-ip_add_del_route {network}/{prefix_length} {via} {vrf} {interface} {resolve_attempts} {count} {lookup_vrf} {multipath} {weight} {local}
\ No newline at end of file
diff --git a/resources/templates/vat/api_trace_dump.vat b/resources/templates/vat/api_trace_dump.vat
deleted file mode 100644 (file)
index a0f94a3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-exec api trace custom-dump /tmp/csit.api
diff --git a/resources/templates/vat/api_trace_save.vat b/resources/templates/vat/api_trace_save.vat
deleted file mode 100644 (file)
index f3d2fa3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-exec api trace save csit.api
diff --git a/resources/templates/vat/create_avf_interface.vat b/resources/templates/vat/create_avf_interface.vat
deleted file mode 100644 (file)
index ca6e747..0000000
+++ /dev/null
@@ -1 +0,0 @@
-avf_create {vf_pci_addr} {num_rx_queues}
diff --git a/resources/templates/vat/create_bond_interface.vat b/resources/templates/vat/create_bond_interface.vat
deleted file mode 100644 (file)
index 3608f1d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-bond_create {mac} mode {mode} {lb}
\ No newline at end of file
diff --git a/resources/templates/vat/create_gre.vat b/resources/templates/vat/create_gre.vat
deleted file mode 100644 (file)
index af692a7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-exec create gre tunnel src {src} dst {dst}
diff --git a/resources/templates/vat/create_loopback.vat b/resources/templates/vat/create_loopback.vat
deleted file mode 100644 (file)
index 94cfc0d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-create_loopback
diff --git a/resources/templates/vat/create_sub_interface.vat b/resources/templates/vat/create_sub_interface.vat
deleted file mode 100644 (file)
index 6dad081..0000000
+++ /dev/null
@@ -1 +0,0 @@
-create_subif sw_if_index {sw_if_index} sub_id {sub_id} {outer_vlan_id} {inner_vlan_id} {type_subif}
diff --git a/resources/templates/vat/create_vhost_user_if.vat b/resources/templates/vat/create_vhost_user_if.vat
deleted file mode 100644 (file)
index eb6d75a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-create_vhost_user_if socket {sock}
diff --git a/resources/templates/vat/create_vlan_subif.vat b/resources/templates/vat/create_vlan_subif.vat
deleted file mode 100644 (file)
index 6520aef..0000000
+++ /dev/null
@@ -1 +0,0 @@
-create_vlan_subif sw_if_index {sw_if_index} vlan {vlan}
\ No newline at end of file
diff --git a/resources/templates/vat/del_fib_table.vat b/resources/templates/vat/del_fib_table.vat
deleted file mode 100644 (file)
index e287bc4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-ip_table_add_del table {table_id} {ipv6} del
diff --git a/resources/templates/vat/del_ip_address.vat b/resources/templates/vat/del_ip_address.vat
deleted file mode 100644 (file)
index 667ced2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-sw_interface_add_del_address sw_if_index {sw_if_index} {address}/{prefix_length} del
diff --git a/resources/templates/vat/del_route.vat b/resources/templates/vat/del_route.vat
deleted file mode 100644 (file)
index e7fe4bc..0000000
+++ /dev/null
@@ -1 +0,0 @@
-ip_add_del_route {network}/{prefix_length} via {gateway} sw_if_index {sw_if_index} del
\ No newline at end of file
diff --git a/resources/templates/vat/enslave_physical_interface.vat b/resources/templates/vat/enslave_physical_interface.vat
deleted file mode 100644 (file)
index ce88e8d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-bond_enslave sw_if_index {p_int} bond {b_int}
\ No newline at end of file
diff --git a/resources/templates/vat/flush_ip_addresses.vat b/resources/templates/vat/flush_ip_addresses.vat
deleted file mode 100644 (file)
index f38fcf1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-sw_interface_add_del_address sw_if_index {sw_if_index} del-all
\ No newline at end of file
diff --git a/resources/templates/vat/hw_interface_set_mtu.vat b/resources/templates/vat/hw_interface_set_mtu.vat
deleted file mode 100644 (file)
index 645d1a8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-hw_interface_set_mtu sw_if_index {sw_if_index} mtu {mtu}
diff --git a/resources/templates/vat/input_acl_int.vat b/resources/templates/vat/input_acl_int.vat
deleted file mode 100644 (file)
index c9d7441..0000000
+++ /dev/null
@@ -1 +0,0 @@
-input_acl_set_interface sw_if_index {sw_if_index} {ip_version}-table {table_index}
\ No newline at end of file
diff --git a/resources/templates/vat/interface_dump.vat b/resources/templates/vat/interface_dump.vat
deleted file mode 100644 (file)
index 850c348..0000000
+++ /dev/null
@@ -1 +0,0 @@
-sw_interface_dump
diff --git a/resources/templates/vat/interface_vrf_dump.vat b/resources/templates/vat/interface_vrf_dump.vat
deleted file mode 100644 (file)
index 5cae0ab..0000000
+++ /dev/null
@@ -1 +0,0 @@
-sw_interface_get_table sw_if_index {sw_if_index}
\ No newline at end of file
diff --git a/resources/templates/vat/ip_address_dump.vat b/resources/templates/vat/ip_address_dump.vat
deleted file mode 100644 (file)
index 60585ed..0000000
+++ /dev/null
@@ -1 +0,0 @@
-ip_address_dump {ip_version} sw_if_index {sw_if_index}
diff --git a/resources/templates/vat/ip_source_check.vat b/resources/templates/vat/ip_source_check.vat
deleted file mode 100644 (file)
index 12da19b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-exec set interface ip source-check {interface_name}
\ No newline at end of file
diff --git a/resources/templates/vat/l2_bd_add_sw_if_index.vat b/resources/templates/vat/l2_bd_add_sw_if_index.vat
deleted file mode 100644 (file)
index a0384c9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-sw_interface_set_l2_bridge sw_if_index {sw_if_index} bd_id {bd_id} shg {shg} enable
\ No newline at end of file
diff --git a/resources/templates/vat/l2_bd_create.vat b/resources/templates/vat/l2_bd_create.vat
deleted file mode 100644 (file)
index fa1316b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-bridge_domain_add_del bd_id {bd_id} flood {flood} uu-flood {uu_flood} forward {forward} learn {learn} arp-term {arp_term}
\ No newline at end of file
diff --git a/resources/templates/vat/l2_bd_dump.vat b/resources/templates/vat/l2_bd_dump.vat
deleted file mode 100644 (file)
index 6d0b9d0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-bridge_domain_dump
diff --git a/resources/templates/vat/l2_bridge_domain.vat b/resources/templates/vat/l2_bridge_domain.vat
deleted file mode 100644 (file)
index 20bc28f..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-bridge_domain_add_del bd_id {bd_id} flood 1 uu-flood 1 forward 1 learn {learn} arp-term 0
-sw_interface_set_l2_bridge sw_if_index {sw_if_id1} bd_id {bd_id} shg 0  enable
-sw_interface_set_l2_bridge sw_if_index {sw_if_id2} bd_id {bd_id} shg 0  enable
diff --git a/resources/templates/vat/l2_bridge_domain_delete.vat b/resources/templates/vat/l2_bridge_domain_delete.vat
deleted file mode 100644 (file)
index 354f1ac..0000000
+++ /dev/null
@@ -1 +0,0 @@
-bridge_domain_add_del bd_id {bd_id} delete
\ No newline at end of file
diff --git a/resources/templates/vat/l2_fib_entry_delete.vat b/resources/templates/vat/l2_fib_entry_delete.vat
deleted file mode 100644 (file)
index a2fdf16..0000000
+++ /dev/null
@@ -1 +0,0 @@
-l2fib_add_del mac {mac} bd_id {bd_id} delete
\ No newline at end of file
diff --git a/resources/templates/vat/l2_fib_table_dump.vat b/resources/templates/vat/l2_fib_table_dump.vat
deleted file mode 100644 (file)
index 83db7d0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-l2_fib_table_dump bd_id {bd_id}
\ No newline at end of file
diff --git a/resources/templates/vat/l2_patch.vat b/resources/templates/vat/l2_patch.vat
deleted file mode 100644 (file)
index 4910c72..0000000
+++ /dev/null
@@ -1 +0,0 @@
-l2_patch_add_del rx_sw_if_index {interface1} tx_sw_if_index {interface2}
diff --git a/resources/templates/vat/l2_vlan_tag_rewrite.vat b/resources/templates/vat/l2_vlan_tag_rewrite.vat
deleted file mode 100644 (file)
index 1e8aa37..0000000
+++ /dev/null
@@ -1 +0,0 @@
-l2_interface_vlan_tag_rewrite sw_if_index {sw_if_index} {tag_rewrite_method} {push_dot1q} {tag1_optional} {tag2_optional}
diff --git a/resources/templates/vat/l2_xconnect.vat b/resources/templates/vat/l2_xconnect.vat
deleted file mode 100644 (file)
index 77cb9d6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-sw_interface_set_l2_xconnect rx_sw_if_index {interface1} tx_sw_if_index {interface2}
diff --git a/resources/templates/vat/memif_create.vat b/resources/templates/vat/memif_create.vat
deleted file mode 100644 (file)
index 1e20369..0000000
+++ /dev/null
@@ -1 +0,0 @@
-memif_create id {id} socket-id {socket} {role} {rx_q} {tx_q}
diff --git a/resources/templates/vat/memif_dump.vat b/resources/templates/vat/memif_dump.vat
deleted file mode 100644 (file)
index 355f8f6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-memif_dump
diff --git a/resources/templates/vat/memif_socket_filename_add_del.vat b/resources/templates/vat/memif_socket_filename_add_del.vat
deleted file mode 100644 (file)
index cc7a824..0000000
+++ /dev/null
@@ -1 +0,0 @@
-memif_socket_filename_add_del {add_del} id {id} filename {filename}
diff --git a/resources/templates/vat/proxy_arp_intfc_enable.vat b/resources/templates/vat/proxy_arp_intfc_enable.vat
deleted file mode 100644 (file)
index e4d2313..0000000
+++ /dev/null
@@ -1 +0,0 @@
-proxy_arp_intfc_enable_disable sw_if_index {sw_if_index} enable
\ No newline at end of file
diff --git a/resources/templates/vat/set_fib_to_interface.vat b/resources/templates/vat/set_fib_to_interface.vat
deleted file mode 100644 (file)
index 09a97fa..0000000
+++ /dev/null
@@ -1 +0,0 @@
-sw_interface_set_table sw_if_index {sw_index} vrf {vrf} {ipv6}
\ No newline at end of file
diff --git a/resources/templates/vat/set_if_state.vat b/resources/templates/vat/set_if_state.vat
deleted file mode 100644 (file)
index e2c2d4b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-sw_interface_set_flags sw_if_index {sw_if_index} {state}
diff --git a/resources/templates/vat/show_interface.vat b/resources/templates/vat/show_interface.vat
deleted file mode 100644 (file)
index 474b847..0000000
+++ /dev/null
@@ -1 +0,0 @@
-exec show interface
diff --git a/resources/templates/vat/show_ip_fib.vat b/resources/templates/vat/show_ip_fib.vat
deleted file mode 100644 (file)
index 4023460..0000000
+++ /dev/null
@@ -1 +0,0 @@
-exec show ip fib
\ No newline at end of file
diff --git a/resources/templates/vat/show_memif.vat b/resources/templates/vat/show_memif.vat
deleted file mode 100644 (file)
index 4b6c14a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-exec show memif
diff --git a/resources/templates/vat/show_vhost.vat b/resources/templates/vat/show_vhost.vat
deleted file mode 100644 (file)
index 95b4be0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-exec show vhost
diff --git a/resources/templates/vat/sw_interface_ip6nd_ra_config.vat b/resources/templates/vat/sw_interface_ip6nd_ra_config.vat
deleted file mode 100644 (file)
index 09c7320..0000000
+++ /dev/null
@@ -1 +0,0 @@
-sw_interface_ip6nd_ra_config sw_if_index {sw_if_id} {param}
diff --git a/resources/templates/vat/tap_dump.vat b/resources/templates/vat/tap_dump.vat
deleted file mode 100644 (file)
index de8412b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-sw_interface_tap_v2_dump
\ No newline at end of file
diff --git a/resources/templates/vat/vhost_user_dump.vat b/resources/templates/vat/vhost_user_dump.vat
deleted file mode 100644 (file)
index 6a3d7a5..0000000
+++ /dev/null
@@ -1 +0,0 @@
-sw_interface_vhost_user_dump
\ No newline at end of file
diff --git a/resources/templates/vat/vxlan_create.vat b/resources/templates/vat/vxlan_create.vat
deleted file mode 100644 (file)
index 15125f9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-vxlan_add_del_tunnel src {src} dst {dst} vni {vni}
\ No newline at end of file
diff --git a/resources/templates/vat/vxlan_dump.vat b/resources/templates/vat/vxlan_dump.vat
deleted file mode 100644 (file)
index 6f41f31..0000000
+++ /dev/null
@@ -1 +0,0 @@
-vxlan_tunnel_dump {param} {sw_if_index}
\ No newline at end of file
diff --git a/resources/templates/vat/vxlan_gpe_dump.vat b/resources/templates/vat/vxlan_gpe_dump.vat
deleted file mode 100644 (file)
index e82d94c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-vxlan_gpe_tunnel_dump
\ No newline at end of file
index 392623b..cc60075 100644 (file)
@@ -24,6 +24,7 @@ ipv4_settings = {"mtu": 9000}
 ipv6_address = "10::10"
 ipv6_address2 = "11::10"
 ipv6_prefix = 64
 ipv6_address = "10::10"
 ipv6_address2 = "11::10"
 ipv6_prefix = 64
+ipv6_mask = "ffff:ffff:ffff:ffff::"
 ipv6_neighbor = "10::11"
 ipv6_neighbor2 = "11::11"
 neighbor_mac = "08:00:27:c0:5d:37"
 ipv6_neighbor = "10::11"
 ipv6_neighbor2 = "11::11"
 neighbor_mac = "08:00:27:c0:5d:37"
index edf585e..b72a339 100644 (file)
@@ -126,6 +126,9 @@ def get_variables(test_case, name):
             "dut_to_tg_if2_ip": "20::2",
             "prefix_length": 64,
             "gateway": "20::1",
             "dut_to_tg_if2_ip": "20::2",
             "prefix_length": 64,
             "gateway": "20::1",
+            # classified networks
+            "classify_src_net": "12::",
+            "classify_dst_net": "13::",
             # ICMP code and type for control packet
             "icmp_type": 1,
             "icmp_code": 0,
             # ICMP code and type for control packet
             "icmp_type": 1,
             "icmp_code": 0,
index 10b59ca..50055f7 100644 (file)
 | Resource | resources/libraries/robot/honeycomb/interfaces.robot
 | Resource | resources/libraries/robot/honeycomb/dhcp.robot
 | Library | resources.libraries.python.Trace
 | Resource | resources/libraries/robot/honeycomb/interfaces.robot
 | Resource | resources/libraries/robot/honeycomb/dhcp.robot
 | Library | resources.libraries.python.Trace
-| Library | resources.libraries.python.IPv4Setup
-| Library | resources.libraries.python.IPv6Setup
+| Library | resources.libraries.python.IPUtil
 | Library | resources.libraries.python.IPv6Util
 | Library | resources.libraries.python.IPv6Util
-| Library | resources.libraries.python.Routing
 | Variables | resources/test_data/honeycomb/dhcp_relay.py
 | ...
 | ...
 | Variables | resources/test_data/honeycomb/dhcp_relay.py
 | ...
 | ...
 | | ... | ${dut_to_tg_if1} | ${dut_to_tg_if1_ip} | ${prefix_length}
 | | Honeycomb sets interface IPv4 address with prefix | ${dut_node}
 | | ... | ${dut_to_tg_if2} | ${dut_to_tg_if2_ip} | ${prefix_length}
 | | ... | ${dut_to_tg_if1} | ${dut_to_tg_if1_ip} | ${prefix_length}
 | | Honeycomb sets interface IPv4 address with prefix | ${dut_node}
 | | ... | ${dut_to_tg_if2} | ${dut_to_tg_if2_ip} | ${prefix_length}
-| | Add ARP on DUT | ${dut_node} | ${dut_to_tg_if2} | ${dhcp_server1_ip}
+| | VPP Add IP Neighbor | ${dut_node} | ${dut_to_tg_if2} | ${dhcp_server1_ip}
 | | ... | ${tg_to_dut_if2_mac}
 | | ... | ${tg_to_dut_if2_mac}
-| | Add ARP on DUT | ${dut_node} | ${dut_to_tg_if2} | ${dhcp_server2_ip}
+| | VPP Add IP Neighbor | ${dut_node} | ${dut_to_tg_if2} | ${dhcp_server2_ip}
 | | ... | ${tg_to_dut_if2_mac}
 | | ... | ${tg_to_dut_if2_mac}
-| | And VPP Route Add | ${dut_node} | 255.255.255.255 | 32 | gateway=${NONE}
-| | ... | interface=local | use_sw_index=${FALSE} | resolve_attempts=${NONE}
+| | And VPP Route Add | ${dut_node} | 255.255.255.255 | 32 | local=${True}
 
 | DHCP relay test setup IPv6
 | | Configure path in 2-node circular topology
 
 | DHCP relay test setup IPv6
 | | Configure path in 2-node circular topology
 | | ... | ${dut_to_tg_if1} | ${dut_to_tg_if1_ip6} | ${prefix_length_v6}
 | | Honeycomb sets interface IPv6 address | ${dut_node}
 | | ... | ${dut_to_tg_if2} | ${dut_to_tg_if2_ip6} | ${prefix_length_v6}
 | | ... | ${dut_to_tg_if1} | ${dut_to_tg_if1_ip6} | ${prefix_length_v6}
 | | Honeycomb sets interface IPv6 address | ${dut_node}
 | | ... | ${dut_to_tg_if2} | ${dut_to_tg_if2_ip6} | ${prefix_length_v6}
-| | And Add IP Neighbor | ${dut_node} | ${dut_to_tg_if2} | ${dhcp_server_ip6}
-| | ... | ${tg_to_dut_if2_mac}
-| | And VPP Route Add | ${dut_node} | ff02::1:2 | 128 | gateway=${NONE}
-| | ... | interface=local | use_sw_index=${FALSE} | resolve_attempts=${NONE}
+| | And VPP Add IP Neighbor | ${dut_node} | ${dut_to_tg_if2}
+| | ... | ${dhcp_server_ip6} | ${tg_to_dut_if2_mac}
+| | And VPP Route Add | ${dut_node} | ff02::1:2 | 128 | local=${True}
index 28137fd..144f834 100644 (file)
 | | Then IPv6 address from Honeycomb should contain
 | | ... | ${node} | ${interface} | ${ipv6_address} | ${ipv6_prefix}
 | | And IPv6 address from VAT should contain
 | | Then IPv6 address from Honeycomb should contain
 | | ... | ${node} | ${interface} | ${ipv6_address} | ${ipv6_prefix}
 | | And IPv6 address from VAT should contain
-| | ... | ${node} | ${interface} | ${ipv6_address} | ${ipv6_prefix}
+| | ... | ${node} | ${interface} | ${ipv6_address}
+| | ... | ${ipv6_prefix} | ${ipv6_mask}
 
 | TC07: Honeycomb modifies IPv6 neighbor table
 | | [Documentation] | Check if Honeycomb API can add and remove ARP entries.
 
 | TC07: Honeycomb modifies IPv6 neighbor table
 | | [Documentation] | Check if Honeycomb API can add and remove ARP entries.
 | | And IPv6 address from Honeycomb should contain
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${ipv6_address} | ${ipv6_prefix}
 | | And IPv6 address from VAT should contain
 | | And IPv6 address from Honeycomb should contain
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${ipv6_address} | ${ipv6_prefix}
 | | And IPv6 address from VAT should contain
-| | ... | ${dut_node} | ${interface2} | ${ipv6_address} | ${ipv6_prefix}
+| | ... | ${dut_node} | ${interface2} | ${ipv6_address}
+| | ... | ${ipv6_prefix} | ${ipv6_mask}
 | | And Honeycomb configures interface state
 | | ... | ${dut_node} | ${dut_to_tg_if1} | up
 | | And Honeycomb adds interface IPv4 neighbor | ${dut_node} | ${dut_to_tg_if1}
 | | And Honeycomb configures interface state
 | | ... | ${dut_node} | ${dut_to_tg_if1} | up
 | | And Honeycomb adds interface IPv4 neighbor | ${dut_node} | ${dut_to_tg_if1}
index 3e7e8ae..ca717ae 100644 (file)
 | Resource | resources/libraries/robot/shared/traffic.robot
 | Library | resources.libraries.python.honeycomb.HcAPIKwACL.ACLKeywords
 | Library | resources.libraries.python.Trace
 | Resource | resources/libraries/robot/shared/traffic.robot
 | Library | resources.libraries.python.honeycomb.HcAPIKwACL.ACLKeywords
 | Library | resources.libraries.python.Trace
-| Library | resources.libraries.python.IPv4Setup
-| Library | resources.libraries.python.IPv4Util
+| Library | resources.libraries.python.IPUtil
 | Library | resources.libraries.python.IPv6Util
 | Library | resources.libraries.python.IPv6Util
-| Library | resources.libraries.python.Routing
 | ...
 | Test Setup | Clear Packet Trace on All DUTs | ${nodes}
 | ...
 | ...
 | Test Setup | Clear Packet Trace on All DUTs | ${nodes}
 | ...
 | | And Honeycomb adds interface IPv6 neighbor
 | | ... | ${node} | ${dut_to_tg_if2} | ${gateway} | ${tg_to_dut_if2_mac}
 | | And VPP Route Add | ${node} | ${dst_net} | ${prefix_length}
 | | And Honeycomb adds interface IPv6 neighbor
 | | ... | ${node} | ${dut_to_tg_if2} | ${gateway} | ${tg_to_dut_if2_mac}
 | | And VPP Route Add | ${node} | ${dst_net} | ${prefix_length}
-| | ... | gateway=${gateway} | interface=${dut_to_tg_if2} | use_sw_index=False
+| | ... | gateway=${gateway} | interface=${dut_to_tg_if2}
 | | And VPP Route Add | ${node} | ${classify_dst_net} | ${prefix_length}
 | | And VPP Route Add | ${node} | ${classify_dst_net} | ${prefix_length}
-| | ... | gateway=${gateway} | interface=${dut_to_tg_if2} | use_sw_index=False
+| | ... | gateway=${gateway} | interface=${dut_to_tg_if2}
 | | When Honeycomb Creates ACL Chain Through ACL plugin
 | | ... | ${dut_node} | ${acl_name_l3_ip6} | ${acl_settings}
 | | And Honeycomb Assigns plugin-acl Chain To Interface
 | | When Honeycomb Creates ACL Chain Through ACL plugin
 | | ... | ${dut_node} | ${acl_name_l3_ip6} | ${acl_settings}
 | | And Honeycomb Assigns plugin-acl Chain To Interface
 | | ... | ${node} | ${dut_to_tg_if2} | ${gateway} | ${tg_to_dut_if2_mac}
 | | And VPP RA suppress link layer | ${dut_node} | ${dut_to_tg_if2}
 | | And VPP Route Add | ${node} | ${dst_net} | ${prefix_length}
 | | ... | ${node} | ${dut_to_tg_if2} | ${gateway} | ${tg_to_dut_if2_mac}
 | | And VPP RA suppress link layer | ${dut_node} | ${dut_to_tg_if2}
 | | And VPP Route Add | ${node} | ${dst_net} | ${prefix_length}
-| | ... | gateway=${gateway} | interface=${dut_to_tg_if2} | use_sw_index=False
+| | ... | gateway=${gateway} | interface=${dut_to_tg_if2}
 | | And VPP Route Add | ${node} | ${classify_dst_net} | ${prefix_length}
 | | And VPP Route Add | ${node} | ${classify_dst_net} | ${prefix_length}
-| | ... | gateway=${gateway} | interface=${dut_to_tg_if2} | use_sw_index=False
+| | ... | gateway=${gateway} | interface=${dut_to_tg_if2}
 | | When Honeycomb Creates ACL Chain Through ACL plugin
 | | ... | ${dut_node} | ${acl_name_icmpv6} | ${acl_settings}
 | | And Honeycomb Assigns plugin-acl Chain To Interface
 | | When Honeycomb Creates ACL Chain Through ACL plugin
 | | ... | ${dut_node} | ${acl_name_icmpv6} | ${acl_settings}
 | | And Honeycomb Assigns plugin-acl Chain To Interface
 | | ...
 | | Given Setup Interface IPs And Routes For IPv4 plugin-acl Test
 | | ... | reflex | ${acl_name_reflex}
 | | ...
 | | Given Setup Interface IPs And Routes For IPv4 plugin-acl Test
 | | ... | reflex | ${acl_name_reflex}
-| | And Add ARP on DUT
+| | And VPP Add IP Neighbor
 | | ... | ${node} | ${dut_to_tg_if1} | ${gateway2} | ${tg_to_dut_if1_mac}
 | | And VPP Route Add
 | | ... | ${node} | ${src_net} | ${prefix_length} | gateway=${gateway2}
 | | ... | ${node} | ${dut_to_tg_if1} | ${gateway2} | ${tg_to_dut_if1_mac}
 | | And VPP Route Add
 | | ... | ${node} | ${src_net} | ${prefix_length} | gateway=${gateway2}
-| | ... | interface=${dut_to_tg_if1} | use_sw_index=False
+| | ... | interface=${dut_to_tg_if1}
 | | And VPP Route Add
 | | ... | ${node} | ${classify_src_net} | ${prefix_length}
 | | And VPP Route Add
 | | ... | ${node} | ${classify_src_net} | ${prefix_length}
-| | ... | gateway=${gateway2} | interface=${dut_to_tg_if1} | use_sw_index=False
+| | ... | gateway=${gateway2} | interface=${dut_to_tg_if1}
 | | When Honeycomb Creates ACL Chain Through ACL plugin
 | | ... | ${dut_node} | ${acl_name_reflex} | ${acl_settings}
 | | And Honeycomb Assigns plugin-acl Chain To Interface
 | | When Honeycomb Creates ACL Chain Through ACL plugin
 | | ... | ${dut_node} | ${acl_name_reflex} | ${acl_settings}
 | | And Honeycomb Assigns plugin-acl Chain To Interface
 | | ... | ${node} | ${dut_to_tg_if2} | ${gateway} | ${tg_to_dut_if2_mac}
 | | VPP Route Add
 | | ... | ${node} | ${dst_net} | ${prefix_length} | gateway=${gateway}
 | | ... | ${node} | ${dut_to_tg_if2} | ${gateway} | ${tg_to_dut_if2_mac}
 | | VPP Route Add
 | | ... | ${node} | ${dst_net} | ${prefix_length} | gateway=${gateway}
-| | ... | interface=${dut_to_tg_if2} | use_sw_index=False
+| | ... | interface=${dut_to_tg_if2}
 | | VPP Route Add
 | | ... | ${node} | ${classify_dst_net} | ${prefix_length} | gateway=${gateway}
 | | VPP Route Add
 | | ... | ${node} | ${classify_dst_net} | ${prefix_length} | gateway=${gateway}
-| | ... | interface=${dut_to_tg_if2} | use_sw_index=False
+| | ... | interface=${dut_to_tg_if2}
 
 | Setup interfaces and bridge domain for plugin-acl test
 | | [Documentation] | Import test variables, set interfaces up and bridge them.
 
 | Setup interfaces and bridge domain for plugin-acl test
 | | [Documentation] | Import test variables, set interfaces up and bridge them.
index c6a2872..7fcf754 100644 (file)
@@ -13,8 +13,7 @@
 
 *** Settings ***
 | Library | resources.libraries.python.InterfaceUtil
 
 *** Settings ***
 | Library | resources.libraries.python.InterfaceUtil
-| Library | resources.libraries.python.IPv6Util
-| Library | resources.libraries.python.Routing
+| Library | resources.libraries.python.IPUtil
 | ...
 | Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | ...
 | Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
 | | And Set up functional test with containers
 | | And Configure interfaces in path up
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
 | | And Set up functional test with containers
 | | And Configure interfaces in path up
-| | When Set up memif interfaces on DUT node | ${dut_node} | ${sock_base}
-| | ... | ${sock_base} | dcr_uuid=${dcr_uuid}
+| | When Set up memif interfaces on DUT node
+| | ... | ${dut_node} | ${sock_base} | ${sock_base} | dcr_uuid=${dcr_uuid}
 | | ... | memif_if1=memif_if1 | memif_if2=memif_if2 | rxq=${0} | txq=${0}
 | | And Add Fib Table | ${dut_node} | ${fib_table_2}
 | | ... | memif_if1=memif_if1 | memif_if2=memif_if2 | rxq=${0} | txq=${0}
 | | And Add Fib Table | ${dut_node} | ${fib_table_2}
-| | And Assign Interface To Fib Table | ${dut_node}
-| | ... | ${memif_if2} | ${fib_table_2}
-| | And Assign Interface To Fib Table | ${dut_node}
-| | ... | ${dut_to_tg_if2} | ${fib_table_2}
+| | And Assign Interface To Fib Table
+| | ... | ${dut_node} | ${memif_if2} | ${fib_table_2}
+| | And Assign Interface To Fib Table
+| | ... | ${dut_node} | ${dut_to_tg_if2} | ${fib_table_2}
 | | And Configure IP addresses on interfaces
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${net1_ip1} | ${prefix_length}
 | | ... | ${dut_node} | ${memif_if1} | ${net2_ip1} | ${prefix_length}
 | | And Configure IP addresses on interfaces
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${net1_ip1} | ${prefix_length}
 | | ... | ${dut_node} | ${memif_if1} | ${net2_ip1} | ${prefix_length}
 | | ${memif_if2_key}= | Get interface by sw index | ${nodes['DUT1']}
 | | ... | ${memif_if2}
 | | ${memif_if2_mac}= | Get interface MAC | ${nodes['DUT1']} | ${memif_if2_key}
 | | ${memif_if2_key}= | Get interface by sw index | ${nodes['DUT1']}
 | | ... | ${memif_if2}
 | | ${memif_if2_mac}= | Get interface MAC | ${nodes['DUT1']} | ${memif_if2_key}
-| | And Vpp Route Add | ${dut_node} | ${net3} | ${prefix_length}
+| | And Vpp Route Add
+| | ... | ${dut_node} | ${net3} | ${prefix_length}
 | | ... | gateway=${net2_ip2} | interface=${memif_if1}
 | | ... | gateway=${net2_ip2} | interface=${memif_if1}
-| | ... | resolve_attempts=${NONE} | count=${NONE}
-| | And Vpp Route Add | ${dut_node} | ${net1} | ${prefix_length}
-| | ... | gateway=${net2_ip1} | interface=${memif_if2}
-| | ... | resolve_attempts=${NONE} | count=${NONE} | vrf=${fib_table_2}
-| | Add IP Neighbor | ${dut_node} | ${memif_if1} | ${net2_ip2}
-| | ... | ${memif_if2_mac}
-| | Add IP Neighbor | ${dut_node} | ${dut_to_tg_if2} | ${net3_ip2}
-| | ... | ${tg_to_dut_if2_mac}
+| | And Vpp Route Add
+| | ... | ${dut_node} | ${net1} | ${prefix_length}
+| | ... | gateway=${net2_ip1} | interface=${memif_if2} | vrf=${fib_table_2}
+| | VPP Add IP Neighbor
+| | ... | ${dut_node} | ${memif_if1} | ${net2_ip2} | ${memif_if2_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut_node} | ${dut_to_tg_if2} | ${net3_ip2} | ${tg_to_dut_if2_mac}
 | | Then Send packet and verify headers
 | | ... | ${tg_node} | ${net1_ip2} | ${net3_ip2}
 | | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac} | ${dut_to_tg_if1_mac}
 | | Then Send packet and verify headers
 | | ... | ${tg_node} | ${net1_ip2} | ${net3_ip2}
 | | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac} | ${dut_to_tg_if1_mac}
index 60dd953..fcf1ce0 100644 (file)
@@ -13,9 +13,7 @@
 
 *** Settings ***
 | Library | resources.libraries.python.InterfaceUtil
 
 *** Settings ***
 | Library | resources.libraries.python.InterfaceUtil
-| Library | resources.libraries.python.IPv6Setup
-| Library | resources.libraries.python.IPv6Util
-| Library | resources.libraries.python.Routing
+| Library | resources.libraries.python.IPUtil
 | ...
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/memif.robot
 | ...
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/memif.robot
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
 | | And Set up functional test with containers
 | | And Configure interfaces in path up
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
 | | And Set up functional test with containers
 | | And Configure interfaces in path up
-| | When Set up memif interfaces on DUT node | ${dut_node} | ${sock_base}
-| | ... | ${sock_base} | dcr_uuid=${dcr_uuid}
+| | When Set up memif interfaces on DUT node
+| | ... | ${dut_node} | ${sock_base} | ${sock_base} | dcr_uuid=${dcr_uuid}
 | | ... | memif_if1=memif_if1 | memif_if2=memif_if2 | rxq=${0} | txq=${0}
 | | ... | memif_if1=memif_if1 | memif_if2=memif_if2 | rxq=${0} | txq=${0}
-| | And Add Fib Table | ${dut_node} | ${fib_table_2}
-| | And Assign Interface To Fib Table | ${dut_node}
-| | ... | ${memif_if2} | ${fib_table_2}
-| | And Assign Interface To Fib Table | ${dut_node}
-| | ... | ${dut_to_tg_if2} | ${fib_table_2}
-| | And Vpp Set If IPv6 Addr | ${dut_node} | ${dut_to_tg_if1} | ${net1_ip1}
-| | ... | ${prefix_length}
-| | And Vpp Set If IPv6 Addr | ${dut_node} | ${memif_if1} | ${net2_ip1}
-| | ... | ${prefix_length}
-| | And Vpp Set If IPv6 Addr | ${dut_node} | ${memif_if2} | ${net2_ip2}
-| | ... | ${prefix_length}
-| | And Vpp Set If IPv6 Addr | ${dut_node} | ${dut_to_tg_if2} | ${net3_ip1}
-| | ... | ${prefix_length}
+| | And Add Fib Table | ${dut_node} | ${fib_table_2} | ipv6=${True}
+| | And Assign Interface To Fib Table
+| | ... | ${dut_node} | ${memif_if2} | ${fib_table_2} | ipv6=${True}
+| | And Assign Interface To Fib Table
+| | ... | ${dut_node} | ${dut_to_tg_if2} | ${fib_table_2} | ipv6=${True}
+| | And VPP Interface Set IP Address
+| | ... | ${dut_node} | ${dut_to_tg_if1} | ${net1_ip1} | ${prefix_length}
+| | And VPP Interface Set IP Address
+| | ... | ${dut_node} | ${memif_if1} | ${net2_ip1} | ${prefix_length}
+| | And VPP Interface Set IP Address
+| | ... | ${dut_node} | ${memif_if2} | ${net2_ip2} | ${prefix_length}
+| | And VPP Interface Set IP Address
+| | ... | ${dut_node} | ${dut_to_tg_if2} | ${net3_ip1} | ${prefix_length}
 | | ${memif_if2_key}= | Get interface by sw index | ${nodes['DUT1']}
 | | ... | ${memif_if2}
 | | ${memif_if2_mac}= | Get interface MAC | ${nodes['DUT1']} | ${memif_if2_key}
 | | ${memif_if2_key}= | Get interface by sw index | ${nodes['DUT1']}
 | | ... | ${memif_if2}
 | | ${memif_if2_mac}= | Get interface MAC | ${nodes['DUT1']} | ${memif_if2_key}
-| | And Vpp Route Add | ${dut_node} | ${net3} | ${prefix_length}
+| | And Vpp Route Add
+| | ... | ${dut_node} | ${net3} | ${prefix_length}
 | | ... | gateway=${net2_ip2} | interface=${memif_if1}
 | | ... | gateway=${net2_ip2} | interface=${memif_if1}
-| | ... | resolve_attempts=${NONE} | count=${NONE}
-| | And Vpp Route Add | ${dut_node} | ${net1} | ${prefix_length}
-| | ... | gateway=${net2_ip1} | interface=${memif_if2}
-| | ... | resolve_attempts=${NONE} | count=${NONE} | vrf=${fib_table_2}
-| | Add IP Neighbor | ${dut_node} | ${memif_if1} | ${net2_ip2}
-| | ... | ${memif_if2_mac}
-| | Add IP Neighbor | ${dut_node} | ${dut_to_tg_if2} | ${net3_ip2}
-| | ... | ${tg_to_dut_if2_mac}
+| | And Vpp Route Add
+| | ... | ${dut_node} | ${net1} | ${prefix_length}
+| | ... | gateway=${net2_ip1} | interface=${memif_if2} | vrf=${fib_table_2}
+| | VPP Add IP Neighbor
+| | ... | ${dut_node} | ${memif_if1} | ${net2_ip2} | ${memif_if2_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut_node} | ${dut_to_tg_if2} | ${net3_ip2} | ${tg_to_dut_if2_mac}
 | | Then Send packet and verify headers
 | | ... | ${tg_node} | ${net1_ip2} | ${net3_ip2}
 | | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac} | ${dut_to_tg_if1_mac}
 | | Then Send packet and verify headers
 | | ... | ${tg_node} | ${net1_ip2} | ${net3_ip2}
 | | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac} | ${dut_to_tg_if1_mac}
index e97ccaf..47de572 100644 (file)
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
-| Resource | resources/libraries/robot/shared/default.robot
+| Library  | resources.libraries.python.IPUtil
+| Library  | resources.libraries.python.Namespaces
+| Library  | resources.libraries.python.Tap
+| Library  | resources.libraries.python.Trace
+| ...
 | Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/ip/ip6.robot
 | Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/ip/ip6.robot
-| Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/l2/l2_bridge_domain.robot
 | Resource | resources/libraries/robot/l2/l2_bridge_domain.robot
+| Resource | resources/libraries/robot/shared/default.robot
+| Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
-| Library  | resources.libraries.python.Trace
-| Library  | resources.libraries.python.Tap
-| Library  | resources.libraries.python.Namespaces
-| Library  | resources.libraries.python.IPUtil
 | ...
 | Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV
 | ... | FUNCTEST | IP4FWD | BASE | ETH | IP4BASE | TAP
 | ...
 | Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV
 | ... | FUNCTEST | IP4FWD | BASE | ETH | IP4BASE | TAP
 | | ... | ${nodes['DUT1']} | ${nodes['TG']}
 | | And Set interfaces in 2-node circular topology up
 | | ${int1}= | And Add Tap Interface | ${dut_node} | ${tap_int1} |
 | | ... | ${nodes['DUT1']} | ${nodes['TG']}
 | | And Set interfaces in 2-node circular topology up
 | | ${int1}= | And Add Tap Interface | ${dut_node} | ${tap_int1} |
-| | And Set Interface Address
+| | And VPP Interface Set IP Address
 | | ... | ${dut_node} | ${int1} | ${tap1_VPP_ip} | ${prefix}
 | | ... | ${dut_node} | ${int1} | ${tap1_VPP_ip} | ${prefix}
-| | And Set Interface Address
+| | And VPP Interface Set IP Address
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip_address} | ${prefix}
 | | And Set Interface State | ${dut_node} | ${int1} | up
 | | And Set Linux Interface MAC | ${dut_node} | ${tap_int1} | ${tap1_NM_mac}
 | | And Set Linux Interface IP | ${dut_node}
 | | ... | ${tap_int1} | ${tap1_NM_ip} | ${prefix}
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip_address} | ${prefix}
 | | And Set Interface State | ${dut_node} | ${int1} | up
 | | And Set Linux Interface MAC | ${dut_node} | ${tap_int1} | ${tap1_NM_mac}
 | | And Set Linux Interface IP | ${dut_node}
 | | ... | ${tap_int1} | ${tap1_NM_ip} | ${prefix}
-| | And Add Route | ${dut_node}
+| | And Add Linux Route | ${dut_node}
 | | ... | ${tg_ip_address_GW} | ${prefix} | ${tap1_VPP_ip}
 | | ... | ${tg_ip_address_GW} | ${prefix} | ${tap1_VPP_ip}
-| | And Add Arp On Dut | ${dut_node} | ${dut_to_tg_if1}
+| | And VPP Add IP Neighbor | ${dut_node} | ${dut_to_tg_if1}
 | | ... | ${tg_ip_address} | ${tg_to_dut_if1_mac}
 | | ... | ${tg_ip_address} | ${tg_to_dut_if1_mac}
-| | And Add Arp On Dut | ${dut_node} | ${int1}
+| | And VPP Add IP Neighbor | ${dut_node} | ${int1}
 | | ... | ${tap1_NM_ip} | ${tap1_NM_mac}
 | | Then Send ICMP echo request and verify answer | ${tg_node}
 | | ... | ${tg_to_dut_if1} | ${dut_to_tg_if1_mac} | ${tg_to_dut_if1_mac}
 | | ... | ${tap1_NM_ip} | ${tap1_NM_mac}
 | | Then Send ICMP echo request and verify answer | ${tg_node}
 | | ... | ${tg_to_dut_if1} | ${dut_to_tg_if1_mac} | ${tg_to_dut_if1_mac}
 | | ... | ${nodes['DUT1']} | ${nodes['TG']}
 | | And Set interfaces in 2-node circular topology up
 | | ${int1}= | And Add Tap Interface | ${dut_node} | ${tap_int1} |
 | | ... | ${nodes['DUT1']} | ${nodes['TG']}
 | | And Set interfaces in 2-node circular topology up
 | | ${int1}= | And Add Tap Interface | ${dut_node} | ${tap_int1} |
-| | And Set Interface Address
+| | And VPP Interface Set IP Address
 | | ... | ${dut_node} | ${int1} | ${tap1_VPP_ip} | ${prefix}
 | | ... | ${dut_node} | ${int1} | ${tap1_VPP_ip} | ${prefix}
-| | And Set Interface Address
+| | And VPP Interface Set IP Address
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip_address} | ${prefix}
 | | And Set Interface State | ${dut_node} | ${int1} | up
 | | When Create Namespace | ${dut_node} | ${namespace1}
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip_address} | ${prefix}
 | | And Set Interface State | ${dut_node} | ${int1} | up
 | | When Create Namespace | ${dut_node} | ${namespace1}
 | | ... | ${tap_int1} | ${tap1_NM_mac} | ${namespace1}
 | | And Set Linux Interface IP | ${dut_node}
 | | ... | ${tap_int1} | ${tap1_NM_ip} | ${prefix} | ${namespace1}
 | | ... | ${tap_int1} | ${tap1_NM_mac} | ${namespace1}
 | | And Set Linux Interface IP | ${dut_node}
 | | ... | ${tap_int1} | ${tap1_NM_ip} | ${prefix} | ${namespace1}
-| | And Add Arp On Dut | ${dut_node} | ${dut_to_tg_if1}
+| | And VPP Add IP Neighbor | ${dut_node} | ${dut_to_tg_if1}
 | | ... | ${tg_ip_address} | ${tg_to_dut_if1_mac}
 | | ... | ${tg_ip_address} | ${tg_to_dut_if1_mac}
-| | And Add Arp On Dut | ${dut_node} | ${int1}
+| | And VPP Add IP Neighbor | ${dut_node} | ${int1}
 | | ... | ${tap1_NM_ip} | ${tap1_NM_mac}
 | | ... | ${tap1_NM_ip} | ${tap1_NM_mac}
-| | And Add Route | ${dut_node}
+| | And Add Linux Route | ${dut_node}
 | | ... | ${tg_ip_address_GW} | ${prefix} | ${tap1_VPP_ip} | ${namespace1}
 | | Then Send ICMP echo request and verify answer | ${tg_node}
 | | ... | ${tg_to_dut_if1} | ${dut_to_tg_if1_mac} | ${tg_to_dut_if1_mac}
 | | ... | ${tg_ip_address_GW} | ${prefix} | ${tap1_VPP_ip} | ${namespace1}
 | | Then Send ICMP echo request and verify answer | ${tg_node}
 | | ... | ${tg_to_dut_if1} | ${dut_to_tg_if1_mac} | ${tg_to_dut_if1_mac}
index e97e791..3a24c6d 100644 (file)
@@ -19,6 +19,7 @@
 | Library | resources.libraries.python.Trace
 | Library | resources.libraries.python.VhostUser
 | Library | resources.libraries.python.VPPUtil
 | Library | resources.libraries.python.Trace
 | Library | resources.libraries.python.VhostUser
 | Library | resources.libraries.python.VPPUtil
+| ...
 | Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/l2/l2_bridge_domain.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/l2/l2_bridge_domain.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | | ${vhost2_mac}= | And Get Vhost User Mac By SW Index
 | | ... | ${dut_node} | ${vhost2}
 | | And Vpp Route Add | ${dut_node} | ${net3} | ${prefix_length}
 | | ${vhost2_mac}= | And Get Vhost User Mac By SW Index
 | | ... | ${dut_node} | ${vhost2}
 | | And Vpp Route Add | ${dut_node} | ${net3} | ${prefix_length}
-| | ... | gateway=${net2_ip2} | interface=${vhost1} | resolve_attempts=${NONE}
-| | ... | count=${NONE}
+| | ... | gateway=${net2_ip2} | interface=${vhost1}
 | | And Vpp Route Add | ${dut_node} | ${net1} | ${prefix_length}
 | | And Vpp Route Add | ${dut_node} | ${net1} | ${prefix_length}
-| | ... | gateway=${net2_ip1} | interface=${vhost2} | resolve_attempts=${NONE}
-| | ... | count=${NONE} | vrf=${fib_table_2}
-| | Add IP Neighbor | ${dut_node} | ${vhost1} | ${net2_ip2} | ${vhost2_mac}
-| | Add IP Neighbor | ${dut_node} | ${dut_to_tg_if2} | ${net3_ip2}
-| | ... | ${tg_to_dut_if2_mac}
+| | ... | gateway=${net2_ip1} | interface=${vhost2}
+| | ... | vrf=${fib_table_2}
+| | VPP Add IP Neighbor | ${dut_node} | ${vhost1} | ${net2_ip2} | ${vhost2_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut_node} | ${dut_to_tg_if2} | ${net3_ip2} | ${tg_to_dut_if2_mac}
 | | When Configure VM for vhost L2BD forwarding
 | | ... | ${dut_node} | ${sock1} | ${sock2}
 | | Then Send packet and verify headers
 | | When Configure VM for vhost L2BD forwarding
 | | ... | ${dut_node} | ${sock1} | ${sock2}
 | | Then Send packet and verify headers
index 48070e9..508e628 100644 (file)
@@ -19,6 +19,7 @@
 | Library | resources.libraries.python.Trace
 | Library | resources.libraries.python.VhostUser
 | Library | resources.libraries.python.VPPUtil
 | Library | resources.libraries.python.Trace
 | Library | resources.libraries.python.VhostUser
 | Library | resources.libraries.python.VPPUtil
+| ...
 | Resource | resources/libraries/robot/ip/ip6.robot
 | Resource | resources/libraries/robot/l2/l2_bridge_domain.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/ip/ip6.robot
 | Resource | resources/libraries/robot/l2/l2_bridge_domain.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | | ${vhost2}= | And Vpp Create Vhost User Interface | ${dut_node} | ${sock2}
 | | And Set Interface State | ${dut_node} | ${vhost1} | up
 | | And Set Interface State | ${dut_node} | ${vhost2} | up
 | | ${vhost2}= | And Vpp Create Vhost User Interface | ${dut_node} | ${sock2}
 | | And Set Interface State | ${dut_node} | ${vhost1} | up
 | | And Set Interface State | ${dut_node} | ${vhost2} | up
-| | And Add Fib Table | ${dut_node} | ${fib_table_2}
-| | And Assign Interface To Fib Table | ${dut_node}
-| | ... | ${vhost2} | ${fib_table_2}
-| | And Assign Interface To Fib Table | ${dut_node}
-| | ... | ${dut_to_tg_if2} | ${fib_table_2}
-| | And Vpp Set If IPv6 Addr
+| | And Add Fib Table | ${dut_node} | ${fib_table_2} | ipv6=${True}
+| | And Assign Interface To Fib Table
+| | ... | ${dut_node} | ${vhost2} | ${fib_table_2} | ipv6=${True}
+| | And Assign Interface To Fib Table
+| | ... | ${dut_node} | ${dut_to_tg_if2} | ${fib_table_2} | ipv6=${True}
+| | And VPP Interface Set IP Address
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${net1_ip1} | ${prefix_length}
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${net1_ip1} | ${prefix_length}
-| | And Vpp Set If IPv6 Addr
+| | And VPP Interface Set IP Address
 | | ... | ${dut_node} | ${vhost1} | ${net2_ip1} | ${prefix_length}
 | | ... | ${dut_node} | ${vhost1} | ${net2_ip1} | ${prefix_length}
-| | And Vpp Set If IPv6 Addr
+| | And VPP Interface Set IP Address
 | | ... | ${dut_node} | ${vhost2} | ${net2_ip2} | ${prefix_length}
 | | ... | ${dut_node} | ${vhost2} | ${net2_ip2} | ${prefix_length}
-| | And Vpp Set If IPv6 Addr
+| | And VPP Interface Set IP Address
 | | ... | ${dut_node} | ${dut_to_tg_if2} | ${net3_ip1} | ${prefix_length}
 | | And Suppress ICMPv6 router advertisement message | ${nodes}
 | | ${vhost2_mac}= | And Get Vhost User Mac By SW Index
 | | ... | ${dut_node} | ${vhost2}
 | | ... | ${dut_node} | ${dut_to_tg_if2} | ${net3_ip1} | ${prefix_length}
 | | And Suppress ICMPv6 router advertisement message | ${nodes}
 | | ${vhost2_mac}= | And Get Vhost User Mac By SW Index
 | | ... | ${dut_node} | ${vhost2}
-| | And Vpp Route Add | ${dut_node} | ${net3} | ${prefix_length}
-| | ... | gateway=${net2_ip2} | interface=${vhost1} | resolve_attempts=${NONE}
-| | ... | count=${NONE}
-| | And Vpp Route Add | ${dut_node} | ${net1} | ${prefix_length}
-| | ... | gateway=${net2_ip1} | interface=${vhost2} | resolve_attempts=${NONE}
-| | ... | count=${NONE} | vrf=${fib_table_2}
-| | Add IP Neighbor | ${dut_node} | ${vhost1} | ${net2_ip2} | ${vhost2_mac}
-| | Add IP Neighbor | ${dut_node} | ${dut_to_tg_if2} | ${net3_ip2}
-| | ... | ${tg_to_dut_if2_mac}
+| | And Vpp Route Add
+| | ... | ${dut_node} | ${net3} | ${prefix_length}
+| | ... | gateway=${net2_ip2} | interface=${vhost1}
+| | And Vpp Route Add
+| | ... | ${dut_node} | ${net1} | ${prefix_length}
+| | ... | gateway=${net2_ip1} | interface=${vhost2} | vrf=${fib_table_2}
+| | VPP Add IP Neighbor
+| | ... | ${dut_node} | ${vhost1} | ${net2_ip2} | ${vhost2_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut_node} | ${dut_to_tg_if2} | ${net3_ip2} | ${tg_to_dut_if2_mac}
 | | When Configure VM for vhost L2BD forwarding
 | | ... | ${dut_node} | ${sock1} | ${sock2}
 | | Then Send packet and verify headers
 | | When Configure VM for vhost L2BD forwarding
 | | ... | ${dut_node} | ${sock1} | ${sock2}
 | | Then Send packet and verify headers
index d5b89ec..123969a 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
-| Resource | resources/libraries/robot/shared/default.robot
-| Resource | resources/libraries/robot/shared/testing_path.robot
+| Library | resources.libraries.python.IPv6Util
+| Library | resources.libraries.python.Trace
+| ...
 | Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/l2/tagging.robot
 | Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/l2/tagging.robot
+| Resource | resources/libraries/robot/shared/default.robot
+| Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
-| Library  | resources.libraries.python.Trace
-| Library | resources.libraries.python.IPv6Util
+| ...
 | Force Tags | 3_NODE_DOUBLE_LINK_TOPO | VM_ENV | HW_ENV | VPP_VM_ENV
 | ... | SKIP_VPP_PATCH
 | Test Setup | Set up functional test
 | Force Tags | 3_NODE_DOUBLE_LINK_TOPO | VM_ENV | HW_ENV | VPP_VM_ENV
 | ... | SKIP_VPP_PATCH
 | Test Setup | Set up functional test
 | | ${vlan2_name} | ${vlan2_index}= | Create vlan sub-interface
 | | ... | ${dut_node} | ${dut_to_tg_if2} | ${tag_2}
 | |
 | | ${vlan2_name} | ${vlan2_index}= | Create vlan sub-interface
 | | ... | ${dut_node} | ${dut_to_tg_if2} | ${tag_2}
 | |
-| | Set Interface Address | ${dut_node}
+| | VPP Interface Set IP Address | ${dut_node}
 | | ... | ${dut_to_tg_if1} | ${ip4_net0_1} | ${ip4_prefix}
 | | ... | ${dut_to_tg_if1} | ${ip4_net0_1} | ${ip4_prefix}
-| | Set Interface Address | ${dut_node}
+| | VPP Interface Set IP Address | ${dut_node}
 | | ... | ${vlan1_index} | ${ip4_net1_1} | ${ip4_prefix}
 | | ... | ${vlan1_index} | ${ip4_net1_1} | ${ip4_prefix}
-| | Set Interface Address | ${dut_node}
+| | VPP Interface Set IP Address | ${dut_node}
 | | ... | ${vlan2_index} | ${ip4_net2_1} | ${ip4_prefix}
 | |
 | | ... | ${vlan2_index} | ${ip4_net2_1} | ${ip4_prefix}
 | |
-| | Add IP Neighbor | ${dut_node} | ${dut_to_tg_if1} | ${ip4_net0_2}
-| | ... | ${tg_to_dut_if1_mac}
-| | Add IP Neighbor | ${dut_node} | ${vlan1_index} | ${ip4_net1_2}
-| | ... | ${tg_to_dut_if2_mac}
-| | Add IP Neighbor | ${dut_node} | ${vlan2_index} | ${ip4_net2_2}
-| | ... | ${tg_to_dut_if2_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut_node} | ${dut_to_tg_if1} | ${ip4_net0_2} | ${tg_to_dut_if1_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut_node} | ${vlan1_index} | ${ip4_net1_2} | ${tg_to_dut_if2_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut_node} | ${vlan2_index} | ${ip4_net2_2} | ${tg_to_dut_if2_mac}
index 6db1641..ef84aa2 100644 (file)
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
-| Library | resources.libraries.python.Trace
 | Library | resources.libraries.python.Cop
 | Library | resources.libraries.python.Cop
+| Library | resources.libraries.python.Trace
+| ...
+| Resource | resources/libraries/robot/ip/ip4.robot
+| Resource | resources/libraries/robot/l2/l2_xconnect.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
-| Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
-| Resource | resources/libraries/robot/l2/l2_xconnect.robot
-| Variables  | resources/libraries/python/IPv4NodeAddress.py | ${nodes}
+| ...
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO
+| ...
 | Test Setup | Set up functional test
 | Test Setup | Set up functional test
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
+| ...
 | Documentation | *COP Security IPv4 Blacklist Tests*
 | ...
 | ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
 | Documentation | *COP Security IPv4 Blacklist Tests*
 | ...
 | ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
@@ -53,7 +57,6 @@
 | ${cop_dut_ip}= | 16.0.0.0
 
 | ${ip_prefix}= | 24
 | ${cop_dut_ip}= | 16.0.0.0
 
 | ${ip_prefix}= | 24
-| ${nodes_ipv4_addresses}= | ${nodes_ipv4_addr}
 
 | ${fib_table_number}= | 1
 
 
 | ${fib_table_number}= | 1
 
 | | And Set interfaces in 3-node circular topology up
 | | And Configure L2XC
 | | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_tg}
 | | And Set interfaces in 3-node circular topology up
 | | And Configure L2XC
 | | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_tg}
-| | And Set Interface Address
+| | And VPP Interface Set IP Address
 | | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_if1_ip} | ${ip_prefix}
 | | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_if1_ip} | ${ip_prefix}
-| | And Set Interface Address
+| | And VPP Interface Set IP Address
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_if2_ip} | ${ip_prefix}
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_if2_ip} | ${ip_prefix}
-| | And Add Arp On Dut
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_if1_ip_GW} | ${tg_to_dut1_mac}
 | | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_if1_ip_GW} | ${tg_to_dut1_mac}
-| | And Add Arp On Dut
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_if2_ip_GW} | ${tg_to_dut2_mac}
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_if2_ip_GW} | ${tg_to_dut2_mac}
-| | And Vpp Route Add | ${dut1_node}
-| | ... | ${test_dst_ip} | ${ip_prefix} | gateway=${dut1_if2_ip_GW}
-| | ... | interface=${dut1_to_dut2}
+| | And Vpp Route Add | ${dut1_node} | ${test_dst_ip} | ${ip_prefix}
+| | ... | gateway=${dut1_if2_ip_GW} | interface=${dut1_to_dut2}
 | | And Add fib table | ${dut1_node} | ${fib_table_number}
 | | When COP Add whitelist Entry
 | | ... | ${dut1_node} | ${dut1_to_tg} | ip4 | ${fib_table_number}
 | | And Add fib table | ${dut1_node} | ${fib_table_number}
 | | When COP Add whitelist Entry
 | | ... | ${dut1_node} | ${dut1_to_tg} | ip4 | ${fib_table_number}
index 31ef0fa..5fcc74f 100644 (file)
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
-| Library | resources.libraries.python.Trace
 | Library | resources.libraries.python.Cop
 | Library | resources.libraries.python.Cop
+| Library | resources.libraries.python.Trace
+| ...
+| Resource | resources/libraries/robot/ip/ip4.robot
+| Resource | resources/libraries/robot/l2/l2_xconnect.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
-| Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
-| Resource | resources/libraries/robot/l2/l2_xconnect.robot
-| Variables  | resources/libraries/python/IPv4NodeAddress.py | ${nodes}
+| ...
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO
+| ...
 | Test Setup | Set up functional test
 | Test Setup | Set up functional test
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
+| ...
 | Documentation | *COP Security IPv4 Whitelist Tests*
 | ...
 | ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
 | Documentation | *COP Security IPv4 Whitelist Tests*
 | ...
 | ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
@@ -53,7 +57,6 @@
 | ${cop_dut_ip}= | 16.0.0.0
 
 | ${ip_prefix}= | 24
 | ${cop_dut_ip}= | 16.0.0.0
 
 | ${ip_prefix}= | 24
-| ${nodes_ipv4_addresses}= | ${nodes_ipv4_addr}
 
 | ${fib_table_number}= | 1
 
 
 | ${fib_table_number}= | 1
 
 | | And Set interfaces in 3-node circular topology up
 | | And Configure L2XC
 | | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_tg}
 | | And Set interfaces in 3-node circular topology up
 | | And Configure L2XC
 | | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_tg}
-| | And Set Interface Address
+| | And VPP Interface Set IP Address
 | | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_if1_ip} | ${ip_prefix}
 | | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_if1_ip} | ${ip_prefix}
-| | And Set Interface Address
+| | And VPP Interface Set IP Address
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_if2_ip} | ${ip_prefix}
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_if2_ip} | ${ip_prefix}
-| | And Add Arp On Dut
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_if1_ip_GW} | ${tg_to_dut1_mac}
 | | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_if1_ip_GW} | ${tg_to_dut1_mac}
-| | And Add Arp On Dut
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_if2_ip_GW} | ${tg_to_dut2_mac}
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_if2_ip_GW} | ${tg_to_dut2_mac}
-| | And Vpp Route Add | ${dut1_node}
-| | ... | ${test_dst_ip} | ${ip_prefix} | gateway=${dut1_if2_ip_GW}
-| | ... | interface=${dut1_to_dut2}
+| | And Vpp Route Add | ${dut1_node} | ${test_dst_ip} | ${ip_prefix}
+| | ... | gateway=${dut1_if2_ip_GW} | interface=${dut1_to_dut2}
 | | And Add fib table | ${dut1_node} | ${fib_table_number}
 | | And Add fib table | ${dut1_node} | ${fib_table_number}
-| | And Vpp Route Add | ${dut1_node}
-| | ... | ${cop_dut_ip} | ${ip_prefix} | vrf=${fib_table_number} | local=${TRUE}
+| | And Vpp Route Add | ${dut1_node} | ${cop_dut_ip} | ${ip_prefix}
+| | ... | vrf=${fib_table_number} | local=${TRUE}
 | | When COP Add whitelist Entry
 | | ... | ${dut1_node} | ${dut1_to_tg} | ip4 | ${fib_table_number}
 | | And COP interface enable or disable | ${dut1_node} | ${dut1_to_tg} | enable
 | | When COP Add whitelist Entry
 | | ... | ${dut1_node} | ${dut1_to_tg} | ip4 | ${fib_table_number}
 | | And COP interface enable or disable | ${dut1_node} | ${dut1_to_tg} | enable
index 0c07bf6..edc9480 100644 (file)
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
-| Resource | resources/libraries/robot/shared/default.robot
+| Library | resources.libraries.python.Classify.Classify
+| Library | resources.libraries.python.Trace
+| ...
+| Resource | resources/libraries/robot/ip/ip4.robot
+| Resource | resources/libraries/robot/l2/l2_traffic.robot
+| Resource | resources/libraries/robot/l2/l2_xconnect.robot
 | Resource | resources/libraries/robot/shared/counters.robot
 | Resource | resources/libraries/robot/shared/counters.robot
+| Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
-| Resource | resources/libraries/robot/ip/ip4.robot
-| Resource | resources/libraries/robot/l2/l2_xconnect.robot
-| Resource | resources/libraries/robot/l2/l2_traffic.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
-| Library | resources.libraries.python.Classify.Classify
-| Library | resources.libraries.python.Trace
+| ...
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO | SKIP_VPP_PATCH
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO | SKIP_VPP_PATCH
+| ...
 | Test Setup | Set up functional test
 | Test Setup | Set up functional test
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
+| ...
 | Documentation | *IPv4 routing with ingress ACL test cases*
 | ...
 | ... | Encapsulations: Eth-IPv4 on links TG-DUT1, TG-DUT2, DUT1-DUT2. IPv4
 | Documentation | *IPv4 routing with ingress ACL test cases*
 | ...
 | ... | Encapsulations: Eth-IPv4 on links TG-DUT1, TG-DUT2, DUT1-DUT2. IPv4
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
-| | And Add Arp On Dut
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
-| | And Add Arp On Dut
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
-| | And Add Arp On Dut
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
-| | And Add Arp On Dut
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
-| | And Add Arp On Dut
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
-| | And Add Arp On Dut
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
-| | And Add Arp On Dut
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
-| | And Add Arp On Dut
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
-| | And Add Arp On Dut
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
-| | And Add Arp On Dut
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
-| | And Add Arp On Dut
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
index 01b3f13..4f2bcfe 100644 (file)
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
-| Resource | resources/libraries/robot/shared/default.robot
+| Library | resources.libraries.python.Trace
+| ...
+| Resource | resources/libraries/robot/ip/ip4.robot
+| Resource | resources/libraries/robot/l2/l2_xconnect.robot
 | Resource | resources/libraries/robot/shared/counters.robot
 | Resource | resources/libraries/robot/shared/counters.robot
+| Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
-| Resource | resources/libraries/robot/ip/ip4.robot
-| Resource | resources/libraries/robot/l2/l2_xconnect.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
-| Library | resources.libraries.python.Trace
+| ...
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO | SKIP_VPP_PATCH
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO | SKIP_VPP_PATCH
+| ...
 | Test Setup | Set up functional test
 | Test Setup | Set up functional test
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
+| ...
 | Documentation | *IPv4 ARP test cases*
 | ...
 | ... | RFC826 ARP: Eth-IPv4 and Eth-ARP on links TG-DUT1, TG-DUT2, DUT1-DUT2:
 | Documentation | *IPv4 ARP test cases*
 | ...
 | ... | RFC826 ARP: Eth-IPv4 and Eth-ARP on links TG-DUT1, TG-DUT2, DUT1-DUT2:
@@ -50,9 +55,9 @@
 | | And Set interfaces in 3-node circular topology up
 | | And Configure L2XC
 | | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_tg}
 | | And Set interfaces in 3-node circular topology up
 | | And Configure L2XC
 | | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_tg}
-| | When Set Interface Address | ${dut1_node}
+| | When VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
 | | Then Send packet and verify ARP request | ${tg_node}
 | | ... | ${test_src_ip} | ${dut1_to_dut2_ip_GW} | ${tg_to_dut1}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
 | | Then Send packet and verify ARP request | ${tg_node}
 | | ... | ${test_src_ip} | ${dut1_to_dut2_ip_GW} | ${tg_to_dut1}
 | | And Set interfaces in 3-node circular topology up
 | | And Configure L2XC
 | | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_tg}
 | | And Set interfaces in 3-node circular topology up
 | | And Configure L2XC
 | | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_tg}
-| | When Set Interface Address | ${dut1_node}
+| | When VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${test_dst_ip} | ${prefix_length}
 | | ... | gateway=${dut1_to_dut2_ip_GW} | interface=${dut1_to_dut2}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${test_dst_ip} | ${prefix_length}
 | | ... | gateway=${dut1_to_dut2_ip_GW} | interface=${dut1_to_dut2}
-| | ... | resolve_attempts=${NONE}
 | | Then Send packet and verify ARP request | ${tg_node}
 | | ... | ${test_src_ip} | ${test_dst_ip} | ${tg_to_dut1}
 | | ... | ${dut1_to_tg_mac} | ${tg_to_dut2} | ${dut1_to_dut2_mac}
 | | Then Send packet and verify ARP request | ${tg_node}
 | | ... | ${test_src_ip} | ${test_dst_ip} | ${tg_to_dut1}
 | | ... | ${dut1_to_tg_mac} | ${tg_to_dut2} | ${dut1_to_dut2_mac}
index db32c07..3dbb2ab 100644 (file)
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
+| Library | resources.libraries.python.Trace
+| ...
+| Resource | resources/libraries/robot/ip/ip4.robot
+| Resource | resources/libraries/robot/features/dhcp_client.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
-| Resource | resources/libraries/robot/features/dhcp_client.robot
-| Resource | resources/libraries/robot/ip/ip4.robot
-| Library | resources.libraries.python.Trace
+| ...
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO | SKIP_VPP_PATCH
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO | SKIP_VPP_PATCH
+| ...
 | Test Setup | Set up functional test
 | Test Setup | Set up functional test
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
-| Documentation | *DHCPv4 Client related test cases*
+| ...
+| Documentation | DHCPv4 Client related test cases
 
 *** Variables ***
 | ${client_hostname}= | dhcp-client
 
 *** Variables ***
 | ${client_hostname}= | dhcp-client
@@ -63,8 +68,7 @@
 | | Given Configure path in 2-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
 | | And Set interfaces in 2-node circular topology up
 | | Given Configure path in 2-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
 | | And Set interfaces in 2-node circular topology up
-| | And VPP Route Add | ${dut_node} | 255.255.255.255 | 32 | gateway=${NONE}
-| | ... | interface=local | use_sw_index=${FALSE} | resolve_attempts=${NONE}
+| | And VPP Route Add | ${dut_node} | 255.255.255.255 | 32 | local=${TRUE}
 | | When Set DHCP client on Interface | ${dut_node} | ${dut_to_tg_if1}
 | | Then Verify DHCP REQUEST after OFFER | ${tg_node} | ${tg_to_dut_if1}
 | | ... | ${tg_to_dut_if1_mac} | ${server_ip}
 | | When Set DHCP client on Interface | ${dut_node} | ${dut_to_tg_if1}
 | | Then Verify DHCP REQUEST after OFFER | ${tg_node} | ${tg_to_dut_if1}
 | | ... | ${tg_to_dut_if1_mac} | ${server_ip}
@@ -79,8 +83,7 @@
 | | Given Configure path in 2-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
 | | And Set interfaces in 2-node circular topology up
 | | Given Configure path in 2-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
 | | And Set interfaces in 2-node circular topology up
-| | And VPP Route Add | ${dut_node} | 255.255.255.255 | 32 | gateway=${NONE}
-| | ... | interface=local | use_sw_index=${FALSE} | resolve_attempts=${NONE}
+| | And VPP Route Add | ${dut_node} | 255.255.255.255 | 32 | local=${TRUE}
 | | When Set DHCP client on Interface | ${dut_node} | ${dut_to_tg_if1}
 | | Then Run Keyword And Expect Error | DHCP REQUEST Rx timeout
 | | ... | Verify DHCP REQUEST after OFFER | ${tg_node} | ${tg_to_dut_if1}
 | | When Set DHCP client on Interface | ${dut_node} | ${dut_to_tg_if1}
 | | Then Run Keyword And Expect Error | DHCP REQUEST Rx timeout
 | | ... | Verify DHCP REQUEST after OFFER | ${tg_node} | ${tg_to_dut_if1}
 | | Given Configure path in 2-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
 | | And Set interfaces in 2-node circular topology up
 | | Given Configure path in 2-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
 | | And Set interfaces in 2-node circular topology up
-| | And VPP Route Add | ${dut_node} | 255.255.255.255 | 32 | gateway=${NONE}
-| | ... | interface=local | use_sw_index=${FALSE} | resolve_attempts=${NONE}
+| | And VPP Route Add | ${dut_node} | 255.255.255.255 | 32 | local=${TRUE}
 | | When Set DHCP client on Interface | ${dut_node} | ${dut_to_tg_if1}
 | | And Configure IP on client via DHCP
 | | ... | ${tg_node} | ${tg_to_dut_if1}
 | | ... | ${tg_to_dut_if1_mac} | ${server_ip}
 | | ... | ${client_ip} | ${client_mask}
 | | ... | ${lease_time}
 | | When Set DHCP client on Interface | ${dut_node} | ${dut_to_tg_if1}
 | | And Configure IP on client via DHCP
 | | ... | ${tg_node} | ${tg_to_dut_if1}
 | | ... | ${tg_to_dut_if1_mac} | ${server_ip}
 | | ... | ${client_ip} | ${client_mask}
 | | ... | ${lease_time}
-| | And Add Arp On Dut | ${dut_node} | ${dut_to_tg_if1} | ${server_ip}
+| | And VPP Add IP Neighbor | ${dut_node} | ${dut_to_tg_if1} | ${server_ip}
 | | ... | ${tg_to_dut_if1_mac}
 | | Then Send ICMP echo request and verify answer
 | | ... | ${tg_node} | ${tg_to_dut_if1}
 | | ... | ${tg_to_dut_if1_mac}
 | | Then Send ICMP echo request and verify answer
 | | ... | ${tg_node} | ${tg_to_dut_if1}
index e655cf6..24514d0 100644 (file)
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
+| Library | resources.libraries.python.Trace
+| ...
+| Resource | resources/libraries/robot/ip/ip4.robot
+| Resource | resources/libraries/robot/features/dhcp_proxy.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
-| Resource | resources/libraries/robot/features/dhcp_proxy.robot
-| Resource | resources/libraries/robot/ip/ip4.robot
-| Library | resources.libraries.python.Trace
+| ...
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO | SKIP_VPP_PATCH
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO | SKIP_VPP_PATCH
+| ...
 | Test Setup | Set up functional test
 | Test Setup | Set up functional test
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
+| ...
 | Documentation | *DHCPv4 proxy test cases*
 | ...
 | ... | *[Top] Network Topologies:* TG = DUT
 | Documentation | *DHCPv4 proxy test cases*
 | ...
 | ... | *[Top] Network Topologies:* TG = DUT
 | | Given Configure path in 2-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
 | | And Set interfaces in 2-node circular topology up
 | | Given Configure path in 2-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
 | | And Set interfaces in 2-node circular topology up
-| | And VPP Route Add | ${dut_node} | 255.255.255.255 | 32 | gateway=${NONE}
-| | ... | interface=local | use_sw_index=${FALSE} | resolve_attempts=${NONE}
-| | And Set Interface Address | ${dut_node}
+| | And VPP Route Add | ${dut_node} | 255.255.255.255 | 32 | local=${True}
+| | And VPP Interface Set IP Address | ${dut_node}
 | | ... | ${dut_to_tg_if1} | ${dut_to_tg_if1_ip} | ${prefix_length}
 | | ... | ${dut_to_tg_if1} | ${dut_to_tg_if1_ip} | ${prefix_length}
-| | And Set Interface Address | ${dut_node}
+| | And VPP Interface Set IP Address | ${dut_node}
 | | ... | ${dut_to_tg_if2} | ${dut_to_tg_if2_ip} | ${prefix_length}
 | | ... | ${dut_to_tg_if2} | ${dut_to_tg_if2_ip} | ${prefix_length}
-| | And Add Arp On Dut | ${dut_node} | ${dut_to_tg_if2} | ${dhcp_server_ip}
+| | And VPP Add IP Neighbor | ${dut_node} | ${dut_to_tg_if2} | ${dhcp_server_ip}
 | | ... | ${tg_to_dut_if2_mac}
 | | When DHCP Proxy Config | ${dut_node} | ${dhcp_server_ip}
 | | ... | ${dut_to_tg_if1_ip}
 | | ... | ${tg_to_dut_if2_mac}
 | | When DHCP Proxy Config | ${dut_node} | ${dhcp_server_ip}
 | | ... | ${dut_to_tg_if1_ip}
 | | Given Configure path in 2-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
 | | And Set interfaces in 2-node circular topology up
 | | Given Configure path in 2-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
 | | And Set interfaces in 2-node circular topology up
-| | And VPP Route Add | ${dut_node} | 255.255.255.255 | 32 | gateway=${NONE}
-| | ... | interface=local | use_sw_index=${FALSE} | resolve_attempts=${NONE}
-| | And Set Interface Address | ${dut_node}
+| | And VPP Route Add | ${dut_node} | 255.255.255.255 | 32 | local=${True}
+| | And VPP Interface Set IP Address | ${dut_node}
 | | ... | ${dut_to_tg_if1} | ${dut_to_tg_if1_ip} | ${prefix_length}
 | | ... | ${dut_to_tg_if1} | ${dut_to_tg_if1_ip} | ${prefix_length}
-| | And Set Interface Address | ${dut_node}
+| | And VPP Interface Set IP Address | ${dut_node}
 | | ... | ${dut_to_tg_if2} | ${dut_to_tg_if2_ip} | ${prefix_length}
 | | ... | ${dut_to_tg_if2} | ${dut_to_tg_if2_ip} | ${prefix_length}
-| | And Add Arp On Dut | ${dut_node} | ${dut_to_tg_if2} | ${dhcp_server_ip}
+| | And VPP Add IP Neighbor | ${dut_node} | ${dut_to_tg_if2} | ${dhcp_server_ip}
 | | ... | ${tg_to_dut_if2_mac}
 | | When DHCP Proxy Config | ${dut_node} | ${dhcp_server_ip}
 | | ... | ${dut_to_tg_if1_ip}
 | | ... | ${tg_to_dut_if2_mac}
 | | When DHCP Proxy Config | ${dut_node} | ${dhcp_server_ip}
 | | ... | ${dut_to_tg_if1_ip}
index fcdfe98..4738699 100644 (file)
 
 
 *** Settings ***
 
 
 *** Settings ***
-| Resource | resources/libraries/robot/shared/default.robot
+| Library | resources.libraries.python.Trace
+| ...
+| Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/shared/counters.robot
 | Resource | resources/libraries/robot/shared/counters.robot
+| Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
-| Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
-| Library | resources.libraries.python.Trace
+| ...
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO | SKIP_VPP_PATCH
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO | SKIP_VPP_PATCH
+| ...
 | Test Setup | Set up functional test
 | Test Setup | Set up functional test
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
+| ...
 | Documentation | *Ipv4 Multipath routing test cases*
 | ...
 | ... | *[Top] Network topologies:* TG=DUT 2-node topology with two links\
 | Documentation | *Ipv4 Multipath routing test cases*
 | ...
 | ... | *[Top] Network topologies:* TG=DUT 2-node topology with two links\
 | | Given Configure path in 2-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
 | | And Set interfaces in 2-node circular topology up
 | | Given Configure path in 2-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
 | | And Set interfaces in 2-node circular topology up
-| | And Set Interface Address | ${dut_node}
+| | And VPP Interface Set IP Address | ${dut_node}
 | | ... | ${dut_to_tg_if2} | ${ip_1} | ${prefix_length}
 | | ... | ${dut_to_tg_if2} | ${ip_1} | ${prefix_length}
-| | And Set Interface Address | ${dut_node}
+| | And VPP Interface Set IP Address | ${dut_node}
 | | ... | ${dut_to_tg_if1} | ${ip_2} | ${prefix_length}
 | | ... | ${dut_to_tg_if1} | ${ip_2} | ${prefix_length}
-| | And Add Arp On Dut
+| | And VPP Add IP Neighbor
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${neighbor_1_ip} | ${neighbor_1_mac}
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${neighbor_1_ip} | ${neighbor_1_mac}
-| | And Add Arp On Dut
+| | And VPP Add IP Neighbor
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${neighbor_2_ip} | ${neighbor_2_mac}
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${neighbor_2_ip} | ${neighbor_2_mac}
-| | When Vpp Route Add
-| | ... | ${dut_node} | ${test_dst_ip} | ${prefix_length}
+| | When Vpp Route Add | ${dut_node} | ${test_dst_ip} | ${prefix_length}
 | | ... | gateway=${neighbor_1_ip} | interface=${dut_to_tg_if1}
 | | ... | gateway=${neighbor_1_ip} | interface=${dut_to_tg_if1}
-| | ... | resolve_attempts=${NONE} | multipath=${TRUE}
-| | And Vpp Route Add
-| | ... | ${dut_node} | ${test_dst_ip} | ${prefix_length}
+| | ... | multipath=${TRUE}
+| | And Vpp Route Add | ${dut_node} | ${test_dst_ip} | ${prefix_length}
 | | ... | gateway=${neighbor_2_ip} | interface=${dut_to_tg_if1}
 | | ... | gateway=${neighbor_2_ip} | interface=${dut_to_tg_if1}
-| | ... | resolve_attempts=${NONE} | multipath=${TRUE}
+| | ... | multipath=${TRUE}
 | | Then Send packets and verify multipath routing | ${tg_node}
 | | ... | ${tg_to_dut_if2} | ${tg_to_dut_if1} | ${test_src_ip} | ${test_dst_ip}
 | | ... | ${tg_to_dut_if2_mac} | ${dut_to_tg_if2_mac} | ${dut_to_tg_if1_mac}
 | | Then Send packets and verify multipath routing | ${tg_node}
 | | ... | ${tg_to_dut_if2} | ${tg_to_dut_if1} | ${test_src_ip} | ${test_dst_ip}
 | | ... | ${tg_to_dut_if2_mac} | ${dut_to_tg_if2_mac} | ${dut_to_tg_if1_mac}
index 4348c73..da1988d 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
+| Library | resources.libraries.python.ProxyArp
+| Library | resources.libraries.python.Trace
+| ...
+| Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
-| Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
-| Library | resources.libraries.python.Trace
-| Library | resources.libraries.python.ProxyArp
+| ...
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO | SKIP_VPP_PATCH
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO | SKIP_VPP_PATCH
+| ...
 | Test Setup | Set up functional test
 | Test Setup | Set up functional test
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
+| ...
 | Documentation | *RFC1027 Proxy ARP test cases*
 | ...
 | ... | *[Top] Network topologies:* TG-DUT1 2-node topology with
 | Documentation | *RFC1027 Proxy ARP test cases*
 | ...
 | ... | *[Top] Network topologies:* TG-DUT1 2-node topology with
 | | And Set interfaces in 3-node circular topology up
 | | ${dut1_to_tg_name}= | Get interface name | ${dut1_node} | ${dut1_to_tg}
 | | ${tg_to_dut1_name}= | Get interface name | ${tg_node} | ${tg_to_dut1}
 | | And Set interfaces in 3-node circular topology up
 | | ${dut1_to_tg_name}= | Get interface name | ${dut1_node} | ${dut1_to_tg}
 | | ${tg_to_dut1_name}= | Get interface name | ${tg_node} | ${tg_to_dut1}
-| | When Set Interface Address | ${dut1_node}
+| | When VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | And Vpp Add Proxy ARP | ${dut1_node} | ${lo_ip4_addr} | ${hi_ip4_addr}
 | | And Vpp Proxy ARP Interface Enable | ${dut1_node} | ${dut1_to_tg_name}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | And Vpp Add Proxy ARP | ${dut1_node} | ${lo_ip4_addr} | ${hi_ip4_addr}
 | | And Vpp Proxy ARP Interface Enable | ${dut1_node} | ${dut1_to_tg_name}
-| | Then Send ARP Request | ${tg_node} | ${tg_to_dut1_name}
-| | ...                   | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
-| | ...                   | ${tg_to_dut1_ip} | ${pass_test_ip}
+| | Then Send ARP Request | ${tg_node} | ${tg_to_dut1_name} | ${tg_to_dut1_mac}
+| | ... | ${dut1_to_tg_mac} | ${tg_to_dut1_ip} | ${pass_test_ip}
 
 | TC02: DUT sends ARP reply on behalf of another machine from beginning of the IP range
 | | [Documentation]
 
 | TC02: DUT sends ARP reply on behalf of another machine from beginning of the IP range
 | | [Documentation]
 | | And Set interfaces in 3-node circular topology up
 | | ${dut1_to_tg_name}= | Get interface name | ${dut1_node} | ${dut1_to_tg}
 | | ${tg_to_dut1_name}= | Get interface name | ${tg_node} | ${tg_to_dut1}
 | | And Set interfaces in 3-node circular topology up
 | | ${dut1_to_tg_name}= | Get interface name | ${dut1_node} | ${dut1_to_tg}
 | | ${tg_to_dut1_name}= | Get interface name | ${tg_node} | ${tg_to_dut1}
-| | When Set Interface Address | ${dut1_node}
+| | When VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | And Vpp Add Proxy ARP | ${dut1_node} | ${lo_ip4_addr} | ${hi_ip4_addr}
 | | And Vpp Proxy ARP Interface Enable | ${dut1_node} | ${dut1_to_tg_name}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | And Vpp Add Proxy ARP | ${dut1_node} | ${lo_ip4_addr} | ${hi_ip4_addr}
 | | And Vpp Proxy ARP Interface Enable | ${dut1_node} | ${dut1_to_tg_name}
-| | Then Send ARP Request | ${tg_node} | ${tg_to_dut1_name}
-| | ...                   | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
-| | ...                   | ${tg_to_dut1_ip} | ${pass_test_lo_ip}
+| | Then Send ARP Request | ${tg_node} | ${tg_to_dut1_name} | ${tg_to_dut1_mac}
+| | ... | ${dut1_to_tg_mac} | ${tg_to_dut1_ip} | ${pass_test_lo_ip}
 
 | TC03: DUT sends ARP reply on behalf of another machine from end of the IP range
 | | [Documentation]
 
 | TC03: DUT sends ARP reply on behalf of another machine from end of the IP range
 | | [Documentation]
 | | And Set interfaces in 3-node circular topology up
 | | ${dut1_to_tg_name}= | Get interface name | ${dut1_node} | ${dut1_to_tg}
 | | ${tg_to_dut1_name}= | Get interface name | ${tg_node} | ${tg_to_dut1}
 | | And Set interfaces in 3-node circular topology up
 | | ${dut1_to_tg_name}= | Get interface name | ${dut1_node} | ${dut1_to_tg}
 | | ${tg_to_dut1_name}= | Get interface name | ${tg_node} | ${tg_to_dut1}
-| | When Set Interface Address | ${dut1_node}
+| | When VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | And Vpp Add Proxy ARP | ${dut1_node} | ${lo_ip4_addr} | ${hi_ip4_addr}
 | | And Vpp Proxy ARP Interface Enable | ${dut1_node} | ${dut1_to_tg_name}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | And Vpp Add Proxy ARP | ${dut1_node} | ${lo_ip4_addr} | ${hi_ip4_addr}
 | | And Vpp Proxy ARP Interface Enable | ${dut1_node} | ${dut1_to_tg_name}
-| | Then Send ARP Request | ${tg_node} | ${tg_to_dut1_name}
-| | ...                   | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
-| | ...                   | ${tg_to_dut1_ip} | ${pass_test_hi_ip}
+| | Then Send ARP Request | ${tg_node} | ${tg_to_dut1_name} | ${tg_to_dut1_mac}
+| | ... | ${dut1_to_tg_mac} | ${tg_to_dut1_ip} | ${pass_test_hi_ip}
 
 | TC04: DUT does not send ARP reply on behalf of another machine from below of the IP range
 | | [Documentation]
 
 | TC04: DUT does not send ARP reply on behalf of another machine from below of the IP range
 | | [Documentation]
 | | And Set interfaces in 3-node circular topology up
 | | ${dut1_to_tg_name}= | Get interface name | ${dut1_node} | ${dut1_to_tg}
 | | ${tg_to_dut1_name}= | Get interface name | ${tg_node} | ${tg_to_dut1}
 | | And Set interfaces in 3-node circular topology up
 | | ${dut1_to_tg_name}= | Get interface name | ${dut1_node} | ${dut1_to_tg}
 | | ${tg_to_dut1_name}= | Get interface name | ${tg_node} | ${tg_to_dut1}
-| | When Set Interface Address | ${dut1_node}
+| | When VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | And Vpp Add Proxy ARP | ${dut1_node} | ${lo_ip4_addr} | ${hi_ip4_addr}
 | | And Vpp Proxy ARP Interface Enable | ${dut1_node} | ${dut1_to_tg_name}
 | | Then ARP request should fail | ${tg_node} | ${tg_to_dut1_name}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | And Vpp Add Proxy ARP | ${dut1_node} | ${lo_ip4_addr} | ${hi_ip4_addr}
 | | And Vpp Proxy ARP Interface Enable | ${dut1_node} | ${dut1_to_tg_name}
 | | Then ARP request should fail | ${tg_node} | ${tg_to_dut1_name}
-| | ...                                 | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
-| | ...                                 | ${tg_to_dut1_ip} | ${fail_test_lo_ip}
+| | ... | ${tg_to_dut1_mac} | ${dut1_to_tg_mac} | ${tg_to_dut1_ip}
+| | ... | ${fail_test_lo_ip}
 
 | TC05: DUT does not send ARP reply on behalf of another machine from above of the IP range
 | | [Documentation]
 
 | TC05: DUT does not send ARP reply on behalf of another machine from above of the IP range
 | | [Documentation]
 | | And Set interfaces in 3-node circular topology up
 | | ${dut1_to_tg_name}= | Get interface name | ${dut1_node} | ${dut1_to_tg}
 | | ${tg_to_dut1_name}= | Get interface name | ${tg_node} | ${tg_to_dut1}
 | | And Set interfaces in 3-node circular topology up
 | | ${dut1_to_tg_name}= | Get interface name | ${dut1_node} | ${dut1_to_tg}
 | | ${tg_to_dut1_name}= | Get interface name | ${tg_node} | ${tg_to_dut1}
-| | When Set Interface Address | ${dut1_node}
+| | When VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | And Vpp Add Proxy ARP | ${dut1_node} | ${lo_ip4_addr} | ${hi_ip4_addr}
 | | And Vpp Proxy ARP Interface Enable | ${dut1_node} | ${dut1_to_tg_name}
 | | Then ARP request should fail | ${tg_node} | ${tg_to_dut1_name}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | And Vpp Add Proxy ARP | ${dut1_node} | ${lo_ip4_addr} | ${hi_ip4_addr}
 | | And Vpp Proxy ARP Interface Enable | ${dut1_node} | ${dut1_to_tg_name}
 | | Then ARP request should fail | ${tg_node} | ${tg_to_dut1_name}
-| | ...                                 | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
-| | ...                                 | ${tg_to_dut1_ip} | ${fail_test_hi_ip}
+| | ... | ${tg_to_dut1_mac} | ${dut1_to_tg_mac} | ${tg_to_dut1_ip}
+| | ... | ${fail_test_hi_ip}
index 63db07e..c98a05b 100644 (file)
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
-| Resource | resources/libraries/robot/shared/default.robot
+| Library | resources.libraries.python.IPUtil
+| Library | resources.libraries.python.Trace
+| ...
+| Resource | resources/libraries/robot/ip/ip4.robot
+| Resource | resources/libraries/robot/l2/l2_xconnect.robot
 | Resource | resources/libraries/robot/shared/counters.robot
 | Resource | resources/libraries/robot/shared/counters.robot
+| Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
-| Resource | resources/libraries/robot/ip/ip4.robot
-| Resource | resources/libraries/robot/l2/l2_xconnect.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
-| Library | resources.libraries.python.Trace
+| ...
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO
+| ...
 | Test Setup | Set up functional test
 | Test Setup | Set up functional test
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
+| ...
 | Documentation | *Source RPF check on IPv4 test cases*
 | ...
 | ... | *[Top] Network Topologies:* TG - DUT1 - DUT2 - TG
 | Documentation | *Source RPF check on IPv4 test cases*
 | ...
 | ... | *[Top] Network Topologies:* TG - DUT1 - DUT2 - TG
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
-| | And Add Arp On Dut
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${test_dst_ip} | ${prefix_length}
 | | ... | gateway=${dut1_to_dut2_ip_GW} | interface=${dut1_to_dut2}
 | | ... | resolve_attempts=${NONE}
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${test_dst_ip} | ${prefix_length}
 | | ... | gateway=${dut1_to_dut2_ip_GW} | interface=${dut1_to_dut2}
 | | ... | resolve_attempts=${NONE}
-| | And Add Arp On Dut
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip_GW}
 | | ... | ${tg_to_dut1_mac}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip_GW}
 | | ... | ${tg_to_dut1_mac}
 | | And Vpp Route Add
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
 | | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
-| | And Add Arp On Dut
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${test_dst_ip} | ${prefix_length}
 | | ... | gateway=${dut1_to_dut2_ip_GW} | interface=${dut1_to_dut2}
 | | ... | resolve_attempts=${NONE}
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${test_dst_ip} | ${prefix_length}
 | | ... | gateway=${dut1_to_dut2_ip_GW} | interface=${dut1_to_dut2}
 | | ... | resolve_attempts=${NONE}
-| | And Add Arp On Dut
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip_GW}
 | | ... | ${tg_to_dut1_mac}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip_GW}
 | | ... | ${tg_to_dut1_mac}
 | | And Vpp Route Add
index 0f71fab..da2128f 100644 (file)
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
-| Resource | resources/libraries/robot/shared/default.robot
+| Library  | resources.libraries.python.IPUtil
+| Library  | resources.libraries.python.Trace
+| ...
 | Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/ip/ip6.robot
 | Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/ip/ip6.robot
+| Resource | resources/libraries/robot/l2/l2_traffic.robot
+| Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
-| Resource | resources/libraries/robot/l2/l2_traffic.robot
-| Library  | resources.libraries.python.Trace
-| Library  | resources.libraries.python.IPUtil
+| ...
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO | SKIP_VPP_PATCH
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO | SKIP_VPP_PATCH
+| ...
 | Test Setup | Set up functional test
 | Test Setup | Set up functional test
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
+| ...
 | Documentation | *Vpn routed forwarding - baseline IPv4*
 | ... | *[Top] Network Topologies:* TG=DUT1=DUT2=TG 3-node topology with two
 | ... | links in between nodes.
 | Documentation | *Vpn routed forwarding - baseline IPv4*
 | ... | *[Top] Network Topologies:* TG=DUT1=DUT2=TG 3-node topology with two
 | ... | links in between nodes.
 | | ... | addresses are subsequently set on interfaces, and ARP is set for
 | | ... | neighbors. The last setting is route for each fib table.
 | | ...
 | | ... | addresses are subsequently set on interfaces, and ARP is set for
 | | ... | neighbors. The last setting is route for each fib table.
 | | ...
-| | ${dut1_if1_idx}= | Get Interface SW Index
-| | ... | ${dut1_node} | ${dut1_to_dut2_if1}
-| | ${dut1_if2_idx}= | Get Interface SW Index
-| | ... | ${dut1_node} | ${dut1_to_dut2_if2}
-| | ${dut2_if1_idx}= | Get Interface SW Index
-| | ... | ${dut2_node} | ${dut2_to_dut1_if1}
-| | ${dut2_if2_idx}= | Get Interface SW Index
-| | ... | ${dut2_node} | ${dut2_to_dut1_if2}
 | | And Add fib table | ${dut1_node} | ${fib_table_1}
 | | And Add fib table | ${dut1_node} | ${fib_table_2}
 | | And Add fib table | ${dut2_node} | ${fib_table_1}
 | | And Add fib table | ${dut2_node} | ${fib_table_2}
 | | And Add fib table | ${dut1_node} | ${fib_table_1}
 | | And Add fib table | ${dut1_node} | ${fib_table_2}
 | | And Add fib table | ${dut2_node} | ${fib_table_1}
 | | And Add fib table | ${dut2_node} | ${fib_table_2}
-| | And Vpp Route Add | ${dut1_node}
-| | ... | ${tg_dut2_ip1} | ${ip_prefix} | gateway=${fib_table_1}
-| | ... | interface=via ${dut2_to_dut1_ip1} sw_if_index ${dut1_if1_idx} multipath
-| | And Vpp Route Add | ${dut1_node}
-| | ... | ${tg_dut2_ip2} | ${ip_prefix} | gateway=${fib_table_2}
-| | ... | interface=via ${dut1_to_dut2_ip2} sw_if_index ${dut1_if2_idx} multipath
-| | And Vpp Route Add | ${dut2_node}
-| | ... | ${tg_dut1_ip1} | ${ip_prefix} | gateway=${fib_table_1}
-| | ... | interface=via ${dut2_to_dut1_ip1} sw_if_index ${dut2_if1_idx} multipath
-| | And Vpp Route Add | ${dut2_node}
-| | ... | ${tg_dut1_ip2} | ${ip_prefix} | gateway=${fib_table_2}
-| | ... | interface=via ${dut2_to_dut1_ip2} sw_if_index ${dut2_if2_idx} multipath
+| | And Vpp Route Add | ${dut1_node} | ${tg_dut2_ip1} | ${ip_prefix}
+| | ... | vrf=${fib_table_1} | interface=${dut1_to_dut2_if1}
+| | ... | gateway=${dut1_to_dut2_ip2} | multipath=${True}
+| | And Vpp Route Add | ${dut1_node} | ${tg_dut2_ip2} | ${ip_prefix}
+| | ... | vrf=${fib_table_2} | interface=${dut1_to_dut2_if2}
+| | ... | gateway=${dut1_to_dut2_ip2} | multipath=${True}
+| | And Vpp Route Add | ${dut2_node} | ${tg_dut1_ip1} | ${ip_prefix}
+| | ... | vrf=${fib_table_1} | interface=${dut2_to_dut1_if1}
+| | ... | gateway=${dut2_to_dut1_ip1} | multipath=${True}
+| | And Vpp Route Add | ${dut2_node} | ${tg_dut1_ip2} | ${ip_prefix}
+| | ... | vrf=${fib_table_2} | interface=${dut2_to_dut1_if2}
+| | ... | gateway=${dut2_to_dut1_ip2} | multipath=${True}
 
 | | Assign Interface To Fib Table
 | | ... | ${dut1_node} | ${dut1_to_dut2_if1} | ${fib_table_1}
 
 | | Assign Interface To Fib Table
 | | ... | ${dut1_node} | ${dut1_to_dut2_if1} | ${fib_table_1}
 | | Assign Interface To Fib Table
 | | ... | ${dut2_node} | ${dut2_to_tg_if2} | ${fib_table_2}
 
 | | Assign Interface To Fib Table
 | | ... | ${dut2_node} | ${dut2_to_tg_if2} | ${fib_table_2}
 
-| | And Set Interface Address
+| | And VPP Interface Set IP Address
 | | ... | ${dut1_node} | ${dut1_to_tg_if1} | ${dut1_to_tg_ip1} | ${ip_prefix}
 | | ... | ${dut1_node} | ${dut1_to_tg_if1} | ${dut1_to_tg_ip1} | ${ip_prefix}
-| | And Set Interface Address
+| | And VPP Interface Set IP Address
 | | ... | ${dut1_node} | ${dut1_to_tg_if2} | ${dut1_to_tg_ip2} | ${ip_prefix}
 | | ... | ${dut1_node} | ${dut1_to_tg_if2} | ${dut1_to_tg_ip2} | ${ip_prefix}
-| | And Set Interface Address
+| | And VPP Interface Set IP Address
 | | ... | ${dut1_node} | ${dut1_to_dut2_if1}
 | | ... | ${dut1_to_dut2_ip1} | ${ip_prefix}
 | | ... | ${dut1_node} | ${dut1_to_dut2_if1}
 | | ... | ${dut1_to_dut2_ip1} | ${ip_prefix}
-| | And Set Interface Address
+| | And VPP Interface Set IP Address
 | | ... | ${dut1_node} | ${dut1_to_dut2_if2}
 | | ... | ${dut1_to_dut2_ip2} | ${ip_prefix}
 
 | | ... | ${dut1_node} | ${dut1_to_dut2_if2}
 | | ... | ${dut1_to_dut2_ip2} | ${ip_prefix}
 
-| | And Set Interface Address
+| | And VPP Interface Set IP Address
 | | ... | ${dut2_node} | ${dut2_to_tg_if1} | ${dut2_to_tg_ip1} | ${ip_prefix}
 | | ... | ${dut2_node} | ${dut2_to_tg_if1} | ${dut2_to_tg_ip1} | ${ip_prefix}
-| | And Set Interface Address
+| | And VPP Interface Set IP Address
 | | ... | ${dut2_node} | ${dut2_to_tg_if2} | ${dut2_to_tg_ip2} | ${ip_prefix}
 | | ... | ${dut2_node} | ${dut2_to_tg_if2} | ${dut2_to_tg_ip2} | ${ip_prefix}
-| | And Set Interface Address
+| | And VPP Interface Set IP Address
 | | ... | ${dut2_node} | ${dut2_to_dut1_if1}
 | | ... | ${dut2_to_dut1_ip1} | ${ip_prefix}
 | | ... | ${dut2_node} | ${dut2_to_dut1_if1}
 | | ... | ${dut2_to_dut1_ip1} | ${ip_prefix}
-| | And Set Interface Address
+| | And VPP Interface Set IP Address
 | | ... | ${dut2_node} | ${dut2_to_dut1_if2}
 | | ... | ${dut2_to_dut1_ip2} | ${ip_prefix}
 
 | | ... | ${dut2_node} | ${dut2_to_dut1_if2}
 | | ... | ${dut2_to_dut1_ip2} | ${ip_prefix}
 
-| | And Add Arp On Dut | ${dut1_node} | ${dut1_to_tg_if1}
+| | And VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_tg_if1}
 | | ... | ${tg_dut1_ip1} | ${tg_to_dut1_if1_mac}
 | | ... | ${tg_dut1_ip1} | ${tg_to_dut1_if1_mac}
-| | And Add Arp On Dut | ${dut1_node} | ${dut1_to_dut2_if1}
+| | And VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2_if1}
 | | ... | ${dut2_to_dut1_ip1} | ${dut2_to_dut1_if1_mac}
 | | ... | ${dut2_to_dut1_ip1} | ${dut2_to_dut1_if1_mac}
-| | And Add Arp On Dut | ${dut2_node} | ${dut2_to_tg_if1}
+| | And VPP Add IP Neighbor | ${dut2_node} | ${dut2_to_tg_if1}
 | | ... | ${tg_dut2_ip1} | ${tg_to_dut2_if1_mac}
 | | ... | ${tg_dut2_ip1} | ${tg_to_dut2_if1_mac}
-| | And Add Arp On Dut | ${dut2_node} | ${dut2_to_dut1_if1}
+| | And VPP Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1_if1}
 | | ... | ${dut1_to_dut2_ip1} | ${dut1_to_dut2_if1_mac}
 
 | | ... | ${dut1_to_dut2_ip1} | ${dut1_to_dut2_if1_mac}
 
-| | And Add Arp On Dut | ${dut1_node} | ${dut1_to_tg_if2}
+| | And VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_tg_if2}
 | | ... | ${tg_dut1_ip2} | ${tg_to_dut1_if2_mac}
 | | ... | ${tg_dut1_ip2} | ${tg_to_dut1_if2_mac}
-| | And Add Arp On Dut | ${dut1_node} | ${dut1_to_dut2_if2}
+| | And VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2_if2}
 | | ... | ${dut2_to_dut1_ip2} | ${dut2_to_dut1_if2_mac}
 | | ... | ${dut2_to_dut1_ip2} | ${dut2_to_dut1_if2_mac}
-| | And Add Arp On Dut | ${dut2_node} | ${dut2_to_tg_if2}
+| | And VPP Add IP Neighbor | ${dut2_node} | ${dut2_to_tg_if2}
 | | ... | ${tg_dut2_ip2} | ${tg_to_dut2_if2_mac}
 | | ... | ${tg_dut2_ip2} | ${tg_to_dut2_if2_mac}
-| | And Add Arp On Dut | ${dut2_node} | ${dut2_to_dut1_if2}
+| | And VPP Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1_if2}
 | | ... | ${dut1_to_dut2_ip2} | ${dut1_to_dut2_if2_mac}
 
 | | And Vpp Route Add | ${dut1_node} | ${tg_dut2_ip1} | ${ip_prefix}
 | | ... | ${dut1_to_dut2_ip2} | ${dut1_to_dut2_if2_mac}
 
 | | And Vpp Route Add | ${dut1_node} | ${tg_dut2_ip1} | ${ip_prefix}
index bdafd34..2b67db5 100644 (file)
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
-| Resource | resources/libraries/robot/shared/default.robot
-| Resource | resources/libraries/robot/shared/testing_path.robot
+| Library  | resources.libraries.python.IPUtil
+| Library  | resources.libraries.python.Trace
+| ...
 | Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/ip/ip4.robot
+| Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/overlay/gre.robot
 | Resource | resources/libraries/robot/overlay/gre.robot
+| Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
-| Library  | resources.libraries.python.IPUtil
-| Library  | resources.libraries.python.Trace
+| ...
 | Force Tags | VM_ENV | HW_ENV | 3_NODE_DOUBLE_LINK_TOPO | SKIP_VPP_PATCH
 | Force Tags | VM_ENV | HW_ENV | 3_NODE_DOUBLE_LINK_TOPO | SKIP_VPP_PATCH
+| ...
 | Test Setup | Set up functional test
 | Test Setup | Set up functional test
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
+| ...
 | Documentation | *GREoIPv4 test cases*
 | ...
 | ... | *[Top] Network Topologies:* TG=DUT1 2-node topology with two links
 | Documentation | *GREoIPv4 test cases*
 | ...
 | ... | *[Top] Network Topologies:* TG=DUT1 2-node topology with two links
@@ -72,8 +77,8 @@
 | | ... | both DUTs and GRE tunnel between them; verify IPv4 headers on
 | | ... | received packets are correct. [Ref] RFC2784.
 | | [Tags] | 3_NODE_SINGLE_LINK_TOPO | 3_NODE_DOUBLE_LINK_TOPO
 | | ... | both DUTs and GRE tunnel between them; verify IPv4 headers on
 | | ... | received packets are correct. [Ref] RFC2784.
 | | [Tags] | 3_NODE_SINGLE_LINK_TOPO | 3_NODE_DOUBLE_LINK_TOPO
-| | Given Configure path in 3-node circular topology | ${nodes['TG']} | ${nodes['DUT1']}
-| | ... | ${nodes['DUT2']} | ${nodes['TG']}
+| | Given Configure path in 3-node circular topology | ${nodes['TG']}
+| | ... | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | And Configure IP addresses on interfaces
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_ip_address} | ${prefix}
 | | And Set interfaces in 3-node circular topology up
 | | And Configure IP addresses on interfaces
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_ip_address} | ${prefix}
@@ -82,8 +87,8 @@
 | | ... | ${dut2_node} | ${dut2_to_tg} | ${net2_gw_address} | ${prefix}
 | | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${dut2_ip_address}
 | | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${dut1_ip_address}
 | | ... | ${dut2_node} | ${dut2_to_tg} | ${net2_gw_address} | ${prefix}
 | | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${dut2_ip_address}
 | | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${dut1_ip_address}
-| | And Add Arp On Dut | ${dut2_node} | ${dut2_to_tg} | ${net2_host_address}
-| | ... | ${tg_to_dut2_mac}
+| | And VPP Add IP Neighbor | ${dut2_node} | ${dut2_to_tg}
+| | ... | ${net2_host_address} | ${tg_to_dut2_mac}
 | | ${dut1_gre_interface} | ${dut1_gre_index}=
 | | ... | When Create GRE tunnel interface and set it up
 | | ... | ${dut1_node} | ${dut1_ip_address} | ${dut2_ip_address}
 | | ${dut1_gre_interface} | ${dut1_gre_index}=
 | | ... | When Create GRE tunnel interface and set it up
 | | ... | ${dut1_node} | ${dut1_ip_address} | ${dut2_ip_address}
 | | And Configure IP addresses on interfaces
 | | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut1_ip_address} | ${prefix}
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${net1_gw_address} | ${prefix}
 | | And Configure IP addresses on interfaces
 | | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut1_ip_address} | ${prefix}
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${net1_gw_address} | ${prefix}
-| | And Add Arp On Dut | ${dut_node} | ${dut_to_tg_if2} | ${dut2_ip_address}
-| | ... | ${tg_to_dut_if2_mac}
+| | And VPP Add IP Neighbor | ${dut_node} | ${dut_to_tg_if2}
+| | ... | ${dut2_ip_address} | ${tg_to_dut_if2_mac}
 | | ${dut1_gre_interface} | ${dut1_gre_index}=
 | | ... | When Create GRE tunnel interface and set it up
 | | ... | ${dut_node} | ${dut1_ip_address} | ${dut2_ip_address}
 | | ${dut1_gre_interface} | ${dut1_gre_index}=
 | | ... | When Create GRE tunnel interface and set it up
 | | ... | ${dut_node} | ${dut1_ip_address} | ${dut2_ip_address}
 | | And Configure IP addresses on interfaces
 | | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut1_ip_address} | ${prefix}
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${net1_gw_address} | ${prefix}
 | | And Configure IP addresses on interfaces
 | | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut1_ip_address} | ${prefix}
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${net1_gw_address} | ${prefix}
-| | And Add Arp On Dut | ${dut_node} | ${dut_to_tg_if1} | ${net1_host_address}
-| | ... | ${tg_to_dut_if1_mac}
+| | And VPP Add IP Neighbor | ${dut_node} | ${dut_to_tg_if1}
+| | ... | ${net1_host_address} | ${tg_to_dut_if1_mac}
 | | ${dut1_gre_interface} | ${dut1_gre_index}=
 | | ... | When Create GRE tunnel interface and set it up
 | | ... | ${dut_node} | ${dut1_ip_address} | ${dut2_ip_address}
 | | ${dut1_gre_interface} | ${dut1_gre_index}=
 | | ... | When Create GRE tunnel interface and set it up
 | | ... | ${dut_node} | ${dut1_ip_address} | ${dut2_ip_address}
 | | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut1_ip_address} | ${prefix}
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${net1_gw_address} | ${prefix}
 | | ... | ${dut_node} | ${dut1_lo_index} | ${dut1_lo_address} | ${32}
 | | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut1_ip_address} | ${prefix}
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${net1_gw_address} | ${prefix}
 | | ... | ${dut_node} | ${dut1_lo_index} | ${dut1_lo_address} | ${32}
-| | And Add Arp On Dut | ${dut_node} | ${dut_to_tg_if2} | ${dut2_ip_address}
-| | ... | ${tg_to_dut_if2_mac}
+| | And VPP Add IP Neighbor | ${dut_node} | ${dut_to_tg_if2}
+| | ... | ${dut2_ip_address} | ${tg_to_dut_if2_mac}
 | | And Vpp Route Add | ${dut_node} | ${tun0_dst} | ${32}
 | | ... | gateway=${dut2_ip_address} | interface=${dut_to_tg_if2}
 | | And Vpp Route Add | ${dut_node} | ${tun1_dst} | ${32}
 | | And Vpp Route Add | ${dut_node} | ${tun0_dst} | ${32}
 | | ... | gateway=${dut2_ip_address} | interface=${dut_to_tg_if2}
 | | And Vpp Route Add | ${dut_node} | ${tun1_dst} | ${32}
 | | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut1_ip_address} | ${prefix}
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${net1_gw_address} | ${prefix}
 | | ... | ${dut_node} | ${dut1_lo_index} | ${dut1_lo_address} | ${32}
 | | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut1_ip_address} | ${prefix}
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${net1_gw_address} | ${prefix}
 | | ... | ${dut_node} | ${dut1_lo_index} | ${dut1_lo_address} | ${32}
-| | And Add Arp On Dut | ${dut_node} | ${dut_to_tg_if2} | ${dut2_ip_address}
-| | ... | ${tg_to_dut_if2_mac}
+| | And VPP Add IP Neighbor | ${dut_node} | ${dut_to_tg_if2}
+| | ... | ${dut2_ip_address} | ${tg_to_dut_if2_mac}
 | | And Vpp Route Add | ${dut_node} | ${tun0_dst} | ${32}
 | | ... | gateway=${dut2_ip_address} | interface=${dut_to_tg_if2}
 | | And Vpp Route Add | ${dut_node} | ${tun1_dst} | ${32}
 | | And Vpp Route Add | ${dut_node} | ${tun0_dst} | ${32}
 | | ... | gateway=${dut2_ip_address} | interface=${dut_to_tg_if2}
 | | And Vpp Route Add | ${dut_node} | ${tun1_dst} | ${32}
 | | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut1_ip_address} | ${prefix}
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${net1_gw_address} | ${prefix}
 | | ... | ${dut_node} | ${dut1_lo_index} | ${dut1_lo_address} | ${32}
 | | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut1_ip_address} | ${prefix}
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${net1_gw_address} | ${prefix}
 | | ... | ${dut_node} | ${dut1_lo_index} | ${dut1_lo_address} | ${32}
-| | And Add Arp On Dut | ${dut_node} | ${dut_to_tg_if1} | ${net1_host_address}
-| | ... | ${tg_to_dut_if1_mac}
-| | And Add Arp On Dut | ${dut_node} | ${dut_to_tg_if2} | ${dut2_ip_address}
-| | ... | ${tg_to_dut_if2_mac}
+| | And VPP Add IP Neighbor | ${dut_node} | ${dut_to_tg_if1}
+| | ... | ${net1_host_address} | ${tg_to_dut_if1_mac}
+| | And VPP Add IP Neighbor | ${dut_node} | ${dut_to_tg_if2}
+| | ... | ${dut2_ip_address} | ${tg_to_dut_if2_mac}
 | | And Vpp Route Add | ${dut_node} | ${tun0_dst} | ${32}
 | | ... | gateway=${dut2_ip_address} | interface=${dut_to_tg_if2}
 | | And Vpp Route Add | ${dut_node} | ${tun1_dst} | ${32}
 | | And Vpp Route Add | ${dut_node} | ${tun0_dst} | ${32}
 | | ... | gateway=${dut2_ip_address} | interface=${dut_to_tg_if2}
 | | And Vpp Route Add | ${dut_node} | ${tun1_dst} | ${32}
index ae9485c..ce49b4b 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
+| Library  | resources.libraries.python.IPUtil
+| Library  | resources.libraries.python.Trace
+| ...
+| Resource | resources/libraries/robot/ip/ip4.robot
+| Resource | resources/libraries/robot/l2/l2_traffic.robot
+| Resource | resources/libraries/robot/overlay/lisp_static_adjacency.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
-| Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
-| Resource | resources/libraries/robot/overlay/lisp_static_adjacency.robot
-| Resource | resources/libraries/robot/l2/l2_traffic.robot
-| Library  | resources.libraries.python.IPUtil
-| Library  | resources.libraries.python.Trace
+| ...
 # import additional Lisp settings from resource file
 | Variables | resources/test_data/lisp/static_adjacency/lisp_static_adjacency.py
 | ...
 # import additional Lisp settings from resource file
 | Variables | resources/test_data/lisp/static_adjacency/lisp_static_adjacency.py
 | ...
 | | ... | ${dut2_to_tg_ip4} | ${prefix4}
 | | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip4}
 | | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip4}
 | | ... | ${dut2_to_tg_ip4} | ${prefix4}
 | | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip4}
 | | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip4}
-| | And Add Arp On Dut | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip4}
-| | ... | ${tg_to_dut2_mac}
-| | And Add Arp On Dut | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip4}
-| | ... | ${tg_to_dut1_mac}
+| | And VPP Add IP Neighbor
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip4} | ${tg_to_dut2_mac}
+| | And VPP Add IP Neighbor
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip4} | ${tg_to_dut1_mac}
 | | When Configure LISP topology in 3-node circular topology
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
 | | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
 | | When Configure LISP topology in 3-node circular topology
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
 | | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
index 98602fc..5c3ba1b 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
-| Library | resources.libraries.python.topology.Topology
-| Library | resources.libraries.python.NodePath
-| Library | resources.libraries.python.Trace
 | Library | resources.libraries.python.IPUtil
 | Library | resources.libraries.python.IPUtil
-| Library | resources.libraries.python.LispUtil
 | Library | resources.libraries.python.L2Util
 | Library | resources.libraries.python.L2Util
-| Resource | resources/libraries/robot/shared/traffic.robot
+| Library | resources.libraries.python.LispUtil
+| Library | resources.libraries.python.NodePath
+| Library | resources.libraries.python.topology.Topology
+| Library | resources.libraries.python.Trace
+| ...
+| Resource | resources/libraries/robot/ip/ip4.robot
+| Resource | resources/libraries/robot/overlay/l2lisp.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
-| Resource | resources/libraries/robot/ip/ip4.robot
-| Resource | resources/libraries/robot/overlay/l2lisp.robot
+| Resource | resources/libraries/robot/shared/traffic.robot
+| ...
 # Import configuration and test data:
 | Variables | resources/test_data/lisp/l2/l2_ipv4.py
 | ...
 # Import configuration and test data:
 | Variables | resources/test_data/lisp/l2/l2_ipv4.py
 | ...
 | | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip4} | ${prefix4}
 | | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip4} | ${prefix4}
 | | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip4} | ${prefix4}
 | | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip4} | ${prefix4}
 | | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip4} | ${prefix4}
 | | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip4} | ${prefix4}
-| | And Add Arp On Dut | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip4}
-| | ... | ${tg_to_dut2_mac}
-| | And Add Arp On Dut | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip4}
-| | ... | ${tg_to_dut1_mac}
-| | And Add Arp On Dut | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip4}
-| | ... | ${dut2_to_dut1_mac}
-| | And Add Arp On Dut | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip4}
-| | ... | ${dut1_to_dut2_mac}
+| | And VPP Add IP Neighbor
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip4} | ${tg_to_dut2_mac}
+| | And VPP Add IP Neighbor
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip4} | ${tg_to_dut1_mac}
+| | And VPP Add IP Neighbor | ${dut1_node}
+| | ... | ${dut1_to_dut2} | ${dut2_to_dut1_ip4} | ${dut2_to_dut1_mac}
+| | And VPP Add IP Neighbor | ${dut2_node}
+| | ... | ${dut2_to_dut1} | ${dut1_to_dut2_ip4} | ${dut1_to_dut2_mac}
 | | When Create L2 BD | ${dut1_node} | ${vpp_bd_id}
 | | And Add Interface To L2 BD | ${dut1_node} | ${dut1_to_tg} | ${vpp_bd_id}
 | | And Create L2 BD | ${dut2_node} | ${vpp_bd_id}
 | | When Create L2 BD | ${dut1_node} | ${vpp_bd_id}
 | | And Add Interface To L2 BD | ${dut1_node} | ${dut1_to_tg} | ${vpp_bd_id}
 | | And Create L2 BD | ${dut2_node} | ${vpp_bd_id}
index 679acd7..3677e0d 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
-| Library | resources.libraries.python.topology.Topology
+| Library | resources.libraries.python.InterfaceUtil
+| Library | resources.libraries.python.IPUtil
 | Library | resources.libraries.python.NodePath
 | Library | resources.libraries.python.NodePath
+| Library | resources.libraries.python.topology.Topology
 | Library | resources.libraries.python.Trace
 | Library | resources.libraries.python.Trace
-| Library | resources.libraries.python.IPUtil
-| Library | resources.libraries.python.VPPUtil
-| Library | resources.libraries.python.InterfaceUtil
 | Library | resources.libraries.python.VhostUser
 | Library | resources.libraries.python.VhostUser
-| Resource | resources/libraries/robot/shared/traffic.robot
+| Library | resources.libraries.python.VPPUtil
+| ...
+| Resource | resources/libraries/robot/ip/ip4.robot
+| Resource | resources/libraries/robot/l2/l2_bridge_domain.robot
+| Resource | resources/libraries/robot/overlay/lispgpe.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
-| Resource | resources/libraries/robot/ip/ip4.robot
+| Resource | resources/libraries/robot/shared/traffic.robot
 | Resource | resources/libraries/robot/vm/qemu.robot
 | Resource | resources/libraries/robot/vm/qemu.robot
-| Resource | resources/libraries/robot/l2/l2_bridge_domain.robot
-| Resource | resources/libraries/robot/overlay/lispgpe.robot
+| ...
 # Import configuration and test data:
 | Variables | resources/test_data/lisp/ipv4_lispgpe_ipv4/ipv4_lispgpe_ipv4.py
 | ...
 # Import configuration and test data:
 | Variables | resources/test_data/lisp/ipv4_lispgpe_ipv4/ipv4_lispgpe_ipv4.py
 | ...
 | | [Documentation]
 | | ... | Add IP neighbors to physical interfaces on DUTs.
 | | ...
 | | [Documentation]
 | | ... | Add IP neighbors to physical interfaces on DUTs.
 | | ...
-| | Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip4}
-| | ... | ${tg_to_dut1_mac}
-| | Add IP Neighbor | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip4}
-| | ... | ${tg_to_dut2_mac}
-| | Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip4}
-| | ... | ${dut2_to_dut1_mac}
-| | Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip4}
-| | ... | ${dut1_to_dut2_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip4} | ${tg_to_dut1_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip4} | ${tg_to_dut2_mac}
+| | VPP Add IP Neighbor | ${dut1_node}
+| | ... | ${dut1_to_dut2} | ${dut2_to_dut1_ip4} | ${dut2_to_dut1_mac}
+| | VPP Add IP Neighbor | ${dut2_node}
+| | ... | ${dut2_to_dut1} | ${dut1_to_dut2_ip4} | ${dut1_to_dut2_mac}
index 2aa4990..22fdae4 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
-| Library | resources.libraries.python.topology.Topology
+| Library | resources.libraries.python.InterfaceUtil
+| Library | resources.libraries.python.IPUtil
 | Library | resources.libraries.python.NodePath
 | Library | resources.libraries.python.NodePath
+| Library | resources.libraries.python.topology.Topology
 | Library | resources.libraries.python.Trace
 | Library | resources.libraries.python.Trace
-| Library | resources.libraries.python.IPUtil
-| Library | resources.libraries.python.VPPUtil
-| Library | resources.libraries.python.InterfaceUtil
 | Library | resources.libraries.python.VhostUser
 | Library | resources.libraries.python.VhostUser
-| Resource | resources/libraries/robot/shared/traffic.robot
+| Library | resources.libraries.python.VPPUtil
+| ...
+| Resource | resources/libraries/robot/ip/ip4.robot
+| Resource | resources/libraries/robot/l2/l2_bridge_domain.robot
+| Resource | resources/libraries/robot/overlay/lispgpe.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
-| Resource | resources/libraries/robot/ip/ip4.robot
+| Resource | resources/libraries/robot/shared/traffic.robot
 | Resource | resources/libraries/robot/vm/qemu.robot
 | Resource | resources/libraries/robot/vm/qemu.robot
-| Resource | resources/libraries/robot/l2/l2_bridge_domain.robot
-| Resource | resources/libraries/robot/overlay/lispgpe.robot
+| ...
 # Import configuration and test data:
 | Variables | resources/test_data/lisp/ipv4_lispgpe_ipv4/ipv4_lispgpe_ipv4.py
 | ...
 # Import configuration and test data:
 | Variables | resources/test_data/lisp/ipv4_lispgpe_ipv4/ipv4_lispgpe_ipv4.py
 | ...
 | | [Documentation]
 | | ... | Add IP neighbors to physical interfaces on DUTs.
 | | ...
 | | [Documentation]
 | | ... | Add IP neighbors to physical interfaces on DUTs.
 | | ...
-| | Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip4}
-| | ... | ${tg_to_dut1_mac}
-| | Add IP Neighbor | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip4}
-| | ... | ${tg_to_dut2_mac}
-| | Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip4}
-| | ... | ${dut2_to_dut1_mac}
-| | Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip4}
-| | ... | ${dut1_to_dut2_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip4} | ${tg_to_dut1_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip4} | ${tg_to_dut2_mac}
+| | VPP Add IP Neighbor | ${dut1_node}
+| | ... | ${dut1_to_dut2} | ${dut2_to_dut1_ip4} | ${dut2_to_dut1_mac}
+| | VPP Add IP Neighbor | ${dut2_node}
+| | ... | ${dut2_to_dut1} | ${dut1_to_dut2_ip4} | ${dut1_to_dut2_mac}
index 7e97aca..f311472 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
-| Resource | resources/libraries/robot/shared/default.robot
-| Resource | resources/libraries/robot/shared/testing_path.robot
+| Library  | resources.libraries.python.IPUtil
+| Library  | resources.libraries.python.Trace
+| Library | resources.libraries.python.VhostUser
+| Library  | resources.libraries.python.VPPUtil
+| ...
 | Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/ip/ip4.robot
-| Resource | resources/libraries/robot/shared/traffic.robot
-| Resource | resources/libraries/robot/overlay/lisp_static_adjacency.robot
+| Resource | resources/libraries/robot/l2/l2_bridge_domain.robot
 | Resource | resources/libraries/robot/l2/l2_traffic.robot
 | Resource | resources/libraries/robot/overlay/lispgpe.robot
 | Resource | resources/libraries/robot/l2/l2_traffic.robot
 | Resource | resources/libraries/robot/overlay/lispgpe.robot
-| Resource | resources/libraries/robot/l2/l2_bridge_domain.robot
+| Resource | resources/libraries/robot/overlay/lisp_static_adjacency.robot
+| Resource | resources/libraries/robot/shared/default.robot
+| Resource | resources/libraries/robot/shared/testing_path.robot
+| Resource | resources/libraries/robot/shared/traffic.robot
 | Resource | resources/libraries/robot/vm/qemu.robot
 | Resource | resources/libraries/robot/vm/qemu.robot
-| Library  | resources.libraries.python.IPUtil
-| Library | resources.libraries.python.VhostUser
-| Library  | resources.libraries.python.Trace
-| Library  | resources.libraries.python.VPPUtil
+| ...
 # import additional Lisp settings from resource file
 | Variables | resources/test_data/lisp/static_adjacency/lisp_static_adjacency.py
 | ...
 # import additional Lisp settings from resource file
 | Variables | resources/test_data/lisp/static_adjacency/lisp_static_adjacency.py
 | ...
 | | [Documentation]
 | | ... | Add IP neighbors to physical interfaces on DUTs.
 | | ...
 | | [Documentation]
 | | ... | Add IP neighbors to physical interfaces on DUTs.
 | | ...
-| | Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip6o4}
-| | ... | ${tg_to_dut1_mac}
-| | Add IP Neighbor | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip6o4}
-| | ... | ${tg_to_dut2_mac}
-| | Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip6o4}
-| | ... | ${dut2_to_dut1_mac}
-| | Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip6o4}
-| | ... | ${dut1_to_dut2_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip6o4} | ${tg_to_dut1_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip6o4} | ${tg_to_dut2_mac}
+| | VPP Add IP Neighbor | ${dut1_node}
+| | ... | ${dut1_to_dut2} | ${dut2_to_dut1_ip6o4} | ${dut2_to_dut1_mac}
+| | VPP Add IP Neighbor | ${dut2_node}
+| | ... | ${dut2_to_dut1} | ${dut1_to_dut2_ip6o4} | ${dut1_to_dut2_mac}
index 2b13eae..2363b0c 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
-| Resource | resources/libraries/robot/shared/default.robot
-| Resource | resources/libraries/robot/shared/testing_path.robot
+| Library  | resources.libraries.python.IPUtil
+| Library  | resources.libraries.python.Trace
+| Library | resources.libraries.python.VhostUser
+| Library  | resources.libraries.python.VPPUtil
+| ...
 | Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/ip/ip4.robot
-| Resource | resources/libraries/robot/shared/traffic.robot
-| Resource | resources/libraries/robot/overlay/lisp_static_adjacency.robot
+| Resource | resources/libraries/robot/l2/l2_bridge_domain.robot
 | Resource | resources/libraries/robot/l2/l2_traffic.robot
 | Resource | resources/libraries/robot/overlay/lispgpe.robot
 | Resource | resources/libraries/robot/l2/l2_traffic.robot
 | Resource | resources/libraries/robot/overlay/lispgpe.robot
-| Resource | resources/libraries/robot/l2/l2_bridge_domain.robot
+| Resource | resources/libraries/robot/overlay/lisp_static_adjacency.robot
+| Resource | resources/libraries/robot/shared/default.robot
+| Resource | resources/libraries/robot/shared/testing_path.robot
+| Resource | resources/libraries/robot/shared/traffic.robot
 | Resource | resources/libraries/robot/vm/qemu.robot
 | Resource | resources/libraries/robot/vm/qemu.robot
-| Library  | resources.libraries.python.IPUtil
-| Library | resources.libraries.python.VhostUser
-| Library  | resources.libraries.python.Trace
-| Library  | resources.libraries.python.VPPUtil
+| ...
 # import additional Lisp settings from resource file
 | Variables | resources/test_data/lisp/static_adjacency/lisp_static_adjacency.py
 | ...
 # import additional Lisp settings from resource file
 | Variables | resources/test_data/lisp/static_adjacency/lisp_static_adjacency.py
 | ...
@@ -66,8 +68,8 @@
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Add Fib Table | ${dut1_node} | ${fib_table_1} | ip6=${TRUE}
-| | And Add Fib Table | ${dut2_node} | ${fib_table_1} | ip6=${TRUE}
+| | And Add Fib Table | ${dut1_node} | ${fib_table_1} | ipv6=${TRUE}
+| | And Add Fib Table | ${dut2_node} | ${fib_table_1} | ipv6=${TRUE}
 | | And Assign Interface To Fib Table | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${fib_table_1} | ip6=${TRUE}
 | | And Assign Interface To Fib Table | ${dut2_node}
 | | And Assign Interface To Fib Table | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${fib_table_1} | ip6=${TRUE}
 | | And Assign Interface To Fib Table | ${dut2_node}
 | | [Documentation]
 | | ... | Add IP neighbors to physical interfaces on DUTs.
 | | ...
 | | [Documentation]
 | | ... | Add IP neighbors to physical interfaces on DUTs.
 | | ...
-| | Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip6o4}
-| | ... | ${tg_to_dut1_mac}
-| | Add IP Neighbor | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip6o4}
-| | ... | ${tg_to_dut2_mac}
-| | Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip6o4}
-| | ... | ${dut2_to_dut1_mac}
-| | Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip6o4}
-| | ... | ${dut1_to_dut2_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip6o4} | ${tg_to_dut1_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip6o4} | ${tg_to_dut2_mac}
+| | VPP Add IP Neighbor | ${dut1_node}
+| | ... | ${dut1_to_dut2} | ${dut2_to_dut1_ip6o4} | ${dut2_to_dut1_mac}
+| | VPP Add IP Neighbor | ${dut2_node}
+| | ... | ${dut2_to_dut1} | ${dut1_to_dut2_ip6o4} | ${dut1_to_dut2_mac}
index e78f262..7a17c4c 100644 (file)
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
-| Resource | resources/libraries/robot/shared/default.robot
-| Resource | resources/libraries/robot/shared/testing_path.robot
+| Library | resources.libraries.python.IPUtil
+| Library  | resources.libraries.python.Trace
 | Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/ip/ip6.robot
 | Resource | resources/libraries/robot/ip/map.robot
 | Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/ip/ip6.robot
 | Resource | resources/libraries/robot/ip/map.robot
-| Library  | resources.libraries.python.Trace
+| ...
+| Resource | resources/libraries/robot/shared/default.robot
+| Resource | resources/libraries/robot/shared/testing_path.robot
+| ...
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO | SOFTWIRE
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO | SOFTWIRE
+| ...
 | Test Setup | Set up functional test
 | Test Setup | Set up functional test
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
+| ...
 | Documentation | *Lightweight 4 over 6 test cases*
 | ...
 | ... | LW4o6 is a subset of MAP-E, with per-subscriber rules. It uses the
 | Documentation | *Lightweight 4 over 6 test cases*
 | ...
 | ... | LW4o6 is a subset of MAP-E, with per-subscriber rules. It uses the
 | | And   Configure IP addresses on interfaces
 | |       ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4} | ${ipv4_prefix_len}
 | |       ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6} | ${ipv6_prefix_len}
 | | And   Configure IP addresses on interfaces
 | |       ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4} | ${ipv4_prefix_len}
 | |       ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6} | ${ipv6_prefix_len}
-| | And   Add IP Neighbor
+| | And   VPP Add IP Neighbor
 | |       ... | ${dut_node} | ${dut_to_tg_if2} | ${tg_ip6}
 | |       ... | ${tg_to_dut_if2_mac}
 | | And Vpp Route Add
 | |       ... | ${dut_node} | ${lw_rule_ipv6_dst} | 128
 | |       ... | ${dut_node} | ${dut_to_tg_if2} | ${tg_ip6}
 | |       ... | ${tg_to_dut_if2_mac}
 | | And Vpp Route Add
 | |       ... | ${dut_node} | ${lw_rule_ipv6_dst} | 128
-| |       ... | gateway=${tg_ip6} | interface=${dut_to_tg_if2} | resolve_attempts=${NONE}
+| |       ... | gateway=${tg_ip6} | interface=${dut_to_tg_if2}
 | | ${domain_index}=
 | | ... | When Map Add Domain
 | |            ... | ${dut_node} | ${lw_ipv4_pfx} | ${lw_ipv6_pfx}
 | | ${domain_index}=
 | | ... | When Map Add Domain
 | |            ... | ${dut_node} | ${lw_ipv4_pfx} | ${lw_ipv6_pfx}
@@ -113,12 +119,12 @@ TC02: Encapsulate IPv4 ICMP into IPv6. IPv6 dst depends on IPv4 addr and ICMP ID
 | | And   Configure IP addresses on interfaces
 | |       ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4} | ${ipv4_prefix_len}
 | |       ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6} | ${ipv6_prefix_len}
 | | And   Configure IP addresses on interfaces
 | |       ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4} | ${ipv4_prefix_len}
 | |       ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6} | ${ipv6_prefix_len}
-| | And   Add IP Neighbor
+| | And   VPP Add IP Neighbor
 | |       ... | ${dut_node} | ${dut_to_tg_if2} | ${tg_ip6}
 | |       ... | ${tg_to_dut_if2_mac}
 | | And Vpp Route Add
 | |       ... | ${dut_node} | ${lw_rule_ipv6_dst} | 128
 | |       ... | ${dut_node} | ${dut_to_tg_if2} | ${tg_ip6}
 | |       ... | ${tg_to_dut_if2_mac}
 | | And Vpp Route Add
 | |       ... | ${dut_node} | ${lw_rule_ipv6_dst} | 128
-| |       ... | gateway=${tg_ip6} | interface=${dut_to_tg_if2} | resolve_attempts=${NONE}
+| |       ... | gateway=${tg_ip6} | interface=${dut_to_tg_if2}
 | | ${domain_index}=
 | | ... | When Map Add Domain
 | |            ... | ${dut_node} | ${lw_ipv4_pfx} | ${lw_ipv6_pfx}
 | | ${domain_index}=
 | | ... | When Map Add Domain
 | |            ... | ${dut_node} | ${lw_ipv4_pfx} | ${lw_ipv6_pfx}
@@ -148,7 +154,7 @@ TC03: Decapsulate IPv4 UDP from IPv6.
 | | And   Configure IP addresses on interfaces
 | |       ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4} | ${ipv4_prefix_len}
 | |       ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6} | ${ipv6_prefix_len}
 | | And   Configure IP addresses on interfaces
 | |       ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4} | ${ipv4_prefix_len}
 | |       ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6} | ${ipv6_prefix_len}
-| | And   Add Arp on DUT
+| | And   VPP Add IP Neighbor
 | |       ... | ${dut_node} | ${dut_to_tg_if1}
 | |       ... | ${test_ipv4_outside}
 | |       ... | ${tg_to_dut_if1_mac}
 | |       ... | ${dut_node} | ${dut_to_tg_if1}
 | |       ... | ${test_ipv4_outside}
 | |       ... | ${tg_to_dut_if1_mac}
@@ -182,12 +188,12 @@ TC04: Hairpinning of traffic between two lwB4
 | | And   Configure IP addresses on interfaces
 | |       ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4} | ${ipv4_prefix_len}
 | |       ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6} | ${ipv6_prefix_len}
 | | And   Configure IP addresses on interfaces
 | |       ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4} | ${ipv4_prefix_len}
 | |       ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6} | ${ipv6_prefix_len}
-| | And   Add IP Neighbor
+| | And   VPP Add IP Neighbor
 | |       ... | ${dut_node} | ${dut_to_tg_if2} | ${tg_ip6}
 | |       ... | ${tg_to_dut_if2_mac}
 | | And Vpp Route Add
 | |       ... | ${dut_node} | ${lw_rule_2_ipv6_dst} | 128
 | |       ... | ${dut_node} | ${dut_to_tg_if2} | ${tg_ip6}
 | |       ... | ${tg_to_dut_if2_mac}
 | | And Vpp Route Add
 | |       ... | ${dut_node} | ${lw_rule_2_ipv6_dst} | 128
-| |       ... | gateway=${tg_ip6} | interface=${dut_to_tg_if2} | resolve_attempts=${NONE}
+| |       ... | gateway=${tg_ip6} | interface=${dut_to_tg_if2}
 | | ${domain_index}=
 | | ... | When Map Add Domain
 | |            ... | ${dut_node} | ${lw_ipv4_pfx} | ${lw_ipv6_pfx}
 | | ${domain_index}=
 | | ... | When Map Add Domain
 | |            ... | ${dut_node} | ${lw_ipv4_pfx} | ${lw_ipv6_pfx}
index 665585b..47f88ff 100644 (file)
 
 
 *** Settings ***
 
 
 *** Settings ***
-| Resource | resources/libraries/robot/shared/default.robot
-| Resource | resources/libraries/robot/shared/testing_path.robot
+| Library  | resources.libraries.python.IPUtil
+| Library  | resources.libraries.python.Trace
+| ...
 | Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/ip/ip6.robot
 | Resource | resources/libraries/robot/ip/map.robot
 | Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/ip/ip6.robot
 | Resource | resources/libraries/robot/ip/map.robot
-| Library  | resources.libraries.python.IPUtil
-| Library  | resources.libraries.python.Trace
+| Resource | resources/libraries/robot/shared/default.robot
+| Resource | resources/libraries/robot/shared/testing_path.robot
+| ...
 | Variables | resources/test_data/softwire/map_e_domains.py | ${5}
 | Variables | resources/test_data/softwire/map_e_domains.py | ${5}
+| ...
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO | SKIP_VPP_PATCH
 | ... | SOFTWIRE
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO | SKIP_VPP_PATCH
 | ... | SOFTWIRE
+| ...
 | Test Setup | Set up functional test
 | Test Setup | Set up functional test
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
+| ...
 | Documentation | *Test for Basic mapping rule for MAP-E*\
 | ... | *[Top] Network Topologies:* TG - DUT1 - TG with two links between the
 | ... | nodes.
 | Documentation | *Test for Basic mapping rule for MAP-E*\
 | ... | *[Top] Network Topologies:* TG - DUT1 - TG with two links between the
 | ... | nodes.
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4} | ${ipv4_prefix_len}
 | | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6} | ${ipv6_prefix_len}
 | | And Vpp Route Add | ${dut_node} | :: | 0 | gateway=${dut_ip6_gw}
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4} | ${ipv4_prefix_len}
 | | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6} | ${ipv6_prefix_len}
 | | And Vpp Route Add | ${dut_node} | :: | 0 | gateway=${dut_ip6_gw}
-| | ... | interface=${dut_to_tg_if2} | resolve_attempts=${NONE} | count=${NONE}
-| | And Add IP Neighbor | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6_gw}
-| | ... | ${tg_to_dut_if2_mac}
+| | ... | interface=${dut_to_tg_if2}
+| | And VPP Add IP Neighbor
+| | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6_gw} | ${tg_to_dut_if2_mac}
 | | And Vpp Route Add | ${dut_node} | 0.0.0.0 | 0 | gateway=${dut_ip4_gw}
 | | And Vpp Route Add | ${dut_node} | 0.0.0.0 | 0 | gateway=${dut_ip4_gw}
-| | ... | interface=${dut_to_tg_if1} | resolve_attempts=${NONE} | count=${NONE}
-| | And Add IP Neighbor | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4_gw}
-| | ... | ${tg_to_dut_if1_mac}
+| | ... | interface=${dut_to_tg_if1}
+| | And VPP Add IP Neighbor
+| | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4_gw} | ${tg_to_dut_if1_mac}
 | | :FOR | ${domain_set} | IN | @{domain_sets}
 | | | When Map Add Domain | ${dut_node} | @{domain_set}
 | | :FOR | ${ip_set} | IN | @{ip_sets}
 | | :FOR | ${domain_set} | IN | @{domain_sets}
 | | | When Map Add Domain | ${dut_node} | @{domain_set}
 | | :FOR | ${ip_set} | IN | @{ip_sets}
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4} | ${ipv4_prefix_len}
 | | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6} | ${ipv6_prefix_len}
 | | And Vpp Route Add | ${dut_node} | :: | 0 | gateway=${dut_ip6_gw}
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4} | ${ipv4_prefix_len}
 | | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6} | ${ipv6_prefix_len}
 | | And Vpp Route Add | ${dut_node} | :: | 0 | gateway=${dut_ip6_gw}
-| | ... | interface=${dut_to_tg_if2} | resolve_attempts=${NONE} | count=${NONE}
-| | And Add IP Neighbor | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6_gw}
-| | ... | ${tg_to_dut_if2_mac}
+| | ... | interface=${dut_to_tg_if2}
+| | And VPP Add IP Neighbor
+| | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6_gw} | ${tg_to_dut_if2_mac}
 | | And Vpp Route Add | ${dut_node} | 0.0.0.0 | 0 | gateway=${dut_ip4_gw}
 | | And Vpp Route Add | ${dut_node} | 0.0.0.0 | 0 | gateway=${dut_ip4_gw}
-| | ... | interface=${dut_to_tg_if1} | resolve_attempts=${NONE} | count=${NONE}
-| | And Add IP Neighbor | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4_gw}
-| | ... | ${tg_to_dut_if1_mac}
+| | ... | interface=${dut_to_tg_if1}
+| | And VPP Add IP Neighbor
+| | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4_gw} | ${tg_to_dut_if1_mac}
 | | :FOR | ${domain_set} | IN | @{domain_sets}
 | | | When Map Add Domain | ${dut_node} | @{domain_set}
 | | ${ip_set_A}= | Get From List | ${ip_sets} | 0
 | | :FOR | ${domain_set} | IN | @{domain_sets}
 | | | When Map Add Domain | ${dut_node} | @{domain_set}
 | | ${ip_set_A}= | Get From List | ${ip_sets} | 0
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4} | ${ipv4_prefix_len}
 | | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6} | ${ipv6_prefix_len}
 | | And Vpp Route Add | ${dut_node} | :: | 0 | gateway=${dut_ip6_gw}
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4} | ${ipv4_prefix_len}
 | | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6} | ${ipv6_prefix_len}
 | | And Vpp Route Add | ${dut_node} | :: | 0 | gateway=${dut_ip6_gw}
-| | ... | interface=${dut_to_tg_if2} | resolve_attempts=${NONE} | count=${NONE}
-| | And Add IP Neighbor | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6_gw}
-| | ... | ${tg_to_dut_if2_mac}
+| | ... | interface=${dut_to_tg_if2}
+| | And VPP Add IP Neighbor
+| | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6_gw} | ${tg_to_dut_if2_mac}
 | | And Vpp Route Add | ${dut_node} | 0.0.0.0 | 0 | gateway=${dut_ip4_gw}
 | | And Vpp Route Add | ${dut_node} | 0.0.0.0 | 0 | gateway=${dut_ip4_gw}
-| | ... | interface=${dut_to_tg_if1} | resolve_attempts=${NONE} | count=${NONE}
-| | And Add IP Neighbor | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4_gw}
-| | ... | ${tg_to_dut_if1_mac}
+| | ... | interface=${dut_to_tg_if1}
+| | And VPP Add IP Neighbor
+| | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4_gw} | ${tg_to_dut_if1_mac}
 | | :FOR | ${domain_set} | IN | @{domain_sets}
 | | | When Map Add Domain | ${dut_node} | @{domain_set}
 | | ${ip_set_A}= | Get From List | ${ip_sets} | 0
 | | :FOR | ${domain_set} | IN | @{domain_sets}
 | | | When Map Add Domain | ${dut_node} | @{domain_set}
 | | ${ip_set_A}= | Get From List | ${ip_sets} | 0
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4} | ${ipv4_prefix_len}
 | | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6} | ${ipv6_prefix_len}
 | | And Vpp Route Add | ${dut_node} | 2001:: | 16 | gateway=${dut_ip6_gw}
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4} | ${ipv4_prefix_len}
 | | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6} | ${ipv6_prefix_len}
 | | And Vpp Route Add | ${dut_node} | 2001:: | 16 | gateway=${dut_ip6_gw}
-| | ... | interface=${dut_to_tg_if2} | resolve_attempts=${NONE} | count=${NONE}
-| | And Add IP Neighbor | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6_gw}
-| | ... | ${tg_to_dut_if2_mac}
+| | ... | interface=${dut_to_tg_if2}
+| | And VPP Add IP Neighbor
+| | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6_gw} | ${tg_to_dut_if2_mac}
 | | And Vpp Route Add | ${dut_node} | 0.0.0.0 | 0 | gateway=${dut_ip4_gw}
 | | And Vpp Route Add | ${dut_node} | 0.0.0.0 | 0 | gateway=${dut_ip4_gw}
-| | ... | interface=${dut_to_tg_if1} | resolve_attempts=${NONE} | count=${NONE}
-| | And Add IP Neighbor | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4_gw}
-| | ... | ${tg_to_dut_if1_mac}
+| | ... | interface=${dut_to_tg_if1}
+| | And VPP Add IP Neighbor
+| | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4_gw} | ${tg_to_dut_if1_mac}
 | | Then Check MAP Configuration With Traffic Script
 | | ... | 20.0.0.0/8 | 2001::/16 | ${ipv6_br_src} | ${48} | ${6} | ${8}
 | | ... | 20.169.201.219 | ${1232} | 2001:a9c9:db34::14a9:c9db:34
 | | Then Check MAP Configuration With Traffic Script
 | | ... | 20.0.0.0/8 | 2001::/16 | ${ipv6_br_src} | ${48} | ${6} | ${8}
 | | ... | 20.169.201.219 | ${1232} | 2001:a9c9:db34::14a9:c9db:34
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4} | ${ipv4_prefix_len}
 | | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6} | ${ipv6_prefix_len}
 | | And Vpp Route Add | ${dut_node} | 2001:: | 16 | gateway=${dut_ip6_gw}
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4} | ${ipv4_prefix_len}
 | | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6} | ${ipv6_prefix_len}
 | | And Vpp Route Add | ${dut_node} | 2001:: | 16 | gateway=${dut_ip6_gw}
-| | ... | interface=${dut_to_tg_if2} | resolve_attempts=${NONE} | count=${NONE}
-| | And Add IP Neighbor | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6_gw}
-| | ... | ${tg_to_dut_if2_mac}
+| | ... | interface=${dut_to_tg_if2}
+| | And VPP Add IP Neighbor
+| | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6_gw} | ${tg_to_dut_if2_mac}
 | | And Vpp Route Add | ${dut_node} | 0.0.0.0 | 0 | gateway=${dut_ip4_gw}
 | | And Vpp Route Add | ${dut_node} | 0.0.0.0 | 0 | gateway=${dut_ip4_gw}
-| | ... | interface=${dut_to_tg_if1} | resolve_attempts=${NONE} | count=${NONE}
-| | And Add IP Neighbor | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4_gw}
-| | ... | ${tg_to_dut_if1_mac}
+| | ... | interface=${dut_to_tg_if1}
+| | And VPP Add IP Neighbor
+| | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4_gw} | ${tg_to_dut_if1_mac}
 | | Then Check MAP Configuration With Traffic Script
 | | ... | 20.0.0.0/8 | 2001::/16 | ${ipv6_br_src} | ${48} | ${6} | ${8}
 | | ... | 20.169.201.219 | ${1232} | 2001:a9c9:db34::14a9:c9db:34
 | | Then Check MAP Configuration With Traffic Script
 | | ... | 20.0.0.0/8 | 2001::/16 | ${ipv6_br_src} | ${48} | ${6} | ${8}
 | | ... | 20.169.201.219 | ${1232} | 2001:a9c9:db34::14a9:c9db:34
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4} | ${ipv4_prefix_len}
 | | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6} | ${ipv6_prefix_len}
 | | Vpp Route Add | ${dut_node} | :: | 0 | gateway=${dut_ip6_gw}
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4} | ${ipv4_prefix_len}
 | | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6} | ${ipv6_prefix_len}
 | | Vpp Route Add | ${dut_node} | :: | 0 | gateway=${dut_ip6_gw}
-| | ... | interface=${dut_to_tg_if2} | resolve_attempts=${NONE} | count=${NONE}
-| | Add IP Neighbor | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6_gw}
-| | ... | ${tg_to_dut_if2_mac}
+| | ... | interface=${dut_to_tg_if2}
+| | VPP Add IP Neighbor
+| | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6_gw} | ${tg_to_dut_if2_mac}
 | | Vpp Route Add | ${dut_node} | ${ipv4_outside} | 32 | gateway=${dut_ip4_gw}
 | | Vpp Route Add | ${dut_node} | ${ipv4_outside} | 32 | gateway=${dut_ip4_gw}
-| | ... | interface=${dut_to_tg_if1} | resolve_attempts=${NONE} | count=${NONE}
-| | Add IP Neighbor | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4_gw}
-| | ... | ${tg_to_dut_if1_mac}
+| | ... | interface=${dut_to_tg_if1}
+| | VPP Add IP Neighbor
+| | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4_gw} | ${tg_to_dut_if1_mac}
 
 | Check MAP Configuration With Traffic Script
 | | [Documentation]
 
 | Check MAP Configuration With Traffic Script
 | | [Documentation]
index 6bedf88..a9c32a9 100644 (file)
 
 
 *** Settings ***
 
 
 *** Settings ***
-| Resource | resources/libraries/robot/shared/default.robot
-| Resource | resources/libraries/robot/shared/testing_path.robot
+| Library  | resources.libraries.python.IPUtil
+| Library  | resources.libraries.python.Trace
+| ...
 | Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/ip/ip6.robot
 | Resource | resources/libraries/robot/ip/map.robot
 | Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/ip/ip6.robot
 | Resource | resources/libraries/robot/ip/map.robot
-| Library  | resources.libraries.python.IPUtil
-| Library  | resources.libraries.python.Trace
+| Resource | resources/libraries/robot/shared/default.robot
+| Resource | resources/libraries/robot/shared/testing_path.robot
+| ...
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO | SOFTWIRE
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO | SOFTWIRE
+| ...
 | Test Setup | Run Keywords | Set up functional test
 | ... | AND | Set interfaces IP addresses and routes
 | Test Setup | Run Keywords | Set up functional test
 | ... | AND | Set interfaces IP addresses and routes
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
+| ...
 | Documentation | *Test for Basic mapping rule for MAP-T*\
 | ... | *[Top] Network Topologies:* TG - DUT1 - TG with two links between the
 | ... | nodes.
 | Documentation | *Test for Basic mapping rule for MAP-T*\
 | ... | *[Top] Network Topologies:* TG - DUT1 - TG with two links between the
 | ... | nodes.
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4} | ${ipv4_prefix_len}
 | | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6} | ${ipv6_prefix_len}
 | | Vpp Route Add | ${dut_node} | :: | 0 | gateway=${dut_ip6_gw}
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4} | ${ipv4_prefix_len}
 | | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6} | ${ipv6_prefix_len}
 | | Vpp Route Add | ${dut_node} | :: | 0 | gateway=${dut_ip6_gw}
-| | ... | interface=${dut_to_tg_if2} | resolve_attempts=${NONE} | count=${NONE}
-| | Add IP neighbor | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6_gw}
-| | ... | ${tg_to_dut_if2_mac}
+| | ... | interface=${dut_to_tg_if2}
+| | VPP Add IP neighbor
+| | ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6_gw} | ${tg_to_dut_if2_mac}
 | | Vpp Route Add | ${dut_node} | 0.0.0.0 | 0 | gateway=${dut_ip4_gw}
 | | Vpp Route Add | ${dut_node} | 0.0.0.0 | 0 | gateway=${dut_ip4_gw}
-| | ... | interface=${dut_to_tg_if1} | resolve_attempts=${NONE} | count=${NONE}
-| | Add IP neighbor | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4_gw}
-| | ... | ${tg_to_dut_if1_mac}
+| | ... | interface=${dut_to_tg_if1}
+| | VPP Add IP neighbor
+| | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4_gw} | ${tg_to_dut_if1_mac}
 
 | Check MAP-T configuration with traffic script
 | | [Documentation] |
 
 | Check MAP-T configuration with traffic script
 | | [Documentation] |
index e1ec8ff..f212f8b 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
+| Library  | resources.libraries.python.Trace
+| ...
+| Resource | resources/libraries/robot/l2/l2_traffic.robot
+| Resource | resources/libraries/robot/overlay/vxlan.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
-| Resource | resources/libraries/robot/overlay/vxlan.robot
-| Resource | resources/libraries/robot/l2/l2_traffic.robot
 | Resource | resources/libraries/robot/vm/qemu.robot
 | Resource | resources/libraries/robot/vm/qemu.robot
-| Library  | resources.libraries.python.Trace
+| ...
 | Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | HW_ENV
 | Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | HW_ENV
+| ...
 | Test Setup | Set up functional test
 | Test Setup | Set up functional test
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
+| ...
 | Documentation | *L2BD with SHG combined with VXLAN test cases - IPv4*
 | ...
 | ... | *[Top] Network topologies:* TG=DUT1=DUT2=TG 3-node circular topology
 | Documentation | *L2BD with SHG combined with VXLAN test cases - IPv4*
 | ...
 | ... | *[Top] Network topologies:* TG=DUT1=DUT2=TG 3-node circular topology
 | | ... | [Ref] RFC7348.
 | | [Tags] | 3_NODE_DOUBLE_LINK_TOPO
 | | Given Configure path for 3-node BD-SHG test | ${nodes['TG']}
 | | ... | [Ref] RFC7348.
 | | [Tags] | 3_NODE_DOUBLE_LINK_TOPO
 | | Given Configure path for 3-node BD-SHG test | ${nodes['TG']}
-| | ...                                         | ${nodes['DUT1']}
-| | ...                                         | ${nodes['DUT2']}
+| | ... | ${nodes['DUT1']} | ${nodes['DUT2']}
 | | And Set interfaces in 3-node BD-SHG test up
 | | And Set interfaces in 3-node BD-SHG test up
-| | And Set Interface Address | ${dut1_node} | ${dut1_to_dut2} | ${ip4_addr1}
-| | ...                       | ${ip4_prefix}
-| | And Set Interface Address | ${dut2_node} | ${dut2_to_dut1} | ${ip4_addr2}
-| | ...                       | ${ip4_prefix}
+| | And VPP Interface Set IP Address | ${dut1_node} | ${dut1_to_dut2}
+| | ... | ${ip4_addr1} | ${ip4_prefix}
+| | And VPP Interface Set IP Address | ${dut2_node} | ${dut2_to_dut1}
+| | ... | ${ip4_addr2} | ${ip4_prefix}
 | | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${ip4_addr2}
 | | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${ip4_addr1}
 | | ${dut1s_vxlan1}= | When Create VXLAN interface | ${dut1_node} | ${vni_1}
 | | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${ip4_addr2}
 | | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${ip4_addr1}
 | | ${dut1s_vxlan1}= | When Create VXLAN interface | ${dut1_node} | ${vni_1}
-| | | ...                                          | ${ip4_addr1} | ${ip4_addr2}
+| | | ... | ${ip4_addr1} | ${ip4_addr2}
 | | ${dut1s_vxlan2}= | And Create VXLAN interface | ${dut1_node} | ${vni_2}
 | | ${dut1s_vxlan2}= | And Create VXLAN interface | ${dut1_node} | ${vni_2}
-| | | ...                                         | ${ip4_addr1} | ${ip4_addr2}
+| | | ... | ${ip4_addr1} | ${ip4_addr2}
 | | ${dut2s_vxlan1}= | And Create VXLAN interface | ${dut2_node} | ${vni_1}
 | | ${dut2s_vxlan1}= | And Create VXLAN interface | ${dut2_node} | ${vni_1}
-| | | ...                                         | ${ip4_addr2} | ${ip4_addr1}
+| | | ... | ${ip4_addr2} | ${ip4_addr1}
 | | ${dut2s_vxlan2}= | And Create VXLAN interface | ${dut2_node} | ${vni_2}
 | | ${dut2s_vxlan2}= | And Create VXLAN interface | ${dut2_node} | ${vni_2}
-| | | ...                                         | ${ip4_addr2} | ${ip4_addr1}
+| | | ... | ${ip4_addr2} | ${ip4_addr1}
 | | And Set Interface State | ${dut1_node} | ${dut1s_vxlan1} | up
 | | And Set Interface State | ${dut1_node} | ${dut1s_vxlan2} | up
 | | And Set Interface State | ${dut2_node} | ${dut2s_vxlan1} | up
 | | And Set Interface State | ${dut1_node} | ${dut1s_vxlan1} | up
 | | And Set Interface State | ${dut1_node} | ${dut1s_vxlan2} | up
 | | And Set Interface State | ${dut2_node} | ${dut2s_vxlan1} | up
 | | And Vpp Node Interfaces Ready Wait | ${dut2_node}
 | | And Create bridge domain | ${dut1_node} | ${bd_id1}
 | | And Add interface to bridge domain | ${dut1_node} | ${dut1_to_tg_if1}
 | | And Vpp Node Interfaces Ready Wait | ${dut2_node}
 | | And Create bridge domain | ${dut1_node} | ${bd_id1}
 | | And Add interface to bridge domain | ${dut1_node} | ${dut1_to_tg_if1}
-| | ...                                     | ${bd_id1}
+| | ... | ${bd_id1}
 | | And Add interface to bridge domain | ${dut1_node} | ${dut1_to_tg_if2}
 | | And Add interface to bridge domain | ${dut1_node} | ${dut1_to_tg_if2}
-| | ...                                     | ${bd_id1}
+| | ... | ${bd_id1}
 | | And Add interface to bridge domain | ${dut1_node} | ${dut1s_vxlan1}
 | | And Add interface to bridge domain | ${dut1_node} | ${dut1s_vxlan1}
-| | ...                                     | ${bd_id1} | ${shg1}
+| | ... | ${bd_id1} | ${shg1}
 | | And Add interface to bridge domain | ${dut1_node} | ${dut1s_vxlan2}
 | | And Add interface to bridge domain | ${dut1_node} | ${dut1s_vxlan2}
-| | ...                                     | ${bd_id1} | ${shg1}
+| | ... | ${bd_id1} | ${shg1}
 | | And Create bridge domain | ${dut2_node} | ${bd_id2}
 | | And Add interface to bridge domain | ${dut2_node} | ${dut2_to_tg_if1}
 | | And Create bridge domain | ${dut2_node} | ${bd_id2}
 | | And Add interface to bridge domain | ${dut2_node} | ${dut2_to_tg_if1}
-| | ...                                     | ${bd_id2}
+| | ... | ${bd_id2}
 | | And Add interface to bridge domain | ${dut2_node} | ${dut2s_vxlan1}
 | | And Add interface to bridge domain | ${dut2_node} | ${dut2s_vxlan1}
-| | ...                                     | ${bd_id2}
+| | ... | ${bd_id2}
 | | And Create bridge domain | ${dut2_node} | ${bd_id3}
 | | And Add interface to bridge domain | ${dut2_node} | ${dut2_to_tg_if2}
 | | And Create bridge domain | ${dut2_node} | ${bd_id3}
 | | And Add interface to bridge domain | ${dut2_node} | ${dut2_to_tg_if2}
-| | ...                                     | ${bd_id3}
+| | ... | ${bd_id3}
 | | And Add interface to bridge domain | ${dut2_node} | ${dut2s_vxlan2}
 | | And Add interface to bridge domain | ${dut2_node} | ${dut2s_vxlan2}
-| | ...                                     | ${bd_id3}
+| | ... | ${bd_id3}
 | | Then Send ICMPv4 bidirectionally and verify received packets | ${tg_node}
 | | Then Send ICMPv4 bidirectionally and verify received packets | ${tg_node}
-| | ...                                          | ${tg_to_dut1_if1}
-| | ...                                          | ${tg_to_dut2_if1}
+| | ... | ${tg_to_dut1_if1} | ${tg_to_dut2_if1}
 | | And Send ICMPv4 bidirectionally and verify received packets | ${tg_node}
 | | And Send ICMPv4 bidirectionally and verify received packets | ${tg_node}
-| | ...                                         | ${tg_to_dut1_if1}
-| | ...                                         | ${tg_to_dut2_if2}
+| | ... | ${tg_to_dut1_if1} | ${tg_to_dut2_if2}
 | | And Send ICMPv4 bidirectionally and verify received packets | ${tg_node}
 | | And Send ICMPv4 bidirectionally and verify received packets | ${tg_node}
-| | ...                                         | ${tg_to_dut1_if2}
-| | ...                                         | ${tg_to_dut2_if1}
+| | ... | ${tg_to_dut1_if2} | ${tg_to_dut2_if1}
 | | And Send ICMPv4 bidirectionally and verify received packets | ${tg_node}
 | | And Send ICMPv4 bidirectionally and verify received packets | ${tg_node}
-| | ...                                         | ${tg_to_dut1_if2}
-| | ...                                         | ${tg_to_dut2_if2}
+| | ... | ${tg_to_dut1_if2} | ${tg_to_dut2_if2}
 | | And Run Keyword And Expect Error | ICMP echo Rx timeout
 | | And Run Keyword And Expect Error | ICMP echo Rx timeout
-| | ...                              | Send ICMPv4 bidirectionally and verify received packets
-| | | ...                            | ${tg_node} | ${tg_to_dut2_if1}
-| | | ...                            | ${tg_to_dut2_if2}
+| | ... | Send ICMPv4 bidirectionally and verify received packets
+| | ... | ${tg_node} | ${tg_to_dut2_if1} | ${tg_to_dut2_if2}
 
 | TC01: DUT1 and DUT2 with L2BD and VXLANoIPv4 tunnels in different SHGs switch ICMPv4 between TG links
 | | [Documentation]
 
 | TC01: DUT1 and DUT2 with L2BD and VXLANoIPv4 tunnels in different SHGs switch ICMPv4 between TG links
 | | [Documentation]
 | | ... | all TG interfaces. [Ref] RFC7348.
 | | [Tags] | 3_NODE_DOUBLE_LINK_TOPO
 | | Given Configure path for 3-node BD-SHG test | ${nodes['TG']}
 | | ... | all TG interfaces. [Ref] RFC7348.
 | | [Tags] | 3_NODE_DOUBLE_LINK_TOPO
 | | Given Configure path for 3-node BD-SHG test | ${nodes['TG']}
-| | ...                                         | ${nodes['DUT1']}
-| | ...                                         | ${nodes['DUT2']}
+| | ... | ${nodes['DUT1']} | ${nodes['DUT2']}
 | | And Set interfaces in 3-node BD-SHG test up
 | | And Set interfaces in 3-node BD-SHG test up
-| | And Set Interface Address | ${dut1_node} | ${dut1_to_dut2} | ${ip4_addr1}
-| | ...                       | ${ip4_prefix}
-| | And Set Interface Address | ${dut2_node} | ${dut2_to_dut1} | ${ip4_addr2}
-| | ...                       | ${ip4_prefix}
+| | And VPP Interface Set IP Address | ${dut1_node} | ${dut1_to_dut2}
+| | ... | ${ip4_addr1} | ${ip4_prefix}
+| | And VPP Interface Set IP Address | ${dut2_node} | ${dut2_to_dut1}
+| | ... | ${ip4_addr2} | ${ip4_prefix}
 | | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${ip4_addr2}
 | | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${ip4_addr1}
 | | ${dut1s_vxlan1}= | When Create VXLAN interface | ${dut1_node} | ${vni_1}
 | | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${ip4_addr2}
 | | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${ip4_addr1}
 | | ${dut1s_vxlan1}= | When Create VXLAN interface | ${dut1_node} | ${vni_1}
-| | | ...                                          | ${ip4_addr1} | ${ip4_addr2}
+| | | ... | ${ip4_addr1} | ${ip4_addr2}
 | | ${dut1s_vxlan2}= | And Create VXLAN interface | ${dut1_node} | ${vni_2}
 | | ${dut1s_vxlan2}= | And Create VXLAN interface | ${dut1_node} | ${vni_2}
-| | | ...                                         | ${ip4_addr1} | ${ip4_addr2}
+| | | ... | ${ip4_addr1} | ${ip4_addr2}
 | | ${dut2s_vxlan1}= | And Create VXLAN interface | ${dut2_node} | ${vni_1}
 | | ${dut2s_vxlan1}= | And Create VXLAN interface | ${dut2_node} | ${vni_1}
-| | | ...                                         | ${ip4_addr2} | ${ip4_addr1}
+| | | ... | ${ip4_addr2} | ${ip4_addr1}
 | | ${dut2s_vxlan2}= | And Create VXLAN interface | ${dut2_node} | ${vni_2}
 | | ${dut2s_vxlan2}= | And Create VXLAN interface | ${dut2_node} | ${vni_2}
-| | | ...                                         | ${ip4_addr2} | ${ip4_addr1}
+| | | ... | ${ip4_addr2} | ${ip4_addr1}
 | | And Set Interface State | ${dut1_node} | ${dut1s_vxlan1} | up
 | | And Set Interface State | ${dut1_node} | ${dut1s_vxlan2} | up
 | | And Set Interface State | ${dut2_node} | ${dut2s_vxlan1} | up
 | | And Set Interface State | ${dut1_node} | ${dut1s_vxlan1} | up
 | | And Set Interface State | ${dut1_node} | ${dut1s_vxlan2} | up
 | | And Set Interface State | ${dut2_node} | ${dut2s_vxlan1} | up
 | | And Vpp Node Interfaces Ready Wait | ${dut2_node}
 | | And Create bridge domain | ${dut1_node} | ${bd_id1}
 | | And Add interface to bridge domain | ${dut1_node} | ${dut1_to_tg_if1}
 | | And Vpp Node Interfaces Ready Wait | ${dut2_node}
 | | And Create bridge domain | ${dut1_node} | ${bd_id1}
 | | And Add interface to bridge domain | ${dut1_node} | ${dut1_to_tg_if1}
-| | ...                                     | ${bd_id1}
+| | ... | ${bd_id1}
 | | And Add interface to bridge domain | ${dut1_node} | ${dut1_to_tg_if2}
 | | And Add interface to bridge domain | ${dut1_node} | ${dut1_to_tg_if2}
-| | ...                                     | ${bd_id1}
+| | ... | ${bd_id1}
 | | And Add interface to bridge domain | ${dut1_node} | ${dut1s_vxlan1}
 | | And Add interface to bridge domain | ${dut1_node} | ${dut1s_vxlan1}
-| | ...                                     | ${bd_id1} | ${shg1}
+| | ... | ${bd_id1} | ${shg1}
 | | And Add interface to bridge domain | ${dut1_node} | ${dut1s_vxlan2}
 | | And Add interface to bridge domain | ${dut1_node} | ${dut1s_vxlan2}
-| | ...                                     | ${bd_id1} | ${shg2}
+| | ... | ${bd_id1} | ${shg2}
 | | And Create bridge domain | ${dut2_node} | ${bd_id2}
 | | And Add interface to bridge domain | ${dut2_node} | ${dut2_to_tg_if1}
 | | And Create bridge domain | ${dut2_node} | ${bd_id2}
 | | And Add interface to bridge domain | ${dut2_node} | ${dut2_to_tg_if1}
-| | ...                                     | ${bd_id2}
+| | ... | ${bd_id2}
 | | And Add interface to bridge domain | ${dut2_node} | ${dut2s_vxlan1}
 | | And Add interface to bridge domain | ${dut2_node} | ${dut2s_vxlan1}
-| | ...                                     | ${bd_id2}
+| | ... | ${bd_id2}
 | | And Create bridge domain | ${dut2_node} | ${bd_id3}
 | | And Add interface to bridge domain | ${dut2_node} | ${dut2_to_tg_if2}
 | | And Create bridge domain | ${dut2_node} | ${bd_id3}
 | | And Add interface to bridge domain | ${dut2_node} | ${dut2_to_tg_if2}
-| | ...                                     | ${bd_id3}
+| | ... | ${bd_id3}
 | | And Add interface to bridge domain | ${dut2_node} | ${dut2s_vxlan2}
 | | And Add interface to bridge domain | ${dut2_node} | ${dut2s_vxlan2}
-| | ...                                     | ${bd_id3}
+| | ... | ${bd_id3}
 | | Then Send ICMPv4 bidirectionally and verify received packets | ${tg_node}
 | | Then Send ICMPv4 bidirectionally and verify received packets | ${tg_node}
-| | ...                                          | ${tg_to_dut1_if1}
-| | ...                                          | ${tg_to_dut2_if1}
+| | ... | ${tg_to_dut1_if1} | ${tg_to_dut2_if1}
 | | And Send ICMPv4 bidirectionally and verify received packets | ${tg_node}
 | | And Send ICMPv4 bidirectionally and verify received packets | ${tg_node}
-| | ...                                         | ${tg_to_dut1_if1}
-| | ...                                         | ${tg_to_dut2_if2}
+| | ... | ${tg_to_dut1_if1} | ${tg_to_dut2_if2}
 | | And Send ICMPv4 bidirectionally and verify received packets | ${tg_node}
 | | And Send ICMPv4 bidirectionally and verify received packets | ${tg_node}
-| | ...                                         | ${tg_to_dut1_if2}
-| | ...                                         | ${tg_to_dut2_if1}
+| | ... | ${tg_to_dut1_if2} | ${tg_to_dut2_if1}
 | | And Send ICMPv4 bidirectionally and verify received packets | ${tg_node}
 | | And Send ICMPv4 bidirectionally and verify received packets | ${tg_node}
-| | ...                                         | ${tg_to_dut1_if2}
-| | ...                                         | ${tg_to_dut2_if2}
+| | ... | ${tg_to_dut1_if2} | ${tg_to_dut2_if2}
 | | And Send ICMPv4 bidirectionally and verify received packets | ${tg_node}
 | | And Send ICMPv4 bidirectionally and verify received packets | ${tg_node}
-| | ...                                         | ${tg_to_dut2_if1}
-| | ...                                         | ${tg_to_dut2_if2}
+| | ... | ${tg_to_dut2_if1} | ${tg_to_dut2_if2}
index 0550a75..9e45799 100644 (file)
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
-| Library | resources.libraries.python.Trace
 | Library | resources.libraries.python.Cop
 | Library | resources.libraries.python.Cop
+| Library | resources.libraries.python.IPUtil
+| Library | resources.libraries.python.Trace
+| ...
+| Resource | resources/libraries/robot/ip/ip6.robot
+| Resource | resources/libraries/robot/l2/l2_xconnect.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
-| Resource | resources/libraries/robot/ip/ip6.robot
-| Resource | resources/libraries/robot/shared/traffic.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
-| Resource | resources/libraries/robot/l2/l2_xconnect.robot
-| Variables  | resources/libraries/python/IPv6NodesAddr.py | ${nodes}
+| Resource | resources/libraries/robot/shared/traffic.robot
+| ...
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO
+| ...
 | Test Setup | Set up functional test
 | Test Setup | Set up functional test
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
+| ...
 | Documentation | *COP Security IPv6 Blacklist Tests*
 | ...
 | ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
 | Documentation | *COP Security IPv6 Blacklist Tests*
 | ...
 | ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
@@ -57,8 +62,6 @@
 
 | ${ip_prefix}= | 64
 
 
 | ${ip_prefix}= | 64
 
-| ${nodes_ipv6_addresses}= | ${nodes_ipv6_addr}
-
 | ${fib_table_number}= | 1
 
 *** Test Cases ***
 | ${fib_table_number}= | 1
 
 *** Test Cases ***
 | | And Set interfaces in 3-node circular topology up
 | | And Configure L2XC
 | | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_tg}
 | | And Set interfaces in 3-node circular topology up
 | | And Configure L2XC
 | | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_tg}
-| | And VPP Set IF IPv6 Addr
+| | And VPP Interface Set IP Address
 | | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_if1_ip} | ${ip_prefix}
 | | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_if1_ip} | ${ip_prefix}
-| | And VPP Set IF IPv6 Addr
+| | And VPP Interface Set IP Address
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_if2_ip} | ${ip_prefix}
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_if2_ip} | ${ip_prefix}
-| | And VPP Set IF IPv6 Addr
+| | And VPP Interface Set IP Address
 | | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_if1_ip} | ${ip_prefix}
 | | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_if1_ip} | ${ip_prefix}
-| | And VPP Set IF IPv6 Addr
+| | And VPP Interface Set IP Address
 | | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_if2_ip} | ${ip_prefix}
 | | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_if2_ip} | ${ip_prefix}
-| | And Add IP Neighbor
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_if1_ip_GW} | ${tg_to_dut1_mac}
 | | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_if1_ip_GW} | ${tg_to_dut1_mac}
-| | And Add IP Neighbor
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_if2_ip_GW} | ${tg_to_dut2_mac}
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_if2_ip_GW} | ${tg_to_dut2_mac}
-| | And Vpp Route Add | ${dut1_node}
-| | ... | ${test_dst_ip} | ${ip_prefix} | gateway=${dut1_if2_ip_GW}
-| | ... | interface=${dut1_to_dut2}
+| | And Vpp Route Add | ${dut1_node} | ${test_dst_ip} | ${ip_prefix}
+| | ... | gateway=${dut1_if2_ip_GW} | interface=${dut1_to_dut2}
 | | And Vpp All Ra Suppress Link Layer | ${nodes}
 | | And Add fib table | ${dut1_node} | ${fib_table_number} | ipv6=${TRUE}
 | | When COP Add whitelist Entry
 | | And Vpp All Ra Suppress Link Layer | ${nodes}
 | | And Add fib table | ${dut1_node} | ${fib_table_number} | ipv6=${TRUE}
 | | When COP Add whitelist Entry
index 933aa0a..a69171c 100644 (file)
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
-| Library | resources.libraries.python.Trace
 | Library | resources.libraries.python.Cop
 | Library | resources.libraries.python.Cop
+| Library | resources.libraries.python.IPUtil
+| Library | resources.libraries.python.Trace
+| ...
+| Resource | resources/libraries/robot/ip/ip6.robot
+| Resource | resources/libraries/robot/l2/l2_xconnect.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
-| Resource | resources/libraries/robot/ip/ip6.robot
-| Resource | resources/libraries/robot/shared/traffic.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
-| Resource | resources/libraries/robot/l2/l2_xconnect.robot
-| Variables  | resources/libraries/python/IPv6NodesAddr.py | ${nodes}
+| Resource | resources/libraries/robot/shared/traffic.robot
+| ...
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO
+| ...
 | Test Setup | Set up functional test
 | Test Setup | Set up functional test
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
+| ...
 | Documentation | *COP Security IPv6 Whitelist Tests*
 | ...
 | ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
 | Documentation | *COP Security IPv6 Whitelist Tests*
 | ...
 | ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
@@ -57,8 +62,6 @@
 
 | ${ip_prefix}= | 64
 
 
 | ${ip_prefix}= | 64
 
-| ${nodes_ipv6_addresses}= | ${nodes_ipv6_addr}
-
 | ${fib_table_number}= | 1
 
 *** Test Cases ***
 | ${fib_table_number}= | 1
 
 *** Test Cases ***
 | | And Set interfaces in 3-node circular topology up
 | | And Configure L2XC
 | | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_tg}
 | | And Set interfaces in 3-node circular topology up
 | | And Configure L2XC
 | | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_tg}
-| | And VPP Set IF IPv6 Addr
+| | And VPP Interface Set IP Address
 | | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_if1_ip} | ${ip_prefix}
 | | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_if1_ip} | ${ip_prefix}
-| | And VPP Set IF IPv6 Addr
+| | And VPP Interface Set IP Address
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_if2_ip} | ${ip_prefix}
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_if2_ip} | ${ip_prefix}
-| | And VPP Set IF IPv6 Addr
+| | And VPP Interface Set IP Address
 | | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_if1_ip} | ${ip_prefix}
 | | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_if1_ip} | ${ip_prefix}
-| | And VPP Set IF IPv6 Addr
+| | And VPP Interface Set IP Address
 | | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_if2_ip} | ${ip_prefix}
 | | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_if2_ip} | ${ip_prefix}
-| | And Add IP Neighbor
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_if1_ip_GW} | ${tg_to_dut1_mac}
 | | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_if1_ip_GW} | ${tg_to_dut1_mac}
-| | And Add IP Neighbor
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_if2_ip_GW} | ${tg_to_dut2_mac}
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_if2_ip_GW} | ${tg_to_dut2_mac}
-| | And Vpp Route Add | ${dut1_node}
-| | ... | ${test_dst_ip} | ${ip_prefix} | gateway=${dut1_if2_ip_GW}
-| | ... | interface=${dut1_to_dut2}
+| | And Vpp Route Add | ${dut1_node} | ${test_dst_ip} | ${ip_prefix}
+| | ... | gateway=${dut1_if2_ip_GW} | interface=${dut1_to_dut2}
 | | And Vpp All Ra Suppress Link Layer | ${nodes}
 | | And Add fib table | ${dut1_node} | ${fib_table_number} | ipv6=${TRUE}
 | | And Vpp All Ra Suppress Link Layer | ${nodes}
 | | And Add fib table | ${dut1_node} | ${fib_table_number} | ipv6=${TRUE}
-| | And Vpp Route Add | ${dut1_node}
-| | ... | ${cop_dut_ip} | ${ip_prefix} | vrf=${fib_table_number} | local=${TRUE}
+| | And Vpp Route Add | ${dut1_node} | ${cop_dut_ip} | ${ip_prefix}
+| | ... | vrf=${fib_table_number} | local=${TRUE}
 | | When COP Add whitelist Entry | ${dut1_node} | ${dut1_to_tg} | ip6 |
 | | ... | ${fib_table_number}
 | | And COP interface enable or disable | ${dut1_node} | ${dut1_to_tg} | enable
 | | When COP Add whitelist Entry | ${dut1_node} | ${dut1_to_tg} | ip6 |
 | | ... | ${fib_table_number}
 | | And COP interface enable or disable | ${dut1_node} | ${dut1_to_tg} | enable
index f877649..74a92d2 100644 (file)
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
-| Resource | resources/libraries/robot/shared/default.robot
+| Library | resources.libraries.python.Classify.Classify
+| Library | resources.libraries.python.IPUtil
+| Library | resources.libraries.python.Trace
+| ...
+| Resource | resources/libraries/robot/ip/ip6.robot
+| Resource | resources/libraries/robot/l2/l2_xconnect.robot
 | Resource | resources/libraries/robot/shared/counters.robot
 | Resource | resources/libraries/robot/shared/counters.robot
+| Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
-| Resource | resources/libraries/robot/ip/ip6.robot
-| Resource | resources/libraries/robot/l2/l2_xconnect.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
-| Library | resources.libraries.python.Classify.Classify
-| Library | resources.libraries.python.Trace
+| ...
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO | SKIP_VPP_PATCH
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO | SKIP_VPP_PATCH
+| ...
 | Test Setup | Set up functional test
 | Test Setup | Set up functional test
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
+| ...
 | Documentation | *IPv6 routing with ingress ACL test cases*
 | ...
 | ... | Encapsulations: Eth-IPv6 on links TG-DUT1, TG-DUT2, DUT1-DUT2. IPv6
 | Documentation | *IPv6 routing with ingress ACL test cases*
 | ...
 | ... | Encapsulations: Eth-IPv6 on links TG-DUT1, TG-DUT2, DUT1-DUT2. IPv6
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Vpp Set If Ipv6 Addr | ${dut1_node}
-| | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Vpp Set If Ipv6 Addr | ${dut1_node}
-| | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
-| | And Add Ip Neighbor
+| | And VPP Interface Set IP Address
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
+| | And VPP Interface Set IP Address
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Vpp Set If Ipv6 Addr | ${dut1_node}
-| | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Vpp Set If Ipv6 Addr | ${dut1_node}
-| | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
-| | And Add Ip Neighbor
+| | And VPP Interface Set IP Address
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
+| | And VPP Interface Set IP Address
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Vpp Set If Ipv6 Addr | ${dut1_node}
-| | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Vpp Set If Ipv6 Addr | ${dut1_node}
-| | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
-| | And Add Ip Neighbor
+| | And VPP Interface Set IP Address
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
+| | And VPP Interface Set IP Address
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Vpp Set If Ipv6 Addr | ${dut1_node}
-| | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Vpp Set If Ipv6 Addr | ${dut1_node}
-| | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
-| | And Add Ip Neighbor
+| | And VPP Interface Set IP Address
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
+| | And VPP Interface Set IP Address
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Vpp Set If Ipv6 Addr | ${dut1_node}
-| | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Vpp Set If Ipv6 Addr | ${dut1_node}
-| | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
-| | And Add Ip Neighbor
+| | And VPP Interface Set IP Address
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
+| | And VPP Interface Set IP Address
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Vpp Set If Ipv6 Addr | ${dut1_node}
-| | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Vpp Set If Ipv6 Addr | ${dut1_node}
-| | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
-| | And Add Ip Neighbor
+| | And VPP Interface Set IP Address
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
+| | And VPP Interface Set IP Address
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Vpp Set If Ipv6 Addr | ${dut1_node}
-| | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Vpp Set If Ipv6 Addr | ${dut1_node}
-| | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
-| | And Add Ip Neighbor
+| | And VPP Interface Set IP Address
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
+| | And VPP Interface Set IP Address
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Vpp Set If Ipv6 Addr | ${dut1_node}
-| | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Vpp Set If Ipv6 Addr | ${dut1_node}
-| | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
-| | And Add Ip Neighbor
+| | And VPP Interface Set IP Address
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
+| | And VPP Interface Set IP Address
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Vpp Set If Ipv6 Addr | ${dut1_node}
-| | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Vpp Set If Ipv6 Addr | ${dut1_node}
-| | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
-| | And Add Ip Neighbor
+| | And VPP Interface Set IP Address
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
+| | And VPP Interface Set IP Address
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Vpp Set If Ipv6 Addr | ${dut1_node}
-| | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Vpp Set If Ipv6 Addr | ${dut1_node}
-| | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
-| | And Add Ip Neighbor
+| | And VPP Interface Set IP Address
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
+| | And VPP Interface Set IP Address
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Vpp Set If Ipv6 Addr | ${dut1_node}
-| | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Vpp Set If Ipv6 Addr | ${dut1_node}
-| | ... | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
-| | And Add Ip Neighbor
+| | And VPP Interface Set IP Address
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
+| | And VPP Interface Set IP Address
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip} | ${prefix_length}
+| | And VPP Add IP Neighbor
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip_GW}
 | | ... | ${tg_to_dut2_mac}
 | | And Vpp Route Add
index 12bcfef..7611cbc 100644 (file)
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
-| Resource | resources/libraries/robot/shared/default.robot
-| Resource | resources/libraries/robot/shared/testing_path.robot
+| Library | resources.libraries.python.IPUtil
+| Library | resources.libraries.python.Trace
+| ...
 | Resource | resources/libraries/robot/features/dhcp_proxy.robot
 | Resource | resources/libraries/robot/ip/ip6.robot
 | Resource | resources/libraries/robot/features/dhcp_proxy.robot
 | Resource | resources/libraries/robot/ip/ip6.robot
-| Library | resources.libraries.python.Trace
+| Resource | resources/libraries/robot/shared/default.robot
+| Resource | resources/libraries/robot/shared/testing_path.robot
+| ...
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO | SKIP_VPP_PATCH
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO | SKIP_VPP_PATCH
+| ...
 | Test Setup | Set up functional test
 | Test Setup | Set up functional test
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
+| ...
 | Documentation | *DHCPv6 proxy test cases*
 | ...
 | ... | *[Top] Network Topologies:* TG = DUT
 | Documentation | *DHCPv6 proxy test cases*
 | ...
 | ... | *[Top] Network Topologies:* TG = DUT
 | | Given Configure path in 2-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
 | | And Set interfaces in 2-node circular topology up
 | | Given Configure path in 2-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
 | | And Set interfaces in 2-node circular topology up
-| | And Vpp Set If Ipv6 Addr | ${dut_node}
+| | And VPP Interface Set IP Address | ${dut_node}
 | | ... | ${dut_to_tg_if1} | ${dut_to_tg_if1_ip} | ${prefix_length}
 | | ... | ${dut_to_tg_if1} | ${dut_to_tg_if1_ip} | ${prefix_length}
-| | And Vpp Set If Ipv6 Addr | ${dut_node}
+| | And VPP Interface Set IP Address | ${dut_node}
 | | ... | ${dut_to_tg_if2} | ${dut_to_tg_if2_ip} | ${prefix_length}
 | | ... | ${dut_to_tg_if2} | ${dut_to_tg_if2_ip} | ${prefix_length}
-| | And VPP Route Add | ${dut_node} | ff02::1:2 | 128 | gateway=${NONE}
-| | ... | interface=local | use_sw_index=${FALSE} | resolve_attempts=${NONE}
-| | And Add IP Neighbor | ${dut_node} | ${dut_to_tg_if2} | ${dhcp_server_ip}
-| | ... | ${tg_to_dut_if2_mac}
+| | And VPP Route Add | ${dut_node} | ff02::1:2 | 128 | local=${TRUE}
+| | And VPP Add IP Neighbor | ${dut_node}
+| | ... | ${dut_to_tg_if2} | ${dhcp_server_ip} | ${tg_to_dut_if2_mac}
 | | And Vpp All Ra Suppress Link Layer | ${nodes}
 | | And Vpp All Ra Suppress Link Layer | ${nodes}
-| | When DHCP Proxy Config | ${dut_node} | ${dhcp_server_ip}
-| | ... | ${dut_to_tg_if1_ip}
+| | When DHCP Proxy Config
+| | ... | ${dut_node} | ${dhcp_server_ip} | ${dut_to_tg_if1_ip}
 | | Then Send DHCPv6 Messages | ${tg_node} | ${tg_to_dut_if1} | ${tg_to_dut_if2}
 | | ... | ${dut_to_tg_if1_ip} | ${dut_to_tg_if1_mac} | ${dhcp_server_ip}
 | | ... | ${tg_to_dut_if2_mac} | ${tg_to_dut_if1_mac} |  ${dut_to_tg_if2_mac}
 | | Then Send DHCPv6 Messages | ${tg_node} | ${tg_to_dut_if1} | ${tg_to_dut_if2}
 | | ... | ${dut_to_tg_if1_ip} | ${dut_to_tg_if1_mac} | ${dhcp_server_ip}
 | | ... | ${tg_to_dut_if2_mac} | ${tg_to_dut_if1_mac} |  ${dut_to_tg_if2_mac}
index bf2a902..b970d37 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-
 *** Settings ***
 *** Settings ***
-| Resource | resources/libraries/robot/shared/default.robot
+| Library | resources.libraries.python.IPUtil
+| Library | resources.libraries.python.Trace
+| ...
+| Resource | resources/libraries/robot/ip/ip6.robot
 | Resource | resources/libraries/robot/shared/counters.robot
 | Resource | resources/libraries/robot/shared/counters.robot
+| Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
-| Resource | resources/libraries/robot/ip/ip6.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
-| Library | resources.libraries.python.Trace
+| ...
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO | SKIP_VPP_PATCH
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO | SKIP_VPP_PATCH
+| ...
 | Test Setup | Set up functional test
 | Test Setup | Set up functional test
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
+| ...
 | Documentation | *Ipv6 Multipath routing test cases*
 | ...
 | ... | *[Top] Network topologies:* TG=DUT 2-node topology with two links\
 | Documentation | *Ipv6 Multipath routing test cases*
 | ...
 | ... | *[Top] Network topologies:* TG=DUT 2-node topology with two links\
 | | Given Configure path in 2-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
 | | And Set interfaces in 2-node circular topology up
 | | Given Configure path in 2-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
 | | And Set interfaces in 2-node circular topology up
-| | And Vpp Set If Ipv6 Addr | ${dut_node}
-| | ... | ${dut_to_tg_if2} | ${ip_1} | ${prefix_length}
-| | And Vpp Set If Ipv6 Addr | ${dut_node}
-| | ... | ${dut_to_tg_if1} | ${ip_2} | ${prefix_length}
-| | And Add Ip Neighbor
+| | And VPP Interface Set IP Address
+| | ... | ${dut_node} | ${dut_to_tg_if2} | ${ip_1} | ${prefix_length}
+| | And VPP Interface Set IP Address
+| | ... | ${dut_node} | ${dut_to_tg_if1} | ${ip_2} | ${prefix_length}
+| | And VPP Add IP Neighbor
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${neighbor_1_ip} | ${neighbor_1_mac}
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${neighbor_1_ip} | ${neighbor_1_mac}
-| | And Add Ip Neighbor
+| | And VPP Add IP Neighbor
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${neighbor_2_ip} | ${neighbor_2_mac}
 | | And Suppress ICMPv6 router advertisement message | ${nodes}
 | | When Vpp Route Add
 | | ... | ${dut_node} | ${test_dst_ip} | ${prefix_length}
 | | ... | gateway=${neighbor_1_ip} | interface=${dut_to_tg_if1}
 | | ... | ${dut_node} | ${dut_to_tg_if1} | ${neighbor_2_ip} | ${neighbor_2_mac}
 | | And Suppress ICMPv6 router advertisement message | ${nodes}
 | | When Vpp Route Add
 | | ... | ${dut_node} | ${test_dst_ip} | ${prefix_length}
 | | ... | gateway=${neighbor_1_ip} | interface=${dut_to_tg_if1}
-| | ... | resolve_attempts=${NONE} | multipath=${TRUE}
+| | ... | multipath=${TRUE}
 | | And Vpp Route Add
 | | ... | ${dut_node} | ${test_dst_ip} | ${prefix_length}
 | | ... | gateway=${neighbor_2_ip} | interface=${dut_to_tg_if1}
 | | And Vpp Route Add
 | | ... | ${dut_node} | ${test_dst_ip} | ${prefix_length}
 | | ... | gateway=${neighbor_2_ip} | interface=${dut_to_tg_if1}
-| | ... | resolve_attempts=${NONE} | multipath=${TRUE}
-| | Then Send packets and verify multipath routing | ${tg_node}
-| | ... | ${tg_to_dut_if2} | ${tg_to_dut_if1} | ${test_src_ip} | ${test_dst_ip}
-| | ... | ${tg_to_dut_if2_mac} | ${dut_to_tg_if2_mac} | ${dut_to_tg_if1_mac}
-| | ... | ${neighbor_1_mac} | ${neighbor_2_mac}
+| | ... | multipath=${TRUE}
+| | Then Send packets and verify multipath routing
+| | ... | ${tg_node} | ${tg_to_dut_if2} | ${tg_to_dut_if1} | ${test_src_ip}
+| | ... | ${test_dst_ip} | ${tg_to_dut_if2_mac} | ${dut_to_tg_if2_mac}
+| | ... | ${dut_to_tg_if1_mac} | ${neighbor_1_mac} | ${neighbor_2_mac}
index d897f7c..267faac 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
-| Resource | resources/libraries/robot/shared/default.robot
+| Library | resources.libraries.python.Trace
+| ...
+| Resource | resources/libraries/robot/ip/ip6.robot
 | Resource | resources/libraries/robot/shared/counters.robot
 | Resource | resources/libraries/robot/shared/counters.robot
+| Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
-| Resource | resources/libraries/robot/ip/ip6.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
-| Library | resources.libraries.python.Trace
+| ...
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO | SKIP_VPP_PATCH
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO | SKIP_VPP_PATCH
+| ...
 | Test Setup | Set up functional test
 | Test Setup | Set up functional test
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
+| ...
 | Documentation | *IPv6 Router Advertisement test cases*
 | ...
 | ... | RFC4861 Neighbor Discovery. Encapsulations: Eth-IPv6-RA on links
 | Documentation | *IPv6 Router Advertisement test cases*
 | ...
 | ... | RFC4861 Neighbor Discovery. Encapsulations: Eth-IPv6-RA on links
@@ -47,7 +52,7 @@
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Vpp Set If Ipv6 Addr | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | When Vpp RA Send After Interval | ${dut1_node} | ${dut1_to_tg}
 | | Then Receive and verify router advertisement packet
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | When Vpp RA Send After Interval | ${dut1_node} | ${dut1_to_tg}
 | | Then Receive and verify router advertisement packet
@@ -63,8 +68,8 @@
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Vpp Set If Ipv6 Addr | ${dut1_node}
-| | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
+| | And VPP Interface Set IP Address
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | When Vpp RA Send After Interval | ${dut1_node} | ${dut1_to_tg}
 | | ... | interval=${interval}
 | | :FOR | ${n} | IN RANGE | ${2}
 | | When Vpp RA Send After Interval | ${dut1_node} | ${dut1_to_tg}
 | | ... | interval=${interval}
 | | :FOR | ${n} | IN RANGE | ${2}
@@ -82,8 +87,8 @@
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Vpp Set If Ipv6 Addr | ${dut1_node}
-| | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
+| | And VPP Interface Set IP Address
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | When VPP RA Suppress Link Layer | ${dut1_node} | ${dut1_to_tg}
 | | Then Send router solicitation and verify response
 | | ... | ${tg_node} | ${dut1_node} | ${tg_to_dut1} | ${dut1_to_tg}
 | | When VPP RA Suppress Link Layer | ${dut1_node} | ${dut1_to_tg}
 | | Then Send router solicitation and verify response
 | | ... | ${tg_node} | ${dut1_node} | ${tg_to_dut1} | ${dut1_to_tg}
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Vpp Set If Ipv6 Addr | ${dut1_node}
-| | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
+| | And VPP Interface Set IP Address
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | When VPP RA Suppress Link Layer | ${dut1_node} | ${dut1_to_tg}
 | | Then Send router solicitation and verify response
 | | ... | ${tg_node} | ${dut1_node} | ${tg_to_dut1} | ${dut1_to_tg}
 | | When VPP RA Suppress Link Layer | ${dut1_node} | ${dut1_to_tg}
 | | Then Send router solicitation and verify response
 | | ... | ${tg_node} | ${dut1_node} | ${tg_to_dut1} | ${dut1_to_tg}
index 4b97715..9c90bc3 100644 (file)
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
-| Resource | resources/libraries/robot/shared/default.robot
+| Library  | resources.libraries.python.IPUtil
+| Library  | resources.libraries.python.Trace
+| ...
 | Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/ip/ip6.robot
 | Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/ip/ip6.robot
+| Resource | resources/libraries/robot/l2/l2_traffic.robot
+| Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
-| Resource | resources/libraries/robot/l2/l2_traffic.robot
-| Library  | resources.libraries.python.Trace
-| Library  | resources.libraries.python.IPUtil
+| ...
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO | SKIP_VPP_PATCH
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO | SKIP_VPP_PATCH
+| ...
 | Test Setup | Set up functional test
 | Test Setup | Set up functional test
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
+| ...
 | Documentation | *Vpn routed forwarding - baseline IPv6*
 | ... | *[Top] Network Topologies:* TG=DUT1=DUT2=TG 3-node topology with two
 | ... | links in between nodes.
 | Documentation | *Vpn routed forwarding - baseline IPv6*
 | ... | *[Top] Network Topologies:* TG=DUT1=DUT2=TG 3-node topology with two
 | ... | links in between nodes.
 | | ... | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in double-link 3-node circular topology up
 | | When Setup Env - 2xVRF Each Node
 | | ... | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in double-link 3-node circular topology up
 | | When Setup Env - 2xVRF Each Node
-| | Then Send ICMP echo request and verify answer | ${tg_node} | ${tg_to_dut1_if1}
-| | ... | ${dut1_to_tg_if1_mac} | ${tg_to_dut1_if1_mac}
+| | Then Send ICMP echo request and verify answer | ${tg_node}
+| | ... | ${tg_to_dut1_if1} | ${dut1_to_tg_if1_mac} | ${tg_to_dut1_if1_mac}
 | | ... | ${dut1_to_dut2_ip1} | ${tg_dut1_ip1} | ${timeout}
 | | ... | ${dut1_to_dut2_ip1} | ${tg_dut1_ip1} | ${timeout}
-| | And Send ICMP echo request and verify answer | ${tg_node} | ${tg_to_dut1_if2}
-| | ... | ${dut1_to_tg_if2_mac} | ${tg_to_dut1_if2_mac}
+| | And Send ICMP echo request and verify answer | ${tg_node}
+| | ... | ${tg_to_dut1_if2} | ${dut1_to_tg_if2_mac} | ${tg_to_dut1_if2_mac}
 | | ... | ${dut1_to_dut2_ip2} | ${tg_dut1_ip2} | ${timeout}
 
 | TC03: TG packets routed to DUT2 ingress interface through DUT1, VPP configured with two VRFs
 | | ... | ${dut1_to_dut2_ip2} | ${tg_dut1_ip2} | ${timeout}
 
 | TC03: TG packets routed to DUT2 ingress interface through DUT1, VPP configured with two VRFs
 | | ... | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in double-link 3-node circular topology up
 | | When Setup Env - 2xVRF Each Node
 | | ... | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in double-link 3-node circular topology up
 | | When Setup Env - 2xVRF Each Node
-| | Then Send ICMP echo request and verify answer | ${tg_node} | ${tg_to_dut1_if1}
-| | ... | ${dut1_to_tg_if1_mac} | ${tg_to_dut1_if1_mac}
+| | Then Send ICMP echo request and verify answer | ${tg_node}
+| | ... | ${tg_to_dut1_if1} | ${dut1_to_tg_if1_mac} | ${tg_to_dut1_if1_mac}
 | | ... | ${dut2_to_dut1_ip1} | ${tg_dut1_ip1} | ${timeout}
 | | ... | ${dut2_to_dut1_ip1} | ${tg_dut1_ip1} | ${timeout}
-| | And Send ICMP echo request and verify answer | ${tg_node} | ${tg_to_dut1_if2}
-| | ... | ${dut1_to_tg_if2_mac} | ${tg_to_dut1_if2_mac}
+| | And Send ICMP echo request and verify answer | ${tg_node}
+| | ... | ${tg_to_dut1_if2} | ${dut1_to_tg_if2_mac} | ${tg_to_dut1_if2_mac}
 | | ... | ${dut2_to_dut1_ip2} | ${tg_dut1_ip2} | ${timeout}
 
 | TC04: TG packets routed to DUT2 egress interface through DUT1, VPP configured with two VRFs
 | | ... | ${dut2_to_dut1_ip2} | ${tg_dut1_ip2} | ${timeout}
 
 | TC04: TG packets routed to DUT2 egress interface through DUT1, VPP configured with two VRFs
 | | ... | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in double-link 3-node circular topology up
 | | When Setup Env - 2xVRF Each Node
 | | ... | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in double-link 3-node circular topology up
 | | When Setup Env - 2xVRF Each Node
-| | Then Send ICMP echo request and verify answer | ${tg_node} | ${tg_to_dut1_if1}
-| | ... | ${dut1_to_tg_if1_mac} | ${tg_to_dut1_if1_mac}
+| | Then Send ICMP echo request and verify answer | ${tg_node}
+| | ... | ${tg_to_dut1_if1} | ${dut1_to_tg_if1_mac} | ${tg_to_dut1_if1_mac}
 | | ... | ${dut2_to_tg_ip1} | ${tg_dut1_ip1} | ${timeout}
 | | ... | ${dut2_to_tg_ip1} | ${tg_dut1_ip1} | ${timeout}
-| | And Send ICMP echo request and verify answer | ${tg_node} | ${tg_to_dut1_if2}
-| | ... | ${dut1_to_tg_if2_mac} | ${tg_to_dut1_if2_mac}
+| | And Send ICMP echo request and verify answer | ${tg_node}
+| | ... | ${tg_to_dut1_if2} | ${dut1_to_tg_if2_mac} | ${tg_to_dut1_if2_mac}
 | | ... | ${dut2_to_tg_ip2} | ${tg_dut1_ip2} | ${timeout}
 
 | TC05: TG packets routed to TG through DUT1 and DUT2, VPP configured with two VRFs
 | | ... | ${dut2_to_tg_ip2} | ${tg_dut1_ip2} | ${timeout}
 
 | TC05: TG packets routed to TG through DUT1 and DUT2, VPP configured with two VRFs
 | | Assign Interface To Fib Table
 | | ... | ${dut2_node} | ${dut2_to_tg_if2} | ${fib_table_2} | ipv6=${TRUE}
 
 | | Assign Interface To Fib Table
 | | ... | ${dut2_node} | ${dut2_to_tg_if2} | ${fib_table_2} | ipv6=${TRUE}
 
-| | And Set Interface Address
+| | And VPP Interface Set IP Address
 | | ... | ${dut1_node} | ${dut1_to_tg_if1} | ${dut1_to_tg_ip1} | ${ip_prefix}
 | | ... | ${dut1_node} | ${dut1_to_tg_if1} | ${dut1_to_tg_ip1} | ${ip_prefix}
-| | And Set Interface Address
+| | And VPP Interface Set IP Address
 | | ... | ${dut1_node} | ${dut1_to_tg_if2} | ${dut1_to_tg_ip2} | ${ip_prefix}
 | | ... | ${dut1_node} | ${dut1_to_tg_if2} | ${dut1_to_tg_ip2} | ${ip_prefix}
-| | And Set Interface Address
+| | And VPP Interface Set IP Address
 | | ... | ${dut1_node} | ${dut1_to_dut2_if1}
 | | ... | ${dut1_to_dut2_ip1} | ${ip_prefix}
 | | ... | ${dut1_node} | ${dut1_to_dut2_if1}
 | | ... | ${dut1_to_dut2_ip1} | ${ip_prefix}
-| | And Set Interface Address
+| | And VPP Interface Set IP Address
 | | ... | ${dut1_node} | ${dut1_to_dut2_if2}
 | | ... | ${dut1_to_dut2_ip2} | ${ip_prefix}
 
 | | ... | ${dut1_node} | ${dut1_to_dut2_if2}
 | | ... | ${dut1_to_dut2_ip2} | ${ip_prefix}
 
-| | And Set Interface Address
+| | And VPP Interface Set IP Address
 | | ... | ${dut2_node} | ${dut2_to_tg_if1} | ${dut2_to_tg_ip1} | ${ip_prefix}
 | | ... | ${dut2_node} | ${dut2_to_tg_if1} | ${dut2_to_tg_ip1} | ${ip_prefix}
-| | And Set Interface Address
+| | And VPP Interface Set IP Address
 | | ... | ${dut2_node} | ${dut2_to_tg_if2} | ${dut2_to_tg_ip2} | ${ip_prefix}
 | | ... | ${dut2_node} | ${dut2_to_tg_if2} | ${dut2_to_tg_ip2} | ${ip_prefix}
-| | And Set Interface Address
+| | And VPP Interface Set IP Address
 | | ... | ${dut2_node} | ${dut2_to_dut1_if1}
 | | ... | ${dut2_to_dut1_ip1} | ${ip_prefix}
 | | ... | ${dut2_node} | ${dut2_to_dut1_if1}
 | | ... | ${dut2_to_dut1_ip1} | ${ip_prefix}
-| | And Set Interface Address
+| | And VPP Interface Set IP Address
 | | ... | ${dut2_node} | ${dut2_to_dut1_if2}
 | | ... | ${dut2_to_dut1_ip2} | ${ip_prefix}
 
 | | ... | ${dut2_node} | ${dut2_to_dut1_if2}
 | | ... | ${dut2_to_dut1_ip2} | ${ip_prefix}
 
-| | And Add IP Neighbor | ${dut1_node} | ${dut1_to_tg_if1}
+| | And VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_tg_if1}
 | | ... | ${tg_dut1_ip1} | ${tg_to_dut1_if1_mac}
 | | ... | ${tg_dut1_ip1} | ${tg_to_dut1_if1_mac}
-| | And Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2_if1}
+| | And VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2_if1}
 | | ... | ${dut2_to_dut1_ip1} | ${dut2_to_dut1_if1_mac}
 | | ... | ${dut2_to_dut1_ip1} | ${dut2_to_dut1_if1_mac}
-| | And Add IP Neighbor | ${dut2_node} | ${dut2_to_tg_if1}
+| | And VPP Add IP Neighbor | ${dut2_node} | ${dut2_to_tg_if1}
 | | ... | ${tg_dut2_ip1} | ${tg_to_dut2_if1_mac}
 | | ... | ${tg_dut2_ip1} | ${tg_to_dut2_if1_mac}
-| | And Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1_if1}
+| | And VPP Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1_if1}
 | | ... | ${dut1_to_dut2_ip1} | ${dut1_to_dut2_if1_mac}
 
 | | ... | ${dut1_to_dut2_ip1} | ${dut1_to_dut2_if1_mac}
 
-| | And Add IP Neighbor | ${dut1_node} | ${dut1_to_tg_if2}
+| | And VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_tg_if2}
 | | ... | ${tg_dut1_ip2} | ${tg_to_dut1_if2_mac}
 | | ... | ${tg_dut1_ip2} | ${tg_to_dut1_if2_mac}
-| | And Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2_if2}
+| | And VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2_if2}
 | | ... | ${dut2_to_dut1_ip2} | ${dut2_to_dut1_if2_mac}
 | | ... | ${dut2_to_dut1_ip2} | ${dut2_to_dut1_if2_mac}
-| | And Add IP Neighbor | ${dut2_node} | ${dut2_to_tg_if2}
+| | And VPP Add IP Neighbor | ${dut2_node} | ${dut2_to_tg_if2}
 | | ... | ${tg_dut2_ip2} | ${tg_to_dut2_if2_mac}
 | | ... | ${tg_dut2_ip2} | ${tg_to_dut2_if2_mac}
-| | And Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1_if2}
+| | And VPP Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1_if2}
 | | ... | ${dut1_to_dut2_ip2} | ${dut1_to_dut2_if2_mac}
 
 | | And Vpp Route Add | ${dut1_node} | ${tg_dut2_ip1} | ${ip_prefix}
 | | ... | ${dut1_to_dut2_ip2} | ${dut1_to_dut2_if2_mac}
 
 | | And Vpp Route Add | ${dut1_node} | ${tg_dut2_ip1} | ${ip_prefix}
index 6927dac..df1b6c0 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
-| Library | resources.libraries.python.topology.Topology
-| Library | resources.libraries.python.NodePath
-| Library | resources.libraries.python.Trace
 | Library | resources.libraries.python.IPUtil
 | Library | resources.libraries.python.IPUtil
-| Library | resources.libraries.python.LispUtil
 | Library | resources.libraries.python.L2Util
 | Library | resources.libraries.python.L2Util
-| Resource | resources/libraries/robot/shared/traffic.robot
+| Library | resources.libraries.python.LispUtil
+| Library | resources.libraries.python.NodePath
+| Library | resources.libraries.python.topology.Topology
+| Library | resources.libraries.python.Trace
+| ...
+| Resource | resources/libraries/robot/ip/ip4.robot
+| Resource | resources/libraries/robot/overlay/l2lisp.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
+| Resource | resources/libraries/robot/shared/traffic.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
-| Resource | resources/libraries/robot/ip/ip4.robot
-| Resource | resources/libraries/robot/overlay/l2lisp.robot
+| ...
 # Import configuration and test data:
 | Variables | resources/test_data/lisp/l2/l2_ipv6.py
 | ...
 # Import configuration and test data:
 | Variables | resources/test_data/lisp/l2/l2_ipv6.py
 | ...
 | | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip6} | ${prefix6}
 | | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip6} | ${prefix6}
 | | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip6} | ${prefix6}
 | | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip6} | ${prefix6}
 | | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip6} | ${prefix6}
 | | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip6} | ${prefix6}
-| | And Add Arp On Dut | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip6}
-| | ... | ${tg_to_dut2_mac}
-| | And Add Arp On Dut | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip6}
-| | ... | ${tg_to_dut1_mac}
-| | And Add Arp On Dut | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip6}
-| | ... | ${dut2_to_dut1_mac}
-| | And Add Arp On Dut | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip6}
-| | ... | ${dut1_to_dut2_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip6} | ${tg_to_dut2_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip6} | ${tg_to_dut1_mac}
+| | VPP Add IP Neighbor | ${dut1_node}
+| | ... | ${dut1_to_dut2} | ${dut2_to_dut1_ip6} | ${dut2_to_dut1_mac}
+| | VPP Add IP Neighbor | ${dut2_node}
+| | ... | ${dut2_to_dut1} | ${dut1_to_dut2_ip6} | ${dut1_to_dut2_mac}
 | | And Vpp All RA Suppress Link Layer | ${nodes}
 | | When Create L2 BD | ${dut1_node} | ${vpp_bd_id}
 | | And Add Interface To L2 BD | ${dut1_node} | ${dut1_to_tg} | ${vpp_bd_id}
 | | And Vpp All RA Suppress Link Layer | ${nodes}
 | | When Create L2 BD | ${dut1_node} | ${vpp_bd_id}
 | | And Add Interface To L2 BD | ${dut1_node} | ${dut1_to_tg} | ${vpp_bd_id}
index 08fc5c7..6f7af24 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
+| Library  | resources.libraries.python.IPUtil
+| Library  | resources.libraries.python.Trace
+| ...
+| Resource | resources/libraries/robot/ip/ip4.robot
+| Resource | resources/libraries/robot/l2/l2_traffic.robot
+| Resource | resources/libraries/robot/overlay/lisp_static_adjacency.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
-| Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
 | Resource | resources/libraries/robot/shared/traffic.robot
-| Resource | resources/libraries/robot/overlay/lisp_static_adjacency.robot
-| Resource | resources/libraries/robot/l2/l2_traffic.robot
-| Library  | resources.libraries.python.IPUtil
-| Library  | resources.libraries.python.Trace
+| ...
 # import additional Lisp settings from resource file
 | Variables | resources/test_data/lisp/static_adjacency/lisp_static_adjacency.py
 | ...
 # import additional Lisp settings from resource file
 | Variables | resources/test_data/lisp/static_adjacency/lisp_static_adjacency.py
 | ...
 | | ... | ${dut2_to_tg_ip4o6} | ${tg_prefix4o6}
 | | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip4o6}
 | | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip4o6}
 | | ... | ${dut2_to_tg_ip4o6} | ${tg_prefix4o6}
 | | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip4o6}
 | | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip4o6}
-| | And Add Arp On Dut | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip4o6}
-| | ... | ${tg_to_dut2_mac}
-| | And Add Arp On Dut | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip4o6}
-| | ... | ${tg_to_dut1_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip4o6} | ${tg_to_dut2_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip4o6} | ${tg_to_dut1_mac}
 | | And Vpp All RA Suppress Link Layer | ${nodes}
 | | When Configure LISP topology in 3-node circular topology
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
 | | And Vpp All RA Suppress Link Layer | ${nodes}
 | | When Configure LISP topology in 3-node circular topology
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
index 3bd13b8..65f53d9 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
-| Library | resources.libraries.python.topology.Topology
+| Library | resources.libraries.python.IPUtil
 | Library | resources.libraries.python.NodePath
 | Library | resources.libraries.python.NodePath
+| Library | resources.libraries.python.topology.Topology
 | Library | resources.libraries.python.Trace
 | Library | resources.libraries.python.Trace
-| Library | resources.libraries.python.IPUtil
-| Library | resources.libraries.python.IPv6Setup
 | Library | resources.libraries.python.VPPUtil
 | Library | resources.libraries.python.VPPUtil
-| Resource | resources/libraries/robot/shared/traffic.robot
+| ...
+| Resource | resources/libraries/robot/l2/l2_bridge_domain.robot
+| Resource | resources/libraries/robot/overlay/lispgpe.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
+| Resource | resources/libraries/robot/shared/traffic.robot
 | Resource | resources/libraries/robot/vm/qemu.robot
 | Resource | resources/libraries/robot/vm/qemu.robot
-| Resource | resources/libraries/robot/l2/l2_bridge_domain.robot
-| Resource | resources/libraries/robot/overlay/lispgpe.robot
+| ...
 # Import configuration and test data:
 | Variables | resources/test_data/lisp/ipv6_lispgpe_ipv6/ipv6_lispgpe_ipv6.py
 | ...
 # Import configuration and test data:
 | Variables | resources/test_data/lisp/ipv6_lispgpe_ipv6/ipv6_lispgpe_ipv6.py
 | ...
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Vpp Set If IPv6 Addr
+| | And VPP Interface Set IP Address
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip6} | ${prefix6}
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip6} | ${prefix6}
-| | And Vpp Set If IPv6 Addr
+| | And VPP Interface Set IP Address
 | | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip6} | ${prefix6}
 | | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip6} | ${prefix6}
-| | And Vpp Set If IPv6 Addr
+| | And VPP Interface Set IP Address
 | | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip6} | ${prefix6}
 | | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip6} | ${prefix6}
-| | And Vpp Set If IPv6 Addr
+| | And VPP Interface Set IP Address
 | | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip6} | ${prefix6}
 | | And Add IP Neighbors
 | | And Vpp All RA Suppress Link Layer | ${nodes}
 | | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip6} | ${prefix6}
 | | And Add IP Neighbors
 | | And Vpp All RA Suppress Link Layer | ${nodes}
 | | [Documentation]
 | | ... | Add IP neighbors to physical interfaces on DUTs.
 | | ...
 | | [Documentation]
 | | ... | Add IP neighbors to physical interfaces on DUTs.
 | | ...
-| | Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip6}
-| | ... | ${tg_to_dut1_mac}
-| | Add IP Neighbor | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip6}
-| | ... | ${tg_to_dut2_mac}
-| | Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip6}
-| | ... | ${dut2_to_dut1_mac}
-| | Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip6}
-| | ... | ${dut1_to_dut2_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip6} | ${tg_to_dut1_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip6} | ${tg_to_dut2_mac}
+| | VPP Add IP Neighbor | ${dut1_node}
+| | ... | ${dut1_to_dut2} | ${dut2_to_dut1_ip6} | ${dut2_to_dut1_mac}
+| | VPP Add IP Neighbor | ${dut2_node}
+| | ... | ${dut2_to_dut1} | ${dut1_to_dut2_ip6} | ${dut1_to_dut2_mac}
index c89ab68..7d8d905 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
-| Library | resources.libraries.python.topology.Topology
+| Library | resources.libraries.python.IPUtil
 | Library | resources.libraries.python.NodePath
 | Library | resources.libraries.python.NodePath
+| Library | resources.libraries.python.topology.Topology
 | Library | resources.libraries.python.Trace
 | Library | resources.libraries.python.Trace
-| Library | resources.libraries.python.IPUtil
-| Library | resources.libraries.python.IPv6Setup
 | Library | resources.libraries.python.VPPUtil
 | Library | resources.libraries.python.VPPUtil
-| Resource | resources/libraries/robot/shared/traffic.robot
+| ...
+| Resource | resources/libraries/robot/l2/l2_bridge_domain.robot
+| Resource | resources/libraries/robot/overlay/lispgpe.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
+| Resource | resources/libraries/robot/shared/traffic.robot
 | Resource | resources/libraries/robot/vm/qemu.robot
 | Resource | resources/libraries/robot/vm/qemu.robot
-| Resource | resources/libraries/robot/l2/l2_bridge_domain.robot
-| Resource | resources/libraries/robot/overlay/lispgpe.robot
+| ...
 # Import configuration and test data:
 | Variables | resources/test_data/lisp/ipv6_lispgpe_ipv6/ipv6_lispgpe_ipv6.py
 | ...
 # Import configuration and test data:
 | Variables | resources/test_data/lisp/ipv6_lispgpe_ipv6/ipv6_lispgpe_ipv6.py
 | ...
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Add Fib Table | ${dut1_node} | ${fib_table_1} | ip6=${TRUE}
-| | And Add Fib Table | ${dut2_node} | ${fib_table_1} | ip6=${TRUE}
+| | And Add Fib Table | ${dut1_node} | ${fib_table_1} | ipv6=${TRUE}
+| | And Add Fib Table | ${dut2_node} | ${fib_table_1} | ipv6=${TRUE}
 | | And Assign Interface To Fib Table | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${fib_table_1} | ipv6=${TRUE}
 | | And Assign Interface To Fib Table | ${dut2_node}
 | | ... | ${dut2_to_tg} | ${fib_table_1} | ipv6=${TRUE}
 | | And Assign Interface To Fib Table | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${fib_table_1} | ipv6=${TRUE}
 | | And Assign Interface To Fib Table | ${dut2_node}
 | | ... | ${dut2_to_tg} | ${fib_table_1} | ipv6=${TRUE}
-| | And Vpp Set If IPv6 Addr
+| | And VPP Interface Set IP Address
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip6} | ${prefix6}
 | | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip6} | ${prefix6}
-| | And Vpp Set If IPv6 Addr
+| | And VPP Interface Set IP Address
 | | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip6} | ${prefix6}
 | | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip6} | ${prefix6}
-| | And Vpp Set If IPv6 Addr
+| | And VPP Interface Set IP Address
 | | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip6} | ${prefix6}
 | | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip6} | ${prefix6}
-| | And Vpp Set If IPv6 Addr
+| | And VPP Interface Set IP Address
 | | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip6} | ${prefix6}
 | | And Add IP Neighbors
 | | And Vpp All RA Suppress Link Layer | ${nodes}
 | | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip6} | ${prefix6}
 | | And Add IP Neighbors
 | | And Vpp All RA Suppress Link Layer | ${nodes}
 | | [Documentation]
 | | ... | Add IP neighbors to physical interfaces on DUTs.
 | | ...
 | | [Documentation]
 | | ... | Add IP neighbors to physical interfaces on DUTs.
 | | ...
-| | Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip6}
-| | ... | ${tg_to_dut1_mac}
-| | Add IP Neighbor | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip6}
-| | ... | ${tg_to_dut2_mac}
-| | Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip6}
-| | ... | ${dut2_to_dut1_mac}
-| | Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip6}
-| | ... | ${dut1_to_dut2_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip6} | ${tg_to_dut1_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip6} | ${tg_to_dut2_mac}
+| | VPP Add IP Neighbor | ${dut1_node}
+| | ... | ${dut1_to_dut2} | ${dut2_to_dut1_ip6} | ${dut2_to_dut1_mac}
+| | VPP Add IP Neighbor | ${dut2_node}
+| | ... | ${dut2_to_dut1} | ${dut1_to_dut2_ip6} | ${dut1_to_dut2_mac}
index 2d9ee14..114a3e1 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
+| Library  | resources.libraries.python.IPUtil
+| Library  | resources.libraries.python.Trace
+| ...
+| Resource | resources/libraries/robot/l2/l2_traffic.robot
+| Resource | resources/libraries/robot/overlay/vxlan.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
-| Resource | resources/libraries/robot/overlay/vxlan.robot
-| Resource | resources/libraries/robot/l2/l2_traffic.robot
 | Resource | resources/libraries/robot/vm/qemu.robot
 | Resource | resources/libraries/robot/vm/qemu.robot
-| Library  | resources.libraries.python.Trace
-| Library | resources.libraries.python.IPv6Setup
+| ...
 | Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | HW_ENV
 | Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | HW_ENV
+| ...
 | Test Setup | Set up functional test
 | Test Setup | Set up functional test
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
+| ...
 | Documentation | *Bridge-domain with VXLAN test cases - IPv6*
 | ...
 | ... | *[Top] Network topologies:* TG-DUT1-DUT2-TG 3-node circular topology
 | Documentation | *Bridge-domain with VXLAN test cases - IPv6*
 | ...
 | ... | *[Top] Network topologies:* TG-DUT1-DUT2-TG 3-node circular topology
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Set Interface Address | ${dut1_node} | ${dut1_to_dut2} | ${ip6_addr1}
-| | ...                       | ${ip6_prefix}
-| | And Set Interface Address | ${dut2_node} | ${dut2_to_dut1} | ${ip6_addr2}
-| | ...                       | ${ip6_prefix}
+| | And VPP Interface Set IP Address
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${ip6_addr1} | ${ip6_prefix}
+| | And VPP Interface Set IP Address
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${ip6_addr2} | ${ip6_prefix}
 | | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${ip6_addr2}
 | | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${ip6_addr1}
 | | And Vpp All RA Suppress Link Layer | ${nodes}
 | | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${ip6_addr2}
 | | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${ip6_addr1}
 | | And Vpp All RA Suppress Link Layer | ${nodes}
-| | ${dut1s_vxlan}= | When Create VXLAN interface | ${dut1_node} | ${vni_1}
-| | | ...                                         | ${ip6_addr1} | ${ip6_addr2}
-| | And Add interfaces to L2BD | ${dut1_node} | ${bd_id1}
-| | ...                            | ${dut1_to_tg} | ${dut1s_vxlan}
-| | ${dut2s_vxlan}= | And Create VXLAN interface | ${dut2_node} | ${vni_1}
-| | | ...                                        | ${ip6_addr2} | ${ip6_addr1}
-| | And Add interfaces to L2BD | ${dut2_node} | ${bd_id1}
-| | ...                            | ${dut2_to_tg} | ${dut2s_vxlan}
+| | ${dut1s_vxlan}= | When Create VXLAN interface
+| | ... | ${dut1_node} | ${vni_1} | ${ip6_addr1} | ${ip6_addr2}
+| | And Add interfaces to L2BD
+| | ... | ${dut1_node} | ${bd_id1} | ${dut1_to_tg} | ${dut1s_vxlan}
+| | ${dut2s_vxlan}= | And Create VXLAN interface
+| | ... | ${dut2_node} | ${vni_1} | ${ip6_addr2} | ${ip6_addr1}
+| | And Add interfaces to L2BD
+| | ... | ${dut2_node} | ${bd_id1} | ${dut2_to_tg} | ${dut2s_vxlan}
 | | Then Send ICMPv6 bidirectionally and verify received packets
 | | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2}
 | | And Get VXLAN dump | ${dut1_node}
 | | Then Send ICMPv6 bidirectionally and verify received packets
 | | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2}
 | | And Get VXLAN dump | ${dut1_node}
index 49df42a..8c3dcf4 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
+| Library  | resources.libraries.python.IPUtil
+| Library  | resources.libraries.python.Trace
+| ...
+| Resource | resources/libraries/robot/l2/l2_traffic.robot
+| Resource | resources/libraries/robot/overlay/vxlan.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
-| Resource | resources/libraries/robot/overlay/vxlan.robot
-| Resource | resources/libraries/robot/l2/l2_traffic.robot
 | Resource | resources/libraries/robot/vm/qemu.robot
 | Resource | resources/libraries/robot/vm/qemu.robot
-| Library  | resources.libraries.python.Trace
-| Library | resources.libraries.python.IPv6Setup
+| ...
 | Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | HW_ENV
 | Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | HW_ENV
+| ...
 | Test Setup | Set up functional test
 | Test Setup | Set up functional test
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
+| ...
 | Documentation | *L2BD with SHG combined with VXLAN test cases - IPv6*
 | ...
 | ... | *[Top] Network topologies:* TG=DUT1=DUT2=TG 3-node circular topology
 | Documentation | *L2BD with SHG combined with VXLAN test cases - IPv6*
 | ...
 | ... | *[Top] Network topologies:* TG=DUT1=DUT2=TG 3-node circular topology
 | | ... | TG interfaces connected to DUT2 that are isolated by SHG on DUT1.
 | | ... | [Ref] RFC7348.
 | | [Tags] | 3_NODE_DOUBLE_LINK_TOPO
 | | ... | TG interfaces connected to DUT2 that are isolated by SHG on DUT1.
 | | ... | [Ref] RFC7348.
 | | [Tags] | 3_NODE_DOUBLE_LINK_TOPO
-| | Given Configure path for 3-node BD-SHG test | ${nodes['TG']}
-| | ...                                         | ${nodes['DUT1']}
-| | ...                                         | ${nodes['DUT2']}
+| | Given Configure path for 3-node BD-SHG test
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']}
 | | And Set interfaces in 3-node BD-SHG test up
 | | And Set interfaces in 3-node BD-SHG test up
-| | And Set Interface Address | ${dut1_node} | ${dut1_to_dut2} | ${ip6_addr1}
-| | ...                       | ${ip6_prefix}
-| | And Set Interface Address | ${dut2_node} | ${dut2_to_dut1} | ${ip6_addr2}
-| | ...                       | ${ip6_prefix}
+| | And VPP Interface Set IP Address
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${ip6_addr1} | ${ip6_prefix}
+| | And VPP Interface Set IP Address
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${ip6_addr2} | ${ip6_prefix}
 | | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${ip6_addr2}
 | | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${ip6_addr1}
 | | And Vpp All RA Suppress Link Layer | ${nodes}
 | | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${ip6_addr2}
 | | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${ip6_addr1}
 | | And Vpp All RA Suppress Link Layer | ${nodes}
-| | ${dut1s_vxlan1}= | When Create VXLAN interface | ${dut1_node} | ${vni_1}
-| | | ...                                          | ${ip6_addr1} | ${ip6_addr2}
-| | ${dut1s_vxlan2}= | And Create VXLAN interface | ${dut1_node} | ${vni_2}
-| | | ...                                         | ${ip6_addr1} | ${ip6_addr2}
-| | ${dut2s_vxlan1}= | And Create VXLAN interface | ${dut2_node} | ${vni_1}
-| | | ...                                         | ${ip6_addr2} | ${ip6_addr1}
-| | ${dut2s_vxlan2}= | And Create VXLAN interface | ${dut2_node} | ${vni_2}
-| | | ...                                         | ${ip6_addr2} | ${ip6_addr1}
+| | ${dut1s_vxlan1}= | When Create VXLAN interface
+| | | ... | ${dut1_node} | ${vni_1} | ${ip6_addr1} | ${ip6_addr2}
+| | ${dut1s_vxlan2}= | And Create VXLAN interface
+| | | ... | ${dut1_node} | ${vni_2} | ${ip6_addr1} | ${ip6_addr2}
+| | ${dut2s_vxlan1}= | And Create VXLAN interface
+| | | ... | ${dut2_node} | ${vni_1} | ${ip6_addr2} | ${ip6_addr1}
+| | ${dut2s_vxlan2}= | And Create VXLAN interface
+| | | ... | ${dut2_node} | ${vni_2} | ${ip6_addr2} | ${ip6_addr1}
 | | And Set Interface State | ${dut1_node} | ${dut1s_vxlan1} | up
 | | And Set Interface State | ${dut1_node} | ${dut1s_vxlan2} | up
 | | And Set Interface State | ${dut2_node} | ${dut2s_vxlan1} | up
 | | And Set Interface State | ${dut1_node} | ${dut1s_vxlan1} | up
 | | And Set Interface State | ${dut1_node} | ${dut1s_vxlan2} | up
 | | And Set Interface State | ${dut2_node} | ${dut2s_vxlan1} | up
 | | And Vpp Node Interfaces Ready Wait | ${dut1_node}
 | | And Vpp Node Interfaces Ready Wait | ${dut2_node}
 | | And Create bridge domain | ${dut1_node} | ${bd_id1}
 | | And Vpp Node Interfaces Ready Wait | ${dut1_node}
 | | And Vpp Node Interfaces Ready Wait | ${dut2_node}
 | | And Create bridge domain | ${dut1_node} | ${bd_id1}
-| | And Add interface to bridge domain | ${dut1_node} | ${dut1_to_tg_if1}
-| | ...                                     | ${bd_id1}
-| | And Add interface to bridge domain | ${dut1_node} | ${dut1_to_tg_if2}
-| | ...                                     | ${bd_id1}
-| | And Add interface to bridge domain | ${dut1_node} | ${dut1s_vxlan1}
-| | ...                                     | ${bd_id1} | ${shg1}
-| | And Add interface to bridge domain | ${dut1_node} | ${dut1s_vxlan2}
-| | ...                                     | ${bd_id1} | ${shg1}
+| | And Add interface to bridge domain
+| | ... | ${dut1_node} | ${dut1_to_tg_if1} | ${bd_id1}
+| | And Add interface to bridge domain
+| | ... | ${dut1_node} | ${dut1_to_tg_if2} | ${bd_id1}
+| | And Add interface to bridge domain
+| | ... | ${dut1_node} | ${dut1s_vxlan1} | ${bd_id1} | ${shg1}
+| | And Add interface to bridge domain
+| | ... | ${dut1_node} | ${dut1s_vxlan2} | ${bd_id1} | ${shg1}
 | | And Create bridge domain | ${dut2_node} | ${bd_id2}
 | | And Create bridge domain | ${dut2_node} | ${bd_id2}
-| | And Add interface to bridge domain | ${dut2_node} | ${dut2_to_tg_if1}
-| | ...                                     | ${bd_id2}
-| | And Add interface to bridge domain | ${dut2_node} | ${dut2s_vxlan1}
-| | ...                                     | ${bd_id2}
+| | And Add interface to bridge domain
+| | ... | ${dut2_node} | ${dut2_to_tg_if1} | ${bd_id2}
+| | And Add interface to bridge domain
+| | ... | ${dut2_node} | ${dut2s_vxlan1} | ${bd_id2}
 | | And Create bridge domain | ${dut2_node} | ${bd_id3}
 | | And Create bridge domain | ${dut2_node} | ${bd_id3}
-| | And Add interface to bridge domain | ${dut2_node} | ${dut2_to_tg_if2}
-| | ...                                     | ${bd_id3}
-| | And Add interface to bridge domain | ${dut2_node} | ${dut2s_vxlan2}
-| | ...                                     | ${bd_id3}
-| | Then Send ICMPv6 bidirectionally and verify received packets | ${tg_node}
-| | ...                                          | ${tg_to_dut1_if1}
-| | ...                                          | ${tg_to_dut2_if1}
-| | And Send ICMPv6 bidirectionally and verify received packets | ${tg_node}
-| | ...                                         | ${tg_to_dut1_if1}
-| | ...                                         | ${tg_to_dut2_if2}
-| | And Send ICMPv6 bidirectionally and verify received packets | ${tg_node}
-| | ...                                         | ${tg_to_dut1_if2}
-| | ...                                         | ${tg_to_dut2_if1}
-| | And Send ICMPv6 bidirectionally and verify received packets | ${tg_node}
-| | ...                                         | ${tg_to_dut1_if2}
-| | ...                                         | ${tg_to_dut2_if2}
+| | And Add interface to bridge domain
+| | ... | ${dut2_node} | ${dut2_to_tg_if2} | ${bd_id3}
+| | And Add interface to bridge domain
+| | ... | ${dut2_node} | ${dut2s_vxlan2} | ${bd_id3}
+| | Then Send ICMPv6 bidirectionally and verify received packets
+| | ... | ${tg_node} | ${tg_to_dut1_if1} | ${tg_to_dut2_if1}
+| | And Send ICMPv6 bidirectionally and verify received packets
+| | ... | ${tg_node} | ${tg_to_dut1_if1} | ${tg_to_dut2_if2}
+| | And Send ICMPv6 bidirectionally and verify received packets
+| | ... | ${tg_node} | ${tg_to_dut1_if2} | ${tg_to_dut2_if1}
+| | And Send ICMPv6 bidirectionally and verify received packets
+| | ... | ${tg_node} | ${tg_to_dut1_if2} | ${tg_to_dut2_if2}
 | | And Run Keyword And Expect Error | ICMP echo Rx timeout
 | | And Run Keyword And Expect Error | ICMP echo Rx timeout
-| | ...                              | Send ICMPv6 bidirectionally and verify received packets
-| | | ...                            | ${tg_node} | ${tg_to_dut2_if1}
-| | | ...                            | ${tg_to_dut2_if2}
+| | ... | Send ICMPv6 bidirectionally and verify received packets
+| | ... | ${tg_node} | ${tg_to_dut2_if1} | ${tg_to_dut2_if2}
 
 | TC02: DUT1 and DUT2 with L2BD and VXLANoIPv6 tunnels in different SHGs switch ICMPv6 between TG links
 | | [Documentation]
 
 | TC02: DUT1 and DUT2 with L2BD and VXLANoIPv6 tunnels in different SHGs switch ICMPv6 between TG links
 | | [Documentation]
 | | ... | to be switched by DUT1 and DUT2; verify packets are switched between
 | | ... | all TG interfaces. [Ref] RFC7348.
 | | [Tags] | 3_NODE_DOUBLE_LINK_TOPO
 | | ... | to be switched by DUT1 and DUT2; verify packets are switched between
 | | ... | all TG interfaces. [Ref] RFC7348.
 | | [Tags] | 3_NODE_DOUBLE_LINK_TOPO
-| | Given Configure path for 3-node BD-SHG test | ${nodes['TG']}
-| | ...                                         | ${nodes['DUT1']}
-| | ...                                         | ${nodes['DUT2']}
+| | Given Configure path for 3-node BD-SHG test
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']}
 | | And Set interfaces in 3-node BD-SHG test up
 | | And Set interfaces in 3-node BD-SHG test up
-| | And Set Interface Address | ${dut1_node} | ${dut1_to_dut2} | ${ip6_addr1}
-| | ...                       | ${ip6_prefix}
-| | And Set Interface Address | ${dut2_node} | ${dut2_to_dut1} | ${ip6_addr2}
-| | ...                       | ${ip6_prefix}
+| | And VPP Interface Set IP Address
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${ip6_addr1} | ${ip6_prefix}
+| | And VPP Interface Set IP Address
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${ip6_addr2} | ${ip6_prefix}
 | | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${ip6_addr2}
 | | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${ip6_addr1}
 | | And Vpp All RA Suppress Link Layer | ${nodes}
 | | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${ip6_addr2}
 | | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${ip6_addr1}
 | | And Vpp All RA Suppress Link Layer | ${nodes}
-| | ${dut1s_vxlan1}= | When Create VXLAN interface | ${dut1_node} | ${vni_1}
-| | | ...                                          | ${ip6_addr1} | ${ip6_addr2}
-| | ${dut1s_vxlan2}= | And Create VXLAN interface | ${dut1_node} | ${vni_2}
-| | | ...                                         | ${ip6_addr1} | ${ip6_addr2}
-| | ${dut2s_vxlan1}= | And Create VXLAN interface | ${dut2_node} | ${vni_1}
-| | | ...                                         | ${ip6_addr2} | ${ip6_addr1}
-| | ${dut2s_vxlan2}= | And Create VXLAN interface | ${dut2_node} | ${vni_2}
-| | | ...                                         | ${ip6_addr2} | ${ip6_addr1}
+| | ${dut1s_vxlan1}= | When Create VXLAN interface
+| | ... | ${dut1_node} | ${vni_1} | ${ip6_addr1} | ${ip6_addr2}
+| | ${dut1s_vxlan2}= | And Create VXLAN interface
+| | ... | ${dut1_node} | ${vni_2} | ${ip6_addr1} | ${ip6_addr2}
+| | ${dut2s_vxlan1}= | And Create VXLAN interface
+| | ... | ${dut2_node} | ${vni_1} | ${ip6_addr2} | ${ip6_addr1}
+| | ${dut2s_vxlan2}= | And Create VXLAN interface
+| | | ... | ${dut2_node} | ${vni_2} | ${ip6_addr2} | ${ip6_addr1}
 | | And Set Interface State | ${dut1_node} | ${dut1s_vxlan1} | up
 | | And Set Interface State | ${dut1_node} | ${dut1s_vxlan2} | up
 | | And Set Interface State | ${dut2_node} | ${dut2s_vxlan1} | up
 | | And Set Interface State | ${dut1_node} | ${dut1s_vxlan1} | up
 | | And Set Interface State | ${dut1_node} | ${dut1s_vxlan2} | up
 | | And Set Interface State | ${dut2_node} | ${dut2s_vxlan1} | up
 | | And Vpp Node Interfaces Ready Wait | ${dut1_node}
 | | And Vpp Node Interfaces Ready Wait | ${dut2_node}
 | | And Create bridge domain | ${dut1_node} | ${bd_id1}
 | | And Vpp Node Interfaces Ready Wait | ${dut1_node}
 | | And Vpp Node Interfaces Ready Wait | ${dut2_node}
 | | And Create bridge domain | ${dut1_node} | ${bd_id1}
-| | And Add interface to bridge domain | ${dut1_node} | ${dut1_to_tg_if1}
-| | ...                                     | ${bd_id1}
-| | And Add interface to bridge domain | ${dut1_node} | ${dut1_to_tg_if2}
-| | ...                                     | ${bd_id1}
-| | And Add interface to bridge domain | ${dut1_node} | ${dut1s_vxlan1}
-| | ...                                     | ${bd_id1} | ${shg1}
-| | And Add interface to bridge domain | ${dut1_node} | ${dut1s_vxlan2}
-| | ...                                     | ${bd_id1} | ${shg2}
+| | And Add interface to bridge domain
+| | ... | ${dut1_node} | ${dut1_to_tg_if1} | ${bd_id1}
+| | And Add interface to bridge domain
+| | ... | ${dut1_node} | ${dut1_to_tg_if2} | ${bd_id1}
+| | And Add interface to bridge domain
+| | ... | ${dut1_node} | ${dut1s_vxlan1} | ${bd_id1} | ${shg1}
+| | And Add interface to bridge domain
+| | ... | ${dut1_node} | ${dut1s_vxlan2} | ${bd_id1} | ${shg2}
 | | And Create bridge domain | ${dut2_node} | ${bd_id2}
 | | And Create bridge domain | ${dut2_node} | ${bd_id2}
-| | And Add interface to bridge domain | ${dut2_node} | ${dut2_to_tg_if1}
-| | ...                                     | ${bd_id2}
-| | And Add interface to bridge domain | ${dut2_node} | ${dut2s_vxlan1}
-| | ...                                     | ${bd_id2}
+| | And Add interface to bridge domain
+| | ... | ${dut2_node} | ${dut2_to_tg_if1} | ${bd_id2}
+| | And Add interface to bridge domain
+| | ... | ${dut2_node} | ${dut2s_vxlan1} | ${bd_id2}
 | | And Create bridge domain | ${dut2_node} | ${bd_id3}
 | | And Create bridge domain | ${dut2_node} | ${bd_id3}
-| | And Add interface to bridge domain | ${dut2_node} | ${dut2_to_tg_if2}
-| | ...                                     | ${bd_id3}
-| | And Add interface to bridge domain | ${dut2_node} | ${dut2s_vxlan2}
-| | ...                                     | ${bd_id3}
-| | Then Send ICMPv6 bidirectionally and verify received packets | ${tg_node}
-| | ...                                          | ${tg_to_dut1_if1}
-| | ...                                          | ${tg_to_dut2_if1}
-| | And Send ICMPv6 bidirectionally and verify received packets | ${tg_node}
-| | ...                                         | ${tg_to_dut1_if1}
-| | ...                                         | ${tg_to_dut2_if2}
-| | And Send ICMPv6 bidirectionally and verify received packets | ${tg_node}
-| | ...                                         | ${tg_to_dut1_if2}
-| | ...                                         | ${tg_to_dut2_if1}
-| | And Send ICMPv6 bidirectionally and verify received packets | ${tg_node}
-| | ...                                         | ${tg_to_dut1_if2}
-| | ...                                         | ${tg_to_dut2_if2}
-| | And Send ICMPv6 bidirectionally and verify received packets | ${tg_node}
-| | ...                                         | ${tg_to_dut2_if1}
-| | ...                                         | ${tg_to_dut2_if2}
+| | And Add interface to bridge domain
+| | ... | ${dut2_node} | ${dut2_to_tg_if2} | ${bd_id3}
+| | And Add interface to bridge domain
+| | ... | ${dut2_node} | ${dut2s_vxlan2} | ${bd_id3}
+| | Then Send ICMPv6 bidirectionally and verify received packets
+| | ... | ${tg_node} | ${tg_to_dut1_if1} | ${tg_to_dut2_if1}
+| | And Send ICMPv6 bidirectionally and verify received packets
+| | ... | ${tg_node} | ${tg_to_dut1_if1} | ${tg_to_dut2_if2}
+| | And Send ICMPv6 bidirectionally and verify received packets
+| | ... | ${tg_node} | ${tg_to_dut1_if2} | ${tg_to_dut2_if1}
+| | And Send ICMPv6 bidirectionally and verify received packets
+| | ... | ${tg_node} | ${tg_to_dut1_if2} | ${tg_to_dut2_if2}
+| | And Send ICMPv6 bidirectionally and verify received packets
+| | ... | ${tg_node} | ${tg_to_dut2_if1} | ${tg_to_dut2_if2}
index a736a26..27b254b 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
+| Library | resources.libraries.python.Classify.Classify
+| Library | resources.libraries.python.telemetry.IPFIXSetup
+| Library | resources.libraries.python.Trace
+| ...
+| Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
-| Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/telemetry/ipfix.robot
 | Resource | resources/libraries/robot/telemetry/ipfix.robot
-| Library | resources.libraries.python.Classify.Classify
-| Library | resources.libraries.python.telemetry.IPFIXSetup
-| Library | resources.libraries.python.Trace
-
+| ...
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO
+| ...
 | Test Setup | Set up functional test
 | Test Setup | Set up functional test
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
+| ...
 | Documentation | *IPFIX ipv4 test cases*
 | ...
 | ... | IPFIX tests use 3-node topology TG - DUT1 - DUT2 - TG with
 | Documentation | *IPFIX ipv4 test cases*
 | ...
 | ... | IPFIX tests use 3-node topology TG - DUT1 - DUT2 - TG with
@@ -52,9 +56,9 @@
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
+| | And VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
 | | ... | ${tg_to_dut1_mac}
 | | ${table_index} | ${skip_n} | ${match_n}=
 | | ... | And VPP creates classify table L3 | ${dut1_node} | ${ip_version} | src
 | | ... | ${tg_to_dut1_mac}
 | | ${table_index} | ${skip_n} | ${match_n}=
 | | ... | And VPP creates classify table L3 | ${dut1_node} | ${ip_version} | src
@@ -82,9 +86,9 @@
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
+| | And VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
 | | ... | ${tg_to_dut1_mac}
 | | ${table_index} | ${skip_n} | ${match_n}=
 | | ... | And VPP creates classify table L3 | ${dut1_node} | ${ip_version} | src
 | | ... | ${tg_to_dut1_mac}
 | | ${table_index} | ${skip_n} | ${match_n}=
 | | ... | And VPP creates classify table L3 | ${dut1_node} | ${ip_version} | src
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
+| | And VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
 | | ... | ${tg_to_dut1_mac}
 | | ${table_index} | ${skip_n} | ${match_n}=
 | | ... | And VPP creates classify table L3 | ${dut1_node} | ${ip_version} | dst
 | | ... | ${tg_to_dut1_mac}
 | | ${table_index} | ${skip_n} | ${match_n}=
 | | ... | And VPP creates classify table L3 | ${dut1_node} | ${ip_version} | dst
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
+| | And VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
 | | ... | ${tg_to_dut1_mac}
 | | ... | ${tg_to_dut1_mac}
-| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip}
-| | ... | ${dut2_to_dut1_mac}
+| | And VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2}
+| | ... | ${dut2_to_dut1_ip} | ${dut2_to_dut1_mac}
 | | ${table_index} | ${skip_n} | ${match_n}=
 | | ... | And VPP creates classify table L3 | ${dut1_node} | ${ip_version} | dst
 | | And VPP configures classify session L3 | ${dut1_node} | permit
 | | ${table_index} | ${skip_n} | ${match_n}=
 | | ... | And VPP creates classify table L3 | ${dut1_node} | ${ip_version} | dst
 | | And VPP configures classify session L3 | ${dut1_node} | permit
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
+| | And VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
 | | ... | ${tg_to_dut1_mac}
 | | ${table_index} | ${skip_n} | ${match_n}=
 | | ... | And VPP creates classify table L3 | ${dut1_node} | ${ip_version}
 | | ... | ${tg_to_dut1_mac}
 | | ${table_index} | ${skip_n} | ${match_n}=
 | | ... | And VPP creates classify table L3 | ${dut1_node} | ${ip_version}
index 99eb418..41f86b4 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
+| Library | resources.libraries.python.Classify.Classify
+| Library | resources.libraries.python.telemetry.IPFIXSetup
+| Library | resources.libraries.python.Trace
+| ...
+| Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
-| Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/telemetry/ipfix.robot
 | Resource | resources/libraries/robot/telemetry/ipfix.robot
-| Library | resources.libraries.python.Classify.Classify
-| Library | resources.libraries.python.telemetry.IPFIXSetup
-| Library | resources.libraries.python.Trace
-
+| ...
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO | SKIP_VPP_PATCH
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO | SKIP_VPP_PATCH
-| ...        | EXPECTED_FAILING
+| ... | EXPECTED_FAILING
+| ...
 | Test Setup | Set up functional test
 | Test Setup | Set up functional test
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
+| ...
 | Documentation | *IPFIX ipv4 test cases*
 | ...
 | ... | IPFIX tests use 3-node topology TG - DUT1 - DUT2 - TG with
 | Documentation | *IPFIX ipv4 test cases*
 | ...
 | ... | IPFIX tests use 3-node topology TG - DUT1 - DUT2 - TG with
@@ -52,9 +56,9 @@
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
+| | And VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
 | | ... | ${tg_to_dut1_mac}
 | | ${table_index} | ${skip_n} | ${match_n}=
 | | ... | And VPP creates classify table L3 | ${dut1_node} | ${ip_version} | src
 | | ... | ${tg_to_dut1_mac}
 | | ${table_index} | ${skip_n} | ${match_n}=
 | | ... | And VPP creates classify table L3 | ${dut1_node} | ${ip_version} | src
@@ -84,9 +88,9 @@
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
+| | And VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
 | | ... | ${tg_to_dut1_mac}
 | | ${table_index} | ${skip_n} | ${match_n}=
 | | ... | And VPP creates classify table L3 | ${dut1_node} | ${ip_version}
 | | ... | ${tg_to_dut1_mac}
 | | ${table_index} | ${skip_n} | ${match_n}=
 | | ... | And VPP creates classify table L3 | ${dut1_node} | ${ip_version}
index 37e5b04..d3cf563 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
+| Library  | resources.libraries.python.IPUtil
+| Library  | resources.libraries.python.Trace
+| Library  | resources.libraries.python.telemetry.SPAN
+| ...
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/telemetry/span.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/telemetry/span.robot
-| Library  | resources.libraries.python.Trace
-| Library  | resources.libraries.python.IPv4Util
-| Library  | resources.libraries.python.IPv4Setup
-| Library  | resources.libraries.python.telemetry.SPAN
+| ...
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO
+| ...
 | Test Setup | Set up functional test
 | Test Setup | Set up functional test
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
+| ...
 | Documentation | *SPAN test suite*
 | ... | *[Top] Network Topologies:* TG=DUT1 2-node topology with two
 | ... | links between nodes.
 | Documentation | *SPAN test suite*
 | ... | *[Top] Network Topologies:* TG=DUT1 2-node topology with two
 | ... | links between nodes.
 | | ... | [Ver] Make TG send an ARP packet to DUT through one interface,\
 | | ... | then receive a copy of sent packet and of DUT's ARP reply\
 | | ... | on the second interface.
 | | ... | [Ver] Make TG send an ARP packet to DUT through one interface,\
 | | ... | then receive a copy of sent packet and of DUT's ARP reply\
 | | ... | on the second interface.
-| | Given Configure path in 2-node circular topology | ${nodes['TG']} | ${nodes['DUT1']}
-| | ... | ${nodes['TG']}
+| | Given Configure path in 2-node circular topology | ${nodes['TG']}
+| | ... | ${nodes['DUT1']} | ${nodes['TG']}
 | | And Set interfaces in 2-node circular topology up
 | | And Set interfaces in 2-node circular topology up
-| | And Set interface Address | ${dut_node} | ${dut_to_tg_if1}
+| | And VPP Interface Set IP Address | ${dut_node} | ${dut_to_tg_if1}
 | | ... | ${dut_to_tg_if1_ip4} | ${prefix}
 | | And Set SPAN Mirroring | ${dut_node} | ${dut_to_tg_if1} | ${dut_to_tg_if2}
 | | Then Send Packet And Check Received Copies | ${tg_node}
 | | ... | ${dut_to_tg_if1_ip4} | ${prefix}
 | | And Set SPAN Mirroring | ${dut_node} | ${dut_to_tg_if1} | ${dut_to_tg_if2}
 | | Then Send Packet And Check Received Copies | ${tg_node}
 | | ... | [Ver] Make TG send an ICMP packet to DUT through one interface,\
 | | ... | then receive a copy of sent packet and of DUT's ICMP reply\
 | | ... | on the other interface.
 | | ... | [Ver] Make TG send an ICMP packet to DUT through one interface,\
 | | ... | then receive a copy of sent packet and of DUT's ICMP reply\
 | | ... | on the other interface.
-| | Given Configure path in 2-node circular topology | ${nodes['TG']} | ${nodes['DUT1']}
-| | ... | ${nodes['TG']}
+| | Given Configure path in 2-node circular topology | ${nodes['TG']}
+| | ... | ${nodes['DUT1']} | ${nodes['TG']}
 | | And Set interfaces in 2-node circular topology up
 | | And Set interfaces in 2-node circular topology up
-| | And Set interface Address | ${dut_node} | ${dut_to_tg_if1}
+| | And VPP Interface Set IP Address | ${dut_node} | ${dut_to_tg_if1}
 | | ... | ${dut_to_tg_if1_ip4} | ${prefix}
 | | ... | ${dut_to_tg_if1_ip4} | ${prefix}
-| | And Add ARP on DUT | ${dut_node} | ${dut_to_tg_if1} | ${tg_to_dut_if1_ip4}
-| | ... | ${tg_to_dut_if1_mac}
+| | And VPP Add IP Neighbor | ${dut_node} | ${dut_to_tg_if1}
+| | ... | ${tg_to_dut_if1_ip4} | ${tg_to_dut_if1_mac}
 | | And Set SPAN Mirroring | ${dut_node} | ${dut_to_tg_if1} | ${dut_to_tg_if2}
 | | Then Send Packet And Check Received Copies | ${tg_node}
 | | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac}
 | | And Set SPAN Mirroring | ${dut_node} | ${dut_to_tg_if1} | ${dut_to_tg_if2}
 | | Then Send Packet And Check Received Copies | ${tg_node}
 | | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac}
index 5580ce8..ccf8526 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
+| Library | resources.libraries.python.Classify.Classify
+| Library | resources.libraries.python.IPv6Util
+| Library | resources.libraries.python.telemetry.IPFIXSetup
+| Library | resources.libraries.python.Trace
+| ...
+| Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
-| Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/telemetry/ipfix.robot
 | Resource | resources/libraries/robot/telemetry/ipfix.robot
-| Library | resources.libraries.python.Classify.Classify
-| Library | resources.libraries.python.telemetry.IPFIXSetup
-| Library | resources.libraries.python.IPv6Setup
-| Library | resources.libraries.python.Trace
-
+| ...
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO
+| ...
 | Test Setup | Set up functional test
 | Test Setup | Set up functional test
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
+| ...
 | Documentation | *IPFIX ipv6 test cases*
 | ...
 | ... | IPFIX tests use 3-node topology TG - DUT1 - DUT2 - TG with
 | Documentation | *IPFIX ipv6 test cases*
 | ...
 | ... | IPFIX tests use 3-node topology TG - DUT1 - DUT2 - TG with
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip4} | ${24}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip4} | ${24}
-| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip4}
+| | And VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip4}
 | | ... | ${tg_to_dut1_mac}
 | | ... | ${tg_to_dut1_mac}
-| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
+| | And VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
 | | ... | ${tg_to_dut1_mac}
 | | And VPP RA suppress link layer | ${dut1_node} | ${dut1_to_tg}
 | | ${table_index} | ${skip_n} | ${match_n}=
 | | ... | ${tg_to_dut1_mac}
 | | And VPP RA suppress link layer | ${dut1_node} | ${dut1_to_tg}
 | | ${table_index} | ${skip_n} | ${match_n}=
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip4} | ${24}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip4} | ${24}
-| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip4}
+| | And VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip4}
 | | ... | ${tg_to_dut1_mac}
 | | ... | ${tg_to_dut1_mac}
-| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
+| | And VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
 | | ... | ${tg_to_dut1_mac}
 | | And VPP RA suppress link layer | ${dut1_node} | ${dut1_to_tg}
 | | ${table_index} | ${skip_n} | ${match_n}=
 | | ... | ${tg_to_dut1_mac}
 | | And VPP RA suppress link layer | ${dut1_node} | ${dut1_to_tg}
 | | ${table_index} | ${skip_n} | ${match_n}=
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip4} | ${24}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip4} | ${24}
-| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip4}
+| | And VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip4}
 | | ... | ${tg_to_dut1_mac}
 | | ... | ${tg_to_dut1_mac}
-| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
+| | And VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
 | | ... | ${tg_to_dut1_mac}
 | | ... | ${tg_to_dut1_mac}
-| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip}
-| | ... | ${dut2_to_dut1_mac}
+| | And VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2}
+| | ... | ${dut2_to_dut1_ip} | ${dut2_to_dut1_mac}
 | | And VPP RA suppress link layer | ${dut1_node} | ${dut1_to_tg}
 | | ${table_index} | ${skip_n} | ${match_n}=
 | | ... | And VPP creates classify table L3 | ${dut1_node} | ${ip_version} | dst
 | | And VPP RA suppress link layer | ${dut1_node} | ${dut1_to_tg}
 | | ${table_index} | ${skip_n} | ${match_n}=
 | | ... | And VPP creates classify table L3 | ${dut1_node} | ${ip_version} | dst
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip4} | ${24}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip4} | ${24}
-| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip4}
+| | And VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip4}
 | | ... | ${tg_to_dut1_mac}
 | | ... | ${tg_to_dut1_mac}
-| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
+| | And VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
 | | ... | ${tg_to_dut1_mac}
 | | And VPP RA suppress link layer | ${dut1_node} | ${dut1_to_tg}
 | | ${table_index} | ${skip_n} | ${match_n}=
 | | ... | ${tg_to_dut1_mac}
 | | And VPP RA suppress link layer | ${dut1_node} | ${dut1_to_tg}
 | | ${table_index} | ${skip_n} | ${match_n}=
index cda900a..d8b0444 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
+| Library | resources.libraries.python.Classify.Classify
+| Library | resources.libraries.python.telemetry.IPFIXSetup
+| Library | resources.libraries.python.Trace
+| ...
+| Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/interfaces.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
-| Resource | resources/libraries/robot/ip/ip4.robot
 | Resource | resources/libraries/robot/telemetry/ipfix.robot
 | Resource | resources/libraries/robot/telemetry/ipfix.robot
-| Library | resources.libraries.python.Classify.Classify
-| Library | resources.libraries.python.telemetry.IPFIXSetup
-| Library | resources.libraries.python.IPv6Setup
-| Library | resources.libraries.python.Trace
-
+| ...
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO | SKIP_VPP_PATCH
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO | SKIP_VPP_PATCH
-| ...        | EXPECTED_FAILING
+| ... | EXPECTED_FAILING
+| ...
 | Test Setup | Set up functional test
 | Test Setup | Set up functional test
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
+| ...
 | Documentation | *IPFIX ipv6 test cases*
 | ...
 | ... | IPFIX tests use 3-node topology TG - DUT1 - DUT2 - TG with
 | Documentation | *IPFIX ipv6 test cases*
 | ...
 | ... | IPFIX tests use 3-node topology TG - DUT1 - DUT2 - TG with
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip4} | ${24}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip4} | ${24}
-| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip4}
+| | And VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip4}
 | | ... | ${tg_to_dut1_mac}
 | | ... | ${tg_to_dut1_mac}
-| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
+| | And VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
 | | ... | ${tg_to_dut1_mac}
 | | And VPP RA suppress link layer | ${dut1_node} | ${dut1_to_tg}
 | | ${table_index} | ${skip_n} | ${match_n}=
 | | ... | ${tg_to_dut1_mac}
 | | And VPP RA suppress link layer | ${dut1_node} | ${dut1_to_tg}
 | | ${table_index} | ${skip_n} | ${match_n}=
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
 | | Given Configure path in 3-node circular topology
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
 | | And Set interfaces in 3-node circular topology up
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Set Interface Address | ${dut1_node}
+| | And VPP Interface Set IP Address | ${dut1_node}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip4} | ${24}
 | | ... | ${dut1_to_tg} | ${dut1_to_tg_ip4} | ${24}
-| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip4}
+| | And VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip4}
 | | ... | ${tg_to_dut1_mac}
 | | ... | ${tg_to_dut1_mac}
-| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
+| | And VPP Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
 | | ... | ${tg_to_dut1_mac}
 | | And VPP RA suppress link layer | ${dut1_node} | ${dut1_to_tg}
 | | ${table_index} | ${skip_n} | ${match_n}=
 | | ... | ${tg_to_dut1_mac}
 | | And VPP RA suppress link layer | ${dut1_node} | ${dut1_to_tg}
 | | ${table_index} | ${skip_n} | ${match_n}=
index 6985ea8..4e7b452 100644 (file)
 # limitations under the License.
 
 *** Settings ***
 # limitations under the License.
 
 *** Settings ***
+| Library | resources.libraries.python.IPUtil
+| Library  | resources.libraries.python.IPv6Util
+| Library  | resources.libraries.python.telemetry.SPAN
+| Library  | resources.libraries.python.Trace
+| ...
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/telemetry/span.robot
 | Resource | resources/libraries/robot/shared/default.robot
 | Resource | resources/libraries/robot/shared/testing_path.robot
 | Resource | resources/libraries/robot/telemetry/span.robot
-| Library  | resources.libraries.python.Trace
-| Library  | resources.libraries.python.IPv6Util
-| Library  | resources.libraries.python.IPv6Setup
-| Library  | resources.libraries.python.Routing
-| Library  | resources.libraries.python.telemetry.SPAN
+| ...
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO
 | Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO
+| ...
 | Test Setup | Set up functional test
 | Test Setup | Set up functional test
+| ...
 | Test Teardown | Tear down functional test
 | Test Teardown | Tear down functional test
+| ...
 | Documentation | *SPAN test suite*
 | ... | *[Top] Network Topologies:* TG=DUT1 2-node topology with two
 | ... | links between nodes.
 | Documentation | *SPAN test suite*
 | ... | *[Top] Network Topologies:* TG=DUT1 2-node topology with two
 | ... | links between nodes.
 | | ... | [Ver] Make TG send an ICMP packet to DUT through one interface,\
 | | ... | then receive a copy of sent packet and of DUT's ICMP reply\
 | | ... | on the other interface.
 | | ... | [Ver] Make TG send an ICMP packet to DUT through one interface,\
 | | ... | then receive a copy of sent packet and of DUT's ICMP reply\
 | | ... | on the other interface.
-| | Given Configure path in 2-node circular topology | ${nodes['TG']} | ${nodes['DUT1']}
-| | ... | ${nodes['TG']}
+| | Given Configure path in 2-node circular topology
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
 | | And Set interfaces in 2-node circular topology up
 | | And Set interfaces in 2-node circular topology up
-| | And Vpp Ra Suppress Link Layer | ${dut_node} | ${dut_to_tg_if1}
-| | And Vpp Set If Ipv6 Addr | ${dut_node} | ${dut_to_tg_if1}
-| | ... | ${dut_to_tg_if1_ip6} | ${prefix}
-| | And Add Ip Neighbor | ${dut_node} | ${dut_to_tg_if1} | ${tg_to_dut_if1_ip6}
-| | ... | ${tg_to_dut_if1_mac}
+| | And VPP Interface Set IP Address
+| | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_to_tg_if1_ip6} | ${prefix}
+| | And VPP Add IP Neighbor | ${dut_node}
+| | ... | ${dut_to_tg_if1} | ${tg_to_dut_if1_ip6} | ${tg_to_dut_if1_mac}
 | | And Vpp Route Add | ${dut_node} | ${tg_to_dut_if1_ip6} | ${prefix}
 | | ... | gateway=${dut_to_tg_if1_ip6} | interface=${dut_to_tg_if1}
 | | And Vpp Route Add | ${dut_node} | ${tg_to_dut_if1_ip6} | ${prefix}
 | | ... | gateway=${dut_to_tg_if1_ip6} | interface=${dut_to_tg_if1}
+| | And Vpp Ra Suppress Link Layer | ${dut_node} | ${dut_to_tg_if1}
 | | And Set SPAN Mirroring | ${dut_node} | ${dut_to_tg_if1} | ${dut_to_tg_if2}
 | | And Set SPAN Mirroring | ${dut_node} | ${dut_to_tg_if1} | ${dut_to_tg_if2}
-| | Then Send Packet And Check Received Copies | ${tg_node}
-| | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac}
+| | Then Send Packet And Check Received Copies
+| | ... | ${tg_node} | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac}
 | | ... | ${dut_to_tg__if1_mac} | ${tg_to_dut_if2}
 | | ... | ${tg_to_dut_if1_ip6} | ${dut_to_tg_if1_ip6} | ICMPv6
 | | ... | ${dut_to_tg__if1_mac} | ${tg_to_dut_if2}
 | | ... | ${tg_to_dut_if1_ip6} | ${dut_to_tg_if1_ip6} | ICMPv6