3.6. ip

3.6.1. ip4 suite

3.6.1.1. Show IP FIB On All DUTs

Show IP FIB on all DUTs.


${duts}=  Get Matches  ${nodes}  DUT*
: FOR  ${dut}  IN  @{duts}
\    VPP Show IP Table  ${nodes['${dut}']}

3.6.1.2. Configure IPv4 addresses on all DUTs

Setup IPv4 address on all DUTs in topology


${interfaces}=  VPP nodes set ipv4 addresses  ${nodes}  ${nodes_addr}
: FOR  ${interface}  IN  @{interfaces}
\    Set Interface State  @{interface}  up  if_type=name

3.6.1.3. Configure routes for IPv4 test

Setup routing on all VPP nodes required for IPv4 tests


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}

3.6.1.4. 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}

3.6.1.5. Route traffic from interface ‘${from_port}’ on node ‘${from_node}’ to interface ‘${to_port}’ on node ‘${to_node}’ ‘${hops}’ hops away using IPv4

${from_port}${from_node}${to_port}${to_node}${hops}
${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}

3.6.1.6. Execute IPv4 ICMP echo sweep

Type of the src_node must be TG and dst_node must be DUT


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}

3.6.1.7. Send ARP request and verify response


${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}

3.6.1.8. Configure IP addresses on interfaces

Iterates through @{args} list and Set Interface Address for every (${dut_node}, ${interface}, ${address}, ${prefix}) tuple.

Arguments: - dut_node - Node where IP address should be set to. Type: dictionary - interface - Interface name. Type: string - address - IP address. Type: string - prefix - Prefix length. Type: integer

Example:

| Configure IP addresses on interfaces | ${dut1_node} | ${dut1_to_dut2} | 192.168.1.1 | 24 | | ... | ${dut1_node} | ${dut1_to_tg} | 192.168.2.1 | 24 |


: FOR  ${dut_node}  ${interface}  ${address}  ${prefix}  IN  @{args}
\    Set Interface Address  ${dut_node}  ${interface}  ${address}  ${prefix}

3.6.1.9. Send ICMP echo request and verify answer

Run traffic script that waits for ICMP reply and ignores all other packets.

Arguments: - tg_node - TG node where run traffic script. Type: dictionary - tg_interface - TG interface where send ICMP echo request. Type: string - dst_mac - Destination MAC address. Type: string - src_mac - Source MAC address. Type: string - dst_ip - Destination IP address. Type: string - src_ip - Source IP address. Type: string - timeout - Wait timeout in seconds (Default: 10). Type: integer

Example:

| Send ICMP echo request and verify answer | ${nodes[‘TG’]} | eth2 | 08:00:27:46:2b:4c | 08:00:27:66:b8:57 | 192.168.23.10 | 192.168.23.1 | 10 |


${tg_interface_name}=  Get interface name  ${tg_node}  ${tg_interface}
${args}=  Catenate  --rx_if ${tg_interface_name}  --tx_if ${tg_interface_name}  --dst_mac ${dst_mac}  --src_mac ${src_mac}  --dst_ip ${dst_ip}  --src_ip ${src_ip}  --timeout ${timeout}
Run Traffic Script On Node  send_icmp_wait_for_reply.py  ${tg_node}  ${args}

3.6.1.10. Configure IPv4 forwarding in circular topology

Set UP state on VPP interfaces in path on nodes in 2-node / 3-node circular topology. Get the interface MAC addresses and setup ARP on all VPP interfaces. Setup IPv4 addresses with /24 prefix on DUT-TG links. In case of 3-node topology setup IPv4 adresses with /30 prefix on DUT1-DUT2 link and set routing on both DUT nodes with prefix /24 and next hop of neighbour DUT interface IPv4 address. Configure route entries for remote hosts IPv4 addresses if required.

Arguments: - tg_if1_ip4 - IP address of TG interface1. Type: string - tg_if2_ip4 - IP address of TG interface2. Type: string - dut1_if1_ip4 - IP address of DUT1 interface1. Type: string - dut1_if2_ip4 - IP address of DUT1 interface1. Type: string - dut2_if1_ip4 - IP address of DUT2 interface1 (Optional). Type: string - dut2_if2_ip4 - IP address of DUT2 interface2 (Optional). Type: string - remote_host1_ip4 - IP address of remote host1 (Optional). Type: string - remote_host2_ip4 - IP address of remote host2 (Optional). Type: string - remote_host_ip4_prefix - IP address prefix for host IP addresses (Optional). Type: string or integer

Example:

| Configure IPv4 forwarding in circular topology | 10.10.10.2 | 20.20.20.2 | 10.10.10.1 | 20.20.20.1 | | Configure IPv4 forwarding in circular topology | 10.10.10.2 | 20.20.20.2 | 10.10.10.1 | 20.20.20.1 | remote_host1_ip4=192.168.0.1 | remote_host2_ip4=192.168.0.2 | remote_host_ip4_prefix=32 | | Configure IPv4 forwarding in circular topology | 10.10.10.2 | 20.20.20.2 | 10.10.10.1 | 1.1.1.1 | 1.1.1.2 | 20.20.20.1 | | Configure IPv4 forwarding in circular topology | 10.10.10.2 | 20.20.20.2 | 10.10.10.1 | 1.1.1.1 | 1.1.1.2 | 20.20.20.1 | remote_host1_ip4=192.168.0.1 | remote_host2_ip4=192.168.0.2 | remote_host_ip4_prefix=32 |


