3.4. ip

3.4.1. geneve suite

3.4.1.1. Initialize GENEVE L3 mode in circular topology

Initialization of GENEVE L3 mode on DUT1.


Set interfaces in path up
VPP Interface Set IP Address  ${dut1}  ${DUT1_${int}1}[0]  ${dut1_if1_ip4}  24
VPP Add IP Neighbor  ${dut1}  ${DUT1_${int}1}[0]  ${tg_if1_ip4}  ${TG_pf1_mac}[0]
VPP Interface Set IP Address  ${dut1}  ${DUT1_${int}2}[0]  ${dut1_if2_ip4}  24
VPP Add IP Neighbor  ${dut1}  ${DUT1_${int}2}[0]  ${tg_if2_ip4}  ${TG_pf2_mac}[0]
${next_index}=  VPP Add Graph Node Next  ${dut1}  geneve4-input  ethernet-input
VPP GENEVE Add Multiple Tunnels  ${dut1}  ${gen_tunnel}  ${n_tunnels}  ${DUT1_${int}1}[0]  ${DUT1_${int}2}[0]  ${tg_if1_ip4}  ${tg_if2_ip4}  ${TG_pf2_mac}[0]  ${next_index}
All VPP Interfaces Ready Wait  ${nodes}  retries=${60}

3.4.2. ip4 suite

3.4.2.1. Initialize 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. Arguments: - remote_host1_ip - IP address of remote host1 (Optional). Type: string - remote_host2_ip - IP address of remote host2 (Optional). Type: string - remote_host_mask - Mask of remote host IP addresses (Optional). Type: string Example: | Initialize IPv4 forwarding in circular topology | 192.168.0.1 | 192.168.0.2 | 24 |


${dut2_status}  ${value}=  Run Keyword And Ignore Error  Variable Should Exist  ${dut2}
Set interfaces in path up
VPP Add IP Neighbor  ${dut1}  ${DUT1_${int}1}[0]  10.10.10.2  ${TG_pf1_mac}[0]
Run Keyword If  '${dut2_status}' == 'PASS'  VPP Add IP Neighbor  ${dut1}  ${DUT1_${int}2}[0]  1.1.1.2  ${DUT2_${int}1_mac}[0]
Run Keyword If  '${dut2_status}' == 'PASS'  VPP Add IP Neighbor  ${dut2}  ${DUT2_${int}1}[0]  1.1.1.1  ${DUT1_${int}2_mac}[0]
${dut}=  Run Keyword If  '${dut2_status}' == 'PASS'  Set Variable  ${dut2}  ELSE  Set Variable  ${dut1}
${dut_if2}=  Run Keyword If  '${dut2_status}' == 'PASS'  Set Variable  ${DUT2_${int}2}[0]  ELSE  Set Variable  ${DUT1_${int}2}[0]
VPP Add IP Neighbor  ${dut}  ${dut_if2}  20.20.20.2  ${TG_pf2_mac}[0]
VPP Interface Set IP Address  ${dut1}  ${DUT1_${int}1}[0]  10.10.10.1  24
Run Keyword If  '${dut2_status}' == 'PASS'  VPP Interface Set IP Address  ${dut1}  ${DUT1_${int}2}[0]  1.1.1.1  30
Run Keyword If  '${dut2_status}' == 'PASS'  VPP Interface Set IP Address  ${dut2}  ${DUT2_${int}1}[0]  1.1.1.2  30
VPP Interface Set IP Address  ${dut}  ${dut_if2}  20.20.20.1  24
Run Keyword If  '${dut2_status}' == 'PASS'  Vpp Route Add  ${dut1}  20.20.20.0  24  gateway=1.1.1.2  interface=${DUT1_${int}2}[0]
Run Keyword If  '${dut2_status}' == 'PASS'  Vpp Route Add  ${dut2}  10.10.10.0  24  gateway=1.1.1.1  interface=${DUT2_${int}1}[0]
Run Keyword Unless  '${remote_host1_ip}' == '${NONE}'  Vpp Route Add  ${dut1}  ${remote_host1_ip}  ${remote_host_mask}  gateway=10.10.10.2  interface=${DUT1_${int}1}[0]
Run Keyword Unless  '${remote_host2_ip}' == '${NONE}'  Vpp Route Add  ${dut}  ${remote_host2_ip}  ${remote_host_mask}  gateway=20.20.20.2  interface=${dut_if2}
Run Keyword Unless  '${remote_host1_ip}' == '${NONE}'  Run Keyword If  '${dut2_status}' == 'PASS'  Vpp Route Add  ${dut1}  ${remote_host1_ip}  ${remote_host_mask}  gateway=1.1.1.2  interface=${DUT1_${int}2}[0]
Run Keyword Unless  '${remote_host2_ip}' == '${NONE}'  Run Keyword If  '${dut2_status}' == 'PASS'  Vpp Route Add  ${dut2}  ${remote_host2_ip}  ${remote_host_mask}  gateway=1.1.1.1  interface=${DUT2_${int}1}[0]

3.4.2.2. Initialize IPv4 forwarding with scaling in circular topology

Custom setup of IPv4 topology with scalability of ip routes on all DUT nodes in 2-node / 3-node circular topology Arguments: - count - IP route count. Type: integer Return: - No value returned Example: | Initialize IPv4 forwarding with scaling in 3-node circular topology | 100000 |


${dut2_status}  ${value}=  Run Keyword And Ignore Error  Variable Should Exist  ${dut2}
Set interfaces in path up
VPP Add IP Neighbor  ${dut1}  ${DUT1_${int}1}[0]  1.1.1.1  ${TG_pf1_mac}[0]
Run Keyword If  '${dut2_status}' == 'PASS'  VPP Add IP Neighbor  ${dut1}  ${DUT1_${int}2}[0]  2.2.2.2  ${DUT2_${int}1_mac}[0]
Run Keyword If  '${dut2_status}' == 'PASS'  VPP Add IP Neighbor  ${dut2}  ${DUT2_${int}1}[0]  2.2.2.1  ${DUT1_${int}2_mac}[0]
${dut}=  Run Keyword If  '${dut2_status}' == 'PASS'  Set Variable  ${dut2}  ELSE  Set Variable  ${dut1}
${dut_if2}=  Run Keyword If  '${dut2_status}' == 'PASS'  Set Variable  ${DUT2_${int}2}[0]  ELSE  Set Variable  ${DUT1_${int}2}[0]
VPP Add IP Neighbor  ${dut}  ${dut_if2}  3.3.3.1  ${TG_pf2_mac}[0]
VPP Interface Set IP Address  ${dut1}  ${DUT1_${int}1}[0]  1.1.1.2  30
Run Keyword If  '${dut2_status}' == 'PASS'  VPP Interface Set IP Address  ${dut1}  ${DUT1_${int}2}[0]  2.2.2.1  30
Run Keyword If  '${dut2_status}' == 'PASS'  VPP Interface Set IP Address  ${dut2}  ${DUT2_${int}1}[0]  2.2.2.2  30
VPP Interface Set IP Address  ${dut}  ${dut_if2}  3.3.3.2  30
Vpp Route Add  ${dut1}  10.0.0.0  32  gateway=1.1.1.1  interface=${DUT1_${int}1}[0]  count=${count}
Run Keyword If  '${dut2_status}' == 'PASS'  Vpp Route Add  ${dut1}  20.0.0.0  32  gateway=2.2.2.2  interface=${DUT1_${int}2}[0]  count=${count}
Run Keyword If  '${dut2_status}' == 'PASS'  Vpp Route Add  ${dut2}  10.0.0.0  32  gateway=2.2.2.1  interface=${DUT2_${int}1}[0]  count=${count}
Vpp Route Add  ${dut}  20.0.0.0  32  gateway=3.3.3.1  interface=${dut_if2}  count=${count}

