3.9. overlay¶
3.9.1. gtpu suite¶
3.9.1.1. Initialize IP4 forwarding with GTPU tunnel in 3-node circular topology¶
Set UP state on VPP interfaces in path on nodes in 3-node circular topology. Create GTPU tunnel on both DUT nodes, 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. Gtpu offload rx will be enabled on both DUT nodes if offload is set to true. Arguments: - offload - False or True. Type: bool
VPP Interface Set IP Address ${dut1} ${DUT1_${int}1}[0] 10.10.10.1 24
VPP Interface Set IP Address ${dut1} ${DUT1_${int}2}[0] 1.1.1.2 30
VPP Interface Set IP Address ${dut2} ${DUT2_${int}1}[0] 1.1.1.1 30
VPP Interface Set IP Address ${dut2} ${DUT2_${int}2}[0] 20.20.20.1 24
VPP Add IP Neighbor ${dut1} ${DUT1_${int}1}[0] 10.10.10.2 ${TG_pf1_mac}[0]
VPP Add IP Neighbor ${dut1} ${DUT1_${int}2}[0] 1.1.1.1 ${DUT2_${int}1_mac}[0]
VPP Add IP Neighbor ${dut2} ${DUT2_${int}1}[0] 1.1.1.2 ${DUT1_${int}2_mac}[0]
VPP Add IP Neighbor ${dut2} ${DUT2_${int}2}[0] 20.20.20.2 ${TG_pf2_mac}[0]
${dut1_tunnel_if_index}= Create GTPU Tunnel Interface ${dut1} source_ip=1.1.1.2 destination_ip=1.1.1.1 teid=${10}
${dut2_tunnel_if_index}= Create GTPU Tunnel Interface ${dut2} source_ip=1.1.1.1 destination_ip=1.1.1.2 teid=${10}
Set Interface State ${dut1} ${dut1_tunnel_if_index} up
Set Interface State ${dut2} ${dut2_tunnel_if_index} up
VPP Interface Set IP Address ${dut1} ${dut1_tunnel_if_index} 10.10.1.2 24
VPP Interface Set IP Address ${dut2} ${dut2_tunnel_if_index} 10.10.1.1 24
Vpp Route Add ${dut1} 20.20.20.0 24 gateway=1.1.1.2 interface=${dut1_tunnel_if_index}
Vpp Route Add ${dut2} 10.10.10.0 24 gateway=1.1.1.1 interface=${dut2_tunnel_if_index}
Run keyword if ${offload} == ${True} Vpp Enable GTPU Offload rx ${dut1} ${DUT1_${int}2}[0] ${dut1_tunnel_if_index}
Run keyword if ${offload} == ${True} Vpp Enable GTPU Offload rx ${dut2} ${DUT2_${int}1}[0] ${dut2_tunnel_if_index}
3.9.2. lisp suite¶
3.9.2.1. Configure topology for IPv4 LISP testing¶
Setup topology for IPv4 LISP testing. Example: | Configure topology for IPv4 LISP testing |
Set interfaces in path up
VPP Interface Set IP Address ${dut1} ${DUT1_${int}1}[0] ${dut_if1_ip4} ${ip4_plen}
VPP Interface Set IP Address ${dut1} ${DUT1_${int}2}[0] ${dut_if2_ip4} ${ip4_plen}
VPP Add IP Neighbor ${dut1} ${DUT1_${int}1}[0] ${src_ip4} ${TG_pf1_mac}[0]
VPP Add IP Neighbor ${dut1} ${DUT1_${int}2}[0] ${dst_ip4} ${TG_pf2_mac}[0]
VPP Add IP Neighbor ${dut1} ${DUT1_${int}2}[0] ${tg_if2_ip4} ${TG_pf2_mac}[0]
3.9.2.2. Configure topology for IPv6 LISP testing¶
Setup topology fo IPv6 LISP testing. Example: | Configure topology for IPv6 LISP testing |
Set interfaces in path up
VPP Interface Set IP Address ${dut1} ${DUT1_${int}1}[0] ${dut_if1_ip6} ${ip6_plen}
VPP Interface Set IP Address ${dut1} ${DUT1_${int}2}[0] ${dut_if2_ip6} ${ip6_plen}
VPP Add IP Neighbor ${dut1} ${DUT1_${int}1}[0] ${src_ip6} ${TG_pf1_mac}[0]
VPP Add IP Neighbor ${dut1} ${DUT1_${int}2}[0] ${dst_ip6} ${TG_pf2_mac}[0]
VPP Add IP Neighbor ${dut1} ${DUT1_${int}2}[0] ${tg_if2_ip6} ${TG_pf2_mac}[0]
3.9.2.3. Configure LISP topology in 3-node circular topology¶
Set up Lisp static adjacency topology. Arguments: - dut1_node - DUT1 node. Type: dictionary - dut1_int_name - DUT1 node interface name. Type: string - dut1_int_index - DUT1 node interface index. Type: integer - dut2_node - DUT2 node. Type: dictionary - dut2_int_name - DUT2 node interface name. Type: string - dut2_int_index - DUT2 node interface index. Type: integer - locator_set - Locator set values. Type: dictionary - dut1_eid - Dut1 node eid address. Type: dictionary - dut2_eid - Dut2 node eid address. Type: dictionary - dut1_static_adjacency - Dut1 static adjacency. Type: dictionary - dut2_static_adjacency - Dut2 static address. Type: dictionary Return: - No value returned Example: | Configure LISP topology in 3-node circular topology | ${dut1_node} | ${interface_name} | None | ${dut2_node} | ${interface_name} | None | ${locator_set} | ${dut1_eid} | ${dut2_eid} | ${dut1_static_adjacency} | ${dut2_static_adjacency} |
${dut1_int_index}= Run Keyword If ${dut1_int_index} is None Get Interface Sw Index ${dut1_node} ${dut1_int_name} ELSE Set Variable ${dut1_int_index}
${dut2_int_index}= Run Keyword If ${dut2_int_index} is None Get Interface Sw Index ${dut2_node} ${dut2_int_name} ELSE Set Variable ${dut2_int_index}
Enable Lisp ${dut1_node}
Vpp Add Lisp Locator Set ${dut1_node} ${locator_set['locator_name']}
Vpp Add Lisp Locator ${dut1_node} ${locator_set['locator_name']} ${dut1_int_index} ${locator_set['priority']} ${locator_set['weight']}
Vpp Add Lisp Local Eid ${dut1_node} ${dut1_eid['locator_name']} ${dut1_eid['vni']} ${dut1_eid['eid']} ${dut1_eid['prefix']}
Vpp Add Lisp Remote Mapping ${dut1_node} ${dut1_static_adjacency['vni']} ${dut1_static_adjacency['deid']} ${dut1_static_adjacency['prefix']} ${dut1_static_adjacency['seid']} ${dut1_static_adjacency['prefix']} ${dut1_static_adjacency['rloc']}
Vpp Add Lisp Adjacency ${dut1_node} ${dut1_static_adjacency['vni']} ${dut1_static_adjacency['deid']} ${dut1_static_adjacency['prefix']} ${dut1_static_adjacency['seid']} ${dut1_static_adjacency['prefix']}
Enable Lisp ${dut2_node}
Vpp Add Lisp Locator Set ${dut2_node} ${locator_set['locator_name']}
Vpp Add Lisp Locator ${dut2_node} ${locator_set['locator_name']} ${dut2_int_index} ${locator_set['priority']} ${locator_set['weight']}
Vpp Add Lisp Local Eid ${dut2_node} ${dut2_eid['locator_name']} ${dut2_eid['vni']} ${dut2_eid['eid']} ${dut2_eid['prefix']}
Vpp Add Lisp Remote Mapping ${dut2_node} ${dut2_static_adjacency['vni']} ${dut2_static_adjacency['deid']} ${dut2_static_adjacency['prefix']} ${dut2_static_adjacency['seid']} ${dut2_static_adjacency['prefix']} ${dut2_static_adjacency['rloc']}
Vpp Add Lisp Adjacency ${dut2_node} ${dut2_static_adjacency['vni']} ${dut2_static_adjacency['deid']} ${dut2_static_adjacency['prefix']} ${dut2_static_adjacency['seid']} ${dut2_static_adjacency['prefix']}
3.9.2.4. Configure LISP in 2-node circular topology¶
Configure LISP topology in 2-node circular topology. Arguments: - dut1 - DUT1 node. Type: dictionary - dut1_if - DUT1 node interface. Type: string - dut1_int_index - DUT1 node interface index. Type: integer - locator_set - Locator set values. Type: dictionary - dut1_eid - DUT1 node eid address. Type: dictionary - dut1_static_adjacency - DUT1 static adjacency. Type: dictionary - is_gpe - To enable GPE. Other than zero to enable Type: integer - vni_table - vni table Eid Table Mapping Type: integer - vrf_table - vrf table Eid Table Mapping Type: integer Return: - No value returned Example: | Configure LISP in 2-node circular topology | ${dut1} | ${interface_name} | None | ${locator_set} | ${dut1_eid} | ${dut1_static_adjacency} |
${dut1_int_index}= Run Keyword If ${dut1_int_index} is None Get Interface Sw Index ${dut1} ${dut1_if} ELSE Set Variable ${dut1_int_index}
Enable Lisp ${dut1}
Run keyword if ${is_gpe} != 0 Enable Lisp GPE ${dut1}
Vpp Add Lisp Locator Set ${dut1} ${locator_set['locator_name']}
Vpp Add Lisp Locator ${dut1} ${locator_set['locator_name']} ${dut1_int_index} ${locator_set['priority']} ${locator_set['weight']}
Run keyword if ${is_gpe} != 0 Vpp Lisp Eid Table Mapping ${dut1} ${vni_table} vrf=${vrf_table}
Vpp Add Lisp Local Eid ${dut1} ${dut1_eid['locator_name']} ${dut1_eid['vni']} ${dut1_eid['eid']} ${dut1_eid['prefix']}
Vpp Add Lisp Remote Mapping ${dut1} ${dut1_static_adjacency['vni']} ${dut1_static_adjacency['deid']} ${dut1_static_adjacency['prefix']} ${dut1_static_adjacency['seid']} ${dut1_static_adjacency['prefix']} ${dut1_static_adjacency['rloc']}
Vpp Add Lisp Adjacency ${dut1} ${dut1_static_adjacency['vni']} ${dut1_static_adjacency['deid']} ${dut1_static_adjacency['prefix']} ${dut1_static_adjacency['seid']} ${dut1_static_adjacency['prefix']}
3.9.2.5. Configure topology for IPv6 LISPoIP4 testing¶
Setup topology fo IPv6 LISPoIPV4 testing. Example: | Configure topology for IPv6 LISPoIP4 testing |
Set interfaces in path up
VPP Interface Set IP Address ${dut1} ${DUT1_${int}1}[0] ${dut_if1_ip6} ${ip6_plen}
VPP Interface Set IP Address ${dut1} ${DUT1_${int}2}[0] ${dut_if2_ip4} ${ip4_plen}
VPP Add IP Neighbor ${dut1} ${DUT1_${int}1}[0] ${src_ip6} ${TG_pf1_mac}[0]
VPP Add IP Neighbor ${dut1} ${DUT1_${int}2}[0] ${dst_ip6} ${TG_pf2_mac}[0]
VPP Add IP Neighbor ${dut1} ${DUT1_${int}2}[0] ${tg_if2_ip4} ${TG_pf2_mac}[0]
3.9.2.6. Configure topology for IPv4 LISPoIP6 testing¶
Setup topology fo IPv4 LISPoIPV6 testing. Example: | Configure topology for IPv4 LISPoIP6 testing |
Set interfaces in path up
VPP Interface Set IP Address ${dut1} ${DUT1_${int}1}[0] ${dut_if1_ip4} ${ip4_plen}
VPP Interface Set IP Address ${dut1} ${DUT1_${int}2}[0] ${dut_if2_ip6} ${ip6_plen}
VPP Add IP Neighbor ${dut1} ${DUT1_${int}1}[0] ${src_ip4} ${TG_pf1_mac}[0]
VPP Add IP Neighbor ${dut1} ${DUT1_${int}2}[0] ${dst_ip4} ${TG_pf2_mac}[0]
VPP Add IP Neighbor ${dut1} ${DUT1_${int}2}[0] ${tg_if2_ip6} ${TG_pf2_mac}[0]
3.9.2.7. Initialize LISP IPv4 forwarding in 3-node circular topology¶
Custom setup of IPv4 addresses on all DUT nodes and TG Don`t set route. Arguments: - dut1_dut2_address - Ip address from DUT1 to DUT2. Type: string - dut1_tg_address - Ip address from DUT1 to tg. Type: string - dut2_dut1_address - Ip address from DUT2 to DUT1. Type: string - dut1_tg_address - Ip address from DUT1 to tg. Type: string - duts_prefix - ip prefix. Type: int Return: - No value returned Example: | Initialize LISP IPv4 forwarding in 3-node circular topology | ${dut1_dut2_address} | ${dut1_tg_address} | ${dut2_dut1_address} | ${dut2_tg_address} | ${duts_prefix} |
Set interfaces in path up
VPP Add IP Neighbor ${dut1} ${DUT1_${int}1}[0] 10.10.10.2 ${TG_pf1_mac}[0]
VPP Add IP Neighbor ${dut1} ${DUT1_${int}2}[0] ${dut2_dut1_address} ${DUT2_${int}1_mac}[0]
VPP Add IP Neighbor ${dut2} ${DUT2_${int}1}[0] ${dut1_dut2_address} ${DUT1_${int}2_mac}[0]
VPP Add IP Neighbor ${dut2} ${DUT2_${int}2}[0] 20.20.20.2 ${TG_pf2_mac}[0]
VPP Interface Set IP Address ${dut1} ${DUT1_${int}1}[0] ${dut1_tg_address} ${duts_prefix}
VPP Interface Set IP Address ${dut1} ${DUT1_${int}2}[0] ${dut1_dut2_address} ${duts_prefix}
VPP Interface Set IP Address ${dut2} ${DUT2_${int}1}[0] ${dut2_dut1_address} ${duts_prefix}
VPP Interface Set IP Address ${dut2} ${DUT2_${int}2}[0] ${dut2_tg_address} ${duts_prefix}
3.9.2.8. Initialize LISP GPE IPv4 over IPsec in 3-node circular topology¶
Setup Lisp GPE IPv4 forwarding over IPsec. Arguments: - encr_alg - Encryption algorithm. Type: string - auth_alg - Authentication algorithm. Type: string Return: - No value returned Example: | Initialize LISP GPE IPv4 over IPsec in 3-node circular topology| ${encr_alg} | ${auth_alg}
Generate keys for IPSec ${encr_alg} ${auth_alg}
Initialize LISP IPv4 forwarding in 3-node circular topology ${dut1_to_dut2_ip4} ${dut1_to_tg_ip4} ${dut2_to_dut1_ip4} ${dut2_to_tg_ip4} ${prefix4}
Configure LISP GPE topology in 3-node circular topology ${dut1} ${DUT1_${int}2}[0] ${NONE} ${dut2} ${DUT2_${int}1}[0] ${NONE} ${duts_locator_set} ${dut1_ip4_eid} ${dut2_ip4_eid} ${dut1_ip4_static_adjacency} ${dut2_ip4_static_adjacency}
Configure manual keyed connection for IPSec ${dut1} ${DUT1_${int}2}[0] ${encr_alg} ${encr_key} ${auth_alg} ${auth_key} ${dut1_spi} ${dut2_spi} ${dut1_to_dut2_ip4} ${dut2_to_dut1_ip4}
Configure manual keyed connection for IPSec ${dut2} ${DUT2_${int}1}[0] ${encr_alg} ${encr_key} ${auth_alg} ${auth_key} ${dut2_spi} ${dut1_spi} ${dut2_to_dut1_ip4} ${dut1_to_dut2_ip4}
3.9.2.9. Initialize LISP IPv6 forwarding in 3-node circular topology¶
Custom setup of IPv6 topology on all DUT nodes Don`t set route. Arguments: - dut1_dut2_address - Ip address from DUT1 to DUT2. Type: string - dut1_tg_address - Ip address from DUT1 to tg. Type: string - dut2_dut1_address - Ip address from DUT2 to DUT1. Type: string - dut1_tg_address - Ip address from DUT1 to tg. Type: string - duts_prefix - ip prefix. Type: int Return: - No value returned Example: | Initialize LISP IPv6 forwarding in 3-node circular topology | ${dut1_dut2_address} | ${dut1_tg_address} | ${dut2_dut1_address} | ${dut2_tg_address} | ${duts_prefix} |
Set interfaces in path up
VPP Interface Set IP Address ${dut1} ${DUT1_${int}1}[0] ${dut1_tg_address} ${prefix}
VPP Interface Set IP Address ${dut1} ${DUT1_${int}2}[0] ${dut1_dut2_address} ${prefix}
VPP Interface Set IP Address ${dut2} ${DUT2_${int}1}[0] ${dut2_dut1_address} ${prefix}
VPP Interface Set IP Address ${dut2} ${DUT2_${int}2}[0] ${dut2_tg_address} ${prefix}
Vpp Interfaces RA Suppress On All Nodes ${nodes}
VPP Add IP Neighbor ${dut1} ${DUT1_${int}1}[0] 2001:1::2 ${TG_pf1_mac}[0]
VPP Add IP Neighbor ${dut1} ${DUT1_${int}2}[0] ${dut2_dut1_address} ${DUT2_${int}1_mac}[0]
VPP Add IP Neighbor ${dut2} ${DUT2_${int}1}[0] ${dut1_dut2_address} ${DUT1_${int}2_mac}[0]
VPP Add IP Neighbor ${dut2} ${DUT2_${int}2}[0] 2001:2::2 ${TG_pf2_mac}[0]
3.9.2.10. Initialize LISP IPv4 over IPv6 forwarding in 3-node circular topology¶
Custom setup of IPv4 over IPv6 topology on all DUT nodes Don`t set route. Arguments: - dut1_dut2_ip6_address - IPv6 address from DUT1 to DUT2. Type: string - dut1_tg_ip4_address - IPv4 address from DUT1 to tg. Type: string - dut2_dut1_ip6_address - IPv6 address from DUT2 to DUT1. Type: string - dut1_tg_ip4_address - IPv4 address from DUT1 to tg. Type: string - prefix4 - IPv4 prefix. Type: int - prefix6 - IPv6 prefix. Type: int Return: - No value returned Example: | Lisp IPv4 over IPv6 forwarding initialized in a 3-node circular topology | ${dut1_dut2_ip6_address} | ${dut1_tg_ip4_address} | ${dut2_dut1_ip6_address} | ${dut2_tg_ip4_address} | ${prefix4} | ${prefix6} |
Set interfaces in path up
VPP Interface Set IP Address ${dut1} ${DUT1_${int}1}[0] ${dut1_tg_ip4_address} ${prefix4}
VPP Interface Set IP Address ${dut1} ${DUT1_${int}2}[0] ${dut1_dut2_ip6_address} ${prefix6}
VPP Interface Set IP Address ${dut2} ${DUT2_${int}1}[0] ${dut2_dut1_ip6_address} ${prefix6}
VPP Interface Set IP Address ${dut2} ${DUT2_${int}2}[0] ${dut2_tg_ip4_address} ${prefix4}
Vpp Interfaces RA Suppress On All Nodes ${nodes}
VPP Add IP Neighbor ${dut1} ${DUT1_${int}1}[0] 10.10.10.2 ${TG_pf1_mac}[0]
VPP Add IP Neighbor ${dut2} ${DUT2_${int}2}[0] 20.20.20.2 ${TG_pf2_mac}[0]
VPP Add IP Neighbor ${dut1} ${DUT1_${int}2}[0] ${dut2_dut1_ip6_address} ${DUT2_${int}1_mac}[0]
VPP Add IP Neighbor ${dut2} ${DUT2_${int}1}[0] ${dut1_dut2_ip6_address} ${DUT1_${int}2_mac}[0]
3.9.2.11. Initialize LISP IPv6 over IPv4 forwarding in 3-node circular topology¶
Custom setup of IPv4 over IPv6 topology on all DUT nodes Don`t set route. Arguments: - dut1_dut2_ip4_address - IPv4 address from DUT1 to DUT2. Type: string - dut1_tg_ip6_address - IPv6 address from DUT1 to tg. Type: string - dut2_dut1_ip4_address - IPv4 address from DUT2 to DUT1. Type: string - dut1_tg_ip6_address - IPv6 address from DUT1 to tg. Type: string - prefix4 - IPv4 prefix. Type: int - prefix6 - IPv6 prefix. Type: int Return: - No value returned Example: | Lisp IPv6 over IPv4 forwarding initialized in a 3-node circular topology | ${dut1_dut2_ip4_address} | ${dut1_tg_ip6_address} | ${dut2_dut1_ip4_address} | ${dut2_tg_ip6_address} | ${prefix6} | ${prefix4} |
Set interfaces in path up
VPP Interface Set IP Address ${dut1} ${DUT1_${int}1}[0] ${dut1_tg_ip6_address} ${prefix6}
VPP Interface Set IP Address ${dut1} ${DUT1_${int}2}[0] ${dut1_dut2_ip4_address} ${prefix4}
VPP Interface Set IP Address ${dut2} ${DUT2_${int}1}[0] ${dut2_dut1_ip4_address} ${prefix4}
VPP Interface Set IP Address ${dut2} ${DUT2_${int}2}[0] ${dut2_tg_ip6_address} ${prefix6}
Vpp Interfaces RA Suppress On All Nodes ${nodes}
VPP Add IP Neighbor ${dut1} ${DUT1_${int}1}[0] 2001:1::2 ${TG_pf1_mac}[0]
VPP Add IP Neighbor ${dut2} ${DUT2_${int}2}[0] 2001:2::2 ${TG_pf2_mac}[0]
VPP Add IP Neighbor ${dut1} ${DUT1_${int}2}[0] ${dut2_dut1_ip4_address} ${DUT2_${int}1_mac}[0]
VPP Add IP Neighbor ${dut2} ${DUT2_${int}1}[0] ${dut1_dut2_ip4_address} ${DUT1_${int}2_mac}[0]
3.9.3. lisp_api suite¶
3.9.3.1. Enable LISP¶
Enable LISP on VPP node. Arguments: - dut_node - DUT node. Type: dictionary Return: - No value returned Example: | Enable LISP | ${nodes[‘DUT1’]} |
Vpp Lisp Enable Disable ${dut_node} enable
3.9.3.2. Disable LISP¶
Disable LISP on VPP node. Arguments: - dut_node - DUT node. Type: dictionary Return: - No value returned Example: | Disable LISP | ${nodes[‘DUT1’]} |
Vpp Lisp Enable Disable ${dut_node} disable
3.9.3.3. Enable Lisp Gpe¶
Enable Lisp Gpe on VPP node. Arguments: - dut_node - DUT node. Type: dictionary Return: - No value returned Example: | Enable Lisp Gpe | ${nodes[‘DUT1’]} |
Vpp Lisp Gpe Enable Disable ${dut_node} enable
3.9.4. lispgpe suite¶
3.9.4.1. Configure LISP GPE topology in 3-node circular topology¶
Configure LISP GPE topology in 3-node circular topology. Arguments: - dut1_node - DUT1 node. Type: dictionary - dut1_if - DUT1 node interface. Type: string - dut1_int_index - DUT1 node interface index. Type: integer - dut2_node - DUT2 node. Type: dictionary - dut2_if - DUT2 node interface. Type: string - dut2_int_index - DUT2 node interface index. Type: integer - locator_set - Locator set values. Type: dictionary - dut1_eid - DUT1 node eid address. Type: dictionary - dut2_eid - DUT2 node eid address. Type: dictionary - dut1_static_adjacency - DUT1 static adjacency. Type: dictionary - dut2_static_adjacency - DUT2 static adjacency. Type: dictionary Return: - No value returned Example: | Configure LISP GPE topology in 3-node circular topology | ${dut1_node} | ${interface_name} | None | ${dut2_node} | ${interface_name} | None | ${locator_set} | ${dut1_eid} | ${dut2_eid} | ${dut1_static_adjacency} | ${dut2_static_adjacency} |
${dut1_int_index}= Run Keyword If ${dut1_int_index} is None Get Interface Sw Index ${dut1_node} ${dut1_if} ELSE Set Variable ${dut1_int_index}
Enable Lisp ${dut1_node}
Enable Lisp GPE ${dut1_node}
Vpp Add Lisp Locator Set ${dut1_node} ${locator_set['locator_name']}
Vpp Add Lisp Locator ${dut1_node} ${locator_set['locator_name']} ${dut1_int_index} ${locator_set['priority']} ${locator_set['weight']}
Vpp Lisp Eid Table Mapping ${dut1_node} ${vni_table} vrf=${vrf_table}
Vpp Add Lisp Local Eid ${dut1_node} ${dut1_eid['locator_name']} ${vni_table} ${dut1_eid['eid']} ${dut1_eid['prefix']}
Vpp Add Lisp Remote Mapping ${dut1_node} ${vni_table} ${dut1_static_adjacency['deid']} ${dut1_static_adjacency['prefix']} ${dut1_static_adjacency['seid']} ${dut1_static_adjacency['prefix']} ${dut1_static_adjacency['rloc']}
Vpp Add Lisp Adjacency ${dut1_node} ${vni_table} ${dut1_static_adjacency['deid']} ${dut1_static_adjacency['prefix']} ${dut1_static_adjacency['seid']} ${dut1_static_adjacency['prefix']}
${dut2_int_index}= Run Keyword If ${dut2_int_index} is None Get Interface Sw Index ${dut2_node} ${dut2_if} ELSE Set Variable ${dut2_int_index}
Enable Lisp ${dut2_node}
Enable Lisp GPE ${dut2_node}
Vpp Add Lisp Locator Set ${dut2_node} ${locator_set['locator_name']}
Vpp Add Lisp Locator ${dut2_node} ${locator_set['locator_name']} ${dut2_int_index} ${locator_set['priority']} ${locator_set['weight']}
Vpp Lisp Eid Table Mapping ${dut2_node} ${vni_table} vrf=${vrf_table}
Vpp Add Lisp Local Eid ${dut2_node} ${dut2_eid['locator_name']} ${vni_table} ${dut2_eid['eid']} ${dut2_eid['prefix']}
Vpp Add Lisp Remote Mapping ${dut2_node} ${vni_table} ${dut2_static_adjacency['deid']} ${dut2_static_adjacency['prefix']} ${dut2_static_adjacency['seid']} ${dut2_static_adjacency['prefix']} ${dut2_static_adjacency['rloc']}
Vpp Add Lisp Adjacency ${dut2_node} ${vni_table} ${dut2_static_adjacency['deid']} ${dut2_static_adjacency['prefix']} ${dut2_static_adjacency['seid']} ${dut2_static_adjacency['prefix']}
3.9.5. srv6 suite¶
3.9.5.1. Configure SR LocalSID on DUT¶
Create SRv6 LocalSID and binds it to a particularbehavior on the given DUT node. Arguments: - dut_node - DUT node where to create localSID on. Type: dictionary - local_sid - LocalSID IPv6 address. Type: string - behavior - SRv6 LocalSID function. Type: string - interface - Interface name (Optional, default value: None; required for L2/L3 xconnects). Type: string - next_hop - Next hop IPv4/IPv6 address (Optional, default value: None; required for L3 xconnects). Type: string - fib_table - FIB table for IPv4/IPv6 lookup (Optional, default value: None; required for L3 routing). Type: string - out_if - Interface name of local interface for sending traffic towards the Service Function (Optional, default value: None; required for SRv6 endpoint to SR-unaware appliance). Type: string - in_if - Interface name of local interface receiving the traffic coming back from the Service Function (Optional, default value: None; required for SRv6 endpoint to SR-unaware appliance). Type: string - src_addr - Source address on the packets coming back on in_if interface (Optional, default value: None; required for SRv6 endpoint to SR-unaware appliance via static proxy). Type: string - sid_list - SID list (Optional, default value: []; required for SRv6 endpoint to SR-unaware appliance via static proxy). Type: list Example: | Configure SR LocalSID on DUT | ${nodes[‘DUT1’]} | B:: | end | | Configure SR LocalSID on DUT | ${nodes[‘DUT1’]} | C:: | end.dx2 | interface=GigabitEthernet0/10/0 | | Configure SR LocalSID on DUT | ${nodes[‘DUT1’]} | D:: | end.dx4 | interface=GigabitEthernet0/8/0 | next_hop=10.0.0.1 | | Configure SR LocalSID on DUT | ${nodes[‘DUT2’]} | E:: | end.dt6 | fib_table=2 | | Configure SR LocalSID on DUT | ${nodes[‘DUT2’]} | E:: | end.ad | next_hop=10.0.0.1 | out_if=DUT2_VHOST1 | in_if=DUT2_VHOST2 | | Configure SR LocalSID on DUT | ${nodes[‘DUT2’]} | E:: | end.as | next_hop=10.0.0.1 | out_if=DUT2_VHOST1 | in_if=DUT2_VHOST2 | src_addr=B:: | sid_list=[‘C::’, ‘D::’] |
Configure SR LocalSID ${dut_node} ${local_sid} ${behavior} interface=${interface} next_hop=${next_hop} fib_table=${fib_table} out_if=${out_if} in_if=${in_if} src_addr=${src_addr} sid_list=${sid_list}
3.9.5.2. Show SR LocalSIDs on DUT¶
Show SRv6 LocalSIDs on the given DUT node. Arguments: - dut_node - DUT node where to show SR localSIDs on. Type: dictionary Example: | Show SR LocalSIDs on DUT | ${nodes[‘DUT1’]} |
Show SR LocalSIDs ${dut_node}
3.9.5.3. Configure SR Policy on DUT¶
Create SRv6 policy on the given DUT node. Arguments: - dut_node - DUT node where to create SRv6 policy on. Type: dictionary - bsid - BindingSID - local SID IPv6 address. Type: string - mode - Encapsulation / insertion mode. Type: string - sid_list - SID list. Type: list Example: | Configure SR Policy on DUT | ${nodes[‘DUT2’]} | A:: | encap | B::| C:: | | Configure SR Policy on DUT | ${nodes[‘DUT2’]} | D:: | insert | E::| F:: |
Configure SR Policy ${dut_node} ${bsid} ${sid_list} mode=${mode}
3.9.5.4. Show SR Policies on DUT¶
Show SRv6 policies on the given DUT node. Arguments: - dut_node - DUT node where to show SR policies on. Type: dictionary Example: | Show SR Policies on DUT | ${nodes[‘DUT1’]} |
Show SR Policies ${dut_node}
3.9.5.5. Configure SR Steer on DUT¶
Create SRv6 steering policy on the given DUT node. Arguments: - dut_node - DUT node where to create SR steering policy on. Type: dictionary - mode - Mode of operation - L2 or L3. Type: string - bsid - BindingSID - local SID IPv6 address. Type: string - interface - Interface name (Optional, default value: None; required in case of L2 mode). Type: string - ip_addr - IPv4/IPv6 address (Optional, default value: None; required in case of L3 mode). Type: string - prefix - IP address prefix (Optional, default value: None; required for L3 mode). Type: integer Example: | Configure SR Steer on DUT | ${nodes[‘DUT1’]} | L2 | B:: | interface=GigabitEthernet0/10/0 | | Configure SR Steer on DUT | ${nodes[‘DUT1’]} | L3 | C:: | ip_address=2001::1 | prefix=64 |
Configure SR Steer ${dut_node} ${mode} ${bsid} interface=${interface} ip_addr=${ip_addr} prefix=${prefix}
3.9.5.6. Show SR Steering Policies on DUT¶
Show SRv6 steering policies on the given DUT node. Arguments: - dut_node - DUT node where to show SR steering policies on. Type: dictionary Example: | Show SR Steering Policies on DUT | ${nodes[‘DUT1’]} |
Show SR Steering Policies ${dut_node}
3.9.5.7. Set SR Encaps Source Address on DUT¶
Set SRv6 encapsulation source address on the given DUT node. Arguments: - dut_node - DUT node where to set SRv6 encapsulation source address on. Type: dictionary - ip6_addr - Local SID IPv6 address. Type: string Example: | Set SR Encaps Source Address on DUT | ${nodes[‘DUT1’]} | B:: |
Set SR Encaps Source Address ${dut_node} ip6_addr=${ip6_addr}
3.9.5.8. Show SR Policies on all DUTs¶
Show SRv6 policies on all DUT nodes in topology. Arguments: - nodes - Topology. Type: dictionary Example: | Show SR Policies on all DUTs | ${nodes} |
FOR ${dut} IN @{duts}
\ Show SR Policies ${nodes['${dut}']}
3.9.5.9. Show SR Steering Policies on all DUTs¶
Show SRv6 steering policies on all DUT nodes in topology. Arguments: - nodes - Topology. Type: dictionary Example: | Show SR Steering Policies on all DUTs | ${nodes} |
FOR ${dut} IN @{duts}
\ Show SR Steering Policies ${nodes['${dut}']}
3.9.5.10. Show SR LocalSIDs on all DUTs¶
Show SRv6 LocalSIDs on all DUT nodes in topology. Arguments: - nodes - Topology. Type: dictionary Example: | Show SR LocalSIDs on all DUTs | ${nodes} |
FOR ${dut} IN @{duts}
\ Show SR LocalSIDs ${nodes['${dut}']}
3.9.5.11. Initialize SRv6 encapsulation with ‘${n}’ x SID ‘${prepos}’ decapsulation¶
Set UP state on VPP interfaces in path on node(s) in circular topology. Get the interface MAC addresses and setup neighbours on all VPP interfaces. Setup IPv6 addresses on all interfaces. Set segment routing for IPv6 for required number of SIDs and configure IPv6 routes on DUT node(s).
${n}${prepos}
${status} ${value}= Run Keyword And Ignore Error Variable Should Exist ${dut2}
${dut2_status}= Set Variable If '${status}' == 'PASS' ${True} ${False}
VPP Interface Set IP Address ${dut1} ${DUT1_${int}1}[0] ${dut1_if1_ip6} ${prefix}
VPP Interface Set IP Address ${dut1} ${DUT1_${int}2}[0] ${dut1_if2_ip6} ${prefix}
Run Keyword If ${dut2_status} VPP Interface Set IP Address ${dut2} ${DUT2_${int}1}[0] ${dut2_if1_ip6} ${prefix}
Run Keyword If ${dut2_status} VPP Interface Set IP Address ${dut2} ${DUT2_${int}2}[0] ${dut2_if2_ip6} ${prefix}
Vpp Interfaces RA Suppress On All Nodes ${nodes}
FOR ${number} IN RANGE 2 ${dst_addr_nr}+2
\ ${hexa_nr}= Convert To Hex ${number}
\ VPP Add IP Neighbor ${dut1} ${DUT1_${int}1}[0] ${tg_if1_ip6_subnet}${hexa_nr} ${TG_pf1_mac}[0]
\ Run Keyword If ${dut2_status} VPP Add IP Neighbor ${dut2} ${DUT2_${int}2}[0] ${tg_if2_ip6_subnet}${hexa_nr} ${TG_pf2_mac}[0]
Run Keyword If ${dut2_status} VPP Add IP Neighbor ${dut1} ${DUT1_${int}2}[0] ${dut2_if1_ip6} ${DUT2_${int}1_mac}[0]
Run Keyword Unless ${dut2_status} VPP Add IP Neighbor ${dut1} ${DUT1_${int}2}[0] ${dut2_if1_ip6} ${TG_pf2_mac}[0]
Run Keyword If ${dut2_status} VPP Add IP Neighbor ${dut2} ${DUT2_${int}1}[0] ${dut1_if2_ip6} ${DUT1_${int}2_mac}[0]
${sid1}= Set Variable If "${n}" == "1" ${dut2_sid1} "${n}" == "2" ${dut2_sid1_1}
${sid2}= Set Variable If "${n}" == "1" ${dut1_sid2} "${n}" == "2" ${dut1_sid2_1}
Vpp Route Add ${dut1} ${sid1} ${sid_prefix} gateway=${dut2_if1_ip6} interface=${DUT1_${int}2}[0]
Run Keyword If ${dut2_status} Vpp Route Add ${dut2} ${sid2} ${sid_prefix} gateway=${dut1_if2_ip6} interface=${DUT2_${int}1}[0]
Set SR Encaps Source Address on DUT ${dut1} ${dut1_sid1}
@{sid_list_dir0}= Run Keyword If '${n}' == '1' Create List ${dut2_sid1} ELSE IF '${n}' == '2' Create List ${dut2_sid1_1} ${dut2_sid1_2}
Configure SR Policy on DUT ${dut1} ${dut1_bsid} encap @{sid_list_dir0}
Configure SR Steer on DUT ${dut1} L3 ${dut1_bsid} ip_addr=${tg_if2_ip6_subnet} prefix=${sid_prefix}
Run Keyword If ${dut2_status} and '${n}' == '1' Configure SR LocalSID on DUT ${dut2} ${dut2_sid1} end.dx6 interface=${DUT2_${int}2}[0] next_hop=${tg_if2_ip6_subnet}2
Run Keyword If ${dut2_status} and '${n}' == '2' Configure SR LocalSID on DUT ${dut2} ${dut2_sid1_1} end
Run Keyword If ${dut2_status} and '${n}' == '2' and '${prepos}' != 'without' Configure SR LocalSID on DUT ${dut2} ${dut2_sid1_2} end.dx6 interface=${DUT2_${int}2}[0] next_hop=${tg_if2_ip6_subnet}2
Run Keyword If ${dut2_status} and '${n}' == '2' and '${prepos}' == 'without' Vpp Route Add ${dut2} ${dut2_sid1_2} ${sid_prefix} gateway=${tg_if2_ip6_subnet}2 interface=${DUT2_${int}2}[0]
Run Keyword If ${dut2_status} Set SR Encaps Source Address on DUT ${dut2} ${dut2_sid2}
@{sid_list_dir1}= Run Keyword If '${n}' == '1' Create List ${dut1_sid2} ELSE IF '${n}' == '2' Create List ${dut1_sid2_1} ${dut1_sid2_2}
Run Keyword If ${dut2_status} Configure SR Policy on DUT ${dut2} ${dut2_bsid} encap @{sid_list_dir1}
Run Keyword If ${dut2_status} Configure SR Steer on DUT ${dut2} L3 ${dut2_bsid} ip_addr=${tg_if1_ip6_subnet} prefix=${sid_prefix}
Run Keyword If '${n}' == '1' Configure SR LocalSID on DUT ${dut1} ${dut1_sid2} end.dx6 interface=${DUT1_${int}1}[0] next_hop=${tg_if1_ip6_subnet}2
Run Keyword If '${n}' == '2' Configure SR LocalSID on DUT ${dut1} ${dut1_sid2_1} end
Run Keyword If '${n}' == '2' and '${prepos}' != 'without' Configure SR LocalSID on DUT ${dut1} ${dut1_sid2_2} end.dx6 interface=${DUT1_${int}1}[0] next_hop=${tg_if1_ip6_subnet}2
Run Keyword If '${n}' == '2' and '${prepos}' == 'without' Vpp Route Add ${dut1} ${dut1_sid2_2} ${sid_prefix} gateway=${tg_if1_ip6_subnet}2 interface=${DUT1_${int}1}[0]
Set interfaces in path up
3.9.5.12. Initialize SRv6 with ‘${behavior}’ SR-unaware Service Function¶
Create pair of Memif interfaces on all defined VPP nodes. Set UP state on VPP interfaces in path on node(s) in circular topology. Get the interface MAC addresses and setup neighbours on all VPP interfaces. Setup IPv6 addresses on all interfaces. Set segment routing for IPv6 with defined behaviour function and configure IPv6 routes on DUT node(s). Note: KW uses test variable rxq_count_int set by KW Add worker threads and rxqueues to all DUTs
${behavior}
${status} ${value}= Run Keyword And Ignore Error Variable Should Exist ${dut2}
${dut2_status}= Set Variable If '${status}' == 'PASS' ${True} ${False}
${sock1}= Set Variable memif-DUT1_CNF
${sock2}= Set Variable memif-DUT2_CNF
Set up memif interfaces on DUT node ${dut1} ${sock1} ${sock1} ${1} dut1-memif-1-if1 dut1-memif-1-if2 ${rxq_count_int} ${rxq_count_int}
VPP Set interface MTU ${dut1} ${dut1-memif-1-if1}
VPP Set interface MTU ${dut1} ${dut1-memif-1-if2}
Run Keyword If ${dut2_status} Set up memif interfaces on DUT node ${dut2} ${sock2} ${sock2} ${1} dut2-memif-1-if1 dut2-memif-1-if2 ${rxq_count_int} ${rxq_count_int}
Run Keyword If ${dut2_status} VPP Set interface MTU ${dut2} ${dut2-memif-1-if1}
Run Keyword If ${dut2_status} VPP Set interface MTU ${dut2} ${dut2-memif-1-if2}
FOR ${dut} IN @{duts}
\ Show Memif ${nodes['${dut}']}
VPP Interface Set IP Address ${dut1} ${DUT1_${int}1}[0] ${dut1_if1_ip6} ${prefix}
VPP Interface Set IP Address ${dut1} ${DUT1_${int}2}[0] ${dut1_if2_ip6} ${prefix}
VPP Interface Set IP Address ${dut1} ${dut1-memif-1-if1} ${dut1-memif-1-if1_ip6} ${mem_prefix}
VPP Interface Set IP Address ${dut1} ${dut1-memif-1-if2} ${dut1-memif-1-if2_ip6} ${mem_prefix}
Run Keyword If ${dut2_status} VPP Interface Set IP Address ${dut2} ${DUT2_${int}1}[0] ${dut2_if1_ip6} ${prefix}
Run Keyword If ${dut2_status} VPP Interface Set IP Address ${dut2} ${DUT2_${int}2}[0] ${dut2_if2_ip6} ${prefix}
Run Keyword If ${dut2_status} VPP Interface Set IP Address ${dut2} ${dut2-memif-1-if1} ${dut2-memif-1-if1_ip6} ${mem_prefix}
Run Keyword If ${dut2_status} VPP Interface Set IP Address ${dut2} ${dut2-memif-1-if2} ${dut2-memif-1-if2_ip6} ${mem_prefix}
Vpp Interfaces RA Suppress On All Nodes ${nodes}
Run Keyword If ${dut2_status} VPP Add IP Neighbor ${dut1} ${DUT1_${int}2}[0] ${dut2_if1_ip6} ${DUT2_${int}1_mac}[0]
Run Keyword Unless ${dut2_status} VPP Add IP Neighbor ${dut1} ${DUT1_${int}2}[0] ${dut2_if1_ip6} ${TG_pf2_mac}[0]
Run Keyword If ${dut2_status} VPP Add IP Neighbor ${dut2} ${DUT2_${int}1}[0] ${dut1_if2_ip6} ${DUT1_${int}2_mac}[0]
VPP Add IP Neighbor ${dut1} ${DUT1_${int}1}[0] ${tg_if1_ip6_subnet}2 ${TG_pf1_mac}[0]
Run Keyword If ${dut2_status} VPP Add IP Neighbor ${dut2} ${DUT2_${int}2}[0] ${tg_if2_ip6_subnet}2 ${TG_pf2_mac}[0]
${dut1-memif-1-if2_mac}= Get Interface MAC ${dut1} memif2
${dut2-memif-1-if2_mac}= Run Keyword If ${dut2_status} Get Interface MAC ${dut2} memif2
VPP Add IP Neighbor ${dut1} ${dut1-memif-1-if1} ${dut1_nh} ${dut1-memif-1-if2_mac}
Run Keyword If ${dut2_status} VPP Add IP Neighbor ${dut2} ${dut2-memif-1-if1} ${dut2_nh} ${dut2-memif-1-if2_mac}
Vpp Route Add ${dut1} ${dut2_sid1} ${sid_prefix} gateway=${dut2_if1_ip6} interface=${DUT1_${int}2}[0]
Vpp Route Add ${dut1} ${out_sid2_1} ${sid_prefix} gateway=${tg_if1_ip6_subnet}2 interface=${DUT1_${int}1}[0]
Run Keyword If ${dut2_status} Vpp Route Add ${dut2} ${dut1_sid2} ${sid_prefix} gateway=${dut1_if2_ip6} interface=${DUT2_${int}1}[0]
Run Keyword If ${dut2_status} Vpp Route Add ${dut2} ${out_sid1_1} ${sid_prefix} gateway=${tg_if2_ip6_subnet}2 interface=${DUT2_${int}2}[0]
Set SR Encaps Source Address on DUT ${dut1} ${dut1_sid1}
@{sid_list_dir0}= Create List ${dut2_sid1} ${out_sid1_1} ${out_sid1_2}
Configure SR Policy on DUT ${dut1} ${dut1_bsid} encap @{sid_list_dir0}
Configure SR Steer on DUT ${dut1} L3 ${dut1_bsid} ip_addr=${tg_if2_ip6_subnet} prefix=${sid_prefix}
Run Keyword If ${dut2_status} Set SR Encaps Source Address on DUT ${dut2} ${dut2_sid2}
@{sid_list_dir1}= Create List ${dut1_sid2} ${out_sid2_1} ${out_sid2_2}
Run Keyword If ${dut2_status} Configure SR Policy on DUT ${dut2} ${dut2_bsid} encap @{sid_list_dir1}
Run Keyword If ${dut2_status} Configure SR Steer on DUT ${dut2} L3 ${dut2_bsid} ip_addr=${tg_if1_ip6_subnet} prefix=${sid_prefix}
${dut2_out_if}= Run Keyword If ${dut2_status} Get Interface Name ${dut2} memif1
${dut2_in_if}= Run Keyword If ${dut2_status} Get Interface Name ${dut2} memif2
Remove Values From List ${sid_list_dir0} ${dut2_sid1}
Run Keyword If ${dut2_status} and '${behavior}' == 'static_proxy' Configure SR LocalSID on DUT ${dut2} ${dut2_sid1} end.as ${NONE} ${dut2_nh} ${NONE} ${dut2_out_if} ${dut2_in_if} ${dut1_sid1} @{sid_list_dir0} ELSE IF ${dut2_status} and '${behavior}' == 'dynamic_proxy' Configure SR LocalSID on DUT ${dut2} ${dut2_sid1} end.ad next_hop=${dut2_nh} out_if=${dut2_out_if} in_if=${dut2_in_if} ELSE IF ${dut2_status} and '${behavior}' == 'masquerading' Configure SR LocalSID on DUT ${dut2} ${dut2_sid1} end.am next_hop=${dut2_nh} out_if=${dut2_out_if} in_if=${dut2_in_if} ELSE IF ${dut2_status} Fail Unsupported behaviour: ${behavior}
${dut1_out_if}= Get Interface Name ${dut1} memif1
${dut1_in_if}= Get Interface Name ${dut1} memif2
Remove Values From List ${sid_list_dir1} ${dut1_sid2}
Run Keyword If '${behavior}' == 'static_proxy' Configure SR LocalSID on DUT ${dut1} ${dut1_sid2} end.as ${NONE} ${dut1_nh} ${NONE} ${dut1_out_if} ${dut1_in_if} ${dut2_sid2} @{sid_list_dir1} ELSE IF '${behavior}' == 'dynamic_proxy' Configure SR LocalSID on DUT ${dut1} ${dut1_sid2} end.ad next_hop=${dut1_nh} out_if=${dut1_out_if} in_if=${dut1_in_if} ELSE IF '${behavior}' == 'masquerading' Configure SR LocalSID on DUT ${dut1} ${dut1_sid2} end.am next_hop=${dut1_nh} out_if=${dut1_out_if} in_if=${dut1_in_if} ELSE Fail Unsupported behaviour: ${behavior}
Set interfaces in path up