Configure interfaces in path up
${dut2_status}  ${value}=  Run Keyword And Ignore Error  Variable Should Exist  ${dut2_node}
Run Keyword If  '${dut2_status}' == 'PASS'  Configure IPv4 forwarding in 3-node circular topology  ${tg_if1_ip4}  ${tg_if2_ip4}  ${dut1_if1_ip4}  ${dut1_if2_ip4}  ${dut2_if1_ip4}  ${dut2_if2_ip4}  ${remote_host1_ip4}  ${remote_host2_ip4}  ${remote_host_ip4_prefix}  ELSE  Configure IPv4 forwarding in 2-node circular topology  ${tg_if1_ip4}  ${tg_if2_ip4}  ${dut1_if1_ip4}  ${dut1_if2_ip4}  remote_host1_ip4=${remote_host1_ip4}  remote_host2_ip4=${remote_host2_ip4}  remote_host_ip4_prefix=${remote_host_ip4_prefix}

3.6.1.11. Configure IPv4 forwarding in 2-node circular topology

Set UP state on VPP interfaces on DUT node in 2-node circular topology. Get the interface MAC addresses and setup ARP on all VPP interfaces. Setup IPv4 addresses with /24 prefix on DUT-TG links. Configure route entries for remote hosts IPv4 addresses if required.

Arguments: - tg_if1_ip4 - IP address of TG interface1. Type: string - tg_if2_ip4 - IP address of TG interface2. Type: string - dut1_if1_ip4 - IP address of DUT1 interface1. Type: string - dut1_if2_ip4 - IP address of DUT1 interface1. Type: string - remote_host1_ip4 - IP address of remote host1 (Optional). Type: string - remote_host2_ip4 - IP address of remote host2 (Optional). Type: string - remote_host_ip4_prefix - IP address prefix for host IP addresses (Optional). Type: string or integer

Example:

| Configure IPv4 forwarding in circular topology | 10.10.10.2 | 20.20.20.2 | 10.10.10.1 | 20.20.20.1 | | Configure IPv4 forwarding in circular topology | 10.10.10.2 | 20.20.20.2 | 10.10.10.1 | 20.20.20.1 | 192.168.0.1 | 192.168.0.2 | 32 |


${dut_tg_ip4_prefix}=  Set Variable  24
Add arp on dut  ${dut_node}  ${dut_to_tg_if1}  ${tg_if1_ip4}  ${tg_to_dut_if1_mac}
Add arp on dut  ${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}  ${dut1_if1_ip4}  ${dut_tg_ip4_prefix}
Configure IP addresses on interfaces  ${dut_node}  ${dut_to_tg_if2}  ${dut1_if2_ip4}  ${dut_tg_ip4_prefix}
Run Keyword Unless  '${remote_host1_ip4}' == '${NONE}'  Vpp Route Add  ${dut_node}  ${remote_host1_ip4}  ${remote_host_ip4_prefix}  gateway=${tg_if1_ip4}  interface=${dut_to_tg_if1}
Run Keyword Unless  '${remote_host2_ip4}' == '${NONE}'  Vpp Route Add  ${dut_node}  ${remote_host2_ip4}  ${remote_host_ip4_prefix}  gateway=${tg_if2_ip4}  interface=${dut_to_tg_if2}

3.6.1.12. Configure IPv4 forwarding in 3-node circular topology

Set UP state on VPP interfaces in path on nodes in 3-node circular topology. Get the interface MAC addresses and setup ARP on all VPP interfaces. Setup IPv4 addresses with /24 prefix on DUT-TG links. Configure IPv4 adresses with /30 prefix on DUT1-DUT2 link and set routing on both DUT nodes with prefix /24 and next hop of neighbour DUT interface IPv4 address. Configure route entries for remote hosts IPv4 addresses if required.

Arguments: - tg_if1_ip4 - IP address of TG interface1. Type: string - tg_if2_ip4 - IP address of TG interface2. Type: string - dut1_if1_ip4 - IP address of DUT1 interface1. Type: string - dut1_if2_ip4 - IP address of DUT1 interface1. Type: string - dut2_if1_ip4 - IP address of DUT2 interface1. Type: string - dut2_if2_ip4 - IP address of DUT2 interface2. Type: string - remote_host1_ip4 - IP address of remote host1 (Optional). Type: string - remote_host2_ip4 - IP address of remote host2 (Optional). Type: string - remote_host_ip4_prefix - IP address prefix for host IP addresses (Optional). Type: string or integer

Example:

| Configure IPv4 forwarding in circular topology | 10.10.10.2 | 20.20.20.2 | 10.10.10.1 | 1.1.1.1 | 1.1.1.2 | 20.20.20.1 | | Configure IPv4 forwarding in circular topology | 10.10.10.2 | 20.20.20.2 | 10.10.10.1 | 1.1.1.1 | 1.1.1.2 | 20.20.20.1 | 192.168.0.1 | 192.168.0.2 | 32 |


${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}  ${tg_to_dut1_mac}
Add arp on dut  ${dut1_node}  ${dut1_to_dut2}  ${dut2_if1_ip4}  ${dut2_to_dut1_mac}
Add arp on dut  ${dut2_node}  ${dut2_to_dut1}  ${dut1_if2_ip4}  ${dut1_to_dut2_mac}
Add arp on dut  ${dut2_node}  ${dut2_to_tg}  ${tg_if2_ip4}  ${tg_to_dut2_mac}
Configure IP addresses on interfaces  ${dut1_node}  ${dut1_to_tg}  ${dut1_if1_ip4}  ${dut_tg_ip4_prefix}
Configure IP addresses on interfaces  ${dut1_node}  ${dut1_to_dut2}  ${dut1_if2_ip4}  ${dut_link_ip4_prefix}
Configure IP addresses on interfaces  ${dut2_node}  ${dut2_to_dut1}  ${dut2_if1_ip4}  ${dut_link_ip4_prefix}
Configure IP addresses on interfaces  ${dut2_node}  ${dut2_to_tg}  ${dut2_if2_ip4}  ${dut_tg_ip4_prefix}
Vpp Route Add  ${dut1_node}  ${tg_if2_ip4}  ${dut_tg_ip4_prefix}  gateway=${dut2_if1_ip4}  interface=${dut1_to_dut2}
Vpp Route Add  ${dut2_node}  ${tg_if1_ip4}  ${dut_tg_ip4_prefix}  gateway=${dut1_if2_ip4}  interface=${dut2_to_dut1}
Run Keyword Unless  '${remote_host1_ip4}' == '${NONE}'  Vpp Route Add  ${dut1_node}  ${remote_host1_ip4}  ${remote_host_ip4_prefix}  gateway=${tg_if1_ip4}  interface=${dut1_to_tg}
Run Keyword Unless  '${remote_host2_ip4}' == '${NONE}'  Vpp Route Add  ${dut1_node}  ${remote_host2_ip4}  ${remote_host_ip4_prefix}  gateway=${dut2_if1_ip4}  interface=${dut1_to_dut2}
Run Keyword Unless  '${remote_host1_ip4}' == '${NONE}'  Vpp Route Add  ${dut2_node}  ${remote_host1_ip4}  ${remote_host_ip4_prefix}  gateway=${dut1_if2_ip4}  interface=${dut2_to_dut1}
Run Keyword Unless  '${remote_host2_ip4}' == '${NONE}'  Vpp Route Add  ${dut2_node}  ${remote_host2_ip4}  ${remote_host_ip4_prefix}  gateway=${tg_if2_ip4}  interface=${dut2_to_tg}

3.6.2. ip6 suite

3.6.2.1. Send IPv6 icmp echo request to DUT1 ingress inteface and verify answer

Type of the src_node must be TG and dst_node must be DUT


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}

3.6.2.2. Execute IPv6 ICMP echo sweep

Type of the src_node must be TG and dst_node must be DUT


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}

3.6.2.3. Send IPv6 ICMP echo request to DUT1 egress interface and verify answer

Send traffic from TG to first DUT egress interface


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}

3.6.2.4. Send IPv6 ICMP echo request to DUT2 via DUT1 and verify answer

Send traffic from TG to second DUT through first DUT


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}

3.6.2.5. Send IPv6 ICMP echo request to DUT2 egress interface via DUT1 and verify answer

Send traffic from TG to second DUT egress interface through first DUT


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}

3.6.2.6. Ipv6 tg to tg routed

Send traffic from one TG port to another through DUT nodes and send reply back, also verify hop limit processing


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}

3.6.2.7. Send IPv6 neighbor solicitation and verify answer

Send IPv6 neighbor solicitation from TG to DUT


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}

3.6.2.8. Configure IPv6 on all DUTs in topology

Setup IPv6 address on all DUTs


Configure all DUTs before test
${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}

3.6.2.9. Suppress ICMPv6 router advertisement message

Suppress ICMPv6 router advertisement message for link scope address


Vpp All Ra Suppress Link Layer  ${nodes}

3.6.2.10. Configure IPv6 routing on all DUTs

Setup routing on all VPP nodes required for IPv6 tests


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}

3.6.2.11. Configure IPv6 forwarding in circular topology

Set UP state on VPP interfaces in path on nodes in 2-node / 3-node circular topology. Get the interface MAC addresses and setup ARP on all VPP interfaces. Setup IPv6 addresses with /64 prefix on DUT-TG links. In case of 3-node topology setup IPv6 adresses with /96 prefix on DUT1-DUT2 link and set routing on both DUT nodes with prefix /64 and next hop of neighbour DUT interface IPv6 address. Configure route entries for remote hosts IPv6 addresses if required.

