aboutsummaryrefslogtreecommitdiffstats
path: root/resources/libraries/robot/overlay
diff options
context:
space:
mode:
authorTibor Frank <tifrank@cisco.com>2017-06-20 13:57:08 +0200
committerTibor Frank <tifrank@cisco.com>2017-06-29 12:17:28 +0000
commit6721e7f09aa95bff6622068332a3f56afad9c87b (patch)
tree37ef7f40e53f740a62830ab46142aa87342dc56b /resources/libraries/robot/overlay
parent859157b5db45927c7b4bb0b2d575e68805777a86 (diff)
CSIT-687: Directory structure reorganization
Change-Id: I772c9e214be2461adf58124998d272e7d795220f Signed-off-by: Tibor Frank <tifrank@cisco.com> Signed-off-by: Maciek Konstantynowicz <mkonstan@cisco.com>
Diffstat (limited to 'resources/libraries/robot/overlay')
-rw-r--r--resources/libraries/robot/overlay/gre.robot182
-rw-r--r--resources/libraries/robot/overlay/l2lisp.robot77
-rw-r--r--resources/libraries/robot/overlay/lisp_api.robot399
-rw-r--r--resources/libraries/robot/overlay/lisp_static_adjacency.robot168
-rw-r--r--resources/libraries/robot/overlay/lispgpe.robot126
-rw-r--r--resources/libraries/robot/overlay/vxlan.robot135
6 files changed, 1087 insertions, 0 deletions
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}