3.4.2.3. Initialize IPv4 routing with memif pairs

Create pairs of Memif interfaces on all defined VPP nodes. Put each Memif interface to separate IPv4 VRF with one physical or virtual interface to create a chain accross DUT node. Arguments: - count - Number of memif pairs (containers). Type: integer Example: | Initialize IPv4 routing with memif pairs | ${1} |


FOR  ${dut}  IN  @{duts}
\    Initialize IPv4 routing with memif pairs on DUT node  ${dut}  ${count}
Set interfaces in path up
Show Memif on all DUTs  ${nodes}
VPP round robin RX placement on all DUTs  ${nodes}  prefix=memif

3.4.2.4. Initialize IPv4 routing with memif pairs on DUT node

Create pairs of Memif interfaces on DUT node. Put each Memif interface to separate IPv4 VRF with one physical or virtual interface to create a chain accross DUT node. Arguments: - dut - DUT node. Type: dictionary - count - Number of memif pairs (containers). Type: integer Note: Socket paths for Memif are defined in following format: - /tmp/memif-${dut}_CNF${number}-${sid} Example: | Initialize IPv4 routing with memif pairs on DUT node | ${dut} | ${1} |


${dut_index}=  Get Index From List  ${duts}  ${dut}
${last_dut_index}=  Evaluate  ${duts_count} - ${1}
${tg_if1_net}=  Set Variable  10.10.10.0
${tg_if2_net}=  Set Variable  20.20.20.0
${fib_table_1}=  Set Variable  ${10}
Run Keyword If  ${fib_table_1} > ${0}  Add Fib Table  ${nodes['${dut}']}  ${fib_table_1}
${ip_base_if1}=  Evaluate  ${dut_index} + ${1}
${ip_net_if1}=  Set Variable  ${ip_base_if1}.${ip_base_if1}.${ip_base_if1}
Vpp Route Add  ${nodes['${dut}']}  ${tg_if1_net}  24  vrf=${fib_table_1}  gateway=${ip_net_if1}.1  interface=${${dut}_${int}1}[0]  multipath=${TRUE}
Assign Interface To Fib Table  ${nodes['${dut}']}  ${${dut}_${int}1}[0]  ${fib_table_1}
VPP Interface Set IP Address  ${nodes['${dut}']}  ${${dut}_${int}1}[0]  ${ip_net_if1}.2  30
${prev_node}=  Run Keyword If  ${dut_index} == ${0}  Set Variable  TG  ELSE  Get From List  ${duts}  ${dut_index-${1}}
${prev_if}=  Run Keyword If  ${dut_index} == ${0}  Set Variable  pf1  ELSE  Set Variable  ${int}2
${prev_if_mac}=  Get Interface MAC  ${nodes['${prev_node}']}  ${${prev_node}_${prev_if}}[0]
VPP Add IP Neighbor  ${nodes['${dut}']}  ${${dut}_${int}1}[0]  ${ip_net_if1}.1  ${prev_if_mac}
${fib_table_2}=  Evaluate  ${fib_table_1} + ${count}
Add Fib Table  ${nodes['${dut}']}  ${fib_table_2}
${ip_base_if2}=  Evaluate  ${ip_base_if1} + ${1}
${ip_net_if2}=  Set Variable  ${ip_base_if2}.${ip_base_if2}.${ip_base_if2}
Vpp Route Add  ${nodes['${dut}']}  ${tg_if2_net}  24  vrf=${fib_table_2}  gateway=${ip_net_if2}.2  interface=${${dut}_${int}2}[0]  multipath=${TRUE}
Assign Interface To Fib Table  ${nodes['${dut}']}  ${${dut}_${int}2}[0]  ${fib_table_2}
VPP Interface Set IP Address  ${nodes['${dut}']}  ${${dut}_${int}2}[0]  ${ip_net_if2}.1  30
${next_node}=  Run Keyword If  ${dut_index} == ${last_dut_index}  Set Variable  TG  ELSE  Get From List  ${duts}  ${dut_index+${1}}
${next_if}=  Run Keyword If  ${dut_index} == ${last_dut_index}  Set Variable  pf2  ELSE  Set Variable  ${int}1
${next_if_mac}=  Get Interface MAC  ${nodes['${next_node}']}  ${${next_node}_${next_if}}[0]
VPP Add IP Neighbor  ${nodes['${dut}']}  ${${dut}_${int}2}[0]  ${ip_net_if2}.2  ${next_if_mac}
${fib_table_1}=  Evaluate  ${fib_table_1} - ${1}
${ip_base_start}=  Set Variable  ${31}
FOR  ${number}  IN RANGE  1  ${count+${1}}
\    ${sock1}=  Set Variable  memif-${dut}_CNF
\    ${sock2}=  Set Variable  memif-${dut}_CNF
\    Set up memif interfaces on DUT node  ${nodes['${dut}']}  ${sock1}  ${sock2}  ${number}  ${dut}-memif-${number}-if1  ${dut}-memif-${number}-if2  ${rxq_count_int}  ${rxq_count_int}
\    ${memif1}=  Set Variable  ${${dut}-memif-${number}-if1}
\    ${memif2}=  Set Variable  ${${dut}-memif-${number}-if2}
\    ${fib_table_1}=  Evaluate  ${fib_table_1} + ${1}
\    ${fib_table_2}=  Evaluate  ${fib_table_1} + ${1}
\    Run Keyword Unless  ${number} == ${count}  Add Fib Table  ${nodes['${dut}']}  ${fib_table_2}
\    Assign Interface To Fib Table  ${nodes['${dut}']}  ${memif1}  ${fib_table_1}
\    Assign Interface To Fib Table  ${nodes['${dut}']}  ${memif2}  ${fib_table_2}
\    ${ip_base_memif1}=  Evaluate  ${ip_base_start} + (${number} - ${1}) * ${2}
\    ${ip_base_memif2}=  Evaluate  ${ip_base_memif1} + ${1}
\    ${ip_net_memif1}=  Set Variable  ${ip_base_memif1}.${ip_base_memif1}.${ip_base_memif1}
\    ${ip_net_memif2}=  Set Variable  ${ip_base_memif2}.${ip_base_memif2}.${ip_base_memif2}
\    VPP Interface Set IP Address  ${nodes['${dut}']}  ${memif1}  ${ip_net_memif1}.1  30
\    VPP Interface Set IP Address  ${nodes['${dut}']}  ${memif2}  ${ip_net_memif2}.1  30
\    Vpp Route Add  ${nodes['${dut}']}  ${tg_if2_net}  24  vrf=${fib_table_1}  gateway=${ip_net_memif2}.1  interface=${memif1}
\    Vpp Route Add  ${nodes['${dut}']}  ${tg_if1_net}  24  vrf=${fib_table_2}  gateway=${ip_net_memif1}.1  interface=${memif2}
\    ${memif_if1_key}=  Get interface by sw index  ${nodes['${dut}']}  ${memif1}
\    ${memif_if1_mac}=  Get interface mac  ${nodes['${dut}']}  ${memif_if1_key}
\    ${memif_if2_key}=  Get interface by sw index  ${nodes['${dut}']}  ${memif2}
\    ${memif_if2_mac}=  Get interface mac  ${nodes['${dut}']}  ${memif_if2_key}
\    VPP Add IP Neighbor  ${nodes['${dut}']}  ${memif1}  ${ip_net_memif2}.1  ${memif_if2_mac}
\    VPP Add IP Neighbor  ${nodes['${dut}']}  ${memif2}  ${ip_net_memif1}.1  ${memif_if1_mac}