Arguments: - tg_if1_ip6 - IPv6 address of TG interface1. Type: string - tg_if2_ip6 - IPv6 address of TG interface2. Type: string - dut1_if1_ip6 - IPv6 address of DUT1 interface1. Type: string - dut1_if2_ip6 - IPv6 address of DUT1 interface1. Type: string - dut2_if1_ip6 - IPv6 address of DUT2 interface1 (Optional). Type: string - dut2_if2_ip6 - IPv6 address of DUT2 interface2 (Optional). Type: string - remote_host1_ip6 - IPv6 address of remote host1 (Optional). Type: string - remote_host2_ip6 - IPv6 address of remote host2 (Optional). Type: string - remote_host_ip6_prefix - IPv6 address prefix for host IPv6 addresses (Optional). Type: string or integer

Example:

| Configure IPv6 forwarding in circular topology | 2001:1::2 | 2001:2::2 | 2001:1::1 | 2001:2::1 | | Configure IPv6 forwarding in circular topology | 2001:1::2 | 2001:2::2 | 2001:1::1 | 2001:2::1 | remote_host1_ip6=3ffe:5f::1 | remote_host2_ip6=3ffe:5f::2 | remote_host_ip6_prefix=128 | | Configure IPv6 forwarding in circular topology | 2001:1::2 | 2001:2::2 | 2001:1::1 | 2003:3::1 | 2003:3::2 | 2001:2::1 | | Configure IPv6 forwarding in circular topology | 2001:1::2 | 2001:2::2 | 2001:1::1 | 2003:3::1 | 2003:3::2 | 2001:2::1 | remote_host1_ip4=3ffe:5f::1 | remote_host2_ip4=3ffe:5f::2 | remote_host_ip4_prefix=128 |


Configure interfaces in path up
${dut2_status}  ${value}=  Run Keyword And Ignore Error  Variable Should Exist  ${dut2_node}
Run Keyword If  '${dut2_status}' == 'PASS'  Configure IPv6 forwarding in 3-node circular topology  ${tg_if1_ip6}  ${tg_if2_ip6}  ${dut1_if1_ip6}  ${dut1_if2_ip6}  ${dut2_if1_ip6}  ${dut2_if2_ip6}  ${remote_host1_ip6}  ${remote_host2_ip6}  ${remote_host_ip6_prefix}  ELSE  Configure IPv6 forwarding in 2-node circular topology  ${tg_if1_ip6}  ${tg_if2_ip6}  ${dut1_if1_ip6}  ${dut1_if2_ip6}  remote_host1_ip6=${remote_host1_ip6}  remote_host2_ip6=${remote_host2_ip6}  remote_host_ip6_prefix=${remote_host_ip6_prefix}

3.6.2.12. Configure IPv6 forwarding in 2-node circular topology

Set UP state on VPP interfaces on DUT node in 2-node circular topology. Get the interface MAC addresses and setup ARP on all VPP interfaces. Setup IPv6 addresses with /64 prefix on DUT-TG links. Configure route entries for remote hosts IPv6 addresses if required.

Arguments: - tg_if1_ip6 - IPv6 address of TG interface1. Type: string - tg_if2_ip6 - IPv6 address of TG interface2. Type: string - dut1_if1_ip6 - IPv6 address of DUT1 interface1. Type: string - dut1_if2_ip6 - IPv6 address of DUT1 interface1. Type: string - remote_host1_ip6 - IPv6 address of remote host1 (Optional). Type: string - remote_host2_ip6 - IPv6 address of remote host2 (Optional). Type: string - remote_host_ip6_prefix - IPv6 address prefix for host IPv6 addresses (Optional). Type: string or integer

Example:

| Configure IPv6 forwarding in circular topology | 2001:1::2 | 2001:2::2 | 2001:1::1 | 2001:2::1 | | Configure IPv6 forwarding in circular topology | 2001:1::2 | 2001:2::2 | 2001:1::1 | 2001:2::1 | remote_host1_ip6=3ffe:5f::1 | remote_host2_ip6=3ffe:5f::2 | remote_host_ip6_prefix=128 |


${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 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}
Run Keyword Unless  '${remote_host1_ip6}' == '${NONE}'  Vpp Route Add  ${dut_node}  ${remote_host1_ip6}  ${remote_host_ip6_prefix}  gateway=${tg_if1_ip6}  interface=${dut_to_tg_if1}
Run Keyword Unless  '${remote_host2_ip6}' == '${NONE}'  Vpp Route Add  ${dut_node}  ${remote_host2_ip6}  ${remote_host_ip6_prefix}  gateway=${tg_if2_ip6}  interface=${dut_to_tg_if2}

3.6.2.13. Configure IPv6 forwarding in 3-node circular topology

