From 6721e7f09aa95bff6622068332a3f56afad9c87b Mon Sep 17 00:00:00 2001 From: Tibor Frank Date: Tue, 20 Jun 2017 13:57:08 +0200 Subject: CSIT-687: Directory structure reorganization Change-Id: I772c9e214be2461adf58124998d272e7d795220f Signed-off-by: Tibor Frank Signed-off-by: Maciek Konstantynowicz --- resources/libraries/robot/overlay/gre.robot | 182 ++++++++++ resources/libraries/robot/overlay/l2lisp.robot | 77 ++++ resources/libraries/robot/overlay/lisp_api.robot | 399 +++++++++++++++++++++ .../robot/overlay/lisp_static_adjacency.robot | 168 +++++++++ resources/libraries/robot/overlay/lispgpe.robot | 126 +++++++ resources/libraries/robot/overlay/vxlan.robot | 135 +++++++ 6 files changed, 1087 insertions(+) create mode 100644 resources/libraries/robot/overlay/gre.robot create mode 100644 resources/libraries/robot/overlay/l2lisp.robot create mode 100644 resources/libraries/robot/overlay/lisp_api.robot create mode 100644 resources/libraries/robot/overlay/lisp_static_adjacency.robot create mode 100644 resources/libraries/robot/overlay/lispgpe.robot create mode 100644 resources/libraries/robot/overlay/vxlan.robot (limited to 'resources/libraries/robot/overlay') diff --git a/resources/libraries/robot/overlay/gre.robot b/resources/libraries/robot/overlay/gre.robot new file mode 100644 index 0000000000..0e825f05fb --- /dev/null +++ b/resources/libraries/robot/overlay/gre.robot @@ -0,0 +1,182 @@ +# Copyright (c) 2016 Cisco and/or its affiliates. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +*** Settings *** +| Resource | resources/libraries/robot/shared/interfaces.robot + +*** Keywords *** +| Create GRE tunnel interface and set it up +| | [Documentation] | Create GRE tunnel interface and set it up on defined VPP node and put \ +| | ... | the interface to UP state. +| | ... +| | ... | *Arguments:* +| | ... | - dut_node - DUT node where to create GRE tunnel. Type: dictionary +| | ... | - source_ip_address - GRE tunnel source IP address. Type: string +| | ... | - destination_ip_address - GRE tunnel destination IP address. +| | ... | Type: string +| | ... +| | ... | *Return:* +| | ... | - name - Name of created GRE tunnel interface. Type: string +| | ... | - index - SW interface index of created GRE tunnel interface. +| | ... | Type: integer +| | ... +| | ... | *Example:* +| | ... +| | ... | \| ${gre_name} \| ${gre_index}= \ +| | ... | \| Create GRE tunnel interface and set it up \| ${dut} \ +| | ... | \| 192.0.1.1 \| 192.0.1.2 \| +| | ... +| | [Arguments] | ${dut_node} | ${source_ip_address} | ${destination_ip_address} +| | ${name} | ${index}= | Create GRE tunnel interface +| | ... | ${dut_node} | ${source_ip_address} | ${destination_ip_address} +| | Set Interface State | ${dut_node} | ${index} | up +| | [Return] | ${name} | ${index} + + +| Send ICMPv4 and check received GRE header +| | [Documentation] | Send ICMPv4 packet and check if received packed contains \ +| | ... | correct GRE, IP, MAC headers. +| | ... +| | ... | *Arguments:* +| | ... | - tg_node - Node where to run traffic script. Type: dictionary +| | ... | - tx_if - Interface from where send ICPMv4 packet. Type: string +| | ... | - rx_if - Interface where to receive GRE packet. Type: string +| | ... | - tx_dst_mac - Destination MAC address of ICMP packet. Type: string +| | ... | - rx_dst_mac - Expected destination MAC address of GRE packet. +| | ... | Type: string +| | ... | - inner_src_ip - Source IP address of ICMP packet. Type: string +| | ... | - inner_dst_ip - Destination IP address of ICMP packet. +| | ... | Type: string +| | ... | - outer_src_ip - Source IP address of GRE packet. Type: string +| | ... | - outer_dst_ip - Destination IP address of GRE packet. +| | ... | Type: string +| | ... +| | ... | *Return:* +| | ... | - No value returned +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Send ICMPv4 and check received GRE header \ +| | ... | \| ${tg_node} \| ${tg_to_dut_if1} \| ${tg_to_dut_if2} \ +| | ... | \| ${tx_dst_mac} \| ${rx_dst_mac} \| ${net1_host_address} \ +| | ... | \| ${net2_host_address} \| ${dut1_ip_address} \| ${dut2_ip_address} \| +| | ... +| | [Arguments] | ${tg_node} | ${tx_if} | ${rx_if} +| | ... | ${tx_dst_mac} | ${rx_dst_mac} +| | ... | ${inner_src_ip} | ${inner_dst_ip} +| | ... | ${outer_src_ip} | ${outer_dst_ip} +| | ${tx_if_name}= | Get interface name | ${tg_node} | ${tx_if} +| | ${rx_if_name}= | Get interface name | ${tg_node} | ${rx_if} +| | ${args}= | Catenate | --tx_if | ${tx_if_name} | --rx_if | ${rx_if_name} +| | ... | --tx_dst_mac | ${tx_dst_mac} | --rx_dst_mac | ${rx_dst_mac} +| | ... | --inner_src_ip | ${inner_src_ip} | --inner_dst_ip | ${inner_dst_ip} +| | ... | --outer_src_ip | ${outer_src_ip} | --outer_dst_ip | ${outer_dst_ip} +| | Run Traffic Script On Node +| | ... | send_icmp_check_gre_headers.py | ${tg_node} | ${args} + + +| Send GRE and check received ICMPv4 header +| | [Documentation] | Send IPv4 ICMPv4 packet encapsulated into GRE and \ +| | ... | check IP, MAC headers on received packed. +| | ... +| | ... | *Arguments:* +| | ... | - tg_node - Node where to run traffic script. Type: dictionary +| | ... | - tx_if - Interface from where send ICPMv4 packet. Type: string +| | ... | - rx_if - Interface where receive GRE packet. Type: string +| | ... | - tx_dst_mac - Destination MAC address of GRE packet. Type: string +| | ... | - rx_dst_mac - Expected destination MAC address of ICMP packet. +| | ... | Type: string +| | ... | - inner_src_ip - Source IP address of ICMP packet. Type: string +| | ... | - inner_dst_ip - Destination IP address of ICMP packet. +| | ... | Type: string +| | ... | - outer_src_ip - Source IP address of GRE packet. Type: string +| | ... | - outer_dst_ip - Destination IP address of GRE packet. +| | ... | Type: string +| | ... +| | ... | *Return:* +| | ... | - No value returned +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Send GRE and check received ICMPv4 header \| ${tg_node} \ +| | ... | \| ${tg_to_dut_if2} \| ${tg_to_dut_if1} \| ${tx_dst_mac} \ +| | ... | \| ${rx_dst_mac} \| ${net2_host_address} \| ${net1_host_address} \ +| | ... | \| ${dut2_ip_address} \| ${dut1_ip_address} \| +| | ... +| | [Arguments] | ${tg_node} | ${tx_if} | ${rx_if} +| | ... | ${tx_dst_mac} | ${rx_dst_mac} +| | ... | ${inner_src_ip} | ${inner_dst_ip} +| | ... | ${outer_src_ip} | ${outer_dst_ip} +| | ${tx_if_name}= | Get interface name | ${tg_node} | ${tx_if} +| | ${rx_if_name}= | Get interface name | ${tg_node} | ${rx_if} +| | ${args}= | Catenate | --tx_if | ${tx_if_name} | --rx_if | ${rx_if_name} +| | ... | --tx_dst_mac | ${tx_dst_mac} | --rx_dst_mac | ${rx_dst_mac} +| | ... | --inner_src_ip | ${inner_src_ip} | --inner_dst_ip | ${inner_dst_ip} +| | ... | --outer_src_ip | ${outer_src_ip} | --outer_dst_ip | ${outer_dst_ip} +| | Run Traffic Script On Node +| | ... | send_gre_check_icmp_headers.py | ${tg_node} | ${args} + +| Send GRE and check received GRE header +| | [Documentation] | Send IPv4 UDP packet encapsulated into GRE and \ +| | ... | check if received packed contains correct MAC GRE, IP, UDP headers. +| | ... +| | ... | *Arguments:* +| | ... | - tg_node - Node where to run traffic script. Type: dictionary +| | ... | - tx_if - Interface from where send GRE packet. Type: string +| | ... | - rx_if - Interface where to receive GRE packet. Type: string +| | ... | - tx_dst_mac - Destination MAC address of transferred packet. +| | ... | Type: string +| | ... | - tx_src_mac - Source MAC address of transferred packet. Type: string +| | ... | - tx_outer_dst_ip - Destination IP address of GRE packet. Type: string +| | ... | - tx_outer_src_ip - Source IP address of GRE packet. Type: string +| | ... | - tx_inner_dst_ip - Destination IP address of UDP packet. Type: string +| | ... | - tx_inner_src_ip - Source IP address of UDP packet. Type: string +| | ... | - rx_dst_mac - Expected destination MAC address. Type: string +| | ... | - rx_src_mac - Expected source MAC address. Type: string +| | ... | - rx_outer_dst_ip - Expected destination IP address of received GRE +| | ... | packet. Type: string +| | ... | - rx_outer_src_ip - Expected source IP address of received GRE +| | ... | packet. Type: string +| | ... +| | ... | __Note:__ +| | ... | rx_inner_dst_ip and rx_inner_src_ip should be same as transferred +| | ... +| | ... | *Return:* +| | ... | - No value returned +| | ... +| | ... | *Example:* +| | ... | \| Send GRE and check received GRE header \| ${tg_node} \ +| | ... | \| port3 \| port3 \| 08:00:27:f3:be:f0 \| 08:00:27:46:2b:4c \ +| | ... | \| 10.0.0.1 \| 10.0.0.2 \| 192.168.3.100 \| 192.168.2.100 \ +| | ... | \| 08:00:27:46:2b:4c \| 08:00:27:f3:be:f0 \| 10.0.0.3 \| 10.0.0.1 \| +| | ... +| | [Arguments] | ${tg_node} | ${tx_if} | ${rx_if} +| | ... | ${tx_dst_mac} | ${tx_src_mac} +| | ... | ${tx_outer_dst_ip} | ${tx_outer_src_ip} +| | ... | ${tx_inner_dst_ip} | ${tx_inner_src_ip} +| | ... | ${rx_dst_mac} | ${rx_src_mac} +| | ... | ${rx_outer_dst_ip} | ${rx_outer_src_ip} +| | ${tx_if_name}= | Get interface name | ${tg_node} | ${tx_if} +| | ${rx_if_name}= | Get interface name | ${tg_node} | ${rx_if} +| | ${args}= | Catenate | --tx_if | ${tx_if_name} | --rx_if | ${rx_if_name} +| | ... | --tx_dst_mac | ${tx_dst_mac} | --tx_src_mac | ${tx_src_mac} +| | ... | --tx_outer_dst_ip | ${tx_outer_dst_ip} +| | ... | --tx_outer_src_ip | ${tx_outer_src_ip} +| | ... | --tx_inner_dst_ip | ${tx_inner_dst_ip} +| | ... | --tx_inner_src_ip | ${tx_inner_src_ip} +| | ... | --rx_dst_mac | ${rx_dst_mac} +| | ... | --rx_src_mac | ${rx_src_mac} +| | ... | --rx_outer_dst_ip | ${rx_outer_dst_ip} +| | ... | --rx_outer_src_ip | ${rx_outer_src_ip} +| | Run Traffic Script On Node +| | ... | send_gre_check_gre_headers.py | ${tg_node} | ${args} diff --git a/resources/libraries/robot/overlay/l2lisp.robot b/resources/libraries/robot/overlay/l2lisp.robot new file mode 100644 index 0000000000..5dcfcc5971 --- /dev/null +++ b/resources/libraries/robot/overlay/l2lisp.robot @@ -0,0 +1,77 @@ +# Copyright (c) 2016 Cisco and/or its affiliates. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +*** Settings *** +| Documentation | LISP-gpe encapsulation suite keywords +| Library | resources.libraries.python.topology.Topology +| Resource | resources/libraries/robot/overlay/lisp_api.robot +| Library | resources.libraries.python.LispSetup.LispLocatorSet +| Library | resources.libraries.python.LispSetup.LispLocator +| Library | resources.libraries.python.LispSetup.LispLocalEid +| Library | resources.libraries.python.LispSetup.LispAdjacency +| Library | resources.libraries.python.LispSetup.LispRemoteMapping +| Library | resources.libraries.python.LispSetup.LispMapResolver +| Library | resources.libraries.python.LispSetup.LispEidTableMap + +*** Keywords *** +| Configure L2 LISP on DUT +| | [Documentation] | Set up LISP L2 topology. +| | ... +| | ... | *Arguments:* +| | ... | - dut_node - DUT node. Type: dictionary +| | ... | - adjacency - DUT static adjacency settings. Type: dict +| | ... | - settings - DUT other LISP related settings. Type: dict +| | ... +| | ... | *Return:* +| | ... | - No value returned +| | ... +| | ... | *Example:* +| | ... | \| Configure LISP GPE topology in 3-node circular topology \| ${dut_node} \| ${adjacency} \ +| | ... | \| ${settings} \| +| | ... +| | [Arguments] +| | ... | ${dut_node} | ${adjacency} | ${settings} +| | ... +| | ${int_idx}= | Get Interface Sw Index | ${dut_node} | ${${adjacency['int']}} +| | Enable Lisp | ${dut_node} +| | Vpp Add Lisp Locator Set | ${dut_node} +| | ... | ${settings['locator_name']} +| | Vpp Add Lisp Locator | ${dut_node} +| | ... | ${settings['locator_name']} +| | ... | ${int_idx} +| | ... | ${settings['priority']} +| | ... | ${settings['weight']} +| | Vpp Lisp Eid Table Mapping | ${dut_node} +| | ... | ${settings['vni']} +| | ... | bd_id=${settings['bd']} +| | Vpp Add Lisp Local Eid | ${dut_node} +| | ... | ${settings['locator_name']} +| | ... | ${settings['vni']} +| | ... | ${adjacency['seid']} +| | Vpp Add Map Resolver | ${dut_node} +| | ... | ${adjacency['map_res']} +| | Vpp Add Lisp Remote Mapping | ${dut_node} +| | ... | ${settings['vni']} +| | ... | ${adjacency['eid']} +| | ... | 0 +| | ... | ${adjacency['seid']} +| | ... | 0 +| | ... | ${adjacency['rloc']} +| | ... | is_mac=${TRUE} +| | Vpp Add Lisp Adjacency | ${dut_node} +| | ... | ${settings['vni']} +| | ... | ${adjacency['eid']} +| | ... | 0 +| | ... | ${adjacency['seid']} +| | ... | 0 +| | ... | is_mac=${TRUE} diff --git a/resources/libraries/robot/overlay/lisp_api.robot b/resources/libraries/robot/overlay/lisp_api.robot new file mode 100644 index 0000000000..1485a405a6 --- /dev/null +++ b/resources/libraries/robot/overlay/lisp_api.robot @@ -0,0 +1,399 @@ +# Copyright (c) 2016 Cisco and/or its affiliates. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +*** Settings *** +| Resource | resources/libraries/robot/shared/interfaces.robot +| Library | resources.libraries.python.NodePath +| Library | resources.libraries.python.LispSetup.LispStatus +| Library | resources.libraries.python.LispSetup.LispSetup +| Library | resources.libraries.python.LispSetup.LispGpeStatus +| Library | resources.libraries.python.LispUtil + +*** Keywords *** + +| Generate LISP locator_set data +| | [Documentation] | Generate lisp locator_set data for test +| | ... | the lisp locator_set and locator API. +| | ... +| | ... | *Arguments:* +| | ... | - dut_node - DUT node. Type: dictionary +| | ... | - locator_set_number - Number how many locator_set data +| | ... | will be generated. Type: integer +| | ... +| | ... | *Return:* +| | ... | - No value returned +| | ... +| | ... | _NOTE:_ This KW sets following test case variables: +| | ... | - locator_set_values - New generated locator_set data. +| | ... | - locator_set_values_vat - New generated locator_set data expected\ +| | ... | from VAT. +| | ... +| | ... | *Example:* +| | ... | \| Given Generate LISP locator_set data \| ${nodes['DUT1']} \ +| | ... | \| ${locator_set_number} \| +| | ... +| | [Arguments] | ${dut_node} | ${locator_set_number} +| | ${locator_set_values} | ${locator_set_values_vat}= +| | ... | Generate Unique Lisp Locator Set Data +| | ... | ${dut_node} | ${locator_set_number} +| | Set Test Variable | ${locator_set_values} +| | Set Test Variable | ${locator_set_values_vat} + +| Configure LISP locator_set data +| | [Documentation] | Set the lisp locator_set and locator on the VPP node. +| | ... +| | ... | *Arguments:* +| | ... | - dut_node - DUT node. Type: dictionary +| | ... +| | ... | *Return:* +| | ... | - No value returned +| | ... +| | ... | _NOTE:_ This KW requires following test case variables: +| | ... | - locator_set_values - Generated locator_set data from +| | ... | KW locator_set data is prepared, which will be set on the VPP node. +| | ... +| | ... | *Example:* +| | ... | \| When Configure LISP locator_set data \| ${nodes['DUT1']} \| +| | ... +| | [Arguments] | ${dut_node} +| | Vpp Set Lisp Locator Set | ${dut_node} | ${locator_set_values} + +| LISP locator_set shpuld be configured correctly +| | [Documentation] | Test if the locator_set is set correctly on the VPP node. +| | ... +| | ... | *Arguments:* +| | ... | - dut_node - DUT node. Type: dictionary +| | ... +| | ... | *Return:* +| | ... | - No value returned +| | ... +| | ... | _NOTE:_ This KW requires following test case variables: +| | ... | - locator_set_values_vat - Generated locator_set data from +| | ... | KW locator_set data is prepared, which are expected from VPP via VAT. +| | ... +| | ... | *Example:* +| | ... | \| Then LISP locator_set shpuld be configured correctly \ +| | ... | \| ${nodes['DUT1']} \| +| | ... +| | [Arguments] | ${dut_node} +| | ${show_locator_set}= | Vpp Show Lisp Locator Set | ${dut_node} | local +| | Lisp Locator S Should Be Equal +| | ... | ${locator_set_values_vat} | ${show_locator_set} + +| Delete all LISP locator_set from VPP +| | [Documentation] | Delete all lisp locator_set on the VPP node. +| | ... +| | ... | *Arguments:* +| | ... | - dut_node - DUT node. Type: dictionary +| | ... +| | ... | *Return:* +| | ... | - No value returned +| | ... +| | ... | _NOTE:_ This KW requires following test case variables: +| | ... | - locator_set_values - Generated locator_set data from +| | ... | KW locator_set data is prepared, which was set on the VPP node. +| | ... +| | ... | *Example:* +| | ... | \| When Delete all LISP locator_set from VPP \ +| | ... | \| ${nodes['DUT1']} \| +| | ... +| | [Arguments] | ${dut_node} +| | Vpp Unset Lisp Locator Set | ${dut_node} | ${locator_set_values} + +| LISP locator_set should be unset +| | [Documentation] | Test if all locator_set are unset from VPP node. +| | ... +| | ... | *Arguments:* +| | ... | - dut_node - DUT node. Type: dictionary +| | ... +| | ... | *Return:* +| | ... | - No value returned +| | ... +| | ... | *Example:* +| | ... | \| Then LISP locator_set should be unset \| ${nodes['DUT1']} \| +| | ... +| | [Arguments] | ${dut_node} +| | ${show_locator_set}= | Vpp Show Lisp Locator Set | ${dut_node} | ${EMPTY} +| | Lisp Is Empty | ${show_locator_set} + +| Lisp locator_set data use for test reset locator_set are prepared +| | [Documentation] | Generate lisp special type of locator_set data. +| | ... | This data will be use for test reset locator_set. +| | ... +| | ... | *Arguments:* +| | ... | - dut_node - DUT node. Type: dictionary +| | ... | - locator_set_number - Number how many locator_set data +| | ... | it will generate. Type: integer +| | ... +| | ... | *Return:* +| | ... | - No value returned +| | ... +| | ... | _NOTE:_ This KW sets following test case variables: +| | ... | - locator_set_values - New generate locator_set data. +| | ... | - locator_set_values_vat - New generated locator_set data expected\ +| | ... | from VAT. +| | ... +| | ... | *Example:* +| | ... | \| Given Lisp locator_set data use for test reset locator_set \ +| | ... | are prepared \| ${nodes['DUT1']} \| ${locator_set_number} \| +| | ... +| | [Arguments] | ${dut_node} | ${locator_set_number} +| | ${locator_set_values} | ${locator_set_values_vat}= +| | ... | Generate Duplicate Lisp Locator Set Data +| | ... | ${dut_node} | ${locator_set_number} +| | Set Test Variable | ${locator_set_values} +| | Set Test Variable | ${locator_set_values_vat} + +| Configure LISP eid address +| | [Documentation] | Set the lisp eid address on the VPP node. +| | ... +| | ... | *Arguments:* +| | ... | - dut_node - DUT node. Type: dictionary +| | ... | - set_eid - Test eid data. Type: list +| | ... +| | ... | *Return:* +| | ... | - No value returned +| | ... +| | ... | *Example:* +| | ... | \| When Configure LISP eid address \| ${nodes['DUT1']} \ +| | ... | \| ${eid_table} \| +| | ... +| | [Arguments] | ${dut_node} | ${set_eid} +| | Vpp Set Lisp Eid Table | ${dut_node} | ${set_eid} + +| LISP eid address should be set correctly to eid table +| | [Documentation] | Test if the locator_set is set correctly on the VPP node. +| | ... +| | ... | *Arguments:* +| | ... | - dut_node - DUT node. Type: dictionary +| | ... | - set_eid - Example eid data, which was set to the VPP node. +| | ... | Type: list +| | ... +| | ... | *Return:* +| | ... | - No value returned +| | ... +| | ... | _NOTE:_ This KW requires following test case variables: +| | ... | - set_eid - Generated eid data, which will be set to the VPP node. +| | ... +| | ... | *Example:* +| | ... | \| Then LISP eid address should be set correctly to eid table \ +| | ... | \| ${nodes['DUT1']} \| ${eid_table} \| +| | ... +| | [Arguments] | ${dut_node} | ${set_eid} +| | ${show_eid}= | Vpp Show Lisp Eid Table | ${dut_node} +| | Lisp Should Be Equal | ${set_eid} | ${show_eid} + +| Delete all LISP eid address from VPP +| | [Documentation] | Delete all lisp eid address from the VPP node. +| | ... +| | ... | *Arguments:* +| | ... | - dut_node - DUT node. Type: dictionary +| | ... | - set_eid - Eid data which will be removed from the VPP node. +| | ... | Type: list +| | ... +| | ... | *Return:* +| | ... | - No value returned +| | ... +| | ... | *Example:* +| | ... | \| When Delete all LISP eid address from VPP \ +| | ... | \| ${nodes['DUT1']} \| ${eid_table} \| +| | ... +| | [Arguments] | ${dut_node} | ${set_eid} +| | Vpp Unset Lisp Eid Table | ${dut_node} | ${set_eid} + +| LISP eid table should be empty +| | [Documentation] | Test if the eid table is empty. +| | ... +| | ... | *Arguments:* +| | ... | - dut_node - DUT node. Type: dictionary +| | ... +| | ... | *Return:* +| | ... | - No value returned +| | ... +| | ... | *Example:* +| | ... | \| Then LISP eid table should be empty \| ${nodes['DUT1']} \| +| | ... +| | [Arguments] | ${dut_node} +| | ${show_eid}= | Vpp Show Lisp Eid Table | ${dut_node} +| | Lisp Is Empty | ${show_eid} + +| Configure LISP map resolver address +| | [Documentation] | Set the lisp map resolver address in the VPP node. +| | ... +| | ... | *Arguments:* +| | ... | - dut_node - DUT node. Type: dictionary +| | ... | - set_map_resolver - Map resolver data, which will be set on +| | ... | the VPP node. Type: list +| | ... +| | ... | *Return:* +| | ... | - No value returned +| | ... +| | ... | *Example:* +| | ... | \| When Configure LISP map resolver address \| ${nodes['DUT1']} \ +| | ... | \| ${map_resolver} \| +| | ... +| | [Arguments] | ${dut_node} | ${set_map_resolver} +| | Vpp Set Lisp Map Resolver | ${dut_node} | ${set_map_resolver} + +| LISP map resolver address should be configured correctly +| | [Documentation] | Test if the map resolver address is set correctly +| | ... | on the VPP node. +| | ... +| | ... | *Arguments:* +| | ... | - dut_node - DUT node. Type: dictionary +| | ... | - set_map_resolver - Map resolver data, which was set on +| | ... | the VPP node. Type: list +| | ... +| | ... | *Return:* +| | ... | - No value returned +| | ... +| | ... | *Example:* +| | ... | \| Then LISP map resolver address should be configured correctly \ +| | ... | \| ${nodes['DUT1']} \| ${map_resolver} \| +| | ... +| | [Arguments] | ${dut_node} | ${set_map_resolver} +| | ${show_map_resolver}= | Vpp Show Lisp Map Resolver | ${dut_node} +| | Lisp Should Be Equal | ${set_map_resolver} | ${show_map_resolver} + +| Delete all LISP map resolver address from VPP +| | [Documentation] | Delete all lisp map resolver address on the VPP node. +| | ... +| | ... | *Arguments:* +| | ... | - dut_node - DUT node. Type: dictionary +| | ... | - map_resolver - Map resolver data, which will be remove from +| | ... | the VPP. Type: list +| | ... +| | ... | *Return:* +| | ... | - No value returned +| | ... +| | ... | *Example:* +| | ... | \| When Delete all LISP map resolver address from VPP \ +| | ... | \| ${nodes['DUT1']} \| ${map_resolver} \| +| | ... +| | [Arguments] | ${dut_node} | ${set_map_resolver} +| | Vpp Unset Lisp Map Resolver | ${dut_node} | ${set_map_resolver} + +| LISP map resolver address should be empty +| | [Documentation] | Test if the map resolver are empty. +| | ... +| | ... | *Arguments:* +| | ... | - dut_node - DUT node. Type: dictionary +| | ... +| | ... | *Return:* +| | ... | - No value returned +| | ... +| | ... | *Example:* +| | ... | \| Then LISP map resolver address should be empty \ +| | ... | \| ${nodes['DUT1']} \| +| | ... +| | [Arguments] | ${dut_node} +| | ${show_map_resolver}= | Vpp Show Lisp Map Resolver | ${dut_node} +| | Lisp Is Empty | ${show_map_resolver} + +| Enable LISP +| | [Documentation] | Enable LISP on VPP node. +| | ... +| | ... | *Arguments:* +| | ... | - dut_node - DUT node. Type: dictionary +| | ... +| | ... | *Return:* +| | ... | - No value returned +| | ... +| | ... | *Example:* +| | ... | \| Enable LISP \| ${nodes['DUT1']} \| +| | ... +| | [Arguments] | ${dut_node} +| | Vpp Lisp Enable Disable | ${dut_node} | enable + +| LISP should be enabled +| | [Documentation] | Check if the lisp is enabled. +| | ... +| | ... | *Arguments:* +| | ... | - dut_node - DUT node. Type: dictionary +| | ... | - lisp_status_data - Lisp status data, which was set on +| | ... | the VPP node. Type: list +| | ... +| | ... | *Return:* +| | ... | - No value returned +| | ... +| | ... | *Example:* +| | ... | \| LISP should be enabled \| ${nodes['DUT1']} \ +| | ... | \| ${lisp_status_data} \| +| | ... +| | [Arguments] | ${dut_node} | ${lisp_status_data} +| | ${show_lisp_stat}= | Vpp Show Lisp State | ${dut_node} +| | Lisp Should Be Equal | ${show_lisp_stat} | ${lisp_status_data[1]} + +| Disable LISP +| | [Documentation] | Disable LISP on VPP node. +| | ... +| | ... | *Arguments:* +| | ... | - dut_node - DUT node. Type: dictionary +| | ... +| | ... | *Return:* +| | ... | - No value returned +| | ... +| | ... | *Example:* +| | ... | \| Disable LISP \| ${nodes['DUT1']} \| +| | ... +| | [Arguments] | ${dut_node} +| | Vpp Lisp Enable Disable | ${dut_node} | disable + +| LISP Should be disabled +| | [Documentation] | LISP Should be disabled. +| | ... +| | ... | *Arguments:* +| | ... | - dut_node - DUT node. Type: dictionary +| | ... | - lisp_status_data - Lisp status data, which was set on +| | ... | the VPP node. Type: list +| | ... +| | ... | *Return:* +| | ... | - No value returned +| | ... +| | ... | *Example:* +| | ... | \| LISP Should be disabled \| ${nodes['DUT1']} \ +| | ... | \| ${lisp_status_data} \| +| | ... +| | [Arguments] | ${dut_node} | ${lisp_status_data} +| | ${show_lisp_stat}= | Vpp Show Lisp State | ${dut_node} +| | Lisp Should Be Equal | ${show_lisp_stat} | ${lisp_status_data[0]} + +| Enable Lisp Gpe +| | [Documentation] | Enable Lisp Gpe on VPP node. +| | ... +| | ... | *Arguments:* +| | ... | - dut_node - DUT node. Type: dictionary +| | ... +| | ... | *Return:* +| | ... | - No value returned +| | ... +| | ... | *Example:* +| | ... | \| Enable Lisp Gpe \| ${nodes['DUT1']} \| +| | ... +| | [Arguments] | ${dut_node} +| | Vpp Lisp Gpe Enable Disable | ${dut_node} | enable + +| Disable Lisp Gpe +| | [Documentation] | Disable Lisp Gpe on VPP node. +| | ... +| | ... | *Arguments:* +| | ... | - dut_node - DUT node. Type: dictionary +| | ... +| | ... | *Return:* +| | ... | - No value returned +| | ... +| | ... | *Example:* +| | ... | \| Disable Lisp Gpe \| ${nodes['DUT1']} \| +| | ... +| | [Arguments] | ${dut_node} +| | Vpp Lisp Gpe Enable Disable | ${dut_node} | disable diff --git a/resources/libraries/robot/overlay/lisp_static_adjacency.robot b/resources/libraries/robot/overlay/lisp_static_adjacency.robot new file mode 100644 index 0000000000..f20fd51eb4 --- /dev/null +++ b/resources/libraries/robot/overlay/lisp_static_adjacency.robot @@ -0,0 +1,168 @@ +# Copyright (c) 2016 Cisco and/or its affiliates. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +*** Settings *** +| Documentation | Lisp static adjacency suite keywords +| Resource | resources/libraries/robot/overlay/lisp_api.robot +| Library | resources.libraries.python.LispSetup.LispLocatorSet +| Library | resources.libraries.python.LispSetup.LispLocator +| Library | resources.libraries.python.LispSetup.LispLocalEid +| Library | resources.libraries.python.LispSetup.LispAdjacency +| Library | resources.libraries.python.LispSetup.LispRemoteMapping +| Library | resources.libraries.python.IPv4Util.IPv4Util + +*** Keywords *** +| Configure LISP topology in 3-node circular topology +| | [Documentation] | 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} \| +| | ... +| | [Arguments] | ${dut1_node} | ${dut1_int_name} | ${dut1_int_index} +| | ... | ${dut2_node} | ${dut2_int_name} | ${dut2_int_index} +| | ... | ${locator_set} | ${dut1_eid} | ${dut2_eid} +| | ... | ${dut1_static_adjacency} | ${dut2_static_adjacency} +| | ${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']} + +| Change LISP Configuration +| | [Documentation] | Change configuration of the Lisp protocol. +| | ... +| | ... | *Arguments:* +| | ... | - dut1_node - DUT1 node. Type: dictionary +| | ... | - dut2_node - DUT2 node. Type: dictionary +| | ... | - dut1_to_dut2 - DUT1 towards DUT2 interface name. Type: string +| | ... | - dut2_to_dut1 - DUT2 towards DUT1 interface name. Type: string +| | ... | - dut1_to_dut2_mac - DUT1 towards DUT2 interface mac address. +| | ... | Type: string +| | ... | - dut2_to_dut1_mac - DUT2 towards DUT1 interface mac address. +| | ... | Type: string +| | ... | - new_dut1_ip - New DUT1 towards DUT2 interface IP address. +| | ... | Type: string +| | ... | - new_dut2_ip - New DUT2 towards DUT1 interface IP address. +| | ... | Type: string +| | ... | - prefix - Prefix of the DUT nodes. Type: integer +| | ... | - old_dut1_static_adjacency - Old DUT1 static adjacency. +| | ... | Type: dictionary +| | ... | - new_dut1_static_adjacency - New DUT1 static adjacency. +| | ... | Type: dictionary +| | ... +| | ... | *Return:* +| | ... | - No value returned +| | ... +| | ... | *Example:* +| | ... | \| Change LISP Configuration \| ${dut1_node} \| ${dut2_node} \ +| | ... | \| ${dut1_to_dut2} \| ${dut2_to_dut1} | "08:00:27:20:e0:0d" \ +| | ... | \| "08:00:27:b1:94:b1" \| "6.3.0.1" \| "6.3.0.20" \| "24" \ +| | ... | \| ${old_dut1_static_adjacency} \| ${new_dut1_static_adjacency} \| +| | ... +| | [Arguments] | ${dut1_node} | ${dut2_node} | ${dut1_to_dut2} +| | ... | ${dut2_to_dut1} | ${dut1_to_dut2_mac} | ${dut2_to_dut1_mac} +| | ... | ${new_dut1_ip} | ${new_dut2_ip} | ${prefix} +| | ... | ${old_dut1_static_adjacency} | ${new_dut1_static_adjacency} +| | Flush IPv4 Addresses "${dut2_to_dut1}" "${dut2_node}" +| | Vpp Del Lisp Remote Mapping | ${dut1_node} +| | ... | ${old_dut1_static_adjacency['vni']} +| | ... | ${old_dut1_static_adjacency['deid']} +| | ... | ${old_dut1_static_adjacency['prefix']} +| | ... | ${old_dut1_static_adjacency['seid']} +| | ... | ${old_dut1_static_adjacency['prefix']} +| | ... | ${old_dut1_static_adjacency['rloc']} +| | Vpp Del Lisp Adjacency | ${dut1_node} +| | ... | ${old_dut1_static_adjacency['vni']} +| | ... | ${old_dut1_static_adjacency['deid']} +| | ... | ${old_dut1_static_adjacency['prefix']} +| | ... | ${old_dut1_static_adjacency['seid']} +| | ... | ${old_dut1_static_adjacency['prefix']} +| | Set Interface Address | ${dut2_node} | ${dut2_to_dut1} +| | ... | ${new_dut2_ip} | ${prefix} +| | Add Arp On Dut | ${dut1_node} | ${dut1_to_dut2} | ${new_dut2_ip} +| | ... | ${dut2_to_dut1_mac} +| | Add Arp On Dut | ${dut2_node} | ${dut2_to_dut1} | ${new_dut1_ip} +| | ... | ${dut1_to_dut2_mac} +| | Vpp Add Lisp Remote Mapping | ${dut1_node} +| | ... | ${new_dut1_static_adjacency['vni']} +| | ... | ${new_dut1_static_adjacency['deid']} +| | ... | ${new_dut1_static_adjacency['prefix']} +| | ... | ${new_dut1_static_adjacency['seid']} +| | ... | ${new_dut1_static_adjacency['prefix']} +| | ... | ${new_dut1_static_adjacency['rloc']} +| | Vpp Add Lisp Adjacency | ${dut1_node} +| | ... | ${new_dut1_static_adjacency['vni']} +| | ... | ${new_dut1_static_adjacency['deid']} +| | ... | ${new_dut1_static_adjacency['prefix']} +| | ... | ${new_dut1_static_adjacency['seid']} +| | ... | ${new_dut1_static_adjacency['prefix']} diff --git a/resources/libraries/robot/overlay/lispgpe.robot b/resources/libraries/robot/overlay/lispgpe.robot new file mode 100644 index 0000000000..d5115d8242 --- /dev/null +++ b/resources/libraries/robot/overlay/lispgpe.robot @@ -0,0 +1,126 @@ +# Copyright (c) 2016 Cisco and/or its affiliates. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +*** Settings *** +| Documentation | LISP-gpe encapsulation suite keywords +| Library | resources.libraries.python.topology.Topology +| Resource | resources/libraries/robot/overlay/lisp_api.robot +| Library | resources.libraries.python.LispSetup.LispLocatorSet +| Library | resources.libraries.python.LispSetup.LispLocator +| Library | resources.libraries.python.LispSetup.LispLocalEid +| Library | resources.libraries.python.LispSetup.LispAdjacency +| Library | resources.libraries.python.LispSetup.LispRemoteMapping +| Library | resources.libraries.python.LispSetup.LispEidTableMap + +*** Keywords *** +| Configure LISP GPE topology in 3-node circular topology +| | [Documentation] | 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} \| +| | ... +| | [Arguments] +| | ... | ${dut1_node} | ${dut1_if} | ${dut1_int_index} +| | ... | ${dut2_node} | ${dut2_if} | ${dut2_int_index} +| | ... | ${locator_set} | ${dut1_eid} | ${dut2_eid} +| | ... | ${dut1_static_adjacency} | ${dut2_static_adjacency} +| | ... | ${vni_table}=0 | ${vrf_table}=0 +| | ... +# DUT1 settings: +| | ${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 settings: +| | ${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']} diff --git a/resources/libraries/robot/overlay/vxlan.robot b/resources/libraries/robot/overlay/vxlan.robot new file mode 100644 index 0000000000..69f4c10a88 --- /dev/null +++ b/resources/libraries/robot/overlay/vxlan.robot @@ -0,0 +1,135 @@ +# Copyright (c) 2016 Cisco and/or its affiliates. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +*** Settings *** +| Library | Collections +| Resource | resources/libraries/robot/shared/default.robot +| Resource | resources/libraries/robot/shared/interfaces.robot +| Resource | resources/libraries/robot/l2/l2_bridge_domain.robot +| Resource | resources/libraries/robot/l2/l2_xconnect.robot +| Library | resources.libraries.python.L2Util +| Library | resources.libraries.python.IPUtil +| Library | resources.libraries.python.IPv4Util +| Library | resources.libraries.python.IPv6Util +| Library | resources.libraries.python.IPv4Setup +| Library | resources.libraries.python.NodePath + +*** Keywords *** +| Configure IP addresses and neighbors on interfaces +| | [Documentation] | *Set IPv4 addresses on interfaces on DUTs.* +| | ... | If interface index is None then is determines with Get Interface Sw Index +| | ... | in this case it is required the interface to be present in topology dict. +| | ... | It also executes VPP IP Probe to determine MACs to IPs on DUTs +| | ... +| | ... | _Set testcase variables with IP addresses and prefix length:_ +| | ... | - ${dut1s_ip_address} +| | ... | - ${dut2s_ip_address} +| | ... | - ${duts_ip_address_prefix} +| | ... +| | [Arguments] | ${DUT1} | ${DUT1_INT_NAME} | ${DUT1_INT_INDEX} +| | ... | ${DUT2} | ${DUT2_INT_NAME} | ${DUT2_INT_INDEX} +| | Set Test Variable | ${dut1s_ip_address} | 172.16.0.1 +| | Set Test Variable | ${dut2s_ip_address} | 172.16.0.2 +| | Set Test Variable | ${duts_ip_address_prefix} | 24 +| | ${DUT1_INT_KEY}= | Run Keyword If | ${DUT1_INT_INDEX} is None +| | | ... | Get Interface by name | ${DUT1} | ${DUT1_INT_NAME} +| | ${DUT2_INT_KEY}= | Run Keyword If | ${DUT2_INT_INDEX} is None +| | | ... | Get Interface by name | ${DUT2} | ${DUT2_INT_NAME} +| | ${DUT1_INT_INDEX}= | Run Keyword If | ${DUT1_INT_INDEX} is None +| | | ... | Get Interface Sw Index | ${DUT1} | ${DUT1_INT_KEY} +| | | ... | ELSE | Set Variable | ${DUT1_INT_INDEX} +| | ${DUT2_INT_INDEX}= | Run Keyword If | ${DUT2_INT_INDEX} is None +| | | ... | Get Interface Sw Index | ${DUT2} | ${DUT2_INT_KEY} +| | | ... | ELSE | Set Variable | ${DUT2_INT_INDEX} +| | ${DUT1_INT_MAC}= | Vpp Get Interface Mac | ${DUT1} | ${DUT1_INT_INDEX} +| | ${DUT2_INT_MAC}= | Vpp Get Interface Mac | ${DUT2} | ${DUT2_INT_INDEX} +| | Set Interface Address | ${DUT1} | ${DUT1_INT_INDEX} +| | ... | ${dut1s_ip_address} | ${duts_ip_address_prefix} +| | Set Interface Address | ${DUT2} | ${DUT2_INT_INDEX} +| | ... | ${dut2s_ip_address} | ${duts_ip_address_prefix} +| | Add IP Neighbor | ${DUT1} | ${DUT1_INT_INDEX} | ${dut2s_ip_address} | ${DUT2_INT_MAC} +| | Add IP Neighbor | ${DUT2} | ${DUT2_INT_INDEX} | ${dut1s_ip_address} | ${DUT1_INT_MAC} + +| Add interfaces to L2BD +| | [Arguments] | ${DUT} | ${BID} | ${INTERFACE_1} | ${INTERFACE_2} +| | Vpp Add L2 Bridge Domain | ${DUT} | ${BID} | ${INTERFACE_1} | ${INTERFACE_2} + +| Create vlan interfaces for VXLAN +| | [Documentation] | *Create VLAN subinterface on interfaces on DUTs with given VLAN ID.* +| | ... +| | ... | _Set testcase variables with name and index of created interfaces:_ +| | ... | - ${dut1s_vlan_name} +| | ... | - ${dut1s_vlan_index} +| | ... | - ${dut2s_vlan_name} +| | ... | - ${dut2s_vlan_index} +| | ... +| | [Arguments] | ${VLAN} | ${DUT1} | ${INT1} | ${DUT2} | ${INT2} +| | ${INT1_NAME}= | Get interface name | ${DUT1} | ${INT1} +| | ${INT2_NAME}= | Get interface name | ${DUT2} | ${INT2} +| | ${dut1s_vlan_name} | ${dut1s_vlan_index}= | Create Vlan Subinterface +| | | ... | ${DUT1} | ${INT1_NAME} | ${VLAN} +| | ${dut2s_vlan_name} | ${dut2s_vlan_index}= | Create Vlan Subinterface +| | | ... | ${DUT2} | ${INT2_NAME} | ${VLAN} +| | Set Interface State | ${DUT1} | ${dut1s_vlan_index} | up +| | Set Interface State | ${DUT2} | ${dut2s_vlan_index} | up +| | Set Test Variable | ${dut1s_vlan_name} +| | Set Test Variable | ${dut1s_vlan_index} +| | Set Test Variable | ${dut2s_vlan_name} +| | Set Test Variable | ${dut2s_vlan_index} + +| Send VXLAN encapsulated packet and verify received packet +| | [Documentation] | Send VXLAN encapsulated Ethernet frame and check \ +| | ... | received one. +| | ... +| | ... | *Arguments:* +| | ... | - tg_node - Node where to run traffic script. Type: dictionary +| | ... | - tx_if - Interface from where send VXLAN packet. Type: string +| | ... | - rx_if - Interface where receive VXLAN packet. Type: string +| | ... | - tx_src_mac - Source MAC address of sent packet. Type: string +| | ... | - tx_dst_mac - Destination MAC address of sent packet. Type: string +| | ... | - tx_src_ip - Source IP address of sent VXLAN packet. Type: string +| | ... | - tx_dst_ip - Destination IP address of sent VXLAN packet. +| | ... | Type: string +| | ... | - tx_vni - VNI of sent VXLAN packet. Type: string +| | ... | - rx_src_ip - Source IP address of received VXLAN packet. Type: string +| | ... | - rx_dst_ip - Destination IP address of received VXLAN packet. +| | ... | Type: string +| | ... | - rx_vni - VNI of received VXLAN packet. Type: string +| | ... +| | ... | *Return:* +| | ... | - No value returned +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Send VXLAN encapsulated packet and verify received packet \| ${tg_node} \| port4 \| port4 \ +| | ... | \| fa:16:3e:6d:f9:c5 \| fa:16:3e:e6:6d:9a \| 192.168.0.1 \ +| | ... | \| 192.168.0.2 \| ${101} \| 192.168.0.2 \| 192.168.0.1 \| ${102} \| +| | ... +| | [Arguments] | ${tg_node} | ${tx_if} | ${rx_if} +| | ... | ${tx_src_mac} | ${tx_dst_mac} +| | ... | ${tx_src_ip} | ${tx_dst_ip} | ${tx_vni} +| | ... | ${rx_src_ip} | ${rx_dst_ip} | ${rx_vni} +| | ${tx_if_name}= | Get interface name | ${tg_node} | ${tx_if} +| | ${rx_if_name}= | Get interface name | ${tg_node} | ${rx_if} +| | ${args}= | Catenate +| | ... | --tx_if ${tx_if_name} +| | ... | --rx_if ${rx_if_name} +| | ... | --tx_src_mac ${tx_src_mac} +| | ... | --tx_dst_mac ${tx_dst_mac} +| | ... | --tx_src_ip ${tx_src_ip} +| | ... | --tx_dst_ip ${tx_dst_ip} +| | ... | --tx_vni ${tx_vni} +| | ... | --rx_src_ip ${rx_src_ip} +| | ... | --rx_dst_ip ${rx_dst_ip} +| | ... | --rx_vni ${rx_vni} +| | Run Traffic Script On Node | send_vxlan_check_vxlan.py | ${tg_node} | ${args} -- cgit 1.2.3-korg