-# 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:
if ret_code != 0:
if "RuntimeError: ICMP echo Rx timeout" in stderr:
raise RuntimeError("ICMP echo Rx timeout")
+ elif "RuntimeError: IP packet Rx timeout" in stderr:
+ raise RuntimeError("IP packet Rx timeout")
elif "RuntimeError: DHCP REQUEST Rx timeout" in stderr:
raise RuntimeError("DHCP REQUEST Rx timeout")
elif "RuntimeError: DHCP DISCOVER Rx timeout" in stderr:
| Configure path for IPSec test
| | [Documentation] | Setup path for IPsec testing TG<-->DUT1.
| | ...
-| | ... | _NOTE:_ This KW sets following test case variable:
-| | ... | - dut_lo - DUT loopback interface. Type: string
-| | ...
| | ... | *Example:*
| | ... | \| Configure path for IPSec test \|
| | ...
-| | ${dut1_lo1}= | Vpp Create Loopback | ${dut1}
| | Set Interface State | ${dut1} | ${dut1_if1} | up
-| | Set Interface State | ${dut1} | ${dut1_lo1} | up
+| | Set Interface State | ${dut1} | ${dut1_if2} | up
| | Vpp Node Interfaces Ready Wait | ${dut1}
-| | Set Test Variable | ${dut1_lo1}
| Configure topology for IPv4 IPsec testing
| | [Documentation] | Setup topology for IPv4 IPsec testing.
| | ...
| | Configure path for IPSec test
| | VPP Interface Set IP Address
-| | ... | ${dut1} | ${dut1_if1} | ${dut_if_ip4} | ${ip4_plen}
+| | ... | ${dut1} | ${dut1_if1} | ${dut_if1_ip4} | ${ip4_plen}
| | VPP Interface Set IP Address
-| | ... | ${dut1} | ${dut1_lo1} | ${dut_lo_ip4} | ${ip4_plen}
+| | ... | ${dut1} | ${dut1_if2} | ${dut_if2_ip4} | ${ip4_plen}
| | VPP Add IP Neighbor
-| | ... | ${dut1} | ${dut1_if1} | ${tg_if_ip4} | ${tg_if1_mac}
+| | ... | ${dut1} | ${dut1_if1} | ${tg_if1_ip4} | ${tg_if1_mac}
+| | VPP Add IP Neighbor
+| | ... | ${dut1} | ${dut1_if2} | ${tg_if2_ip4} | ${tg_if2_mac}
| | Vpp Route Add
-| | ... | ${dut1} | ${tg_lo_ip4} | ${ip4_plen} | gateway=${tg_if_ip4}
+| | ... | ${dut1} | ${tg_host_ip4} | ${ip4_plen} | gateway=${tg_if1_ip4}
| | ... | interface=${dut1_if1}
-| | Set Test Variable | ${dut_tun_ip} | ${dut_if_ip4}
-| | Set Test Variable | ${dut_src_ip} | ${dut_lo_ip4}
-| | Set Test Variable | ${tg_tun_ip} | ${tg_if_ip4}
-| | Set Test Variable | ${tg_src_ip} | ${tg_lo_ip4}
+| | Set Test Variable | ${dut_tun_ip} | ${dut_if1_ip4}
+| | Set Test Variable | ${tg_tun_ip} | ${tg_if1_ip4}
+| | Set Test Variable | ${tg_src_ip} | ${tg_host_ip4}
+| | Set Test Variable | ${tg_dst_ip} | ${tg_if2_ip4}
| Configure topology for IPv6 IPsec testing
| | [Documentation] | Setup topology fo IPv6 IPsec testing.
| | ...
| | Configure path for IPSec test
| | VPP Interface Set IP Address
-| | ... | ${dut1} | ${dut1_if1} | ${dut_if_ip6} | ${ip6_plen}
+| | ... | ${dut1} | ${dut1_if1} | ${dut_if1_ip6} | ${ip6_plen}
| | VPP Interface Set IP Address
-| | ... | ${dut1} | ${dut1_lo1} | ${dut_lo_ip6} | ${ip6_plen}
+| | ... | ${dut1} | ${dut1_if2} | ${dut_if2_ip6} | ${ip6_plen}
+| | VPP Add IP Neighbor
+| | ... | ${dut1} | ${dut1_if1} | ${tg_if1_ip6} | ${tg_if1_mac}
| | VPP Add IP Neighbor
-| | ... | ${dut1} | ${dut1_if1} | ${tg_if_ip6} | ${tg_if1_mac}
+| | ... | ${dut1} | ${dut1_if2} | ${tg_if2_ip6} | ${tg_if2_mac}
| | Vpp All RA Suppress Link Layer | ${nodes}
| | Vpp Route Add
-| | ... | ${dut1} | ${tg_lo_ip6} | ${ip6_plen_rt} | gateway=${tg_if_ip6}
+| | ... | ${dut1} | ${tg_host_ip6} | ${ip6_plen_rt} | gateway=${tg_if1_ip6}
| | ... | interface=${dut1_if1}
-| | Set Test Variable | ${dut_tun_ip} | ${dut_if_ip6}
-| | Set Test Variable | ${dut_src_ip} | ${dut_lo_ip6}
-| | Set Test Variable | ${tg_tun_ip} | ${tg_if_ip6}
-| | Set Test Variable | ${tg_src_ip} | ${tg_lo_ip6}
+| | Set Test Variable | ${dut_tun_ip} | ${dut_if1_ip6}
+| | Set Test Variable | ${tg_tun_ip} | ${tg_if1_ip6}
+| | Set Test Variable | ${tg_src_ip} | ${tg_host_ip6}
+| | Set Test Variable | ${tg_dst_ip} | ${tg_if2_ip6}
| Configure manual keyed connection for IPSec
| | [Documentation] | Setup IPsec manual keyed connection on VPP node.
-# 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:
| ... | through L2 network.
*** Keywords ***
-| Send ICMP packet and verify received packet
-| | [Documentation] | Send ICMPv4/ICMPv6 echo request from source interface to \
+| Send IP packet and verify received packet
+| | [Documentation] | Send IPv4/IPv6 packet from source interface to \
| | ... | destination interface. Packet can be set with Dot1q or
| | ... | Dot1ad tag(s) when required.
| | ...
| | ...
| | ... | _NOTE:_ Default IP is IPv4
| | ...
-| | ... | \| Send ICMP packet and verify received packet \| ${nodes['TG']} \
+| | ... | \| Send IP packet and verify received packet \| ${nodes['TG']} \
| | ... | \| ${tg_to_dut_if1} \| ${tg_to_dut_if2} \|
-| | ... | \| Send ICMP packet and verify received packet \| ${nodes['TG']} \
+| | ... | \| Send IP packet and verify received packet \| ${nodes['TG']} \
| | ... | \| ${tg_to_dut1} \| ${tg_to_dut2} \| encaps=Dot1q \| vlan1=100 \|
-| | ... | \| Send ICMP packet and verify received packet \| ${nodes['TG']} \
+| | ... | \| Send IP packet and verify received packet \| ${nodes['TG']} \
| | ... | \| ${tg_to_dut1} \| ${tg_to_dut2} \| encaps=Dot1ad \| vlan1=110 \
| | ... | \| vlan2=220 \|
-| | ... | \| Send ICMP packet and verify received packet \| ${nodes['TG']} \
+| | ... | \| Send IP packet and verify received packet \| ${nodes['TG']} \
| | ... | \| ${tg_to_dut1} \| ${tg_to_dut2} \| encaps=Dot1q \| vlan1=110 \
| | ... | \| encaps_rx=Dot1q \|
-| | ... | \| Send ICMP packet and verify received packet \| ${nodes['TG']} \
+| | ... | \| Send IP packet and verify received packet \| ${nodes['TG']} \
| | ... | \| ${tg_to_dut1} \| ${tg_to_dut2} \| encaps=Dot1q \| vlan1=110 \
| | ... | \| encaps_rx=Dot1q \| vlan1_rx=120 \|
| | ...
-| | [Arguments] | ${tg_node} | ${src_int} | ${dst_int}
-| | ... | ${src_ip}=192.168.100.1 | ${dst_ip}=192.168.100.2 | ${encaps}=${EMPTY}
-| | ... | ${vlan1}=${EMPTY} | ${vlan2}=${EMPTY} | ${encaps_rx}=${EMPTY}
-| | ... | ${vlan1_rx}=${EMPTY} | ${vlan2_rx}=${EMPTY}
-| | ...
-| | ${src_mac}= | Get Interface Mac | ${tg_node} | ${src_int}
-| | ${dst_mac}= | Get Interface Mac | ${tg_node} | ${dst_int}
-| | ${src_int_name}= | Get interface name | ${tg_node} | ${src_int}
-| | ${dst_int_name}= | Get interface name | ${tg_node} | ${dst_int}
-| | ${args}= | Traffic Script Gen Arg | ${dst_int_name} | ${src_int_name}
-| | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
-| | ${args}= | Run Keyword If | '${encaps}' == '${EMPTY}'
-| | | ... | Set Variable | ${args}
-| | ... | ELSE | Catenate | ${args} | --encaps ${encaps} | --vlan1 ${vlan1}
-| | ${args}= | Run Keyword If | '${vlan2}' == '${EMPTY}'
-| | | ... | Set Variable | ${args}
-| | ... | ELSE | Catenate | ${args} | --vlan2 ${vlan2}
-| | ${args}= | Run Keyword If | '${encaps_rx}' == '${EMPTY}'
-| | | ... | Set Variable | ${args}
-| | ... | ELSE | Catenate | ${args} | --encaps_rx ${encaps_rx}
-| | ${args}= | Run Keyword If | '${vlan1_rx}' == '${EMPTY}'
-| | | ... | Set Variable | ${args}
-| | ... | ELSE | Catenate | ${args} | --vlan1_rx ${vlan1_rx}
-| | ${args}= | Run Keyword If | '${vlan2_rx}' == '${EMPTY}'
-| | | ... | Set Variable | ${args}
-| | ... | ELSE | Catenate | ${args} | --vlan2_rx ${vlan2_rx}
-| | Run Traffic Script On Node | send_ip_icmp.py | ${tg_node} | ${args}
+| | [Arguments] | ${tg_node} | ${tx_src_port} | ${rx_dst_port}
+| | ... | ${src_ip}=192.168.100.1 | ${dst_ip}=192.168.100.2
+| | ... | ${encaps}=${EMPTY} | ${vlan1}=${EMPTY} | ${vlan2}=${EMPTY}
+| | ... | ${encaps_rx}=${EMPTY} | ${vlan1_rx}=${EMPTY} | ${vlan2_rx}=${EMPTY}
+| | ...
+| | ${tx_src_mac}= | Get Interface Mac | ${tg_node} | ${tx_src_port}
+| | ${rx_dst_mac}= | Get Interface Mac | ${tg_node} | ${rx_dst_port}
+| | Then Send packet and verify headers
+| | ... | ${tg} | 192.168.0.1 | 192.168.0.2
+| | ... | ${tx_src_port} | ${tx_src_mac} | ${rx_dst_mac}
+| | ... | ${rx_dst_port} | ${tx_src_mac} | ${rx_dst_mac}
+| | ... | encaps_tx=${encaps} | vlan_tx=${vlan1} | vlan_outer_tx=${vlan2}
+| | ... | encaps_rx=${encaps_rx} | vlan_rx=${vlan1_rx}
+| | ... | vlan_outer_rx=${vlan2_rx}
| ICMP packet transmission should fail
| | [Documentation] | Send ICMPv4/ICMPv6 echo request from source interface to
| | ${dst_int_name}= | Get interface name | ${tg_node} | ${dst_int}
| | ${args}= | Traffic Script Gen Arg | ${dst_int_name} | ${src_int_name}
| | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
-| | Run Keyword And Expect Error | ICMP echo Rx timeout |
+| | Run Keyword And Expect Error | IP echo Rx timeout |
| | ... | Run Traffic Script On Node | send_ip_icmp.py | ${tg_node} | ${args}
-| Send ICMPv4 bidirectionally and verify received packets
-| | [Documentation] | Send ICMPv4 echo request from both directions,
+| Send IPv4 bidirectionally and verify received packets
+| | [Documentation] | Send IPv4 packets from both directions,
| | ... | from interface1 to interface2 and from interface2 to interface1.
| | ...
| | ... | *Arguments:*
| | ...
| | ... | *Example:*
| | ...
-| | ... | \| Send ICMPv4 bidirectionally and verify received packets \
+| | ... | \| Send IPv4 bidirectionally and verify received packets \
| | ... | \| ${nodes['TG']} \| ${tg_to_dut_if1} \| ${tg_to_dut_if2} \|
| | ...
| | [Arguments] | ${tg_node} | ${int1} | ${int2} | ${src_ip}=192.168.100.1 |
| | ... | ${dst_ip}=192.168.100.2
| | ...
-| | Send ICMP packet and verify received packet
+| | Send IP packet and verify received packet
| | ... | ${tg_node} | ${int1} | ${int2} | ${src_ip} | ${dst_ip}
-| | Send ICMP packet and verify received packet
+| | Send IP packet and verify received packet
| | ... | ${tg_node} | ${int2} | ${int1} | ${dst_ip} | ${src_ip}
-| Send ICMPv6 bidirectionally and verify received packets
-| | [Documentation] | Send ICMPv6 echo request from both directions,
+| Send IPv6 bidirectionally and verify received packets
+| | [Documentation] | Send IPv6 packets from both directions,
| | ... | from interface1 to interface2 and from interface2 to interface1.
| | ...
| | ... | *Arguments:*
| | ...
| | ... | *Example:*
| | ...
-| | ... | \| Send ICMPv6 bidirectionally and verify received packets \
+| | ... | \| Send IPv6 bidirectionally and verify received packets \
| | ... | \| ${nodes['TG']} \| ${tg_to_dut_if1} \| ${tg_to_dut_if2} \|
| | ...
| | [Arguments] | ${tg_node} | ${int1} | ${int2} | ${src_ip}=3ffe:63::1 |
| | ... | ${dst_ip}=3ffe:63::2
| | ...
-| | Send ICMP packet and verify received packet
+| | Send IP packet and verify received packet
| | ... | ${tg_node} | ${int1} | ${int2} | ${src_ip} | ${dst_ip}
-| | Send ICMP packet and verify received packet
+| | Send IP packet and verify received packet
| | ... | ${tg_node} | ${int2} | ${int1} | ${dst_ip} | ${src_ip}
| | ... | - tx_src_port - Interface of TG-if1. Type: string
| | ... | - tx_src_mac - MAC address of TG-if1. Type: string
| | ... | - tx_dst_mac - MAC address of DUT-if1. Type: string
-| | ... | - rx_port - Interface of TG-if1. Type: string
+| | ... | - rx_dst_port - Interface of TG-if1. Type: string
| | ... | - rx_src_mac - MAC address of DUT1-if2. Type: string
| | ... | - rx_dst_mac - MAC address of TG-if2. Type: string
| | ... | - encaps_tx - Expected encapsulation on TX side: Dot1q or Dot1ad
| | ... | \| eth3 \| 08:00:27:4d:ca:7a \| 08:00:27:7d:fd:10 \|
| | ...
| | [Arguments] | ${tg_node} | ${src_ip} | ${dst_ip} | ${tx_src_port}
-| | ... | ${tx_src_mac} | ${tx_dst_mac} | ${rx_port} | ${rx_src_mac}
+| | ... | ${tx_src_mac} | ${tx_dst_mac} | ${rx_dst_port} | ${rx_src_mac}
| | ... | ${rx_dst_mac} | ${encaps_tx}=${EMPTY} | ${vlan_tx}=${EMPTY}
| | ... | ${vlan_outer_tx}=${EMPTY} | ${encaps_rx}=${EMPTY}
| | ... | ${vlan_rx}=${EMPTY} | ${vlan_outer_rx}=${EMPTY}
-| | ... | ${traffic_script}=send_icmp_check_headers
+| | ... | ${traffic_script}=send_ip_check_headers
| | ...
| | ${tx_port_name}= | Get interface name | ${tg_node} | ${tx_src_port}
-| | ${rx_port_name}= | Get interface name | ${tg_node} | ${rx_port}
+| | ${rx_port_name}= | Get interface name | ${tg_node} | ${rx_dst_port}
| | ${args}= | Catenate | --tg_src_mac ${tx_src_mac}
| | ... | --tg_dst_mac ${rx_dst_mac} | --dut_if1_mac ${tx_dst_mac}
| | ... | --dut_if2_mac ${rx_src_mac} | --src_ip ${src_ip} | --dst_ip ${dst_ip}
| | ... | --tg_dst_mac ${rx_dst_mac} | --dut_if1_mac ${tx_dst_mac}
| | ... | --dut_if2_mac ${rx_src_mac} | --src_ip ${src_ip} | --dst_ip ${dst_ip}
| | ... | --tx_if ${tx_port_name} | --rx_if ${rx_port_name}
-| | Run Keyword And Expect Error | ICMP echo Rx timeout |
-| | ... | Run Traffic Script On Node | send_icmp_check_headers.py
+| | Run Keyword And Expect Error | IP packet Rx timeout |
+| | ... | Run Traffic Script On Node | send_ip_check_headers.py
| | ... | ${tg_node} | ${args}
| Send packet and verify ARP request
| | ...
| | ... | *Arguments:*
| | ... | - node - TG node. Type: dictionary
-| | ... | - interface - TG Interface. Type: string
-| | ... | - dst_mac - Destination MAC. Type: string
+| | ... | - tx_interface - TG Interface 1. Type: string
+| | ... | - rx_interface - TG Interface 2. Type: string
+| | ... | - tx_dst_mac - Destination MAC for TX interface / DUT interface 1 MAC.
+| | ... | Type: string
+| | ... | - rx_src_mac - Source MAC for RX interface / DUT interface 2 MAC.
+| | ... | Type: string
| | ... | - crypto_alg - Encrytion algorithm. Type: enum
| | ... | - crypto_key - Encryption key. Type: string
| | ... | - integ_alg - Integrity algorithm. Type: enum
| | ... | \| ${encr_alg}= \| Crypto Alg AES CBC 128 \|
| | ... | \| ${auth_alg}= \| Integ Alg SHA1 96 \|
| | ... | \| Send IPsec Packet and verify ESP encapsulation in received packet\
-| | ... | \| ${nodes['TG']} \| eth1 \
-| | ... | \| 52:54:00:d4:d8:22 \| ${encr_alg} \| sixteenbytes_key \
-| | ... | \| ${auth_alg} \| twentybytessecretkey \| ${1001} \| ${1000} \
-| | ... | \| 192.168.3.3 \| 192.168.4.4 \| 192.168.100.2 \| 192.168.100.3 \|
-| | ...
-| | [Arguments] | ${node} | ${interface} | ${dst_mac} | ${crypto_alg}
-| | ... | ${crypto_key} | ${integ_alg} | ${integ_key} | ${l_spi}
-| | ... | ${r_spi} | ${l_ip} | ${r_ip} | ${l_tunnel}=${None}
-| | ... | ${r_tunnel}=${None}
-| | ...
-| | ${src_mac}= | Get Interface Mac | ${node} | ${interface}
-| | ${if_name}= | Get Interface Name | ${node} | ${interface}
-| | ${args}= | Traffic Script Gen Arg | ${if_name} | ${if_name} | ${src_mac}
-| | ... | ${dst_mac} | ${l_ip} | ${r_ip}
+| | ... | \| ${nodes['TG']} \| eth1 \| eth2 \
+| | ... | \| 52:54:00:d4:d8:22 \| 52:54:00:d4:d8:3e \| ${encr_alg} \
+| | ... | \| sixteenbytes_key \| ${auth_alg} \| twentybytessecretkey \
+| | ... | \| ${1001} \| ${1000} \| 192.168.3.3 \| 192.168.4.4 \| 192.168.100.2 \
+| | ... | \| 192.168.100.3 \|
+| | ...
+| | [Arguments] | ${node} | ${tx_interface} | ${rx_interface} | ${tx_dst_mac}
+| | ... | ${rx_src_mac} | ${crypto_alg} | ${crypto_key} | ${integ_alg}
+| | ... | ${integ_key} | ${l_spi} | ${r_spi} | ${l_ip} | ${r_ip}
+| | ... | ${l_tunnel}=${None} | ${r_tunnel}=${None}
+| | ...
+| | ${tx_src_mac}= | Get Interface Mac | ${node} | ${tx_interface}
+| | ${tx_if_name}= | Get Interface Name | ${node} | ${tx_interface}
+| | ${rx_dst_mac}= | Get Interface Mac | ${node} | ${tx_interface}
+| | ${rx_if_name}= | Get Interface Name | ${node} | ${rx_interface}
+| | ${args}= | Catenate | --rx_if ${rx_if_name} | --tx_if ${tx_if_name}
+| | ... | --tx_src_mac ${tx_src_mac} | --tx_dst_mac ${tx_dst_mac}
+| | ... | --rx_src_mac ${rx_src_mac} | --rx_dst_mac ${rx_dst_mac}
+| | ... | --src_ip ${l_ip} | --dst_ip ${r_ip}
| | ${crypto_alg_str}= | Get Crypto Alg Scapy Name | ${crypto_alg}
| | ${integ_alg_str}= | Get Integ Alg Scapy Name | ${integ_alg}
| | ${args}= | Catenate | ${args} | --crypto_alg ${crypto_alg_str}
#!/usr/bin/env python
-# 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:
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import Ether
-from scapy.layers.inet import ICMP, IP
+from scapy.layers.inet import IP
from scapy.layers.inet6 import IPv6, ICMPv6ND_NS
-from scapy.layers.inet6 import ICMPv6EchoRequest, ICMPv6EchoReply
from scapy.layers.ipsec import SecurityAssociation, ESP
from ipaddress import ip_address
from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-def check_ipv4(pkt_recv, dst_tun, src_ip, dst_ip, sa_in):
- """Check received IPv4 IPsec packet.
+def check_ipsec(pkt_recv, ip_layer, dst_tun, src_ip, dst_ip, sa_in):
+ """Check received IPsec packet.
:param pkt_recv: Received packet to verify.
+ :param ip_layer: Scapy IP layer.
:param dst_tun: IPsec tunnel destination address.
- :param src_ip: Source address of original IPv4 packet.
- :param dst_ip: Destination address of original IPv4 packet.
+ :param src_ip: Source IP/IPv6 address of original IP/IPv6 packet.
+ :param dst_ip: Destination IP/IPv6 address of original IP/IPv6 packet.
:param sa_in: IPsec SA for packet decryption.
:type pkt_recv: scapy.Ether
+ :type ip_layer: scapy.layers.inet.IP or scapy.layers.inet6.IPv6
:type dst_tun: str
:type src_ip: str
:type dst_ip: str
:type sa_in: scapy.layers.ipsec.SecurityAssociation
:raises RuntimeError: If received packet is invalid.
"""
- if not pkt_recv.haslayer(IP):
- raise RuntimeError(
- 'Not an IPv4 packet received: {0}'.format(pkt_recv.__repr__()))
+ if not pkt_recv.haslayer(ip_layer):
+ raise RuntimeError('Not an {ip} packet received: {pkt}'.format(
+ ip=ip_layer.name, pkt=pkt_recv.__repr__()))
- if pkt_recv['IP'].dst != dst_tun:
+ if pkt_recv[ip_layer.name].dst != dst_tun:
raise RuntimeError(
- 'Received packet has invalid destination address: {0} '
- 'should be: {1}'.format(pkt_recv['IP'].dst, dst_tun))
+ 'Received packet has invalid destination address: {rec_ip} '
+ 'should be: {exp_ip}'.format(
+ rec_ip=pkt_recv[ip_layer.name].dst, exp_ip=dst_tun))
if not pkt_recv.haslayer(ESP):
raise RuntimeError(
- 'Not an ESP packet received: {0}'.format(pkt_recv.__repr__()))
+ 'Not an ESP packet received: {pkt}'.format(pkt=pkt_recv.__repr__()))
- ip_pkt = pkt_recv[IP]
+ ip_pkt = pkt_recv[ip_layer]
d_pkt = sa_in.decrypt(ip_pkt)
- if d_pkt[IP].dst != dst_ip:
+ if d_pkt[ip_layer].dst != dst_ip:
raise RuntimeError(
- 'Decrypted packet has invalid destination address: {0} '
- 'should be: {1}'.format(d_pkt['IP'].dst, dst_ip))
+ 'Decrypted packet has invalid destination address: {rec_ip} '
+ 'should be: {exp_ip}'.format(
+ rec_ip=d_pkt[ip_layer].dst, exp_ip=dst_ip))
- if d_pkt[IP].src != src_ip:
+ if d_pkt[ip_layer].src != src_ip:
raise RuntimeError(
- 'Decrypted packet has invalid source address: {0} should be: {1}'
- .format(d_pkt['IP'].src, src_ip))
+ 'Decrypted packet has invalid source address: {rec_ip} should be: '
+ '{exp_ip}'.format(rec_ip=d_pkt[ip_layer].src, exp_ip=src_ip))
- if not d_pkt.haslayer(ICMP):
+ if ip_layer == IP and d_pkt[ip_layer.name].proto != 61:
raise RuntimeError(
- 'Decrypted packet does not have ICMP layer: {0}'.format(
- d_pkt.__repr__()))
+ 'Decrypted packet has invalid IP protocol: {rec_proto} '
+ 'should be: 61'.format(rec_proto=d_pkt[ip_layer.name].proto))
-def check_ipv6(pkt_recv, dst_tun, src_ip, dst_ip, sa_in):
- """Check received IPv6 IPsec packet.
+def check_ip(pkt_recv, ip_layer, src_ip, dst_ip):
+ """Check received IP/IPv6 packet.
:param pkt_recv: Received packet to verify.
- :param dst_tun: IPsec tunnel destination address.
- :param src_ip: Source address of original IPv6 packet.
- :param dst_ip: Destination address of original IPv6 packet.
- :param sa_in: IPsec SA for packet decryption.
+ :param ip_layer: Scapy IP layer.
+ :param src_ip: Source IP/IPv6 address.
+ :param dst_ip: Destination IP/IPv6 address.
:type pkt_recv: scapy.Ether
- :type dst_tun: str
+ :type ip_layer: scapy.layers.inet.IP or scapy.layers.inet6.IPv6
:type src_ip: str
:type dst_ip: str
- :type sa_in: scapy.layers.ipsec.SecurityAssociation
:raises RuntimeError: If received packet is invalid.
"""
- if not pkt_recv.haslayer(IPv6):
- raise RuntimeError(
- 'Not an IPv6 packet received: {0}'.format(pkt_recv.__repr__()))
-
- if pkt_recv[IPv6].dst != dst_tun:
- raise RuntimeError(
- 'Received packet has invalid destination address: {0} '
- 'should be: {1}'.format(pkt_recv['IPv6'].dst, dst_tun))
+ if not pkt_recv.haslayer(ip_layer):
+ raise RuntimeError('Not an {ip} packet received: {pkt}'.format(
+ ip=ip_layer.name, pkt=pkt_recv.__repr__()))
- if not pkt_recv.haslayer(ESP):
- raise RuntimeError(
- 'Not an ESP packet received: {0}'.format(pkt_recv.__repr__()))
-
- ip_pkt = pkt_recv[IPv6]
- d_pkt = sa_in.decrypt(ip_pkt)
-
- if d_pkt[IPv6].dst != dst_ip:
+ if pkt_recv[ip_layer.name].dst != dst_ip:
raise RuntimeError(
- 'Decrypted packet has invalid destination address {0}: '
- 'should be: {1}'.format(d_pkt['IPv6'].dst, dst_ip))
+ 'Received packet has invalid destination address: {rec_ip} '
+ 'should be: {exp_ip}'.format(
+ rec_ip=pkt_recv[ip_layer.name].dst, exp_ip=dst_ip))
- if d_pkt[IPv6].src != src_ip:
+ if pkt_recv[ip_layer.name].src != src_ip:
raise RuntimeError(
- 'Decrypted packet has invalid source address: {0} should be: {1}'
- .format(d_pkt['IPv6'].src, src_ip))
+ 'Received packet has invalid destination address: {rec_ip} '
+ 'should be: {exp_ip}'.format(
+ rec_ip=pkt_recv[ip_layer.name].dst, exp_ip=src_ip))
- if not d_pkt.haslayer(ICMPv6EchoReply):
+ if ip_layer == IP and pkt_recv[ip_layer.name].proto != 61:
raise RuntimeError(
- 'Decrypted packet does not have ICMP layer: {0}'.format(
- d_pkt.__repr__()))
+ 'Received packet has invalid IP protocol: {rec_proto} '
+ 'should be: 61'.format(rec_proto=pkt_recv[ip_layer.name].proto))
# pylint: disable=too-many-locals
# pylint: disable=too-many-statements
def main():
"""Send and receive IPsec packet."""
- args = TrafficScriptArg(['src_mac', 'dst_mac', 'src_ip', 'dst_ip',
- 'crypto_alg', 'crypto_key', 'integ_alg',
- 'integ_key', 'l_spi', 'r_spi'],
- ['src_tun', 'dst_tun'])
-
- rxq = RxQueue(args.get_arg('rx_if'))
- txq = TxQueue(args.get_arg('tx_if'))
- src_mac = args.get_arg('src_mac')
- dst_mac = args.get_arg('dst_mac')
+ args = TrafficScriptArg(
+ ['tx_src_mac', 'tx_dst_mac', 'rx_src_mac', 'rx_dst_mac', 'src_ip',
+ 'dst_ip','crypto_alg', 'crypto_key', 'integ_alg', 'integ_key',
+ 'l_spi', 'r_spi'],
+ ['src_tun', 'dst_tun']
+ )
+
+ tx_txq = TxQueue(args.get_arg('tx_if'))
+ tx_rxq = RxQueue(args.get_arg('tx_if'))
+ rx_txq = TxQueue(args.get_arg('rx_if'))
+ rx_rxq = RxQueue(args.get_arg('rx_if'))
+
+ tx_src_mac = args.get_arg('tx_src_mac')
+ tx_dst_mac = args.get_arg('tx_dst_mac')
+ rx_src_mac = args.get_arg('rx_src_mac')
+ rx_dst_mac = args.get_arg('rx_dst_mac')
src_ip = args.get_arg('src_ip')
dst_ip = args.get_arg('dst_ip')
crypto_alg = args.get_arg('crypto_alg')
src_tun = args.get_arg('src_tun')
dst_tun = args.get_arg('dst_tun')
- is_ipv4 = True
- if 6 == ip_address(unicode(src_ip)).version:
- is_ipv4 = False
+ if ip_address(unicode(src_ip)).version == 6:
+ ip_layer = IPv6
+ else:
+ ip_layer = IP
- tunnel_out = None
- tunnel_in = None
+ tunnel_out = ip_layer(src=src_tun, dst=dst_tun) if src_tun and dst_tun \
+ else None
+ tunnel_in = ip_layer(src=dst_tun, dst=src_tun) if src_tun and dst_tun \
+ else None
- if src_tun and dst_tun:
- if is_ipv4:
- tunnel_out = IP(src=src_tun, dst=dst_tun)
- tunnel_in = IP(src=dst_tun, dst=src_tun)
- else:
- tunnel_out = IPv6(src=src_tun, dst=dst_tun)
- tunnel_in = IPv6(src=dst_tun, dst=src_tun)
- else:
+ if not (src_tun and dst_tun):
src_tun = src_ip
- dst_tun = dst_ip
sa_in = SecurityAssociation(ESP, spi=r_spi, crypt_algo=crypto_alg,
crypt_key=crypto_key, auth_algo=integ_alg,
crypt_key=crypto_key, auth_algo=integ_alg,
auth_key=integ_key, tunnel_header=tunnel_out)
- sent_packets = []
-
- if is_ipv4:
- ip_pkt = (IP(src=src_ip, dst=dst_ip) /
- ICMP())
- ip_pkt = IP(str(ip_pkt))
- else:
- ip_pkt = (IPv6(src=src_ip, dst=dst_ip) /
- ICMPv6EchoRequest())
- ip_pkt = IPv6(str(ip_pkt))
+ ip_pkt = ip_layer(src=src_ip, dst=dst_ip, proto=61) if ip_layer == IP \
+ else ip_layer(src=src_ip, dst=dst_ip)
+ ip_pkt = ip_layer(str(ip_pkt))
e_pkt = sa_out.encrypt(ip_pkt)
- pkt_send = (Ether(src=src_mac, dst=dst_mac) /
- e_pkt)
+ tx_pkt_send = (Ether(src=tx_src_mac, dst=tx_dst_mac) /
+ e_pkt)
+
+ sent_packets = list()
+ sent_packets.append(tx_pkt_send)
+ tx_txq.send(tx_pkt_send)
+
+ while True:
+ rx_pkt_recv = rx_rxq.recv(2)
+
+ if rx_pkt_recv is None:
+ raise RuntimeError(
+ '{ip} packet Rx timeout'.format(ip=ip_layer.name))
+
+ if rx_pkt_recv.haslayer(ICMPv6ND_NS):
+ # read another packet in the queue if the current one is ICMPv6ND_NS
+ continue
+ else:
+ # otherwise process the current packet
+ break
+
+ check_ip(rx_pkt_recv, ip_layer, src_ip, dst_ip)
- sent_packets.append(pkt_send)
- txq.send(pkt_send)
+ rx_ip_pkt = ip_layer(src=dst_ip, dst=src_ip, proto=61) if ip_layer == IP \
+ else ip_layer(src=dst_ip, dst=src_ip)
+ rx_pkt_send = (Ether(src=rx_dst_mac, dst=rx_src_mac) /
+ rx_ip_pkt)
+
+ rx_txq.send(rx_pkt_send)
while True:
- pkt_recv = rxq.recv(2, sent_packets)
+ tx_pkt_recv = tx_rxq.recv(2, sent_packets)
- if pkt_recv is None:
+ if tx_pkt_recv is None:
raise RuntimeError('ESP packet Rx timeout')
- if pkt_recv.haslayer(ICMPv6ND_NS):
+ if rx_pkt_recv.haslayer(ICMPv6ND_NS):
# read another packet in the queue if the current one is ICMPv6ND_NS
continue
else:
# otherwise process the current packet
break
- if is_ipv4:
- check_ipv4(pkt_recv, src_tun, dst_ip, src_ip, sa_in)
- else:
- check_ipv6(pkt_recv, src_tun, dst_ip, src_ip, sa_in)
+ check_ipsec(tx_pkt_recv, ip_layer, src_tun, dst_ip, src_ip, sa_in)
sys.exit(0)
#!/usr/bin/env python
-# 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:
# See the License for the specific language governing permissions and
# limitations under the License.
-"""Traffic script that sends an IP ICMPv4/ICMPv6 packet from one interface
+"""Traffic script that sends an IP IPv4/IPv6 packet from one interface
to the other. Source and destination IP addresses and source and destination
MAC addresses are checked in received packet.
"""
import ipaddress
from robot.api import logger
from scapy.layers.inet import IP
-from scapy.layers.inet6 import IPv6, ICMPv6EchoRequest, ICMPv6ND_NS
+from scapy.layers.inet6 import IPv6, ICMPv6ND_NS
from scapy.layers.l2 import Ether, Dot1Q
from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
def main():
- """Send IP ICMP packet from one traffic generator interface to the other."""
+ """Send IP/IPv6 packet from one traffic generator interface to the other."""
args = TrafficScriptArg(
['tg_src_mac', 'tg_dst_mac', 'src_ip', 'dst_ip', 'dut_if1_mac',
'dut_if2_mac'],
ether = rxq.recv(2, ignore=sent_packets)
else:
ether = rxq.recv(2)
+
if ether is None:
- raise RuntimeError('ICMP echo Rx timeout')
+ raise RuntimeError('IP packet Rx timeout')
if ether.haslayer(ICMPv6ND_NS):
# read another packet in the queue if the current one is ICMPv6ND_NS
| ...
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with \
| ... | single links between nodes.
-| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-ICMPv4 for IPv4 routing on \
-| ... | both links.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing on both links.
| ... | *[Cfg] DUT configuration:* DUT1 is configured with IPv4 routing and \
| ... | two static IPv4 /24 route entries. Container is connected to VPP via \
| ... | Memif interface. Container is running same VPP version as running on \
| ... | DUT.
-| ... | *[Ver] TG verification:* Test ICMPv4 Echo Request packets are sent in \
-| ... | one direction by TG on links to DUT1 and via container; on receive TG \
-| ... | verifies packets for correctness and their IPv4 src-addr, dst-addr and \
-| ... | MAC addresses.
+| ... | *[Ver] TG verification:* Test IPv4 packets with IP protocol=61 are \
+| ... | sent in one direction by TG on links to DUT1 and via container; on \
+| ... | receive TG verifies packets for correctness and their IPv4 src-addr, \
+| ... | dst-addr and MAC addresses.
| ... | *[Ref] Applicable standard specifications:* RFC791, RFC826, RFC792
*** Variables ***
*** Keywords ***
| Local Template
| | [Documentation]
-| | ... | [Ver] Make TG send ICMPv4 Echo Reqs in both directions between two\
+| | ... | [Ver] Make TG send IPv4 packet in both directions between two\
| | ... | of its interfaces to be routed by DUT to and from docker; verify\
| | ... | all packets are received.
| | ...
| | ... | ${tg_if2} | ${dut1_if2_mac} | ${tg_if2_mac}
*** Test Cases ***
-| tc01-64B-ethicmpv4-ip4base-eth-2memif-1dcr-dev
+| tc01-64B-ethipv4-ip4base-eth-2memif-1dcr-dev
| | [Tags] | 64B
| | frame_size=${64} | phy_cores=${0}
| ...
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology \
| ... | with single links between nodes.
-| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-ICMPv4 for L2 switching of \
-| ... | IPv4. Both apply to all links.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.\
+| ... | Both apply to all links.
| ... | *[Cfg] DUT configuration:* DUT1 is configured with L2 bridge-domain \
| ... | switching. Container is connected to VPP via Memif interface. \
| ... | Container is running same VPP version as running on DUT.
-| ... | *[Ver] TG verification:* Test ICMPv4 Echo Request packets \
+| ... | *[Ver] TG verification:* Test IPv4 packets with IP protocol=61\
| ... | are sent in both directions by TG on links to DUT1 and via container; \
| ... | on receive TG verifies packets for correctness and their IPv4 \
| ... | src-addr, dst-addr and MAC addresses.
*** Keywords ***
| Local Template
| | [Documentation]
-| | ... | [Ver] Make TG send ICMPv4 Echo Reqs in both directions between two\
+| | ... | [Ver] Make TG send IPv4 packets in both directions between two\
| | ... | of its interfaces to be switched by DUT to and from docker; verify\
| | ... | all packets are received.
| | ...
| | And Initialize layer interface
| | And Start containers for test | auto_scale=${False} | pinning=${False}
| | And Initialize L2 Bridge Domain with memif pairs | auto_scale=${False}
-| | Then Send ICMPv4 bidirectionally and verify received packets
+| | Then Send IPv4 bidirectionally and verify received packets
| | ... | ${tg} | ${tg_if1} | ${tg_if2}
*** Test Cases ***
-| tc01-64B-ethicmpv4-l2bdbasemaclrn-eth-2memif-1dcr-dev
+| tc01-64B-ethipv4-l2bdbasemaclrn-eth-2memif-1dcr-dev
| | [Tags] | 64B
| | frame_size=${64} | phy_cores=${0}
| ...
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with \
| ... | single links between nodes.
-| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-ICMPv4 for L2 switching of IPv4.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
| ... | *[Cfg] DUT configuration:* DUT1 is configured with L2 cross-connect \
| ... | (L2XC) switching. Container is connected to VPP via Memif interface. \
| ... | Container is running same VPP version as running on DUT.
-| ... | *[Ver] TG verification:* Test ICMPv4 Echo Request packets \
+| ... | *[Ver] TG verification:* Test IPv4 packets with IP protocol=61 \
| ... | are sent in both directions by TG on links to DUT1 and via container; \
| ... | on receive TG verifies packets for correctness and their IPv4 \
| ... | src-addr, dst-addr and MAC addresses.
*** Keywords ***
| Local Template
| | [Documentation]
-| | ... | [Ver] Make TG send ICMPv4 Echo Reqs in both directions between two\
+| | ... | [Ver] Make TG send IPv4 packets in both directions between two\
| | ... | of its interfaces to be switched by DUT to and from docker; verify\
| | ... | all packets are received.
| | ...
| | And Initialize layer interface
| | And Start containers for test | auto_scale=${False} | pinning=${False}
| | And Initialize L2 xconnect with memif pairs
-| | Then Send ICMPv4 bidirectionally and verify received packets
+| | Then Send IPv4 bidirectionally and verify received packets
| | ... | ${tg} | ${tg_if1} | ${tg_if2}
*** Test Cases ***
-| tc01-64B-ethicmpv4-l2xcbase-eth-2memif-1dcr-dev
+| tc01-64B-ethipv4-l2xcbase-eth-2memif-1dcr-dev
| | [Tags] | 64B
| | frame_size=${64} | phy_cores=${0}
| ...
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with \
| ... | single links between nodes.
-| ... | *[Enc] Packet Encapsulations:* Eth-IPv6-ICMPv6 for IPv6 routing on \
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing on \
| ... | both links.
| ... | *[Cfg] DUT configuration:* DUT1 is configured with IPv6 routing and \
| ... | two static IPv6 /64 route entries. Container is connected to VPP via \
| ... | Memif interface. Container is running same VPP version as running on \
| ... | DUT.
-| ... | *[Ver] TG verification:* Test ICMPv6 Echo Request packets are sent in \
-| ... | one direction by TG on links to DUT1 and via container; on receive TG \
-| ... | verifies packets for correctness and their IPv6 src-addr, dst-addr and \
+| ... | *[Ver] TG verification:* Test IPv6 packets are sent in one direction \
+| ... | by TG on links to DUT1 and via container; on receive TG verifies \
+| ... | packets for correctness and their IPv6 src-addr, dst-addr and \
| ... | MAC addresses.
| ... | *[Ref] Applicable standard specifications:* RFC791, RFC826, RFC792
*** Keywords ***
| Local Template
| | [Documentation]
-| | ... | [Ver] Make TG send ICMPv6 Echo Reqs in both directions between two\
+| | ... | [Ver] Make TG send IPv6 packets in both directions between two\
| | ... | of its interfaces to be routed by DUT to and from docker; verify\
| | ... | all packets are received.
| | ...
| | ... | ${tg_if2} | ${dut1_if2_mac} | ${tg_if2_mac}
*** Test Cases ***
-| tc01-78B-ethicmpv6-ip6base-eth-2memif-1dcr-dev
+| tc01-78B-ethipv6-ip6base-eth-2memif-1dcr-dev
| | [Tags] | 78B
| | frame_size=${78} | phy_cores=${0}
| ${tg_spi}= | ${1000}
| ${dut_spi}= | ${1001}
| ${ESP_PROTO}= | ${50}
-| ${tg_if_ip4}= | 192.168.100.2
-| ${dut_if_ip4}= | 192.168.100.3
-| ${tg_lo_ip4}= | 192.168.3.3
-| ${dut_lo_ip4}= | 192.168.4.4
+| ${tg_if1_ip4}= | 192.168.100.2
+| ${tg_if2_ip4}= | 192.168.4.4
+| ${dut_if1_ip4}= | 192.168.100.3
+| ${dut_if2_ip4}= | 192.168.4.3
+| ${tg_host_ip4}= | 192.168.3.3
| ${ip4_plen}= | ${24}
*** Keywords ***
| | And Generate keys for IPSec | ${encr_alg} | ${auth_alg}
| | And Configure manual keyed connection for IPSec
| | ... | ${dut1} | ${dut1_if1} | ${encr_alg} | ${encr_key} | ${auth_alg}
-| | ... | ${auth_key} | ${dut_spi} | ${tg_spi} | ${dut_src_ip} | ${tg_src_ip}
+| | ... | ${auth_key} | ${dut_spi} | ${tg_spi} | ${tg_dst_ip} | ${tg_src_ip}
| | ... | ${dut_tun_ip} | ${tg_tun_ip}
| | Then Send IPsec Packet and verify ESP encapsulation in received packet
-| | ... | ${tg} | ${tg_if1} | ${dut1_if1_mac}
+| | ... | ${tg} | ${tg_if1} | ${tg_if2} | ${dut1_if1_mac} | ${dut1_if2_mac}
| | ... | ${encr_alg} | ${encr_key} | ${auth_alg} | ${auth_key} | ${tg_spi}
-| | ... | ${dut_spi} | ${tg_src_ip} | ${dut_src_ip} | ${tg_tun_ip}
+| | ... | ${dut_spi} | ${tg_src_ip} | ${tg_dst_ip} | ${tg_tun_ip}
| | ... | ${dut_tun_ip}
*** Test Cases ***
| ${tg_spi}= | ${1000}
| ${dut_spi}= | ${1001}
| ${ESP_PROTO}= | ${50}
-| ${tg_if_ip4}= | 192.168.100.2
-| ${dut_if_ip4}= | 192.168.100.3
-| ${tg_lo_ip4}= | 192.168.3.3
-| ${dut_lo_ip4}= | 192.168.4.4
+| ${tg_if1_ip4}= | 192.168.100.2
+| ${tg_if2_ip4}= | 192.168.4.4
+| ${dut_if1_ip4}= | 192.168.100.3
+| ${dut_if2_ip4}= | 192.168.4.3
+| ${tg_host_ip4}= | 192.168.3.3
| ${ip4_plen}= | ${24}
*** Keywords ***
| | And Generate keys for IPSec | ${encr_alg} | ${auth_alg}
| | And Configure manual keyed connection for IPSec
| | ... | ${dut1} | ${dut1_if1} | ${encr_alg} | ${encr_key} | ${auth_alg}
-| | ... | ${auth_key} | ${dut_spi} | ${tg_spi} | ${dut_tun_ip} | ${tg_tun_ip}
+| | ... | ${auth_key} | ${dut_spi} | ${tg_spi} | ${tg_dst_ip} | ${tg_src_ip}
| | Then Send IPsec Packet and verify ESP encapsulation in received packet
-| | ... | ${tg} | ${tg_if1} | ${dut1_if1_mac}
+| | ... | ${tg} | ${tg_if1} | ${tg_if2} | ${dut1_if1_mac} | ${dut1_if2_mac}
| | ... | ${encr_alg} | ${encr_key} | ${auth_alg} | ${auth_key} | ${tg_spi}
-| | ... | ${dut_spi} | ${tg_tun_ip} | ${dut_tun_ip}
+| | ... | ${dut_spi} | ${tg_src_ip} | ${tg_dst_ip}
*** Test Cases ***
| tc01-110B-ethip4ipsec1tptsw-ip4base-policy-aes-128-cbc-sha-512-256-dev
| ${tg_spi}= | ${1000}
| ${dut_spi}= | ${1001}
| ${ESP_PROTO}= | ${50}
-| ${tg_if_ip6}= | 3ffe:5f::1
-| ${dut_if_ip6}= | 3ffe:5f::2
-| ${tg_lo_ip6}= | 3ffe:60::3
-| ${dut_lo_ip6}= | 3ffe:60::4
+| ${tg_if1_ip6}= | 3ffe:5f::1
+| ${tg_if2_ip6}= | 3ffe:60::4
+| ${dut_if1_ip6}= | 3ffe:5f::2
+| ${dut_if2_ip6}= | 3ffe:60::3
+| ${tg_host_ip6}= | 3ffe:61::3
| ${ip6_plen}= | ${64}
| ${ip6_plen_rt}= | ${128}
| | And Generate keys for IPSec | ${encr_alg} | ${auth_alg}
| | And Configure manual keyed connection for IPSec
| | ... | ${dut1} | ${dut1_if1} | ${encr_alg} | ${encr_key} | ${auth_alg}
-| | ... | ${auth_key} | ${dut_spi} | ${tg_spi} | ${dut_src_ip} | ${tg_src_ip}
+| | ... | ${auth_key} | ${dut_spi} | ${tg_spi} | ${tg_dst_ip} | ${tg_src_ip}
| | ... | ${dut_tun_ip} | ${tg_tun_ip} | is_ipv6=${TRUE}
| | Then Send IPsec Packet and verify ESP encapsulation in received packet
-| | ... | ${tg} | ${tg_if1} | ${dut1_if1_mac}
+| | ... | ${tg} | ${tg_if1} | ${tg_if2} | ${dut1_if1_mac} | ${dut1_if2_mac}
| | ... | ${encr_alg} | ${encr_key} | ${auth_alg} | ${auth_key} | ${tg_spi}
-| | ... | ${dut_spi} | ${tg_src_ip} | ${dut_src_ip} | ${tg_tun_ip}
+| | ... | ${dut_spi} | ${tg_src_ip} | ${tg_dst_ip} | ${tg_tun_ip}
| | ... | ${dut_tun_ip}
*** Test Cases ***
| ${tg_spi}= | ${1000}
| ${dut_spi}= | ${1001}
| ${ESP_PROTO}= | ${50}
-| ${tg_if_ip6}= | 3ffe:5f::1
-| ${dut_if_ip6}= | 3ffe:5f::2
-| ${tg_lo_ip6}= | 3ffe:60::3
-| ${dut_lo_ip6}= | 3ffe:60::4
+| ${tg_if1_ip6}= | 3ffe:5f::1
+| ${tg_if2_ip6}= | 3ffe:60::4
+| ${dut_if1_ip6}= | 3ffe:5f::2
+| ${dut_if2_ip6}= | 3ffe:60::3
+| ${tg_host_ip6}= | 3ffe:61::3
| ${ip6_plen}= | ${64}
| ${ip6_plen_rt}= | ${128}
| | And Generate keys for IPSec | ${encr_alg} | ${auth_alg}
| | And Configure manual keyed connection for IPSec
| | ... | ${dut1} | ${dut1_if1} | ${encr_alg} | ${encr_key} | ${auth_alg}
-| | ... | ${auth_key} | ${dut_spi} | ${tg_spi} | ${dut_tun_ip} | ${tg_tun_ip}
+| | ... | ${auth_key} | ${dut_spi} | ${tg_spi} | ${tg_dst_ip} | ${tg_src_ip}
| | ... | is_ipv6=${TRUE}
| | Then Send IPsec Packet and verify ESP encapsulation in received packet
-| | ... | ${tg} | ${tg_if1} | ${dut1_if1_mac}
+| | ... | ${tg} | ${tg_if1} | ${tg_if2} | ${dut1_if1_mac} | ${dut1_if2_mac}
| | ... | ${encr_alg} | ${encr_key} | ${auth_alg} | ${auth_key} | ${tg_spi}
-| | ... | ${dut_spi} | ${tg_tun_ip} | ${dut_tun_ip}
+| | ... | ${dut_spi} | ${tg_src_ip} | ${tg_dst_ip}
*** Test Cases ***
| tc01-124B-ethip6ipsec1tptsw-ip6base-policy-aes-128-cbc-sha-512-256-dev
| ...
| ... | *[Top] Network Topologies:* TG=DUT1 2-node topology with two links
| ... | between nodes.
-| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-ICMPv4 for L2 switching of
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of
| ... | IPv4.
| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with L2
| ... | bridge-domain (L2BD) MAC learning enabled; Split Horizon Groups (SHG)
| ... | are set depending on test case; Namespaces (NM)
| ... | are set on DUT1 with attached linux-TAP.
-| ... | *[Ver] TG verification:* Test ICMPv4 Echo Request packets
+| ... | *[Ver] TG verification:* Test IPv4 packets with IP protocol=61
| ... | are sent by TG on link to DUT1; On receipt TG verifies packets
| ... | for correctness and their IPv4 src-addr, dst-addr, and MAC addresses.
| ... | *[Ref] Applicable standard specifications:*
| | And Add interface to bridge domain | ${dut1} | ${dut1_if1} | 20 | 0
| | And Add interface to bridge domain | ${dut1} | ${int2} | 19 | 0
| | And Add interface to bridge domain | ${dut1} | ${dut1_if2} | 19 | 0
-| | Then Send ICMP packet and verify received packet
+| | Then Send IP packet and verify received packet
| | ... | ${tg} | ${tg_if1} | ${tg_if2}
*** Test Cases ***
-| tc01-64B-ethicmpv4-l2bdbasemaclrn-eth-2tap-dev
+| tc01-64B-ethipv4-l2bdbasemaclrn-eth-2tap-dev
| | [Tags] | 64B
| | frame_size=${64} | phy_cores=${0}
| ...
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology \
| ... | with single links between nodes.
-| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-ICMPv4 for IPv4 routing on \
-| ... | both links.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing on both \
+| ... | links.
| ... | *[Cfg] DUT configuration:* DUT1 is configured with IPv4 routing and \
| ... | two static IPv4 /24 route entries.
-| ... | *[Ver] TG verification:* Test ICMPv4 Echo Request packets are sent in \
-| ... | one direction by TG on links to DUT1; on receive TG verifies packets \
+| ... | *[Ver] TG verification:* Test IPv4 packet with IP protocol=61 is sent \
+| ... | in one direction by TG on links to DUT1; on receive TG verifies packet \
| ... | for correctness and their IPv4 src-addr, dst-addr and MAC addresses.
| ... | *[Ref] Applicable standard specifications:* RFC791, RFC826, RFC792
*** Keywords ***
| Local Template
| | [Documentation]
-| | ... | [Ver] Make TG send ICMPv4 Echo Req routed over DUT1 interfaces.\
-| | ... | Make TG verify ICMPv4 Echo Reply is correct.
+| | ... | [Ver] Make TG send IPv4 packet routed over DUT1 interfaces.\
+| | ... | Make TG verify IPv4 packet is correct.
| | ...
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | And Initialize layer interface
| | And Initialize IPv4 forwarding in circular topology
| | ... | remote_host1_ip=192.168.0.1 | remote_host2_ip=192.168.0.2
-| | Then Send IPv4 ping packet and verify headers
-| | ... | ${tg} | ${tg_if1} | ${dut1} | ${dut1_if2}
-| | ... | 10.10.10.2 | 20.20.20.1 | ${dut1_if1_mac} | ${0}
-| | Then Send IPv4 ping packet and verify headers
-| | ... | ${tg} | ${tg_if1} | ${dut1} | ${dut1_if1}
-| | ... | 10.10.10.2 | 10.10.10.1 | ${dut1_if1_mac} | ${0}
-| | Then Send IPv4 ping packet and verify headers
-| | ... | ${tg} | ${tg_if1} | ${tg} | ${tg_if2}
-| | ... | 10.10.10.2 | 20.20.20.2 | ${dut1_if1_mac} | ${1}
-| | Then Send IPv4 ping packet and verify headers
-| | ... | ${tg} | ${tg_if1} | ${tg} | ${tg_if2}
-| | ... | 192.168.0.1 | 192.168.0.2 | ${dut1_if1_mac} | ${1}
+| | Then Send packet and verify headers
+| | ... | ${tg} | 192.168.0.1 | 192.168.0.2
+| | ... | ${tg_if1} | ${tg_if1_mac} | ${dut1_if1_mac}
+| | ... | ${tg_if2} | ${dut1_if2_mac} | ${tg_if2_mac}
*** Test Cases ***
-| tc01-64B-ethicmpv4-ip4base-dev
+| tc01-64B-ethipv4-ip4base-dev
| | [Tags] | 64B
| | frame_size=${64} | phy_cores=${0}
| ...
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology \
| ... | with single links between nodes.
-| ... | *[Enc] Packet Encapsulations:* Eth-IPv6-ICMPv6 for IPv6 routing on \
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing on \
| ... | both links.
| ... | *[Cfg] DUT configuration:* DUT1 is configured with IPv6 routing and \
| ... | two static IPv6 /64 route entries.
-| ... | *[Ver] TG verification:* Test ICMPv6 Echo Request packets are sent in \
-| ... | one direction by TG on links to DUT1; on receive TG verifies packets \
-| ... | for correctness and their IPv6 src-addr, dst-addr and MAC addresses.
+| ... | *[Ver] TG verification:* Test IPv6 packet is sent in one direction \
+| ... | by TG on links to DUT1; on receive TG verifies packet for correctness \
+| ... | and their IPv6 src-addr, dst-addr and MAC addresses.
| ... | *[Ref] Applicable standard specifications:* RFC2460, RFC4443, RFC4861
*** Variables ***
*** Keywords ***
| Local Template
| | [Documentation]
-| | ... | [Ver] Make TG send ICMPv6 Echo Req routed over DUT1 interfaces;\
-| | ... | Make TG verify ICMPv6 Echo Reply is correct.
+| | ... | [Ver] Make TG send IPv6 packet routed over DUT1 interfaces;\
+| | ... | Make TG verify IPv6 packet is correct.
| | ...
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | And Initialize layer interface
| | And Initialize IPv6 forwarding in circular topology
| | ... | remote_host1_ip=3ffe:5f::1 | remote_host2_ip=3ffe:5f::2
-| | Then Send IPv6 echo request packet and verify headers
-| | ... | ${tg} | ${tg_if1} | ${dut1} | ${dut1_if2}
-| | ... | 2001:1::2 | 2001:2::1 | ${dut1_if1_mac} | ${0}
-| | Then Send IPv6 echo request packet and verify headers
-| | ... | ${tg} | ${tg_if1} | ${dut1} | ${dut1_if1}
-| | ... | 2001:1::2 | 2001:1::1 | ${dut1_if1_mac} | ${0}
-| | Then Send IPv6 echo request packet and verify headers
-| | ... | ${tg} | ${tg_if1} | ${tg} | ${tg_if2}
-| | ... | 2001:1::2 | 2001:2::2 | ${dut1_if1_mac} | ${1} | ${dut1_if2_mac}
-| | Then Send IPv6 echo request packet and verify headers
-| | ... | ${tg} | ${tg_if1} | ${tg} | ${tg_if2}
-| | ... | 3ffe:5f::1 | 3ffe:5f::2 | ${dut1_if1_mac} | ${1} | ${dut1_if2_mac}
+| | Then Send packet and verify headers
+| | ... | ${tg} | 3ffe:5f::1 | 3ffe:5f::2
+| | ... | ${tg_if1} | ${tg_if1_mac} | ${dut1_if1_mac}
+| | ... | ${tg_if2} | ${dut1_if2_mac} | ${tg_if2_mac}
*** Test Cases ***
-| tc01-78B-ethicmpv6-ip6base-dev
+| tc01-78B-ethipv6-ip6base-dev
| | [Tags] | 78B
| | frame_size=${78} | phy_cores=${0}
*** Keywords ***
| Local template
| | [Documentation]
-| | ... | [Ver] Make TG send ICMPv4 Echo Reqs in both directions between two\
-| | ... | of its interfaces to be switched by DUT to and from docker; verify\
-| | ... | all packets are received.
+| | ... | [Ver] Make TG send IPv4 packet in one direction between two\
+| | ... | of its interfaces to be switched by DUT to and from docker.\
+| | ... | Make TG verify IPv4 packet is correct.
| | ...
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
*** Keywords ***
| Local Template
| | [Documentation]
-| | ... | [Ver] Make TG send ICMPv4 Echo Reqs in both directions between two\
+| | ... | [Ver] Make TG send IPv4 packets in both directions between two\
| | ... | of its interfaces to be switched by DUT to and from docker; verify\
| | ... | all packets are received.
| | ...
| | And Initialize layer interface
| | And Initialize layer dot1q
| | And Initialize L2 bridge domain
-| | Then Send ICMPv4 bidirectionally and verify received packets
+| | Then Send IPv4 bidirectionally and verify received packets
| | ... | ${tg} | ${tg_if1} | ${tg_if2}
*** Test Cases ***
| Resource | resources/libraries/robot/shared/default.robot
| ...
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
-| ... | NIC_Virtual | ETH | L2BDMACLRN | BASE | ICMP | DRV_VFIO_PCI
+| ... | NIC_Virtual | ETH | L2BDMACLRN | BASE | DRV_VFIO_PCI
| ...
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| ...
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology \
| ... | with single links between nodes.
-| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-ICMPv4 for L2 switching of \
-| ... | IPv4. Both apply to all links.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.\
+| ... | Both apply to all links.
| ... | *[Cfg] DUT configuration:* DUT1 is configured with L2 bridge-domain \
| ... | switching.
-| ... | *[Ver] TG verification:* Test ICMPv4 Echo Request packets \
+| ... | *[Ver] TG verification:* Test IPv4 packets with IP protocol=61 \
| ... | are sent in both directions by TG on links to DUT1; on receive TG \
| ... | verifies packets for correctness and their IPv4 src-addr, \
| ... | dst-addr and MAC addresses.
*** Keywords ***
| Local Template
| | [Documentation]
-| | ... | [Ver] Make TG send ICMPv4 Echo Reqs in both directions between two\
+| | ... | [Ver] Make TG send IPv4 packets in both directions between two\
| | ... | of its interfaces to be switched by DUT to and from docker; verify\
| | ... | all packets are received.
| | ...
| | When Initialize layer driver | ${nic_driver}
| | And Initialize layer interface
| | And Initialize L2 bridge domain
-| | Then Send ICMPv4 bidirectionally and verify received packets
+| | Then Send IPv4 bidirectionally and verify received packets
| | ... | ${tg} | ${tg_if1} | ${tg_if2}
*** Test Cases ***
-| tc01-64B-ethicmpv4-l2bdbasemaclrn-dev
+| tc01-64B-ethipv4-l2bdbasemaclrn-dev
| | [Tags] | 64B
| | frame_size=${64} | phy_cores=${0}
| Resource | resources/libraries/robot/shared/default.robot
| ...
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
-| ... | NIC_Virtual | ETH | L2XCFWD | BASE | ICMP | DRV_VFIO_PCI
+| ... | NIC_Virtual | ETH | L2XCFWD | BASE | DRV_VFIO_PCI
| ...
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| ...
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology \
| ... | with single links between nodes.
-| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-ICMPv4 for L2 switching of \
-| ... | IPv4. Both apply to all links.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.\
+| ... | Both apply to all links.
| ... | *[Cfg] DUT configuration:* DUT1 is configured with L2 cross-connect \
| ... | switching.
-| ... | *[Ver] TG verification:* Test ICMPv4 Echo Request packets \
+| ... | *[Ver] TG verification:* Test IPv4 packets with IP protocol=61 \
| ... | are sent in both directions by TG on links to DUT1; on receive TG \
| ... | verifies packets for correctness and their IPv4 src-addr, \
| ... | dst-addr and MAC addresses.
*** Keywords ***
| Local Template
| | [Documentation]
-| | ... | [Ver] Make TG send ICMPv4 Echo Reqs in both directions between two\
+| | ... | [Ver] Make TG send IPv4 packets in both directions between two\
| | ... | of its interfaces to be switched by DUT to and from docker; verify\
| | ... | all packets are received.
| | ...
| | When Initialize layer driver | ${nic_driver}
| | And Initialize layer interface
| | And Initialize L2 xconnect in 2-node circular topology
-| | Then Send ICMPv4 bidirectionally and verify received packets
+| | Then Send IPv4 bidirectionally and verify received packets
| | ... | ${tg} | ${tg_if1} | ${tg_if2}
*** Test Cases ***
-| tc01-64B-ethicmpv4-l2xcbase-dev
+| tc01-64B-ethipv4-l2xcbase-dev
| | [Tags] | 64B
| | frame_size=${64} | phy_cores=${0}
| ...
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with \
| ... | VM and single links between nodes.
-| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-ICMPv4 for IPv4 routing on \
-| ... | both links.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing on both links.
| ... | *[Cfg] DUT configuration:* DUT1 is configured with IPv4 routing and \
| ... | two static IPv4 /24 route entries. Qemu Guest is connected to VPP via \
| ... | vhost-user interfaces. Guest is running VPP ip4 interconnecting \
| ... | vhost-user interfaces.
-| ... | *[Ver] TG verification:* Test ICMPv4 Echo Request packets are sent in \
-| ... | one direction by TG on links to DUT1; on receive TG verifies packets \
+| ... | *[Ver] TG verification:* Test IPv4 packet with IP protocol=61 is sent \
+| ... | in one direction by TG on links to DUT1; on receive TG verifies packet \
| ... | for correctness and their IPv4 src-addr, dst-addr and MAC addresses.
| ... | *[Ref] Applicable standard specifications:* RFC791, RFC826, RFC792
| | ... | ${tg_if2} | ${dut1_if2_mac} | ${tg_if2_mac}
*** Test Cases ***
-| tc01-64B-ethicmp4-ip4base-eth-2vhost-1vm-dev
+| tc01-64B-ethip4-ip4base-eth-2vhost-1vm-dev
| | [Tags] | 64B
| | frame_size=${64} | phy_cores=${0}
| ...
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with \
| ... | VM and single links between nodes.
-| ... | *[Enc] Packet Encapsulations:* Eth-IPv6-ICMPv6 for IPv6 routing on \
-| ... | both links.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing on both links.
| ... | *[Cfg] DUT configuration:* DUT1 is configured with IPv6 routing and \
| ... | two static IPv6 /64 route entries. Qemu Guest is connected to VPP via \
| ... | vhost-user interfaces. Guest is running VPP ip6 interconnecting \
| ... | vhost-user interfaces.
-| ... | *[Ver] TG verification:* Test ICMPv6 Echo Request packets are sent in \
-| ... | one direction by TG on links to DUT1; on receive TG verifies packets \
-| ... | for correctness and their IPv6 src-addr, dst-addr and MAC addresses.
+| ... | *[Ver] TG verification:* Test IPv6 packets are sent in one direction \
+| ... | by TG on links to DUT1; on receive TG verifies packets for correctness \
+| ... | and their IPv6 src-addr, dst-addr and MAC addresses.
| ... | *[Ref] Applicable standard specifications:* RFC2460, RFC4443, RFC4861
*** Variables ***
*** Test Cases ***
-| tc01-64B-ethicmpv6-ip6base-eth-2vhost-1vm-dev
+| tc01-64B-ethipv6-ip6base-eth-2vhost-1vm-dev
| | [Tags] | 64B
| | frame_size=${64} | phy_cores=${0}
| Resource | resources/libraries/robot/shared/default.robot
| ...
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
-| ... | NIC_Virtual | ETH | L2BDMACLRN | BASE | ICMP | VHOST | 1VM
+| ... | NIC_Virtual | ETH | L2BDMACLRN | BASE | VHOST | 1VM
| ... | DRV_VFIO_PCI
| ...
| Suite Setup | Setup suite single link | scapy
| ...
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with \
| ... | VM and single links between nodes.
-| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-ICMPv4 for L2 switching of \
-| ... | IPv4.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
| ... | *[Cfg] DUT configuration:* DUT1 is configured with two L2 \
| ... | bridge-domains (L2BD) switching combined with MAC learning enabled. \
| ... | Qemu Guest is connected to VPP via vhost-user interfaces. Guest is \
| ... | configured with VPP l2 cross-connect interconnecting vhost-user \
| ... | interfaces.
-| ... | *[Ver] TG verification:* Test ICMPv4 Echo Request packets are sent in \
-| ... | both directions by TG on links to DUT1 via VM; on receive TG verifies \
-| ... | packets for correctness and their IPv4 src-addr, dst-addr and MAC \
-| ... | addresses.
+| ... | *[Ver] TG verification:* Test IPv4 packets with IP protocol=61 are \
+| ... | sent in both directions by TG on links to DUT1 via VM; on receive TG \
+| ... | verifies packets for correctness and their IPv4 src-addr, dst-addr \
+| ... | and MAC addresses.
| ... | *[Ref] Applicable standard specifications:* RFC792
*** Variables ***
*** Keywords ***
| Local Template
| | [Documentation]
-| | ... | [Top] TG=DUT=VM. [Enc] Eth-IPv4-ICMPv4. [Cfg] On DUT1 configure \
+| | ... | [Top] TG=DUT=VM. [Enc] Eth-IPv4. [Cfg] On DUT1 configure \
| | ... | two L2BDs with MAC learning, each with vhost-user i/f to local \
| | ... | VM and i/f to TG; configure VPP in VM to loop pkts back betwen its \
-| | ... | two virtio i/fs. [Ver] Make TG verify ICMPv4 Echo Req pkts are \
-| | ... | switched thru DUT1 and VM in both directions and are correct on \
-| | ... | receive. [Ref]
+| | ... | two virtio i/fs. [Ver] Make TG verify IPv4 packets are switched \
+| | ... | thru DUT1 and VM in both directions and are correct on receive.
| | ...
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | And Configure chains of NFs connected via vhost-user
| | ... | nf_chains=${nf_chains} | nf_nodes=${nf_nodes} | vnf=vpp_chain_l2xc
| | ... | pinning=${False}
-| | Then Send ICMPv4 bidirectionally and verify received packets | ${tg}
+| | Then Send IPv4 bidirectionally and verify received packets | ${tg}
| | ... | ${tg_if1} | ${tg_if2}
*** Test Cases ***
-| tc01-64B-ethicmpv4-l2bdbasemaclrn-eth-2vhost-1vm-dev
+| tc01-64B-ethipv4-l2bdbasemaclrn-eth-2vhost-1vm-dev
| | [Tags] | 64B
| | frame_size=${64} | phy_cores=${0}
| Resource | resources/libraries/robot/shared/default.robot
| ...
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
-| ... | NIC_Virtual | ETH | L2XCFWD | BASE | ICMP | VHOST | 1VM | DRV_VFIO_PCI
+| ... | NIC_Virtual | ETH | L2XCFWD | BASE | VHOST | 1VM | DRV_VFIO_PCI
| ...
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| ...
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with \
| ... | VM and single links between nodes.
-| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-ICMPv4 for L2 switching of \
-| ... | IPv4.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
| ... | *[Cfg] DUT configuration:* DUT1 is configured with L2 cross-connect \
| ... | (L2XC) switching. Qemu Guest is connected to VPP via vhost-user \
| ... | interfaces. Guest is configured with VPP l2 cross-connect \
| ... | interconnecting vhost-user interfaces.
-| ... | *[Ver] TG verification:* Test ICMPv4 Echo Request packets are sent in \
-| ... | both directions by TG on links to DUT1 via VM; on receive TG verifies \
-| ... | packets for correctness and their IPv4 src-addr, dst-addr and MAC \
-| ... | addresses.
+| ... | *[Ver] TG verification:* Test IPv4 packets with IP protocol=61 are \
+| ... | sent in both directions by TG on links to DUT1 via VM; on receive TG \
+| ... | verifies packets for correctness and their IPv4 src-addr, dst-addr \
+| ... | and MAC addresses.
| ... | *[Ref] Applicable standard specifications:* RFC792
*** Variables ***
*** Keywords ***
| Local Template
| | [Documentation]
-| | ... | [Top] TG=DUT=VM. [Enc] Eth-IPv4-ICMPv4. [Cfg] On DUT configure \
+| | ... | [Top] TG=DUT=VM. [Enc] Eth-IPv4. [Cfg] On DUT configure \
| | ... | two L2 cross-connects (L2XC), each with one untagged interface \
| | ... | to TG and untagged i/f to local VM over vhost-user. [Ver] Make \
-| | ... | TG send ICMPv4 Echo Reqs in both directions between two of its \
+| | ... | TG send IPv4 packets in both directions between two of its \
| | ... | i/fs to be switched by DUT to and from VM; verify all packets \
| | ... | are received. [Ref]
| | ...
| | And Configure chains of NFs connected via vhost-user
| | ... | nf_chains=${nf_chains} | nf_nodes=${nf_nodes} | vnf=vpp_chain_l2xc
| | ... | pinning=${False}
-| | Then Send ICMPv4 bidirectionally and verify received packets | ${tg}
+| | Then Send IPv4 bidirectionally and verify received packets | ${tg}
| | ... | ${tg_if1} | ${tg_if2}
*** Test Cases ***
-| tc01-64B-ethicmpv4-l2xcbase-eth-2vhost-1vm-dev
+| tc01-64B-ethipv4-l2xcbase-eth-2vhost-1vm-dev
| | [Tags] | 64B
| | frame_size=${64} | phy_cores=${0}