3.4.2.5. Initialize IPv4 forwarding with vhost in 2-node circular topology

Create pairs of Vhost-User interfaces for defined number of VMs on VPP node. Set UP state of all VPP interfaces in path. Create nf_nodes+1 FIB tables on DUT with multipath routing. Assign each Virtual interface to FIB table with Physical interface or Virtual interface on both nodes. Setup IPv4 addresses with /30 prefix on DUT-TG links. Set routing on DUT nodes in all FIB tables with prefix /8 and next hop of neighbour IPv4 address. Setup ARP on all VPP interfaces. Arguments: - nf_nodes - Number of guest VMs. Type: integer - testpmd_mac - Switch for testpmd_mac test configuration. Type: boolean - virtio_feature_mask - Enabled Virtio features (Optional). Type: integer Note: Socket paths for VM are defined in following format: - /var/run/vpp/sock-${VM_ID}-1 - /var/run/vpp/sock-${VM_ID}-2 Example: | IPv4 forwarding with Vhost-User initialized in a 2-node circulartopology | 1 |


Set interfaces in path up
${fib_table_1}=  Set Variable  ${101}
${fib_table_2}=  Evaluate  ${fib_table_1}+${nf_nodes}
Add Fib Table  ${dut1}  ${fib_table_1}
Add Fib Table  ${dut1}  ${fib_table_2}
Assign Interface To Fib Table  ${dut1}  ${DUT1_${int}1}[0]  ${fib_table_1}
Assign Interface To Fib Table  ${dut1}  ${DUT1_${int}2}[0]  ${fib_table_2}
VPP Interface Set IP Address  ${dut1}  ${DUT1_${int}1}[0]  100.0.0.1  30
VPP Interface Set IP Address  ${dut1}  ${DUT1_${int}2}[0]  200.0.0.1  30
VPP Add IP Neighbor  ${dut1}  ${DUT1_${int}1}[0]  100.0.0.2  ${TG_pf1_mac}[0]
VPP Add IP Neighbor  ${dut1}  ${DUT1_${int}2}[0]  200.0.0.2  ${TG_pf2_mac}[0]
Vpp Route Add  ${dut1}  10.0.0.0  8  gateway=100.0.0.2  interface=${DUT1_${int}1}[0]  vrf=${fib_table_1}
Vpp Route Add  ${dut1}  20.0.0.0  8  gateway=200.0.0.2  interface=${DUT1_${int}2}[0]  vrf=${fib_table_2}
FOR  ${number}  IN RANGE  1  ${nf_nodes}+1
\    ${fib_table_1}=  Evaluate  ${100}+${number}
\    ${fib_table_2}=  Evaluate  ${fib_table_1}+${1}
\    Configure vhost interfaces  ${dut1}  /var/run/vpp/sock-${number}-1  /var/run/vpp/sock-${number}-2  dut1-vhost-${number}-if1  dut1-vhost-${number}-if2  virtio_feature_mask=${virtio_feature_mask}
\    Set Interface State  ${dut1}  ${dut1-vhost-${number}-if1}  up
\    Set Interface State  ${dut1}  ${dut1-vhost-${number}-if2}  up
\    Add Fib Table  ${dut1}  ${fib_table_1}
\    Add Fib Table  ${dut1}  ${fib_table_2}
\    Assign Interface To Fib Table  ${dut1}  ${dut1-vhost-${number}-if1}  ${fib_table_1}
\    Assign Interface To Fib Table  ${dut1}  ${dut1-vhost-${number}-if2}  ${fib_table_2}
\    VPP Interface Set IP Address  ${dut1}  ${dut1-vhost-${number}-if1}  1.1.1.2  30
\    VPP Interface Set IP Address  ${dut1}  ${dut1-vhost-${number}-if2}  1.1.2.2  30
\    Run Keyword Unless  ${testpmd_mac}  Vpp Route Add  ${dut1}  20.0.0.0  8  gateway=1.1.1.1  interface=${dut1-vhost-${number}-if1}  vrf=${fib_table_1}
\    Run Keyword Unless  ${testpmd_mac}  Vpp Route Add  ${dut1}  10.0.0.0  8  gateway=1.1.2.1  interface=${dut1-vhost-${number}-if2}  vrf=${fib_table_2}
\    Run Keyword If  ${testpmd_mac}  VPP Add IP Neighbor  ${dut1}  ${dut1-vhost-${number}-if1}  1.1.2.2  ${dut1-vhost-${number}-if2_mac}
\    Run Keyword If  ${testpmd_mac}  VPP Add IP Neighbor  ${dut1}  ${dut1-vhost-${number}-if2}  1.1.1.2  ${dut1-vhost-${number}-if1_mac}
\    Run Keyword If  ${testpmd_mac}  Vpp Route Add  ${dut1}  20.0.0.0  8  gateway=1.1.2.2  interface=${dut1-vhost-${number}-if1}  vrf=${fib_table_1}
\    Run Keyword If  ${testpmd_mac}  Vpp Route Add  ${dut1}  10.0.0.0  8  gateway=1.1.1.2  interface=${dut1-vhost-${number}-if2}  vrf=${fib_table_2}

3.4.2.6. Initialize IPv4 forwarding with vhost in 3-node circular topology

Create pairs of Vhost-User interfaces for defined number of VMs on all VPP nodes. Set UP state of all VPP interfaces in path. Create nf_nodes+1 FIB tables on each DUT with multipath routing. Assign each Virtual interface to FIB table with Physical interface or Virtual interface on both nodes. Setup IPv4 addresses with /30 prefix on DUT-TG links and /30 prefix on DUT1-DUT2 link. Set routing on all DUT nodes in all FIB tables with prefix /8 and next hop of neighbour IPv4 address. Setup ARP on all VPP interfaces. Arguments: - nf_nodes - Number of guest VMs. Type: integer - virtio_feature_mask - Enabled Virtio features (Optional). Type: integer Note: Socket paths for VM are defined in following format: - /var/run/vpp/sock-${VM_ID}-1 - /var/run/vpp/sock-${VM_ID}-2 Example: | IPv4 forwarding with Vhost-User initialized in a 3-node circulartopology | 1 |