Set UP state on VPP interfaces in path on nodes in 3-node circular topology. Get the interface MAC addresses and setup ARP on all VPP interfaces. Setup IPv6 addresses with /64 prefix on DUT-TG links. Configure IPv6 adresses with /96 prefix on DUT1-DUT2 link and set routing on both DUT nodes with prefix /64 and next hop of neighbour DUT interface IPv6 address. Configure route entries for remote hosts IPv6 addresses if required.

Arguments: - tg_if1_ip6 - IPv6 address of TG interface1. Type: string - tg_if2_ip6 - IPv6 address of TG interface2. Type: string - dut1_if1_ip6 - IPv6 address of DUT1 interface1. Type: string - dut1_if2_ip6 - IPv6 address of DUT1 interface1. Type: string - dut2_if1_ip6 - IPv6 address of DUT2 interface1 Type: string - dut2_if2_ip6 - IPv6 address of DUT2 interface2 Type: string - remote_host1_ip6 - IPv6 address of remote host1 (Optional). Type: string - remote_host2_ip6 - IPv6 address of remote host2 (Optional). Type: string - remote_host_ip6_prefix - IPv6 address prefix for host IPv6 addresses (Optional). Type: string or integer

Example:

| Configure IPv6 forwarding in circular topology | 2001:1::2 | 2001:2::2 | 2001:1::1 | 2003:3::1 | 2003:3::2 | 2001:2::1 | | Configure IPv6 forwarding in circular topology | 2001:1::2 | 2001:2::2 | 2001:1::1 | 2003:3::1 | 2003:3::2 | 2001:2::1 | remote_host1_ip4=3ffe:5f::1 | remote_host2_ip4=3ffe:5f::2 | remote_host_ip4_prefix=128 |


