From 7ac38855defc0cf8140180d3abc1f5afeb467a74 Mon Sep 17 00:00:00 2001 From: Peter Mikus Date: Thu, 25 Jul 2019 08:22:53 +0000 Subject: VPPD: VXLAN Change-Id: Iac518341e6a0fff4a31ad3692ccc5697690db8be Signed-off-by: Peter Mikus --- .../libraries/robot/l2/l2_bridge_domain.robot | 41 ++++++++++ resources/libraries/robot/l2/l2_xconnect.robot | 40 +++++++++- resources/libraries/robot/overlay/vxlan.robot | 91 ---------------------- resources/libraries/robot/shared/traffic.robot | 49 ++++++++++++ 4 files changed, 129 insertions(+), 92 deletions(-) (limited to 'resources/libraries/robot') diff --git a/resources/libraries/robot/l2/l2_bridge_domain.robot b/resources/libraries/robot/l2/l2_bridge_domain.robot index fda211508b..4c3d629b98 100644 --- a/resources/libraries/robot/l2/l2_bridge_domain.robot +++ b/resources/libraries/robot/l2/l2_bridge_domain.robot @@ -32,6 +32,47 @@ | | ... | Vpp Add L2fib Entry | ${dut_node} | ${mac} | ${if2} | ${1} | | Vpp Node Interfaces Ready Wait | ${dut_node} +| Initialize L2 bridge domain on node +| | [Documentation] +| | ... | Setup L2 bridge domain topology by adding two interfaces on DUT into +| | ... | separate bridge domains that are created automatically starting with +| | ... | index 1. Learning is enabled. Interfaces are brought up. +| | ... +| | ... | *Arguments:* +| | ... | - dut - DUT node. Type: string +| | ... | - count - Number of bridge domains interfaces. Type: integer +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Initialize L2 bridge domain on node \| DUT1 \| 1 \| +| | ... +| | [Arguments] | ${dut} | ${count}=${1} +| | ... +| | :FOR | ${id} | IN RANGE | 1 | ${count} + 1 +| | | ${dut_str}= | Convert To Lowercase | ${dut} +| | | Add interface to bridge domain +| | | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${id}_1} | ${id} +| | | Add interface to bridge domain +| | | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${id}_2} | ${id} + +| Initialize L2 bridge domain +| | [Documentation] +| | ... | Setup L2 bridge domain topology by adding two interfaces on each DUT +| | ... | into separate bridge domains that are created automatically starting +| | ... | with index 1. Learning is enabled. Interfaces are brought up. +| | ... +| | ... | *Arguments:* +| | ... | - count - Number of bridge domains. Type: integer +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Initialize L2 bridge domain \| 1 \| +| | ... +| | [Arguments] | ${count}=${1} +| | ... +| | :FOR | ${dut} | IN | @{duts} +| | | Initialize L2 bridge domain on node | ${dut} | count=${count} + | Configure path for 3-node BD-SHG test | | [Documentation] | Compute path for bridge domain split-horizon group testing | | ... | on three given nodes with following interconnections diff --git a/resources/libraries/robot/l2/l2_xconnect.robot b/resources/libraries/robot/l2/l2_xconnect.robot index 00d33e867a..745827eb3e 100644 --- a/resources/libraries/robot/l2/l2_xconnect.robot +++ b/resources/libraries/robot/l2/l2_xconnect.robot @@ -1,4 +1,4 @@ -# Copyright (c) 2016 Cisco and/or its affiliates. +# Copyright (c) 2019 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: @@ -22,3 +22,41 @@ | | Set Interface State | ${node} | ${if1} | up | | Set Interface State | ${node} | ${if2} | up | | Vpp Setup Bidirectional Cross Connect | ${node} | ${if1} | ${if2} + +| Initialize L2 cross connect on node +| | [Documentation] +| | ... | Setup L2 cross connect topology by connecting RX/TX of two interfaces +| | ... | on each DUT. Interfaces are brought up. +| | ... +| | ... | *Arguments:* +| | ... | - dut - DUT node. Type: string +| | ... | - count - Number of interfaces pairs to connect. Type: integer +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Initialize L2 cross connect on node \| DUT1 \| 1 \| +| | ... +| | [Arguments] | ${dut} | ${count}=${1} +| | ... +| | :FOR | ${id} | IN RANGE | 1 | ${count} + 1 +| | | ${dut_str}= | Convert To Lowercase | ${dut} +| | | Vpp Setup Bidirectional Cross Connect | ${nodes['${dut}']} +| | | ... | ${${dut_str}_${prev_layer}_${id}_1} +| | | ... | ${${dut_str}_${prev_layer}_${id}_2} + +| Initialize L2 cross connect +| | [Documentation] +| | ... | Setup L2 cross connect topology by connecting RX/TX of two interfaces +| | ... | on each DUT. Interfaces are brought up. +| | ... +| | ... | *Arguments:* +| | ... | - count - Number of interfaces pairs to connect. Type: integer +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Initialize L2 cross connect \| 1 \| +| | ... +| | [Arguments] | ${count}=${1} +| | ... +| | :FOR | ${dut} | IN | @{duts} +| | | Initialize L2 cross connect on node | ${dut} | count=${count} diff --git a/resources/libraries/robot/overlay/vxlan.robot b/resources/libraries/robot/overlay/vxlan.robot index 5e9fa3ddef..06c8e94eb7 100644 --- a/resources/libraries/robot/overlay/vxlan.robot +++ b/resources/libraries/robot/overlay/vxlan.robot @@ -27,48 +27,6 @@ | Documentation | VXLAN keywords *** 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} -| | VPP Interface Set IP Address | ${DUT1} | ${DUT1_INT_INDEX} -| | ... | ${dut1s_ip_address} | ${duts_ip_address_prefix} -| | VPP Interface Set IP Address | ${DUT2} | ${DUT2_INT_INDEX} -| | ... | ${dut2s_ip_address} | ${duts_ip_address_prefix} -| | VPP Add IP Neighbor -| | ... | ${DUT1} | ${DUT1_INT_INDEX} | ${dut2s_ip_address} | ${DUT2_INT_MAC} -| | VPP 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.* @@ -93,55 +51,6 @@ | | 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} - | Get VXLAN dump | | [Documentation] | Get VXLAN dump. | | ... diff --git a/resources/libraries/robot/shared/traffic.robot b/resources/libraries/robot/shared/traffic.robot index c930bcf92e..b29f7af49d 100644 --- a/resources/libraries/robot/shared/traffic.robot +++ b/resources/libraries/robot/shared/traffic.robot @@ -581,3 +581,52 @@ | | ${dscp_num}= | Get DSCP Num Value | ${dscp} | | ${args}= | Set Variable | ${args} --dscp ${dscp_num} | | Run Traffic Script On Node | policer.py | ${node} | ${args} + +| 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