Set interfaces in path up
${fib_table_1}=  Set Variable  ${101}
${fib_table_2}=  Evaluate  ${fib_table_1}+${nf_nodes}
Add Fib Table  ${dut1}  ${fib_table_1}
Add Fib Table  ${dut1}  ${fib_table_2}
Add Fib Table  ${dut2}  ${fib_table_1}
Add Fib Table  ${dut2}  ${fib_table_2}
Assign Interface To Fib Table  ${dut1}  ${DUT1_${int}1}[0]  ${fib_table_1}
Assign Interface To Fib Table  ${dut1}  ${DUT1_${int}2}[0]  ${fib_table_2}
Assign Interface To Fib Table  ${dut2}  ${DUT2_${int}1}[0]  ${fib_table_1}
Assign Interface To Fib Table  ${dut2}  ${DUT2_${int}2}[0]  ${fib_table_2}
VPP Interface Set IP Address  ${dut1}  ${DUT1_${int}1}[0]  100.0.0.1  30
VPP Interface Set IP Address  ${dut1}  ${DUT1_${int}2}[0]  150.0.0.1  30
VPP Interface Set IP Address  ${dut2}  ${DUT2_${int}1}[0]  150.0.0.2  30
VPP Interface Set IP Address  ${dut2}  ${DUT2_${int}2}[0]  200.0.0.1  30
VPP Add IP Neighbor  ${dut1}  ${DUT1_${int}1}[0]  100.0.0.2  ${TG_pf1_mac}[0]
VPP Add IP Neighbor  ${dut2}  ${DUT2_${int}2}[0]  200.0.0.2  ${TG_pf2_mac}[0]
Vpp Route Add  ${dut1}  10.0.0.0  8  gateway=100.0.0.2  interface=${DUT1_${int}1}[0]  vrf=${fib_table_1}
Vpp Route Add  ${dut1}  20.0.0.0  8  gateway=150.0.0.2  interface=${DUT1_${int}2}[0]  vrf=${fib_table_2}
Vpp Route Add  ${dut2}  10.0.0.0  8  gateway=150.0.0.1  interface=${DUT2_${int}1}[0]  vrf=${fib_table_1}
Vpp Route Add  ${dut2}  20.0.0.0  8  gateway=200.0.0.2  interface=${DUT2_${int}2}[0]  vrf=${fib_table_2}
FOR  ${number}  IN RANGE  1  ${nf_nodes}+1
\    ${fib_table_1}=  Evaluate  ${100}+${number}
\    ${fib_table_2}=  Evaluate  ${fib_table_1}+${1}
\    Configure vhost interfaces  ${dut1}  /var/run/vpp/sock-${number}-1  /var/run/vpp/sock-${number}-2  dut1-vhost-${number}-if1  dut1-vhost-${number}-if2  virtio_feature_mask=${virtio_feature_mask}
\    Set Interface State  ${dut1}  ${dut1-vhost-${number}-if1}  up
\    Set Interface State  ${dut1}  ${dut1-vhost-${number}-if2}  up
\    Configure vhost interfaces  ${dut2}  /var/run/vpp/sock-${number}-1  /var/run/vpp/sock-${number}-2  dut2-vhost-${number}-if1  dut2-vhost-${number}-if2  virtio_feature_mask=${virtio_feature_mask}
\    Set Interface State  ${dut2}  ${dut2-vhost-${number}-if1}  up
\    Set Interface State  ${dut2}  ${dut2-vhost-${number}-if2}  up
\    Add Fib Table  ${dut1}  ${fib_table_1}
\    Add Fib Table  ${dut1}  ${fib_table_2}
\    Add Fib Table  ${dut2}  ${fib_table_1}
\    Add Fib Table  ${dut2}  ${fib_table_2}
\    Assign Interface To Fib Table  ${dut1}  ${dut1-vhost-${number}-if1}  ${fib_table_1}
\    Assign Interface To Fib Table  ${dut1}  ${dut1-vhost-${number}-if2}  ${fib_table_2}
\    Assign Interface To Fib Table  ${dut2}  ${dut2-vhost-${number}-if1}  ${fib_table_1}
\    Assign Interface To Fib Table  ${dut2}  ${dut2-vhost-${number}-if2}  ${fib_table_2}
\    VPP Interface Set IP Address  ${dut1}  ${dut1-vhost-${number}-if1}  1.1.1.2  30
\    VPP Interface Set IP Address  ${dut1}  ${dut1-vhost-${number}-if2}  1.1.2.2  30
\    VPP Interface Set IP Address  ${dut2}  ${dut2-vhost-${number}-if1}  1.1.1.2  30
\    VPP Interface Set IP Address  ${dut2}  ${dut2-vhost-${number}-if2}  1.1.2.2  30
\    Run Keyword Unless  ${testpmd_mac}  Vpp Route Add  ${dut1}  20.0.0.0  8  gateway=1.1.1.1  interface=${dut1-vhost-${number}-if1}  vrf=${fib_table_1}
\    Run Keyword Unless  ${testpmd_mac}  Vpp Route Add  ${dut1}  10.0.0.0  8  gateway=1.1.2.1  interface=${dut1-vhost-${number}-if2}  vrf=${fib_table_2}
\    Run Keyword Unless  ${testpmd_mac}  Vpp Route Add  ${dut2}  20.0.0.0  8  gateway=1.1.1.1  interface=${dut2-vhost-${number}-if1}  vrf=${fib_table_1}
\    Run Keyword Unless  ${testpmd_mac}  Vpp Route Add  ${dut2}  10.0.0.0  8  gateway=1.1.2.1  interface=${dut2-vhost-${number}-if2}  vrf=${fib_table_2}
\    Run Keyword If  ${testpmd_mac}  VPP Add IP Neighbor  ${dut1}  ${dut1-vhost-${number}-if1}  1.1.2.2  ${dut1-vhost-${number}-if2_mac}
\    Run Keyword If  ${testpmd_mac}  VPP Add IP Neighbor  ${dut1}  ${dut1-vhost-${number}-if2}  1.1.1.2  ${dut1-vhost-${number}-if1_mac}
\    Run Keyword If  ${testpmd_mac}  VPP Add IP Neighbor  ${dut2}  ${dut2-vhost-${number}-if1}  1.1.2.2  ${dut2-vhost-${number}-if2_mac}
\    Run Keyword If  ${testpmd_mac}  VPP Add IP Neighbor  ${dut2}  ${dut2-vhost-${number}-if2}  1.1.1.2  ${dut2-vhost-${number}-if1_mac}
\    Run Keyword If  ${testpmd_mac}  Vpp Route Add  ${dut1}  20.0.0.0  8  gateway=1.1.2.2  interface=${dut1-vhost-${number}-if1}  vrf=${fib_table_1}
\    Run Keyword If  ${testpmd_mac}  Vpp Route Add  ${dut1}  10.0.0.0  8  gateway=1.1.1.2  interface=${dut1-vhost-${number}-if2}  vrf=${fib_table_2}
\    Run Keyword If  ${testpmd_mac}  Vpp Route Add  ${dut2}  20.0.0.0  8  gateway=1.1.2.2  interface=${dut2-vhost-${number}-if1}  vrf=${fib_table_1}
\    Run Keyword If  ${testpmd_mac}  Vpp Route Add  ${dut2}  10.0.0.0  8  gateway=1.1.1.2  interface=${dut2-vhost-${number}-if2}  vrf=${fib_table_2}