${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 Route Add  ${dut1_node}  ${tg_if2_ip6}  ${dut_tg_ip6_prefix}  gateway=${dut2_if1_ip6}  interface=${dut1_to_dut2}
Vpp Route Add  ${dut2_node}  ${tg_if1_ip6}  ${dut_tg_ip6_prefix}  gateway=${dut1_if2_ip6}  interface=${dut2_to_dut1}
Run Keyword Unless  '${remote_host1_ip6}' == '${NONE}'  Vpp Route Add  ${dut1_node}  ${remote_host1_ip6}  ${remote_host_ip6_prefix}  gateway=${tg_if1_ip6}  interface=${dut1_to_tg}
Run Keyword Unless  '${remote_host2_ip6}' == '${NONE}'  Vpp Route Add  ${dut1_node}  ${remote_host2_ip6}  ${remote_host_ip6_prefix}  gateway=${dut2_if1_ip6}  interface=${dut1_to_dut2}
Run Keyword Unless  '${remote_host1_ip6}' == '${NONE}'  Vpp Route Add  ${dut2_node}  ${remote_host1_ip6}  ${remote_host_ip6_prefix}  gateway=${dut1_if2_ip6}  interface=${dut2_to_dut1}
Run Keyword Unless  '${remote_host2_ip6}' == '${NONE}'  Vpp Route Add  ${dut2_node}  ${remote_host2_ip6}  ${remote_host_ip6_prefix}  gateway=${tg_if2_ip6}  interface=${dut2_to_tg}

3.6.3. map suite

3.6.3.1. Send IPv4 UDP and check headers for lightweight 4over6

Send empty UDP to given IPv4 dst and UDP port and check received packets headers (Ethernet, IPv6, IPv4, UDP).

Arguments: - tg_node - Node where to run traffic script. Type: string - tx_if - Interface from where to send ICPMv4 packet. Type: string - rx_if - Interface where to receive IPinIP packet. Type: string - tx_dst_mac - Destination MAC address of IPv4 packet. Type: string - tx_dst_ipv4 - Destination IPv4 address. Type: string - tx_src_ipv4 - Source IPv4 address. Type: string - tx_dst_udp_port - Destination UDP port. Type: integer - rx_dst_mac - Expected destination MAC address. Type: string - rx_src_mac - Expected source MAC address. Type: string - dst_ipv6 - Expected destination IPv6 address. Type: string - src_ipv6 - Expected source IPv6 address. Type: string

Return: - No value returned

Example:

| Send IPv4 UDP and check headers for lightweight 4over6 | ${tg_node} | eth3 | eth2 | 08:00:27:66:b8:57 | 20.0.0.1 | 20.0.0.2 | 1232 | 08:00:27:46:2b:4c | 08:00:27:f3:be:f0 | 2001:1::2 | 2001:1::1 |


${tx_name}=  Get interface name  ${tg_node}  ${tx_if}
${rx_name}=  Get interface name  ${tg_node}  ${rx_if}
${args}=  Catenate  --tx_if  ${tx_name}  --rx_if  ${rx_name}  --tx_dst_mac  ${tx_dst_mac}  --tx_src_ipv4  ${tx_src_ipv4}  --tx_dst_ipv4  ${tx_dst_ipv4}  --tx_dst_udp_port  ${tx_dst_udp_port}  --rx_dst_mac  ${rx_dst_mac}  --rx_src_mac  ${rx_src_mac}  --src_ipv6  ${src_ipv6}  --dst_ipv6  ${dst_ipv6}
Run Traffic Script On Node  send_ipv4_udp_check_lw_4o6.py  ${tg_node}  ${args}

3.6.3.2. Send IPv4 ICMP and check headers for lightweight 4over6

Send ICMP request with ID to given IPv4 destination and check received packets headers (Ethernet, IPv6, IPv4, ICMP).

Arguments: - tg_node - Node where to run traffic script. Type: string - tx_if - Interface from where to send ICPMv4 packet. Type: string - rx_if - Interface where to receive IPinIP packet. Type: string - tx_dst_mac - Destination MAC address of IPv4 packet. Type: string - tx_dst_ipv4 - Destination IPv4 address. Type: string - tx_src_ipv4 - Source IPv4 address. Type: string - tx_icmp_id - ICMP ID. Type: integer - rx_dst_mac - Expected destination MAC address. Type: string - rx_src_mac - Expected source MAC address. Type: string - dst_ipv6 - Expected destination IPv6 address. Type: string - src_ipv6 - Expected source IPv6 address. Type: string

Return: - No value returned

Example:

| Send IPv4 ICMP and check headers for lightweight 4over6 | ${tg_node} | eth3 | eth2 | 08:00:27:66:b8:57 | 20.0.0.1 | 20.0.0.2 | 1232 | 08:00:27:46:2b:4c | 08:00:27:f3:be:f0 | 2001:1::2 | 2001:1::1 |


${tx_name}=  Get interface name  ${tg_node}  ${tx_if}
${rx_name}=  Get interface name  ${tg_node}  ${rx_if}
${args}=  Catenate  --tx_if  ${tx_name}  --rx_if  ${rx_name}  --tx_dst_mac  ${tx_dst_mac}  --tx_src_ipv4  ${tx_src_ipv4}  --tx_dst_ipv4  ${tx_dst_ipv4}  --tx_icmp_id  ${tx_icmp_id}  --rx_dst_mac  ${rx_dst_mac}  --rx_src_mac  ${rx_src_mac}  --src_ipv6  ${src_ipv6}  --dst_ipv6  ${dst_ipv6}
Run Traffic Script On Node  send_ipv4_icmp_check_lw_4o6.py  ${tg_node}  ${args}

3.6.3.3. Send IPv4 UDP in IPv6 and check headers for lightweight 4over6

Send empty UDP in IPv4 in IPv6 and check if IPv4 packet is correctly decapsulated from IPv6.

Arguments: - tg_node - Node where to run traffic script. Type: string - tx_if - Interface from where to send ICPMv4 packet. Type: string - rx_if - Interface where to receive IPinIP packet. Type: string - tx_dst_mac - Destination MAC address of IPv4 packet. Type: string - tx_src_mac - Source MAC address of IPv4 packet. Type: string - tx_dst_ipv6 - Destination IPv6 address. Type: string - tx_src_ipv6 - Source IPv6 address. Type: string - tx_dst_ipv4 - Destination IPv4 address. Type: string - tx_src_ipv4 - Source IPv4 address. Type: string - tx_src_udp_port - Source UDP port. Type: integer - rx_dst_mac - Expected destination MAC address. Type: string - rx_src_mac - Expected source MAC address. Type: string

Return: - No value returned

Example:

| Send IPv4 UDP in IPv6 and check headers for lightweight 4over6 | ${tg_node} | eth3 | eth2 | 08:00:27:66:b8:57 | 08:00:27:33:54:21 | 2001:1::2 | 2001:1::1 | 20.0.0.1 | 20.0.0.2 | 1232 | 08:00:27:46:2b:4c | 08:00:27:f3:be:f0 |


${tx_name}=  Get interface name  ${tg_node}  ${tx_if}
${rx_name}=  Get interface name  ${tg_node}  ${rx_if}
${args}=  Catenate  --tx_if  ${tx_name}  --rx_if  ${rx_name}  --tx_dst_mac  ${tx_dst_mac}  --tx_src_mac  ${tx_src_mac}  --tx_dst_ipv6  ${tx_dst_ipv6}  --tx_src_ipv6  ${tx_src_ipv6}  --tx_dst_ipv4  ${tx_dst_ipv4}  --tx_src_ipv4  ${tx_src_ipv4}  --tx_src_udp_port  ${tx_src_udp_port}  --rx_dst_mac  ${rx_dst_mac}  --rx_src_mac  ${rx_src_mac}
Run Traffic Script On Node  send_lw_4o6_check_ipv4_udp.py  ${tg_node}  ${args}

3.6.3.4. Send IPv4 UDP in IPv6 and check headers for lightweight hairpinning

Send empty UDP in IPv4 in IPv6 and check if IPv4 packet is correctly decapsulated and re-encapsulated to another lwB4.

Arguments: - tg_node - Node where to run traffic script. Type: string - tx_if - Interface from where to send ICPMv4 packet. Type: string - rx_if - Interface where to receive IPinIP packet. Type: string - tx_dst_mac - Destination MAC address of send IPv6 packet. Type: string - tx_dst_ipv6 - Destination IPv6 address (lwAFTR). Type: string - tx_src_ipv6 - Source IPv6 address (lwB4_1). Type: string - tx_dst_ipv4 - Destination IPv4 address. Type: string - tx_src_ipv4 - Source IPv4 address. Type: string - tx_dst_udp_port - Destination UDP port (PSID_2 related). Type: integer - tx_src_udp_port - Source UDP port (PSID_1 related). Type: integer - rx_dst_mac - Expected destination MAC address. Type: string - rx_src_mac - Expected source MAC address. Type: string - rx_dst_ipv6 - Expected destination IPv6 address (lwB4_2). Type: string - rx_src_ipv6 - Expected source IPv6 address (lwAFTR). Type: string

Return: - No value returned

Example:

| Send IPv4 UDP in IPv6 and check headers for lightweight hairpinning | ${tg_node} | port3 | port3 | 08:00:27:f3:be:f0 | 2001:1::1 | 2001:1::2 | 20.0.0.1 | 20.0.0.1 | ${6232} | ${1232} | 08:00:27:46:2b:4c | 08:00:27:f3:be:f0 | 2001:1::3 | 2001:1::1 |


${tx_name}=  Get interface name  ${tg_node}  ${tx_if}
${rx_name}=  Get interface name  ${tg_node}  ${rx_if}
${args}=  Catenate  --tx_if  ${tx_name}  --rx_if  ${rx_name}  --tx_dst_mac  ${tx_dst_mac}  --tx_dst_ipv6  ${tx_dst_ipv6}  --tx_src_ipv6  ${tx_src_ipv6}  --tx_dst_ipv4  ${tx_dst_ipv4}  --tx_src_ipv4  ${tx_src_ipv4}  --tx_dst_udp_port  ${tx_dst_udp_port}  --tx_src_udp_port  ${tx_src_udp_port}  --rx_dst_mac  ${rx_dst_mac}  --rx_src_mac  ${rx_src_mac}  --rx_dst_ipv6  ${rx_dst_ipv6}  --rx_src_ipv6  ${rx_src_ipv6}
Run Traffic Script On Node  send_lw_4o6_check_hairpinning_udp.py  ${tg_node}  ${args}

3.6.3.5. Send IPv4 UDP and check IPv6 headers for MAP-T

Send a UDP in IPv4 and check if IPv4 source and destination addresses are correctly translated into IPv6 addresses.

Arguments: - tg_node - Node where to run traffic script. Type: string - tx_if - Interface from where to send IPv4 UDP packet. Type: string - rx_if - Interface where to receive IPv6 UDP packet. Type: string - tx_dst_mac - Destination MAC address of IPv4 packet. Type: string - tx_dst_ipv4 - Destination IPv4 address. Type: string - tx_src_ipv4 - Source IPv4 address. Type: string - tx_dst_udp_port - Destination UDP port. Type: integer - rx_dst_mac - Expected destination MAC address. Type: string - rx_src_mac - Expected source MAC address. Type: string - dst_ipv6 - Expected destination IPv6 address. Type: string - src_ipv6 - Expected source IPv6 address. Type: string

Return: - No value returned

Example:

| Send IPv4 UDP and check IPv6 headers for MAP-T | ${tg_node} | port3 | port3 | 08:00:27:66:b8:57 | 20.169.201.219 | 100.0.0.1 | ${1232} | 08:00:27:46:2b:4c | 08:00:27:f3:be:f0 | 2001:db8::14a9:c9db:0 | 2001:db8:ffff::6400:1 |


${tx_name}=  Get interface name  ${tg_node}  ${tx_if}
${rx_name}=  Get interface name  ${tg_node}  ${rx_if}
${args}=  Catenate  --tx_if  ${tx_name}  --rx_if  ${rx_name}  --tx_dst_mac  ${tx_dst_mac}  --tx_src_ipv4  ${tx_src_ipv4}  --tx_dst_ipv4  ${tx_dst_ipv4}  --tx_dst_udp_port  ${tx_dst_udp_port}  --rx_dst_mac  ${rx_dst_mac}  --rx_src_mac  ${rx_src_mac}  --rx_src_ipv6  ${src_ipv6}  --rx_dst_ipv6  ${dst_ipv6}
Run Traffic Script On Node  send_ipv4_udp_check_map_t.py  ${tg_node}  ${args}

3.6.3.6. Send IPv6 UDP and check IPv4 headers for MAP-T

Send a UDP in IPv6 and check if IPv6 source and destination addresses are correctly translated into IPv4 addresses.

Arguments: - tg_node - Node where to run traffic script. Type: string - tx_if - Interface from where to send IPv4 UDP packet. Type: string - rx_if - Interface where to receive IPv6 UDP packet. Type: string - tx_dst_mac - Destination MAC address of IPv4 packet. Type: string - tx_src_mac - Source MAC address of IPv4 packet. Type: string - tx_dst_ipv6 - Destination IPv6 address. Type: string - tx_src_ipv6 - Source IPv6 address. Type: string - tx_src_udp_port - Source UDP port. Type: integer - rx_dst_mac - Expected destination MAC address. Type: string - rx_src_mac - Expected source MAC address. Type: string - dst_ipv4 - Expected destination IPv4 address. Type: string - src_ipv4 - Expected source IPv4 address. Type: string

Return: - No value returned

Example:

| Send IPv6 UDP and check IPv4 headers for MAP-T | port3 | port4 | 08:00:27:f3:be:f0 | 2001:db8:ffff::6400:1 | 2001:db8::14a9:c9db:0 | ${1232} | 08:00:27:58:71:eb | 08:00:27:66:b8:57 | 100.0.0.1 | 20.169.201.219 |


${tx_name}=  Get interface name  ${tg_node}  ${tx_if}
${rx_name}=  Get interface name  ${tg_node}  ${rx_if}
${args}=  Catenate  --tx_if  ${tx_name}  --rx_if  ${rx_name}  --tx_dst_mac  ${tx_dst_mac}  --tx_src_mac  ${tx_src_mac}  --tx_src_ipv6  ${tx_src_ipv6}  --tx_dst_ipv6  ${tx_dst_ipv6}  --tx_src_udp_port  ${tx_src_udp_port}  --rx_dst_mac  ${rx_dst_mac}  --rx_src_mac  ${rx_src_mac}  --rx_src_ipv4  ${src_ipv4}  --rx_dst_ipv4  ${dst_ipv4}
Run Traffic Script On Node  send_ipv6_udp_check_map_t.py  ${tg_node}  ${args}

3.6.4. nat suite

3.6.4.1. Configure inside and outside interfaces

Configure inside and outside interfaces for NAT44.

Arguments: - node - DUT node to set NAT44 interfaces on. Type: dictionary - int_in - Inside interface. Type: string - int_out - Outside interface. Type: string

Example:

| Configure inside and outside interfaces | ${nodes[‘DUT1’]} | FortyGigabitEtherneta/0/0 | FortyGigabitEtherneta/0/1 |


${int_in_name}=  Set variable  ${node['interfaces']['${int_in}']['name']}
${int_out_name}=  Set variable  ${node['interfaces']['${int_out}']['name']}
Set NAT44 Interfaces  ${node}  ${int_in_name}  ${int_out_name}

3.6.4.2. Configure deterministic mode for NAT44

Set deterministic behaviour of NAT44.

Arguments: - node - DUT node to set deterministic mode for NAT44 on. Type: dictionary - ip_in - Inside IP. Type: string - subnet_in - Inside IP subnet. Type: string - ip_out - Outside IP. Type: string - subnet_out - Outside IP subnet. Type: string

Example:

| Configure deterministic mode for NAT44 | ${nodes[‘DUT1’]} | 100.0.0.0 | 12 | 12.1.1.0 | 24 |


Set NAT44 deterministic  ${node}  ${ip_in}  ${subnet_in}  ${ip_out}  ${subnet_out}

3.6.4.3. Configure workers for NAT

Configure workers for NAT.

Arguments: - node - DUT node to set NAT workers on. Type: dictionary - lcores - list of cores, format: range e.g. 1-5 or list of ranges e.g.: 1-5,18-22. Type: string

Example:

| Configure workers for NAT | ${nodes[‘DUT1’]} | 12-23,36-47 |


Set NAT workers  ${node}  ${lcores}

3.6.4.4. Show NAT verbose

Get the NAT settings on the node.

Arguments: - node - DUT node to show NAT. Type: dictionary

Example:

| Show NAT verbose | ${nodes[‘DUT1’]} |


Show NAT  ${node}

3.6.4.5. Get NAT44 deterministic forward

Show forward IP address and port(s).

Arguments: - node - DUT node to get NAT44 deterministic forward on. Type: dictionary - ip - IP address. Type: string

Example:

| Get NAT44 deterministic forward | ${nodes[‘DUT1’]} | 10.0.0.2 |


Show NAT44 deterministic forward  ${node}  ${ip}

3.6.4.6. Get NAT44 deterministic reverse

Show reverse IP address.

Arguments: - node - DUT node to get NAT44 deterministic reverse on. Type: dictionary - ip - IP address. Type: string - port - Port. Type: string or integer

Example:

| Get NAT44 deterministic reverse | ${nodes[‘DUT1’]} | 10.0.0.2 | 1025 |


Show NAT44 deterministic reverse  ${node}  ${ip}  ${port}

3.6.4.7. Get NAT interfaces

Get list of interfaces configured with NAT from VPP node.

Arguments: - node - DUT node to get NAT interfaces on. Type: dictionary

Example:

| Get NAT interfaces | ${nodes[‘DUT1’]} |


Get NAT interfaces  ${node}

3.6.4.8. Get NAT static mappings

Get NAT static mappings from VPP node.

Arguments: - node - DUT node to get NAT static mappings on. Type: dictionary

Example:

| Get NAT static mappings | ${nodes[‘DUT1’]} |


Get NAT static mappings  ${node}