3.4.2.7. Initialize IPv4 forwarding with VLAN dot1q sub-interfaces in circular topology

Set UP state on VPP interfaces in path on nodes in 2-node / 3-node circular topology. In case of 3-node topology create VLAN sub-interfaces between DUTs. In case of 2-node topology create VLAN sub-interface on dut1-if2 interface. Get the interface MAC addresses and setup ARPs. Setup IPv4 addresses with /30 prefix on DUT-TG links and set routing with prefix /30. In case of 3-node set IPv4 adresses with /30 prefix on VLAN and set routing on both DUT nodes with prefix /30. Set next hop of neighbour DUT interface IPv4 address. All interfaces are brought up. Arguments: - tg_if1_net - TG interface 1 IP subnet used by traffic generator. Type: integer - tg_if2_net - TG interface 2 IP subnet used by traffic generator. Type: integer - subid - ID of the sub-interface to be created. Type: string - tag_rewrite - Method of tag rewrite. Type: string _NOTE:_ This KW uses following test case variables: - dut1 - DUT1 node. - dut2 - DUT2 node. - dut1_if2 - DUT1 interface towards DUT2. - dut2_if1 - DUT2 interface towards DUT1. Example: | Initialize IPv4 forwarding with VLAN dot1q sub-interfacesin circular topology | 10.10.10.0 | 20.20.20.0 | 10 | pop-1 |


${dut2_status}  ${value}=  Run Keyword And Ignore Error  Variable Should Exist  ${dut2}
Set interfaces in path up
Run Keyword If  '${dut2_status}' == 'PASS'  Initialize VLAN dot1q sub-interfaces in circular topology  ${dut1}  ${DUT1_${int}2}[0]  ${dut2}  ${DUT2_${int}1}[0]  SUB_ID=${subid}  ELSE  Initialize VLAN dot1q sub-interfaces in circular topology  ${dut1}  ${DUT1_${int}2}[0]  SUB_ID=${subid}
Run Keyword If  '${dut2_status}' == 'PASS'  Configure L2 tag rewrite method on interfaces  ${dut1}  ${subif_index_1}  ${dut2}  ${subif_index_2}  TAG_REWRITE_METHOD=${tag_rewrite}  ELSE  Configure L2 tag rewrite method on interfaces  ${dut1}  ${subif_index_1}  TAG_REWRITE_METHOD=${tag_rewrite}
VPP Add IP Neighbor  ${dut1}  ${DUT1_${int}1}[0]  1.1.1.1  ${TG_pf1_mac}[0]
Run Keyword If  '${dut2_status}' == 'PASS'  VPP Add IP Neighbor  ${dut1}  ${subif_index_1}  2.2.2.2  ${DUT2_${int}1_mac}[0]
Run Keyword If  '${dut2_status}' == 'PASS'  VPP Add IP Neighbor  ${dut2}  ${subif_index_2}  2.2.2.1  ${DUT1_${int}2_mac}[0]
${dut}=  Run Keyword If  '${dut2_status}' == 'PASS'  Set Variable  ${dut2}  ELSE  Set Variable  ${dut1}
${dut_if2}=  Run Keyword If  '${dut2_status}' == 'PASS'  Set Variable  ${DUT2_${int}2}[0]  ELSE  Set Variable  ${subif_index_1}
VPP Add IP Neighbor  ${dut}  ${dut_if2}  3.3.3.1  ${TG_pf2_mac}[0]
VPP Interface Set IP Address  ${dut1}  ${DUT1_${int}1}[0]  1.1.1.2  30
Run Keyword If  '${dut2_status}' == 'PASS'  VPP Interface Set IP Address  ${dut1}  ${subif_index_1}  2.2.2.1  30
Run Keyword If  '${dut2_status}' == 'PASS'  VPP Interface Set IP Address  ${dut2}  ${subif_index_2}  2.2.2.2  30
VPP Interface Set IP Address  ${dut}  ${dut_if2}  3.3.3.2  30
Vpp Route Add  ${dut1}  ${tg_if1_net}  30  gateway=1.1.1.1  interface=${DUT1_${int}1}[0]
Run Keyword If  '${dut2_status}' == 'PASS'  Vpp Route Add  ${dut1}  ${tg_if2_net}  30  gateway=2.2.2.2  interface=${subif_index_1}
Run Keyword If  '${dut2_status}' == 'PASS'  Vpp Route Add  ${dut2}  ${tg_if1_net}  30  gateway=2.2.2.1  interface=${subif_index_2}
Vpp Route Add  ${dut}  ${tg_if2_net}  30  gateway=3.3.3.1  interface=${dut_if2}

3.4.3. ip6 suite

3.4.3.1. Initialize 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 neighbor on all VPP interfaces. Setup IPv6 addresses with /64 prefix on DUT-TG links. In case of 3-node topology setup IPv6 adresses with /64 prefix on DUT1-DUT2 link and set routing on both DUT nodes with prefix /64 and next hop of neighbour DUT interface IPv4 address. Arguments: - remote_host1_ip - IP address of remote host1 (Optional). Type: string - remote_host2_ip - IP address of remote host2 (Optional). Type: string Example: | Initialize IPv6 forwarding in circular topology | 3ffe:5f::1 | 3ffe:5f::2 |


${dut2_status}  ${value}=  Run Keyword And Ignore Error  Variable Should Exist  ${dut2}
Set interfaces in path up
VPP Add IP Neighbor  ${dut1}  ${DUT1_${int}1}[0]  2001:1::2  ${TG_pf1_mac}[0]
Run Keyword If  '${dut2_status}' == 'PASS'  VPP Add IP Neighbor  ${dut1}  ${DUT1_${int}2}[0]  2001:3::2  ${DUT2_${int}1_mac}[0]
Run Keyword If  '${dut2_status}' == 'PASS'  VPP Add IP Neighbor  ${dut2}  ${DUT2_${int}1}[0]  2001:3::1  ${DUT1_${int}2_mac}[0]
${dut}=  Run Keyword If  '${dut2_status}' == 'PASS'  Set Variable  ${dut2}  ELSE  Set Variable  ${dut1}
${dut_if2}=  Run Keyword If  '${dut2_status}' == 'PASS'  Set Variable  ${DUT2_${int}2}[0]  ELSE  Set Variable  ${DUT1_${int}2}[0]
VPP Add IP Neighbor  ${dut}  ${dut_if2}  2001:2::2  ${TG_pf2_mac}[0]
VPP Interface Set IP Address  ${dut1}  ${DUT1_${int}1}[0]  2001:1::1  64
Run Keyword If  '${dut2_status}' == 'PASS'  VPP Interface Set IP Address  ${dut1}  ${DUT1_${int}2}[0]  2001:3::1  64
Run Keyword If  '${dut2_status}' == 'PASS'  VPP Interface Set IP Address  ${dut2}  ${DUT2_${int}1}[0]  2001:3::2  64
VPP Interface Set IP Address  ${dut}  ${dut_if2}  2001:2::1  64
Vpp Interfaces RA Suppress On All Nodes  ${nodes}
Run Keyword If  '${dut2_status}' == 'PASS'  Vpp Route Add  ${dut1}  2001:2::0  64  gateway=2001:3::2  interface=${DUT1_${int}2}[0]
Run Keyword If  '${dut2_status}' == 'PASS'  Vpp Route Add  ${dut2}  2001:1::0  64  gateway=2001:3::1  interface=${DUT2_${int}1}[0]
Run Keyword Unless  '${remote_host1_ip}' == '${NONE}'  Vpp Route Add  ${dut1}  ${remote_host1_ip}  128  gateway=2001:1::2  interface=${DUT1_${int}1}[0]
Run Keyword Unless  '${remote_host2_ip}' == '${NONE}'  Vpp Route Add  ${dut}  ${remote_host2_ip}  128  gateway=2001:2::2  interface=${dut_if2}
Run Keyword Unless  '${remote_host1_ip}' == '${NONE}'  Run Keyword If  '${dut2_status}' == 'PASS'  Vpp Route Add  ${dut1}  ${remote_host1_ip}  128  gateway=2001:3::2  interface=${DUT1_${int}2}[0]
Run Keyword Unless  '${remote_host2_ip}' == '${NONE}'  Run Keyword If  '${dut2_status}' == 'PASS'  Vpp Route Add  ${dut2}  ${remote_host2_ip}  128  gateway=2001:3::1  interface=${DUT2_${int}1}[0]

3.4.3.2. Initialize IPv6 forwarding with scaling in circular topology

Custom setup of IPv6 topology with scalability of ip routes on all DUT nodes in 2-node / 3-node circular topology Arguments: - count - IP route count. Type: integer Return: - No value returned Example: | Initialize IPv6 forwarding with scaling in circular topology | 100000 |


${dut2_status}  ${value}=  Run Keyword And Ignore Error  Variable Should Exist  ${dut2}
Set interfaces in path up
${prefix}=  Set Variable  64
${host_prefix}=  Set Variable  128
VPP Interface Set IP Address  ${dut1}  ${DUT1_${int}1}[0]  2001:3::1  ${prefix}
Run Keyword If  '${dut2_status}' == 'PASS'  VPP Interface Set IP Address  ${dut1}  ${DUT1_${int}2}[0]  2001:4::1  ${prefix}
Run Keyword If  '${dut2_status}' == 'PASS'  VPP Interface Set IP Address  ${dut2}  ${DUT2_${int}1}[0]  2001:4::2  ${prefix}
${dut}=  Run Keyword If  '${dut2_status}' == 'PASS'  Set Variable  ${dut2}  ELSE  Set Variable  ${dut1}
${dut_if2}=  Run Keyword If  '${dut2_status}' == 'PASS'  Set Variable  ${DUT2_${int}2}[0]  ELSE  Set Variable  ${DUT1_${int}2}[0]
VPP Interface Set IP Address  ${dut}  ${dut_if2}  2001:5::1  ${prefix}
Vpp Interfaces RA Suppress On All Nodes  ${nodes}
VPP Add IP Neighbor  ${dut1}  ${DUT1_${int}1}[0]  2001:3::2  ${TG_pf1_mac}[0]
Run Keyword If  '${dut2_status}' == 'PASS'  VPP Add Ip Neighbor  ${dut1}  ${DUT1_${int}2}[0]  2001:4::2  ${DUT2_${int}1_mac}[0]
Run Keyword If  '${dut2_status}' == 'PASS'  VPP Add Ip Neighbor  ${dut2}  ${DUT2_${int}1}[0]  2001:4::1  ${DUT1_${int}2_mac}[0]
VPP Add IP Neighbor  ${dut}  ${dut_if2}  2001:5::2  ${TG_pf2_mac}[0]
Vpp Route Add  ${dut1}  2001:1::0  ${host_prefix}  gateway=2001:3::2  interface=${DUT1_${int}1}[0]  count=${count}
Run Keyword If  '${dut2_status}' == 'PASS'  Vpp Route Add  ${dut1}  2001:2::0  ${host_prefix}  gateway=2001:4::2  interface=${DUT1_${int}2}[0]  count=${count}
Run Keyword If  '${dut2_status}' == 'PASS'  Vpp Route Add  ${dut2}  2001:1::0  ${host_prefix}  gateway=2001:4::1  interface=${DUT2_${int}1}[0]  count=${count}
Vpp Route Add  ${dut}  2001:2::0  ${host_prefix}  gateway=2001:5::2  interface=${dut_if2}  count=${count}

3.4.3.3. Initialize IPv6 forwarding with vhost in 2-node circular topology

Create pairs of Vhost-User interfaces for defined number of VMs on VPP node. Set UP state of all VPP interfaces in path. Create nf_nodes+1 FIB tables on DUT with multipath routing. Assign each Virtual interface to FIB table with Physical interface or Virtual interface on both nodes. Setup IPv6 addresses with /64 prefix on DUT-TG links. Set routing on DUT nodes in all FIB tables with prefix /64 and next hop of neighbour IPv6 address. Setup neighbours on all VPP interfaces. Arguments: - nf_nodes - Number of guest VMs. Type: integer - virtio_feature_mask - Enabled Virtio features (Optional). Type: integer Note: Socket paths for VM are defined in following format: - /var/run/vpp/sock-${VM_ID}-1 - /var/run/vpp/sock-${VM_ID}-2 Example: | IPv6 forwarding with Vhost-User initialized in a 2-node circulartopology | 1 |


Vpp Interfaces RA Suppress On All Nodes  ${nodes}
Set interfaces in path up
${prefix}=  Set Variable  64
${fib_table_1}=  Set Variable  ${101}
${fib_table_2}=  Evaluate  ${fib_table_1}+${nf_nodes}
Add Fib Table  ${dut1}  ${fib_table_1}  ipv6=${True}
Add Fib Table  ${dut1}  ${fib_table_2}  ipv6=${True}
Assign Interface To Fib Table  ${dut1}  ${DUT1_${int}1}[0]  ${fib_table_1}  ipv6=${True}
Assign Interface To Fib Table  ${dut1}  ${DUT1_${int}2}[0]  ${fib_table_2}  ipv6=${True}
VPP Interface Set IP Address  ${dut1}  ${DUT1_${int}1}[0]  2001:100::1  ${prefix}
VPP Interface Set IP Address  ${dut1}  ${DUT1_${int}2}[0]  2001:200::1  ${prefix}
VPP Add IP Neighbor  ${dut1}  ${DUT1_${int}1}[0]  2001:100::2  ${TG_pf1_mac}[0]
VPP Add IP Neighbor  ${dut1}  ${DUT1_${int}2}[0]  2001:200::2  ${TG_pf2_mac}[0]
Vpp Route Add  ${dut1}  2001:1::0  64  gateway=2001:100::2  interface=${DUT1_${int}1}[0]  vrf=${fib_table_1}
Vpp Route Add  ${dut1}  2001:2::0  64  gateway=2001:200::2  interface=${DUT1_${int}2}[0]  vrf=${fib_table_2}
FOR  ${number}  IN RANGE  1  ${nf_nodes}+1
\    ${fib_table_1}=  Evaluate  ${100}+${number}
\    ${fib_table_2}=  Evaluate  ${fib_table_1}+${1}
\    Configure vhost interfaces  ${dut1}  /var/run/vpp/sock-${number}-1  /var/run/vpp/sock-${number}-2  dut1-vhost-${number}-if1  dut1-vhost-${number}-if2  virtio_feature_mask=${virtio_feature_mask}
\    Set Interface State  ${dut1}  ${dut1-vhost-${number}-if1}  up
\    Set Interface State  ${dut1}  ${dut1-vhost-${number}-if2}  up
\    Add Fib Table  ${dut1}  ${fib_table_1}  ipv6=${True}
\    Add Fib Table  ${dut1}  ${fib_table_2}  ipv6=${True}
\    Assign Interface To Fib Table  ${dut1}  ${dut1-vhost-${number}-if1}  ${fib_table_1}  ipv6=${True}
\    Assign Interface To Fib Table  ${dut1}  ${dut1-vhost-${number}-if2}  ${fib_table_2}  ipv6=${True}
\    VPP Interface Set IP Address  ${dut1}  ${dut1-vhost-${number}-if1}  1:1::2  64
\    VPP Interface Set IP Address  ${dut1}  ${dut1-vhost-${number}-if2}  1:2::2  64
\    Vpp Route Add  ${dut1}  2001:2::0  64  gateway=1:1::1  interface=${dut1-vhost-${number}-if1}  vrf=${fib_table_1}
\    Vpp Route Add  ${dut1}  2001:1::0  64  gateway=1:2::1  interface=${dut1-vhost-${number}-if2}  vrf=${fib_table_2}

3.4.3.4. Initialize IPv6 forwarding with VLAN dot1q sub-interfaces in circular topology

Set UP state on VPP interfaces in path on nodes in 2-node / 3-node circular topology. In case of 3-node topology create VLAN sub-interfaces between DUTs. In case of 2-node topology create VLAN sub-interface on dut1-if2 interface. Get the interface MAC addresses and setup ARPs. Setup IPv6 addresses with /64 prefix on DUT-TG links and set routing with prefix /64. In case of 3-node set IPv6 adresses with /64 prefix on VLAN and set routing on both DUT nodes with prefix /64. Set next hop of neighbour DUT interface IPv6 address. All interfaces are brought up. Arguments: - tg_if1_net - TG interface 1 IPv6 subnet used by traffic generator. Type: integer - tg_if2_net - TG interface 2 IPv6 subnet used by traffic generator. Type: integer - subid - ID of the sub-interface to be created. Type: string - tag_rewrite - Method of tag rewrite. Type: string _NOTE:_ This KW uses following test case variables: - dut1 - DUT1 node. - dut2 - DUT2 node. - dut1_if2 - DUT1 interface towards DUT2. - dut2_if1 - DUT2 interface towards DUT1. Example: | Initialize IPv6 forwarding with VLAN dot1q sub-interfacesin circular topology | 2001:1::0 | 2001:2::0 | 10 | pop-1 |


${dut2_status}  ${value}=  Run Keyword And Ignore Error  Variable Should Exist  ${dut2}
Set interfaces in path up
Run Keyword If  '${dut2_status}' == 'PASS'  Initialize VLAN dot1q sub-interfaces in circular topology  ${dut1}  ${DUT1_${int}2}[0]  ${dut2}  ${DUT2_${int}1}[0]  SUB_ID=${subid}  ELSE  Initialize VLAN dot1q sub-interfaces in circular topology  ${dut1}  ${DUT1_${int}2}[0]  SUB_ID=${subid}
Run Keyword If  '${dut2_status}' == 'PASS'  Configure L2 tag rewrite method on interfaces  ${dut1}  ${subif_index_1}  ${dut2}  ${subif_index_2}  TAG_REWRITE_METHOD=${tag_rewrite}  ELSE  Configure L2 tag rewrite method on interfaces  ${dut1}  ${subif_index_1}  TAG_REWRITE_METHOD=${tag_rewrite}
${prefix}=  Set Variable  64
${host_prefix}=  Set Variable  64
VPP Add IP Neighbor  ${dut1}  ${DUT1_${int}1}[0]  2002:1::1  ${TG_pf1_mac}[0]
Run Keyword If  '${dut2_status}' == 'PASS'  VPP Add Ip Neighbor  ${dut1}  ${subif_index_1}  2002:2::2  ${DUT2_${int}1_mac}[0]
Run Keyword If  '${dut2_status}' == 'PASS'  VPP Add Ip Neighbor  ${dut2}  ${subif_index_2}  2002:2::1  ${DUT1_${int}2_mac}[0]
${dut}=  Run Keyword If  '${dut2_status}' == 'PASS'  Set Variable  ${dut2}  ELSE  Set Variable  ${dut1}
${dut_if2}=  Run Keyword If  '${dut2_status}' == 'PASS'  Set Variable  ${DUT2_${int}2}[0]  ELSE  Set Variable  ${subif_index_1}
VPP Add IP Neighbor  ${dut}  ${dut_if2}  2002:3::1  ${TG_pf2_mac}[0]
VPP Interface Set IP Address  ${dut1}  ${DUT1_${int}1}[0]  2002:1::2  ${prefix}
Run Keyword If  '${dut2_status}' == 'PASS'  VPP Interface Set IP Address  ${dut1}  ${subif_index_1}  2002:2::1  ${prefix}
Run Keyword If  '${dut2_status}' == 'PASS'  VPP Interface Set IP Address  ${dut2}  ${subif_index_2}  2002:2::2  ${prefix}
VPP Interface Set IP Address  ${dut}  ${dut_if2}  2002:3::2  ${prefix}
Vpp Interfaces RA Suppress On All Nodes  ${nodes}
Vpp Route Add  ${dut1}  ${tg_if1_net}  ${host_prefix}  gateway=2002:1::1  interface=${DUT1_${int}1}[0]
Run Keyword If  '${dut2_status}' == 'PASS'  Vpp Route Add  ${dut1}  ${tg_if2_net}  ${host_prefix}  gateway=2002:2::2  interface=${subif_index_1}
Run Keyword If  '${dut2_status}' == 'PASS'  Vpp Route Add  ${dut2}  ${tg_if1_net}  ${host_prefix}  gateway=2002:2::1  interface=${subif_index_2}
Vpp Route Add  ${dut}  ${tg_if2_net}  ${host_prefix}  gateway=2002:3::1  interface=${dut_if2}

3.4.4. nat suite

3.4.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.4.4.2. Initialize NAT44 endpoint-dependent mode in circular topology

Initialization of NAT44 endpoint-dependent mode on DUT1 This keyword also sets a test variable ${resetter} to hold a callable which resets VPP state. Keywords performing search will call it to get consistent trials. Tests which do not wish to reset NAT state should use ramp-up, so the resetter is not set if ${ramp_up_duration} variable is (defined and) nonzero. Test variables read: - n_sessions - Expected number of opened sessions.


${max_sessions}=  Compute Max Translations Per Thread  ${n_sessions}  ${dp_count_int}
Enable NAT44 ED Plugin  ${dut1}  mode=${nat_mode}  sessions=${max_sessions}
Configure inside and outside interfaces  ${dut1}  ${DUT1_${int}1}[0]  ${DUT1_${int}2}[0]
${resetter} =  Set NAT44 Address Range  ${dut1}  ${out_net}  ${out_net_end}
${ramp_up_rate} =  Get Ramp Up Rate
Return From Keyword If  ${ramp_up_rate}
Set Test Variable  \${resetter}

3.4.4.3. Initialize IPv4 forwarding for NAT44 in circular topology

Set IPv4 forwarding for NAT44: - set interfaces up - set IP addresses - set ARP - create routes


${status}  ${value}=  Run Keyword And Ignore Error  Variable Should Exist  ${dut2}
${dut2_status}=  Set Variable If  '${status}' == 'PASS'  ${True}  ${False}
Set interfaces in path up
VPP Interface Set IP Address  ${dut1}  ${DUT1_${int}1}[0]  ${dut1_if1_ip4}  ${dut1_if1_mask}
VPP Interface Set IP Address  ${dut1}  ${DUT1_${int}2}[0]  ${dut1_if2_ip4}  ${dut1_if2_mask}
Run Keyword If  ${dut2_status}  VPP Interface Set IP Address  ${dut2}  ${DUT2_${int}1}[0]  ${dut2_if1_ip4}  ${dut2_if1_mask}
Run Keyword If  ${dut2_status}  VPP Interface Set IP Address  ${dut2}  ${DUT2_${int}2}[0]  ${dut2_if2_ip4}  ${dut2_if2_mask}
VPP Add IP Neighbor  ${dut1}  ${DUT1_${int}1}[0]  ${tg_if1_ip4}  ${TG_pf1_mac}[0]
Run Keyword If  ${dut2_status}  VPP Add IP Neighbor  ${dut1}  ${DUT1_${int}2}[0]  ${dut2_if1_ip4}  ${DUT2_${int}1_mac}[0]  ELSE  VPP Add IP Neighbor  ${dut1}  ${DUT1_${int}2}[0]  ${tg_if2_ip4}  ${TG_pf2_mac}[0]
Run Keyword If  ${dut2_status}  VPP Add IP Neighbor  ${dut2}  ${DUT2_${int}1}[0]  ${dut1_if1_ip4}  ${DUT1_${int}2_mac}[0]
Run Keyword If  ${dut2_status}  VPP Add IP Neighbor  ${dut2}  ${DUT2_${int}2}[0]  ${tg_if2_ip4}| ${TG_pf2_mac}[0]
Vpp Route Add  ${dut1}  ${in_net}  ${in_mask}  gateway=${tg_if1_ip4}  interface=${DUT1_${int}1}[0]
Run Keyword If  ${dut2_status}  Vpp Route Add  ${dut1}  ${dest_net}  ${dest_mask}  gateway=${dut2_if1_ip4}  interface=${DUT1_${int}2}[0]  ELSE  Vpp Route Add  ${dut1}  ${dest_net}  ${dest_mask}  gateway=${tg_if2_ip4}  interface=${DUT1_${int}2}[0]
Run Keyword If  ${dut2_status}  Vpp Route Add  ${dut2}  ${dest_net}  ${dest_mask}  gateway=${tg_if2_ip4}  interface=${DUT2_${int}2}[0]
Run Keyword If  ${dut2_status}  Vpp Route Add  ${dut2}  ${out_net}  ${out_mask}  gateway=${dut1_if2_ip4}  interface=${DUT2_${int}1}[0]

3.4.4.4. Verify NAT44 TCP sessions number on DUT1 node

Verify that all required NAT44 TCP sessions are established on DUT1 node.


Verify NAT44 sessions number  ${nodes['DUT1']}  ${n_sessions}  TCP

3.4.4.5. Verify NAT44 UDP sessions number on DUT1 node

Verify that all required NAT44 UDP sessions are established on DUT1 node.


Verify NAT44 sessions number  ${nodes['DUT1']}  ${n_sessions}  UDP

3.4.4.6. Verify NAT44 sessions number

Verify that all required NAT44 sessions of required protocol are established. Arguments: - node - DUT node. Type: dictionary - exp_n_sessions - Expected number of NAT44 sessions. Type: integer - proto - Required protocol. Type: string Example: | Verify NAT44 sessions number | ${nodes[‘DUT1’]} | ${64512} | UDP |


${nat44_sessions}=  Get NAT44 Sessions Number  ${node}  ${proto}
Should Be Equal As Integers  ${nat44_sessions}  ${exp_n_sessions}  Not all NAT44 ${proto} sessions have been established

3.4.4.7. Enable DET44 plugin on DUT

Enable DET44 plugin on DUT. Arguments: - node - DUT node to enablr DET44 on. Type: dictionary - inside_vrf - Inside VRF ID; default value: 0. Type: string or integer - outside_vrf - Outside VRF ID; default value: 0. Type: string or integer Example: | Enable DET44 plugin on all DUTs |


Enable DET44 Plugin  ${node}  inside_vrf=${inside_vrf}  outside_vrf=${outside_vrf}

3.4.4.8. Configure DET44 interfaces

Configure inside and outside interfaces for DET44. Arguments: - node - DUT node to set DET44 interfaces on. Type: dictionary - int_in - Inside interface key. Type: string - int_out - Outside interface key. Type: string Example: | Configure DET44 interfaces | ${nodes[‘DUT1’]} | port5 | port6 |


Set DET44 Interface  ${dut1}  ${int_in}  is_inside=${True}
Set DET44 Interface  ${dut1}  ${int_out}  is_inside=${False}

3.4.4.9. Configure deterministic mode for NAT44

Set deterministic behaviour of NAT44 (DET44). This keyword also sets a test variable ${resetter} to hold a callable which resets VPP state. Keywords performing search will call it to get consistent trials. Tests which do not wish to reset NAT state should use ramp-up, so the resetter is not set if ${ramp_up_duration} variable is (defined and) nonzero. 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 |


${resetter} =  Set DET44 Mapping  ${node}  ${ip_in}  ${subnet_in}  ${ip_out}  ${subnet_out}
${ramp_up_rate} =  Get Ramp Up Rate
Return From Keyword If  ${ramp_up_rate}
Set Test Variable  \${resetter}

3.4.4.10. Initialize NAT44 deterministic mode in circular topology

Initialization of NAT44 deterministic mode (DET44) on DUT1 node.


Enable DET44 plugin on DUT  ${dut1}
Configure DET44 interfaces  ${dut1}  ${DUT1_${int}1}[0]  ${DUT1_${int}2}[0]
Configure deterministic mode for NAT44  ${dut1}  ${in_net}  ${in_mask}  ${out_net}  ${out_mask}

3.4.4.11. Show DET44 verbose

Get DET44 settings on the node. Arguments: - node - DUT node to show NAT. Type: dictionary Example: | Show DET44 verbose | ${nodes[‘DUT1’]} |


Show DET44  ${node}

3.4.4.12. Verify DET44 sessions number on DUT1 node

Verify that all required DET44 sessions are established on DUT1 node.


Verify DET44 sessions number  ${nodes['DUT1']}  ${n_sessions}

3.4.4.13. Verify DET44 sessions number

Verify that all required DET44 sessions are established. Arguments: - node - DUT node. Type: dictionary - exp_n_sessions - Expected number of DET44 sessions. Type: integer Example: | Verify DET44 sessions number | ${nodes[‘DUT1’]} | ${64512} |


${det44_sessions}=  Get DET44 Sessions Number  ${node}
Should Be Equal As Integers  ${det44_sessions}  ${exp_n_sessions}  Not all DET44 sessions have been established