... variables are coming from.
*** Variables ***
-${JSON_DIR} ${CURDIR}/../variables/lispflowmapping/Be
+${JSON_DIR} ${CURDIR}/../variables/lispflowmapping/Be
*** Keywords ***
Authentication Key Should Be
${output}= Run Command On Remote System ${TOOLS_SYSTEM_IP} sudo ovs-vsctl show
Log ${output}
${output}= Run Command On Remote System ${TOOLS_SYSTEM_IP} sudo ovs-ofctl -O OpenFlow13 dump-flows ${switch} | cut -d',' -f3-
- Log ${output}
\ No newline at end of file
+ Log ${output}
${flowcond_restconfigdata} {"input":{"operation":"SET","present":"false","name":"cond_1","vtn-flow-match":[{"vtn-ether-match":{"destination-address":"ba:bd:0f:e3:a8:c8","ether-type":"2048","source-address":"ca:9e:58:0c:1e:f0","vlan-id": "1"},"vtn-inet-match":{"source-network":"10.0.0.1/32","protocol":1,"destination-network":"10.0.0.2/32"},"index":"1"}]}}
*** Keywords ***
-
Start SuiteVtnMa
[Documentation] Start VTN Manager Rest Config Api Test Suite
Create Session session http://${CONTROLLER}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
Add a Vtn
[Arguments] ${vtn_name}
[Documentation] Create a vtn with specified parameters.
- ${resp}= RequestsLibrary.Post Request session restconf/operations/vtn:update-vtn data={"input": {"tenant-name":${vtn_name}, "update-mode": "CREATE","operation": "SET", "description": "creating vtn", "idle-timeout":300, "hard-timeout":0}}
+ ${resp}= RequestsLibrary.Post Request session restconf/operations/vtn:update-vtn data={"input": {"tenant-name":${vtn_name}, "update-mode": "CREATE","operation": "SET", "description": "creating vtn", "idle-timeout":300, "hard-timeout":0}}
Should Be Equal As Strings ${resp.status_code} 200
Add a vBridge
Add a interface
[Arguments] ${vtn_name} ${vbr_name} ${interface_name}
[Documentation] Create a interface into a vBridge of a VTN
- ${resp}= RequestsLibrary.Post Request session restconf/operations/vtn-vinterface:update-vinterface data={"input": {"update-mode":"CREATE","operation":"SET", "tenant-name":${vtn_name}, "bridge-name":${vbr_name}, "description": "vbrdige interfacecreated", "enabled":"true", "interface-name": ${interface_name}}}
+ ${resp}= RequestsLibrary.Post Request session restconf/operations/vtn-vinterface:update-vinterface data={"input": {"update-mode":"CREATE","operation":"SET", "tenant-name":${vtn_name}, "bridge-name":${vbr_name}, "description": "vbrdige interfacecreated", "enabled":"true", "interface-name": ${interface_name}}}
Should Be Equal As Strings ${resp.status_code} 200
Add a portmap
- [Arguments] ${vtn_name} ${vbr_name} ${interface_name} ${node_id} ${port_id}
+ [Arguments] ${vtn_name} ${vbr_name} ${interface_name} ${node_id} ${port_id}
[Documentation] Create a portmap for a interface of a vbridge
- ${resp}= RequestsLibrary.Post Request session restconf/operations/vtn-port-map:set-port-map data={"input": { "tenant-name":${vtn_name}, "bridge-name":${vbr_name}, "interface-name": ${interface_name}, "node":"${node_id}", "port-name":"${port_id}"}}
+ ${resp}= RequestsLibrary.Post Request session restconf/operations/vtn-port-map:set-port-map data={"input": { "tenant-name":${vtn_name}, "bridge-name":${vbr_name}, "interface-name": ${interface_name}, "node":"${node_id}", "port-name":"${port_id}"}}
Should Be Equal As Strings ${resp.status_code} 200
Delete a Vtn
Add a vlanmap
[Arguments] ${vtn_name} ${vbr_name} ${vlan_id}
[Documentation] Create a vlanmap
- ${resp}= RequestsLibrary.Post Request session restconf/operations/vtn-vlan-map:add-vlan-map data={"input": {"tenant-name":${vtn_name},"bridge-name":${vbr_name},"vlan-id":${vlan_id}}}
+ ${resp}= RequestsLibrary.Post Request session restconf/operations/vtn-vlan-map:add-vlan-map data={"input": {"tenant-name":${vtn_name},"bridge-name":${vbr_name},"vlan-id":${vlan_id}}}
Should Be Equal As Strings ${resp.status_code} 200
Verify Data Flows
Add a macmap
[Arguments] ${vtn_name} ${vBridge_name} ${macmap_data}
[Documentation] Create a macmap for a vbridge
- ${resp}= RequestsLibrary.Post Request session restconf/operations/vtn-mac-map:set-mac-map data={"input": { "allowed-hosts": ["${macmap_data}"], "tenant-name":${vtn_name}, "bridge-name": ${vBridge_name}}} }
+ ${resp}= RequestsLibrary.Post Request session restconf/operations/vtn-mac-map:set-mac-map data={"input": { "allowed-hosts": ["${macmap_data}"], "tenant-name":${vtn_name}, "bridge-name": ${vBridge_name}}} }
Should Be Equal As Strings ${resp.status_code} 200
Get DynamicMacAddress
Add a vtn flowfilter
[Arguments] ${vtn_name} ${vtnflowfilter_data}
[Documentation] Create a flowfilter for a vtn
- ${resp}= RequestsLibrary.Post Request session restconf/operations/vtn-flow-filter:set-flow-filter data=${vtnflowfilter_data}
+ ${resp}= RequestsLibrary.Post Request session restconf/operations/vtn-flow-filter:set-flow-filter data=${vtnflowfilter_data}
Should Be Equal As Strings ${resp.status_code} 200
Add a vbr flowfilter
Add a vbrif flowfilter
[Arguments] ${vtn_name} ${vBridge_name} ${interface_name} ${vbrif_flowfilter_data}
[Documentation] Create a flowfilter for a vbrif
- ${resp}= RequestsLibrary.Post Request session restconf/operations/vtn-flow-filter:set-flow-filter data=${vbrif_flowfilter_data}
+ ${resp}= RequestsLibrary.Post Request session restconf/operations/vtn-flow-filter:set-flow-filter data=${vbrif_flowfilter_data}
Should Be Equal As Strings ${resp.status_code} 200
Verify Flow Entry for Inet Flowfilter
Get flowcondition
[Arguments] ${flowcond_name} ${retrieve}
- [Documentation] Retrieve the flowcondition by name and to check the removed flowcondition added "retrieve" argument to differentiate the status code, since
+ [Documentation] Retrieve the flowcondition by name and to check the removed flowcondition added "retrieve" argument to differentiate the status code, since
... after removing flowcondition name the status will be different compare to status code when the flowcondition name is present.
${resp}= RequestsLibrary.Get Request session restconf/operational/vtn-flow-condition:vtn-flow-conditions/vtn-flow-condition/${flowcond_name}
Run Keyword If '${retrieve}' == 'retrieve' Should Be Equal As Strings ${resp.status_code} 200
... and updates towards BGP peer as follows:
...
... Test case 1: Initial BGP peer connection with pre-filled topology (Bug 4714),
-... POST and simple DELETE requests used.
+... POST and simple DELETE requests used.
... BGP_Application_Peer_Post_3_Initial_Routes,
... Check_Example-IPv4-Topology_Is_Filled_With_3_Routes,
... Connect_BGP_Peer,
Resource Variables.robot
*** Keywords ***
-
Start Connections
[Documentation] Establishes connections to remote VMs.
SSHLibrary.Open Connection ${GBPSFC1} alias=GPSFC1_CONNECTION
Variables ../../../../variables/Variables.py
*** Keywords ***
-
Setup Node
+ [Arguments] ${GBPSFC} ${sw_index} ${suite_dir} ${timeout}=10s
[Documentation] Configures underlying infrastructure composed of Docker containers and OVS switches on remote VM.
... Python and Bash scripts are used.
- [Arguments] ${GBPSFC} ${sw_index} ${suite_dir} ${timeout}=10s
ConnUtils.Connect and Login ${GBPSFC} timeout=${timeout}
SSHLibrary.Put File ${suite_dir}/* ${VM_HOME_FOLDER}${/}${VM_SCRIPTS_FOLDER}/ mode=0755
- ${stdout} ${stderr} ${rc} Execute in VE python ${VM_HOME_FOLDER}${/}${VM_SCRIPTS_FOLDER}/infrastructure_launch.py ${ODL} ${sw_index}
- ... timeout=${timeout}
+ ${stdout} ${stderr} ${rc} Execute in VE python ${VM_HOME_FOLDER}${/}${VM_SCRIPTS_FOLDER}/infrastructure_launch.py ${ODL} ${sw_index} timeout=${timeout}
Should Be Equal As Numbers ${rc} 0
${stderr} Set Variable
# Flows for GBPSFC3 and GBPSFC5 have to be written manually.
# GBPSFC2 is SFF for GBPSFC3 and GBPSFC4 is SFF for GBPSFC5
- Run Keyword If "${GBPSFC}" == "${GBPSFC3}"
- ... Write SF Flows ${GBPSFC2} ${stderr}
- ... ELSE IF "${GBPSFC}" == "${GBPSFC5}"
- ... Write SF Flows ${GBPSFC4} ${stderr}
+ Run Keyword If "${GBPSFC}" == "${GBPSFC3}" Write SF Flows ${GBPSFC2} ${stderr}
+ ... ELSE IF "${GBPSFC}" == "${GBPSFC5}" Write SF Flows ${GBPSFC4} ${stderr}
Should Be Empty ${stderr}
SSHLibrary.Close Connection
Write SF Flows
- [Documentation] Writes flows to SF node. SFF for given SF has to be specified in arguments.
[Arguments] ${SFF} ${stderr}
- ${stderr} SSHLibrary.Execute Command ${VM_HOME_FOLDER}${/}${VM_SCRIPTS_FOLDER}/sf-flows.sh ${SFF}
- ... return_stderr=True return_stdout=False
+ [Documentation] Writes flows to SF node. SFF for given SF has to be specified in arguments.
+ ${stderr} SSHLibrary.Execute Command ${VM_HOME_FOLDER}${/}${VM_SCRIPTS_FOLDER}/sf-flows.sh ${SFF} return_stderr=True return_stdout=False
Teardown Node
+ [Arguments] ${GBPSFC} ${suite_dir} ${timeout}=3s
[Documentation] Clears underlying infrastructure composed of Docker containers and OVS switches from remote VM.
... Python and Bash scripts are used.
- [Arguments] ${GBPSFC} ${suite_dir} ${timeout}=3s
ConnUtils.Connect and Login ${GBPSFC} timeout=${timeout}
- ${stderr} SSHLibrary.Execute Command rm ${VM_HOME_FOLDER}${/}${VM_SCRIPTS_FOLDER}/infrastructure_config.py
- ... return_stderr=True return_stdout=False
+ ${stderr} SSHLibrary.Execute Command rm ${VM_HOME_FOLDER}${/}${VM_SCRIPTS_FOLDER}/infrastructure_config.py return_stderr=True return_stdout=False
Should Be Empty ${stderr}
- ${stderr} SSHLibrary.Execute Command rm ${VM_HOME_FOLDER}${/}${VM_SCRIPTS_FOLDER}/sf-flows.sh
- ... return_stderr=True return_stdout=False
+ ${stderr} SSHLibrary.Execute Command rm ${VM_HOME_FOLDER}${/}${VM_SCRIPTS_FOLDER}/sf-flows.sh return_stderr=True return_stdout=False
Should Be Empty ${stderr}
- ${stderr} SSHLibrary.Execute Command ${VM_HOME_FOLDER}${/}${VM_SCRIPTS_FOLDER}/clean-demo.sh
- ... return_stderr=True return_stdout=False
+ ${stderr} SSHLibrary.Execute Command ${VM_HOME_FOLDER}${/}${VM_SCRIPTS_FOLDER}/clean-demo.sh return_stderr=True return_stdout=False
Should Be Empty ${stderr}
SSHLibrary.Close Connection
Setup Nodes
[Arguments] ${GBPSFCs} ${init_scripts_dir}
${sw_index} Set Variable 0
- :FOR ${GBPSFC} IN @{GBPSFCs}
+ : FOR ${GBPSFC} IN @{GBPSFCs}
\ Setup Node ${GBPSFC} ${sw_index} ${init_scripts_dir} timeout=10s
\ ${sw_index} Evaluate ${sw_index} + 1
-
*** Settings ***
-Documentation Global variables for GBPSFC 6node topology. Some variables are release specific and their value depend on
-... ODL_VERSION variable which contains release name and is defined in Jenkins job. Keywords for setting release specific
-... data are located in this file.
+Documentation Global variables for GBPSFC 6node topology. Some variables are release specific and their value depend on
+... ODL_VERSION variable which contains release name and is defined in Jenkins job. Keywords for setting release specific
+... data are located in this file.
Variables ../../../../variables/Variables.py
*** Variables ***
-${VM_HOME_FOLDER} = ${WORKSPACE}
-${VM_SCRIPTS_FOLDER} = scripts
-${ODL} = ${ODL_SYSTEM_IP}
-${GBPSFC1} = ${TOOLS_SYSTEM_IP}
-${GBPSFC2} = ${TOOLS_SYSTEM_2_IP}
-${GBPSFC3} = ${TOOLS_SYSTEM_3_IP}
-${GBPSFC4} = ${TOOLS_SYSTEM_4_IP}
-${GBPSFC5} = ${TOOLS_SYSTEM_5_IP}
-${GBPSFC6} = ${TOOLS_SYSTEM_6_IP}
-@{GBPSFCs} = ${GBPSFC1} ${GBPSFC2} ${GBPSFC3}
-... ${GBPSFC4} ${GBPSFC5} ${GBPSFC6}
-${OF_OVERLAY_CONFIG_PATH} /restconf/config/ofoverlay:of-overlay-config
-${TOPOLOGY_PATH} ${CONFIG_TOPO_API}/topology/ovsdb:1
-${SF_PATH} /restconf/config/service-function:service-functions
-${SF_FILE} ${CURDIR}/../../../../variables/gbp/6node/service_functions.json
-${SFF_PATH} /restconf/config/service-function-forwarder:service-function-forwarders
-${SFF_FILE} ${CURDIR}/../../../../variables/gbp/6node/service_function_forwarders.json
-${SFC_PATH} /restconf/config/service-function-chain:service-function-chains
-${TUNNELS_PATH} ${CONFIG_NODES_API}
-${TUNNELS_FILE} ${CURDIR}/../../../../variables/gbp/6node/tunnels.json
-${SFC_ASYMM_FILE} ${CURDIR}/../../../../variables/gbp/6node/demo-asymmetric-chain/service_function_chains.json
-${SFC_SYMM_FILE} ${CURDIR}/../../../../variables/gbp/6node/demo-symmetric-chain/service_function_chains.json
-${SFP_PATH} /restconf/config/service-function-path:service-function-paths
-${SFP_ASYMM_FILE} ${CURDIR}/../../../../variables/gbp/6node/demo-asymmetric-chain/service_function_paths.json
-${SFP_SYMM_FILE} ${CURDIR}/../../../../variables/gbp/6node/demo-symmetric-chain/service_function_paths.json
-${ENDPOINT_REG_PATH} ${GBP_REGEP_API}
-${ENDPOINT_UNREG_PATH} ${GBP_UNREGEP_API}
-${ENDPOINTS_OPER_PATH} /restconf/operational/endpoint:endpoints
+${VM_HOME_FOLDER} ${WORKSPACE}
+${VM_SCRIPTS_FOLDER} scripts
+${ODL} ${ODL_SYSTEM_IP}
+${GBPSFC1} ${TOOLS_SYSTEM_IP}
+${GBPSFC2} ${TOOLS_SYSTEM_2_IP}
+${GBPSFC3} ${TOOLS_SYSTEM_3_IP}
+${GBPSFC4} ${TOOLS_SYSTEM_4_IP}
+${GBPSFC5} ${TOOLS_SYSTEM_5_IP}
+${GBPSFC6} ${TOOLS_SYSTEM_6_IP}
+@{GBPSFCs} ${GBPSFC1} ${GBPSFC2} ${GBPSFC3} ${GBPSFC4} ${GBPSFC5} ${GBPSFC6}
+${OF_OVERLAY_CONFIG_PATH} /restconf/config/ofoverlay:of-overlay-config
+${TOPOLOGY_PATH} ${CONFIG_TOPO_API}/topology/ovsdb:1
+${SF_PATH} /restconf/config/service-function:service-functions
+${SF_FILE} ${CURDIR}/../../../../variables/gbp/6node/service_functions.json
+${SFF_PATH} /restconf/config/service-function-forwarder:service-function-forwarders
+${SFF_FILE} ${CURDIR}/../../../../variables/gbp/6node/service_function_forwarders.json
+${SFC_PATH} /restconf/config/service-function-chain:service-function-chains
+${TUNNELS_PATH} ${CONFIG_NODES_API}
+${TUNNELS_FILE} ${CURDIR}/../../../../variables/gbp/6node/tunnels.json
+${SFC_ASYMM_FILE} ${CURDIR}/../../../../variables/gbp/6node/demo-asymmetric-chain/service_function_chains.json
+${SFC_SYMM_FILE} ${CURDIR}/../../../../variables/gbp/6node/demo-symmetric-chain/service_function_chains.json
+${SFP_PATH} /restconf/config/service-function-path:service-function-paths
+${SFP_ASYMM_FILE} ${CURDIR}/../../../../variables/gbp/6node/demo-asymmetric-chain/service_function_paths.json
+${SFP_SYMM_FILE} ${CURDIR}/../../../../variables/gbp/6node/demo-symmetric-chain/service_function_paths.json
+${ENDPOINT_REG_PATH} ${GBP_REGEP_API}
+${ENDPOINT_UNREG_PATH} ${GBP_UNREGEP_API}
+${ENDPOINTS_OPER_PATH} /restconf/operational/endpoint:endpoints
*** Keywords ***
Set Test Variables
- [Documentation] Sets variables used in 6node test cases.
- [Arguments] ${client_ip} ${client_name} ${server_ip} ${server_name}
- ... ${ether_type} ${proto} ${service_port}=${EMPTY} ${vxlan_port}=${EMPTY} ${vxlan_gpe_port}=${EMPTY}
- Set Global Variable ${CLIENT_IP} ${client_ip}
- Set Global Variable ${CLIENT_NAME} ${client_name}
- Set Global Variable ${SERVER_IP} ${server_ip}
- Set Global Variable ${SERVER_NAME} ${server_name}
+ [Arguments] ${client_ip} ${client_name} ${server_ip} ${server_name} ${ether_type} ${proto}
+ ... ${service_port}=${EMPTY} ${vxlan_port}=${EMPTY} ${vxlan_gpe_port}=${EMPTY}
+ [Documentation] Sets variables used in 6node test cases.
+ Set Global Variable ${CLIENT_IP} ${client_ip}
+ Set Global Variable ${CLIENT_NAME} ${client_name}
+ Set Global Variable ${SERVER_IP} ${server_ip}
+ Set Global Variable ${SERVER_NAME} ${server_name}
Set Global Variable ${SERVICE_PORT} ${service_port}
- Set Global Variable ${ETHER_TYPE} ${ether_type}
- Set Global Variable ${PROTO} ${proto}
- Set Global Variable ${VXLAN_PORT} ${vxlan_port}
- Set Global Variable ${VXLAN_GPE_PORT} ${vxlan_gpe_port}
+ Set Global Variable ${ETHER_TYPE} ${ether_type}
+ Set Global Variable ${PROTO} ${proto}
+ Set Global Variable ${VXLAN_PORT} ${vxlan_port}
+ Set Global Variable ${VXLAN_GPE_PORT} ${vxlan_gpe_port}
Set ODL Variables
[Documentation] Initialize ODL version specific variables
Set ODL Variables Master
[Documentation] Sets variables specific to latest(master) version
- Set Global Variable ${GBP_TENANT_ID} tenant-red
- Set Global Variable ${TENANT_PATH} ${GBP_TENANTS_API}/tenant/${GBP_TENANT_ID}
+ Set Global Variable ${GBP_TENANT_ID} tenant-red
+ Set Global Variable ${TENANT_PATH} ${GBP_TENANTS_API}/tenant/${GBP_TENANT_ID}
Set Global Variable ${TENANT_ASYMM_FILE} ${CURDIR}/../../../../variables/gbp/6node/demo-asymmetric-chain/master/tenants.json
- Set Global Variable ${TENANT_SYMM_FILE} ${CURDIR}/../../../../variables/gbp/6node/demo-symmetric-chain/master/tenants.json
- Set Global Variable ${SFF_FILE} ${CURDIR}/../../../../variables/gbp/6node/master/service_function_forwarders.json
- Set Global Variable ${ENDPOINTS_ASYMM_DIR} ${CURDIR}/../../../../variables/gbp/6node/demo-asymmetric-chain/master/
- Set Global Variable ${ENDPOINTS_SYMM_DIR} ${CURDIR}/../../../../variables/gbp/6node/demo-symmetric-chain/master/
+ Set Global Variable ${TENANT_SYMM_FILE} ${CURDIR}/../../../../variables/gbp/6node/demo-symmetric-chain/master/tenants.json
+ Set Global Variable ${SFF_FILE} ${CURDIR}/../../../../variables/gbp/6node/master/service_function_forwarders.json
+ Set Global Variable ${ENDPOINTS_ASYMM_DIR} ${CURDIR}/../../../../variables/gbp/6node/demo-asymmetric-chain/master/
+ Set Global Variable ${ENDPOINTS_SYMM_DIR} ${CURDIR}/../../../../variables/gbp/6node/demo-symmetric-chain/master/
Set ODL Variables Lithium
[Documentation] Sets variables specific to Lithium version
- Set Global Variable ${GBP_TENANT_ID} f5c7d344-d1c7-4208-8531-2c2693657e12
- Set Global Variable ${TENANT_PATH} ${GBP_TENANTS_API}/tenant/${GBP_TENANT_ID}
+ Set Global Variable ${GBP_TENANT_ID} f5c7d344-d1c7-4208-8531-2c2693657e12
+ Set Global Variable ${TENANT_PATH} ${GBP_TENANTS_API}/tenant/${GBP_TENANT_ID}
Set Global Variable ${TENANT_ASYMM_FILE} ${CURDIR}/../../../../variables/gbp/6node/demo-asymmetric-chain/lithium/tenants.json
- Set Global Variable ${TENANT_SYMM_FILE} ${CURDIR}/../../../../variables/gbp/6node/demo-symmetric-chain/lithium/tenants.json
- Set Global Variable ${SFF_FILE} ${CURDIR}/../../../../variables/gbp/6node/lithium/service_function_forwarders.json
- Set Global Variable ${ENDPOINTS_ASYMM_DIR} ${CURDIR}/../../../../variables/gbp/6node/demo-asymmetric-chain/lithium/
- Set Global Variable ${ENDPOINTS_SYMM_DIR} ${CURDIR}/../../../../variables/gbp/6node/demo-symmetric-chain/lithium/
+ Set Global Variable ${TENANT_SYMM_FILE} ${CURDIR}/../../../../variables/gbp/6node/demo-symmetric-chain/lithium/tenants.json
+ Set Global Variable ${SFF_FILE} ${CURDIR}/../../../../variables/gbp/6node/lithium/service_function_forwarders.json
+ Set Global Variable ${ENDPOINTS_ASYMM_DIR} ${CURDIR}/../../../../variables/gbp/6node/demo-asymmetric-chain/lithium/
+ Set Global Variable ${ENDPOINTS_SYMM_DIR} ${CURDIR}/../../../../variables/gbp/6node/demo-symmetric-chain/lithium/
Resource Variables.robot
Variables ../../../../variables/Variables.py
-
-
*** Variables ***
-${timeout} = 10s
-
+${timeout} 10s
*** Keywords ***
Setup Everything
[Documentation] Initial setup of remote VM. Copying of scripts and installation python packages to virtual env if missing.
Create Session session http://${ODL}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
- Wait Until Keyword Succeeds 10x 30 s Get Data From URI
- ... session ${OF_OVERLAY_CONFIG_PATH} headers=${headers}
+ Wait Until Keyword Succeeds 10x 30 s Get Data From URI session ${OF_OVERLAY_CONFIG_PATH} headers=${headers}
Delete All Sessions
- :FOR ${GBPSFC} IN @{GBPSFCs}
+ : FOR ${GBPSFC} IN @{GBPSFCs}
\ ConnUtils.Connect and Login ${GBPSFC} timeout=${timeout}
- # TODO if something extra needs to be installed, please do it in virt-env
+ \ # TODO if something extra needs to be installed, please do it in virt-env
\ ${stderr} SSHLibrary.Execute Command virtualenv --system-site-packages ${VE_DIR} return_stdout=False return_stderr=True return_rc=False
\ Should Be Empty ${stderr}
\ SSHLibrary.Put File ${CURDIR}/../../common_scripts/* ${VM_HOME_FOLDER}${/}${VM_SCRIPTS_FOLDER}/ mode=0755
Teardown Everything
[Documentation] Clearing remote VM - removing copied scripts.
Log stop_suite_in_6_node
- :FOR ${GBPSFC} IN @{GBPSFCs}
+ : FOR ${GBPSFC} IN @{GBPSFCs}
\ ConnUtils.Connect and Login ${GBPSFC} timeout=${timeout}
\ SSHLibrary.Execute Command sudo rm -rf ${VM_HOME_FOLDER}${/}${VM_SCRIPTS_FOLDER}
\ SSHLibrary.Close Connection
*** Test Cases ***
Initialize Nodes
- Setup Nodes ${GBPSFCs} ${CURDIR}/init_scripts
+ Setup Nodes ${GBPSFCs} ${CURDIR}/init_scripts
*** Settings ***
Documentation Waiting for manager and switch connections.
+Suite Setup Start Connections
+Suite Teardown Close Connections
Library SSHLibrary
Resource ../../../../../libraries/GBP/ConnUtils.robot
Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
Resource ../Variables.robot
Resource ../Connections.robot
-Suite Setup Start Connections
-Suite Teardown Close Connections
*** Testcases ***
-
Wait For Manager Connected on GBPSFC2
Switch Connection GPSFC2_CONNECTION
- Wait Until Keyword Succeeds 2 min 3s Manager is Connected
+ Wait Until Keyword Succeeds 2 min 3s Manager is Connected
Wait For Manager Connected on GBPSFC4
Switch Connection GPSFC4_CONNECTION
- Wait Until Keyword Succeeds 2 min 3s Manager is Connected
+ Wait Until Keyword Succeeds 2 min 3s Manager is Connected
Put Service Functions
[Documentation] Register Service Functions to ODL
${json_to_edit} OperatingSystem.Get File ${SF_FILE}
- ${edited_json} Replace String ${json_to_edit} _SF1 ${GBPSFC3}
- ${edited_json} Replace String ${edited_json} _SF2 ${GBPSFC5}
+ ${edited_json} Replace String ${json_to_edit} _SF1 ${GBPSFC3}
+ ${edited_json} Replace String ${edited_json} _SF2 ${GBPSFC5}
${resp} RequestsLibrary.Put session ${SF_PATH} ${edited_json} ${HEADERS}
Should Be Equal As Strings ${resp.status_code} 200
Put Service Function Forwarders
[Documentation] Register Service Function Forwarders to ODL
${json_to_edit} OperatingSystem.Get File ${SFF_FILE}
- ${edited_json} Replace String ${json_to_edit} _SFF1 ${GBPSFC2}
- ${edited_json} Replace String ${edited_json} _SFF2 ${GBPSFC4}
+ ${edited_json} Replace String ${json_to_edit} _SFF1 ${GBPSFC2}
+ ${edited_json} Replace String ${edited_json} _SFF2 ${GBPSFC4}
${resp} RequestsLibrary.Put session ${SFF_PATH} ${edited_json} ${HEADERS}
Should Be Equal As Strings ${resp.status_code} 200
[Documentation] Making sure that manager is connected for further processing.
SSHLibrary.Open Connection ${GBPSFC2}
Utils.Flexible Mininet Login
- Wait Until Keyword Succeeds 2min 3s Manager and Switch Connected sw_name=sw2
+ Wait Until Keyword Succeeds 2min 3s Manager and Switch Connected sw_name=sw2
SSHLibrary.Close Connection
Wait For Manager and Switch Connected on GBPSFC4
[Documentation] Making sure that manager is connected for further processing.
SSHLibrary.Open Connection ${GBPSFC4}
Utils.Flexible Mininet Login
- Wait Until Keyword Succeeds 2min 3s Manager and Switch Connected sw_name=sw4
+ Wait Until Keyword Succeeds 2min 3s Manager and Switch Connected sw_name=sw4
SSHLibrary.Close Connection
Put Service Function Chains
Put Tunnels
[Documentation] Send tunnel augmentation to ODL
${json_to_edit} OperatingSystem.Get File ${TUNNELS_FILE}
- ${edited_json} Replace String ${json_to_edit} _CLASSIFIER1 ${GBPSFC1}
- ${edited_json} Replace String ${edited_json} _CLASSIFIER2 ${GBPSFC6}
+ ${edited_json} Replace String ${json_to_edit} _CLASSIFIER1 ${GBPSFC1}
+ ${edited_json} Replace String ${edited_json} _CLASSIFIER2 ${GBPSFC6}
${resp} RequestsLibrary.Put session ${TUNNELS_PATH} ${edited_json} ${HEADERS}
Should Be Equal As Strings ${resp.status_code} 200
Register Endpoints
[Documentation] Endpoints registration
- @{endpoint_files} = OperatingSystem.List Files In Directory ${ENDPOINTS_ASYMM_DIR} vethl*.*json absolute
- :FOR ${endpoint_file} IN @{endpoint_files}
+ @{endpoint_files} = OperatingSystem.List Files In Directory ${ENDPOINTS_ASYMM_DIR} vethl*.*json absolute
+ : FOR ${endpoint_file} IN @{endpoint_files}
\ Post Elements To URI From File ${ENDPOINT_REG_PATH} ${endpoint_file} ${HEADERS_YANG_JSON}
-
*** Settings ***
-Documentation Documentation Waiting for flows to appear on switches.
+Documentation Documentation Waiting for flows to appear on switches.
+Suite Setup Start Connections
+Suite Teardown Close Connections
Library SSHLibrary
Resource ../../../../../libraries/Utils.robot
Resource ../../../../../libraries/GBP/ConnUtils.robot
Variables ../../../../../variables/Variables.py
Resource ../Variables.robot
Resource ../Connections.robot
-Suite Setup Start Connections
-Suite Teardown Close Connections
*** Testcases ***
-
Wait For Flows on GBPSFC1
[Documentation] Waiting for flows to appear on OVS switch.
Switch Connection GPSFC1_CONNECTION
[Documentation] Waiting for flows to appear on OVS switch.
Switch Connection GPSFC6_CONNECTION
Wait For Flows On Switch ${GBPSFC6} sw6
-
*** Settings ***
-Documentation Deep icmp traffic inspection.
-... Nodes are located on the same VM in different subnets and are members of the same EPG.
+Documentation Deep icmp traffic inspection.
+... Nodes are located on the same VM in different subnets and are members of the same EPG.
+Suite Setup Start Connections
+Suite Teardown Close Connections
Library SSHLibrary
Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
Resource ../Variables.robot
Resource ../Connections.robot
-Suite Setup Start Connections
-Suite Teardown Close Connections
*** Variables ***
*** Testcases ***
-
Ping Once from h35_2 to h36_2
[Documentation] Test icmp request.
- Set Test Variables client_name=h35_2 client_ip=10.0.35.2 server_name=h36_2 server_ip=10.0.36.2
- ... ether_type=0x0800 proto=1
+ Set Test Variables client_name=h35_2 client_ip=10.0.35.2 server_name=h36_2 server_ip=10.0.36.2 ether_type=0x0800 proto=1
Switch Connection GPSFC1_CONNECTION
Ping from Docker ${CLIENT_NAME} ${SERVER_IP}
Find ICMP Req from h35_2 to h36_2 on GBPSFC6
[Documentation] Inspecting icmp req on GBPSFC1.
Switch Connection GPSFC1_CONNECTION
- ${flow} Inspect Classifier Outbound in_port=4 out_port=6 eth_type=${ETHER_TYPE} inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP} proto=${PROTO}
+ ${flow} Inspect Classifier Outbound in_port=4 out_port=6 eth_type=${ETHER_TYPE} inner_src_ip=${CLIENT_IP} inner_dst_ip=${SERVER_IP}
+ ... proto=${PROTO}
Find ICMP Resp from h36_2 to h35_2 on GBPSFC6
[Documentation] Inspecting icmp resp on GBPSFC1.
Switch Connection GPSFC1_CONNECTION
- ${flow} Inspect Classifier Outbound in_port=6 out_port=4 eth_type=${ETHER_TYPE} inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP} proto=${PROTO}
+ ${flow} Inspect Classifier Outbound in_port=6 out_port=4 eth_type=${ETHER_TYPE} inner_src_ip=${SERVER_IP} inner_dst_ip=${CLIENT_IP}
+ ... proto=${PROTO}
Stop Endless Ping from h35_2 to h36_2
[Documentation] Stoping of endless pinging after traffic inspection finishes.
Switch Connection GPSFC1_CONNECTION
- Stop Endless Ping from Docker to Address ${CLIENT_NAME} ${SERVER_IP}
-
-
+ Stop Endless Ping from Docker to Address ${CLIENT_NAME} ${SERVER_IP}
*** Settings ***
-Documentation Deep icmp traffic inspection.
-... Nodes are located on the same VM in the same subnet and are members of the same EPG.
+Documentation Deep icmp traffic inspection.
+... Nodes are located on the same VM in the same subnet and are members of the same EPG.
+Suite Setup Start Connections
+Suite Teardown Close Connections
Library SSHLibrary
Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
Resource ../Variables.robot
Resource ../Connections.robot
-Suite Setup Start Connections
-Suite Teardown Close Connections
*** Variables ***
*** Testcases ***
-
Ping Once from h35_2 to h35_3
[Documentation] Test icmp request.
- Set Test Variables client_name=h35_2 client_ip=10.0.35.2 server_name=h35_3 server_ip=10.0.35.3
- ... ether_type=0x0800 proto=1
+ Set Test Variables client_name=h35_2 client_ip=10.0.35.2 server_name=h35_3 server_ip=10.0.35.3 ether_type=0x0800 proto=1
Switch Connection GPSFC1_CONNECTION
Ping from Docker ${CLIENT_NAME} ${SERVER_IP}
Find ICMP Req from h35_2 to h35_3 on GBPSFC6
[Documentation] Inspecting icmp req on GBPSFC1.
Switch Connection GPSFC1_CONNECTION
- ${flow} Inspect Classifier Outbound in_port=4 out_port=5 eth_type=${ETHER_TYPE} inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP} proto=${PROTO}
+ ${flow} Inspect Classifier Outbound in_port=4 out_port=5 eth_type=${ETHER_TYPE} inner_src_ip=${CLIENT_IP} inner_dst_ip=${SERVER_IP}
+ ... proto=${PROTO}
Find ICMP Resp from h35_3 to h35_2 on GBPSFC6
[Documentation] Inspecting icmp resp on GBPSFC1.
Switch Connection GPSFC1_CONNECTION
- ${flow} Inspect Classifier Outbound in_port=5 out_port=4 eth_type=${ETHER_TYPE} inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP} proto=${PROTO}
+ ${flow} Inspect Classifier Outbound in_port=5 out_port=4 eth_type=${ETHER_TYPE} inner_src_ip=${SERVER_IP} inner_dst_ip=${CLIENT_IP}
+ ... proto=${PROTO}
Stop Endless Ping from h35_2 to h35_3
[Documentation] Stoping of endless pinging after traffic inspection finishes.
Switch Connection GPSFC1_CONNECTION
- Stop Endless Ping from Docker to Address ${CLIENT_NAME} ${SERVER_IP}
-
-
+ Stop Endless Ping from Docker to Address ${CLIENT_NAME} ${SERVER_IP}
*** Settings ***
-Documentation Deep icmp traffic inspection.
-... Nodes are located on the same VM, in different subnets and are members of the same EPG.
+Documentation Deep icmp traffic inspection.
+... Nodes are located on the same VM, in different subnets and are members of the same EPG.
+Suite Setup Start Connections
+Suite Teardown Close Connections
Library SSHLibrary
Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
Resource ../Variables.robot
Resource ../Connections.robot
-Suite Setup Start Connections
-Suite Teardown Close Connections
*** Variables ***
*** Testcases ***
-
Ping from h36_4 to h35_4
[Documentation] Test icmp request.
- Set Test Variables client_name=h36_4 client_ip=10.0.36.4 server_name=h35_4 server_ip=10.0.35.4
- ... ether_type=0x0800 proto=1
+ Set Test Variables client_name=h36_4 client_ip=10.0.36.4 server_name=h35_4 server_ip=10.0.35.4 ether_type=0x0800 proto=1
Switch Connection GPSFC6_CONNECTION
Ping from Docker ${CLIENT_NAME} ${SERVER_IP}
Find ICMP Req from h36_4 to h35_4 on GBPSFC6
[Documentation] Inspecting icmp req on GBPSFC6.
Switch Connection GPSFC6_CONNECTION
- ${flow} Inspect Classifier Outbound in_port=6 out_port=4 eth_type=0x0800 inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP} proto=${PROTO}
+ ${flow} Inspect Classifier Outbound in_port=6 out_port=4 eth_type=0x0800 inner_src_ip=${CLIENT_IP} inner_dst_ip=${SERVER_IP}
+ ... proto=${PROTO}
Find ICMP Resp from h35_4 to h36_4 on GBPSFC6
[Documentation] Inspecting icmp resp on GBPSFC6.
Switch Connection GPSFC6_CONNECTION
- ${flow} Inspect Classifier Outbound in_port=4 out_port=6 eth_type=0x0800 inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP} proto=${PROTO}
+ ${flow} Inspect Classifier Outbound in_port=4 out_port=6 eth_type=0x0800 inner_src_ip=${SERVER_IP} inner_dst_ip=${CLIENT_IP}
+ ... proto=${PROTO}
Stop Endless Ping from h36_4 to h35_4
[Documentation] Stoping of endless pinging after traffic inspection finishes.
Switch Connection GPSFC6_CONNECTION
- Stop Endless Ping from Docker to Address ${CLIENT_NAME} ${SERVER_IP}
-
-
+ Stop Endless Ping from Docker to Address ${CLIENT_NAME} ${SERVER_IP}
*** Settings ***
-Documentation Deep icmp traffic inspection.
-... Nodes are located on different VMs in different subnets and are members of different EPGs.
+Documentation Deep icmp traffic inspection.
+... Nodes are located on different VMs in different subnets and are members of different EPGs.
+Suite Setup Start Connections
+Suite Teardown Close Connections
Library SSHLibrary
Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
Resource ../Variables.robot
Resource ../Connections.robot
-Suite Setup Start Connections
-Suite Teardown Close Connections
*** Variables ***
*** Testcases ***
-
Ping from h36_5 to h35_2
[Documentation] Test icmp request.
- Set Test Variables client_name=h36_5 client_ip=10.0.36.5 server_name=h35_2 server_ip=10.0.35.2
- ... ether_type=0x0800 proto=1 vxlan_port=3
+ Set Test Variables client_name=h36_5 client_ip=10.0.36.5 server_name=h35_2 server_ip=10.0.35.2 ether_type=0x0800 proto=1
+ ... vxlan_port=3
Switch Connection GPSFC6_CONNECTION
Ping from Docker ${CLIENT_NAME} ${SERVER_IP}
Find ICMP Req from h36_5 to h35_2 on GBPSFC6
[Documentation] Inspecting icmp req on GBPSFC6.
Switch Connection GPSFC6_CONNECTION
- ${flow} Inspect Classifier Outbound in_port=7 out_port=${VXLAN_PORT} eth_type=${ETHER_TYPE} inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP} next_hop_ip=${GBPSFC1} proto=${PROTO}
+ ${flow} Inspect Classifier Outbound in_port=7 out_port=${VXLAN_PORT} eth_type=${ETHER_TYPE} inner_src_ip=${CLIENT_IP} inner_dst_ip=${SERVER_IP}
+ ... next_hop_ip=${GBPSFC1} proto=${PROTO}
Find ICMP Req from h36_5 to h35_2 on GBPSFC1
[Documentation] Inspecting icmp req on GBPSFC1.
Switch Connection GPSFC1_CONNECTION
- Inspect Classifier Inbound in_port=${VXLAN_PORT} out_port=4 eth_type=${ETHER_TYPE} inner_src_ip=${CLIENT_IP} inner_dst_ip=${SERVER_IP}
- ... outer_src_ip=${GBPSFC6} outer_dst_ip=${GBPSFC1} proto=${PROTO}
+ Inspect Classifier Inbound in_port=${VXLAN_PORT} out_port=4 eth_type=${ETHER_TYPE} inner_src_ip=${CLIENT_IP} inner_dst_ip=${SERVER_IP} outer_src_ip=${GBPSFC6}
+ ... outer_dst_ip=${GBPSFC1} proto=${PROTO}
Find ICMP Resp from h35_2 to h36_5 on GBPSFC1
[Documentation] Inspecting icmp resp on GBPSFC1.
Switch Connection GPSFC1_CONNECTION
- ${flow} Inspect Classifier Outbound in_port=4 out_port=${VXLAN_PORT} eth_type=${ETHER_TYPE} inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP} next_hop_ip=${GBPSFC6} proto=${PROTO}
+ ${flow} Inspect Classifier Outbound in_port=4 out_port=${VXLAN_PORT} eth_type=${ETHER_TYPE} inner_src_ip=${SERVER_IP} inner_dst_ip=${CLIENT_IP}
+ ... next_hop_ip=${GBPSFC6} proto=${PROTO}
Find ICMP Resp from h35_2 to h36_5 on GBPSFC6
[Documentation] Inspecting icmp resp on GBPSFC6.
Switch Connection GPSFC6_CONNECTION
- Inspect Classifier Inbound in_port=${VXLAN_PORT} out_port=7 eth_type=${ETHER_TYPE} inner_src_ip=${SERVER_IP} inner_dst_ip=${CLIENT_IP}
- ... outer_src_ip=${GBPSFC1} outer_dst_ip=${GBPSFC6} proto=${PROTO}
+ Inspect Classifier Inbound in_port=${VXLAN_PORT} out_port=7 eth_type=${ETHER_TYPE} inner_src_ip=${SERVER_IP} inner_dst_ip=${CLIENT_IP} outer_src_ip=${GBPSFC1}
+ ... outer_dst_ip=${GBPSFC6} proto=${PROTO}
Stop Endless Ping from h36_5 to h35_2
[Documentation] Stoping of endless pinging after traffic inspection finishes.
Switch Connection GPSFC6_CONNECTION
- Stop Endless Ping from Docker to Address ${CLIENT_NAME} ${SERVER_IP}
-
-
+ Stop Endless Ping from Docker to Address ${CLIENT_NAME} ${SERVER_IP}
*** Settings ***
-Documentation Deep inspection of HTTP traffic on asymmetric chain.
-... Nodes are located on the same VM.
+Documentation Deep inspection of HTTP traffic on asymmetric chain.
+... Nodes are located on the same VM.
+Suite Setup Start Connections
+Suite Teardown Close Connections
Library SSHLibrary
Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
Resource ../../../../../libraries/GBP/ConnUtils.robot
Resource ../Variables.robot
Resource ../Connections.robot
-Suite Setup Start Connections
-Suite Teardown Close Connections
*** Variables ***
*** Testcases ***
-
Start HTTP on h36_2 on Port 80
[Documentation] Starting HTTP service on docker container.
- Set Test Variables client_name=h35_2 client_ip=10.0.35.2 server_name=h36_2 server_ip=10.0.36.2
- ... service_port=80 ether_type=0x0800 proto=6 vxlan_gpe_port=2
+ Set Test Variables client_name=h35_2 client_ip=10.0.35.2 server_name=h36_2 server_ip=10.0.36.2 service_port=80 ether_type=0x0800
+ ... proto=6 vxlan_gpe_port=2
Switch Connection GPSFC1_CONNECTION
- Start HTTP Service on Docker ${SERVER_NAME} ${SERVICE_PORT}
+ Start HTTP Service on Docker ${SERVER_NAME} ${SERVICE_PORT}
Curl h36_2 from h35_2
- [Documentation] Test HTTP request from a docker container to serving docker container.
+ [Documentation] Test HTTP request from a docker container to serving docker container.
Curl from Docker ${CLIENT_NAME} ${SERVER_IP} ${SERVICE_PORT}
Start Endless Curl on h35_2 on port 80
[Documentation] Starting endless HTTP session for traffic inspection.
- Start Endless Curl from Docker ${CLIENT_NAME} ${SERVER_IP} ${SERVICE_PORT} sleep=1
+ Start Endless Curl from Docker ${CLIENT_NAME} ${SERVER_IP} ${SERVICE_PORT} sleep=1
On GBPSFC1 Send HTTP req h35_2-h36_2 to GBPSFC2
[Documentation] HTTP traffic inspection.
Switch Connection GPSFC1_CONNECTION
- ${flow} Inspect Classifier Outbound in_port=4 out_port=${VXLAN_GPE_PORT} eth_type=${ETHER_TYPE} inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP} next_hop_ip=${GBPSFC2} nsi=255 proto=${PROTO} dst_port=${SERVICE_PORT}
+ ${flow} Inspect Classifier Outbound in_port=4 out_port=${VXLAN_GPE_PORT} eth_type=${ETHER_TYPE} inner_src_ip=${CLIENT_IP} inner_dst_ip=${SERVER_IP}
+ ... next_hop_ip=${GBPSFC2} nsi=255 proto=${PROTO} dst_port=${SERVICE_PORT}
${nsp_35_2-nsp_36_2} GET NSP Value From Flow ${flow}
Set Global Variable ${NSP} ${nsp_35_2-nsp_36_2}
On GBPSFC2 Send HTTP req h35_2-h36_2 to GBPSFC3
[Documentation] HTTP traffic inspection.
Switch Connection GPSFC2_CONNECTION
- Inspect Service Function Forwarder in_port=${VXLAN_GPE_PORT} out_port=${VXLAN_GPE_PORT} outer_src_ip=${GBPSFC1} outer_dst_ip=${GBPSFC2} eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP} inner_dst_ip=${SERVER_IP} next_hop_ip=${GBPSFC3} nsp=${NSP} nsi=255 proto=${PROTO}
+ Inspect Service Function Forwarder in_port=${VXLAN_GPE_PORT} out_port=${VXLAN_GPE_PORT} outer_src_ip=${GBPSFC1} outer_dst_ip=${GBPSFC2} eth_type=${ETHER_TYPE} inner_src_ip=${CLIENT_IP}
+ ... inner_dst_ip=${SERVER_IP} next_hop_ip=${GBPSFC3} nsp=${NSP} nsi=255 proto=${PROTO}
On GBPSFC3 Send HTTP req h35_2-h36_2 to GBPSFC2
[Documentation] HTTP traffic inspection.
Switch Connection GPSFC3_CONNECTION
- Inspect Service Function in_port=${VXLAN_GPE_PORT} out_port=${VXLAN_GPE_PORT} outer_src_ip=${GBPSFC2} outer_dst_ip=${GBPSFC3} eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP} inner_dst_ip=${SERVER_IP} next_hop_ip=${GBPSFC2} nsp=${NSP} received_nsi=255
+ Inspect Service Function in_port=${VXLAN_GPE_PORT} out_port=${VXLAN_GPE_PORT} outer_src_ip=${GBPSFC2} outer_dst_ip=${GBPSFC3} eth_type=${ETHER_TYPE} inner_src_ip=${CLIENT_IP}
+ ... inner_dst_ip=${SERVER_IP} next_hop_ip=${GBPSFC2} nsp=${NSP} received_nsi=255
On GBPSFC2 Send HTTP req h35_2-h36_2 to GBPSFC4
[Documentation] HTTP traffic inspection.
Switch Connection GPSFC2_CONNECTION
- Inspect Service Function Forwarder in_port=${VXLAN_GPE_PORT} out_port=${VXLAN_GPE_PORT} outer_src_ip=${GBPSFC3} outer_dst_ip=${GBPSFC2} eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP} inner_dst_ip=${SERVER_IP} next_hop_ip=${GBPSFC4} nsp=${NSP} nsi=254 proto=${PROTO}
+ Inspect Service Function Forwarder in_port=${VXLAN_GPE_PORT} out_port=${VXLAN_GPE_PORT} outer_src_ip=${GBPSFC3} outer_dst_ip=${GBPSFC2} eth_type=${ETHER_TYPE} inner_src_ip=${CLIENT_IP}
+ ... inner_dst_ip=${SERVER_IP} next_hop_ip=${GBPSFC4} nsp=${NSP} nsi=254 proto=${PROTO}
On GBPSFC4 Send HTTP req h35_2-h36_2 to GBPSFC5
[Documentation] HTTP traffic inspection.
Switch Connection GPSFC4_CONNECTION
- Inspect Service Function Forwarder in_port=${VXLAN_GPE_PORT} out_port=${VXLAN_GPE_PORT} outer_src_ip=${GBPSFC2} outer_dst_ip=${GBPSFC4} eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP} inner_dst_ip=${SERVER_IP} next_hop_ip=${GBPSFC5} nsp=${NSP} nsi=254 proto=${PROTO}
+ Inspect Service Function Forwarder in_port=${VXLAN_GPE_PORT} out_port=${VXLAN_GPE_PORT} outer_src_ip=${GBPSFC2} outer_dst_ip=${GBPSFC4} eth_type=${ETHER_TYPE} inner_src_ip=${CLIENT_IP}
+ ... inner_dst_ip=${SERVER_IP} next_hop_ip=${GBPSFC5} nsp=${NSP} nsi=254 proto=${PROTO}
On GBPSFC5 Send HTTP req h35_2-h36_2 to GBPSFC4
[Documentation] HTTP traffic inspection.
Switch Connection GPSFC5_CONNECTION
- Inspect Service Function in_port=${VXLAN_GPE_PORT} out_port=${VXLAN_GPE_PORT} outer_src_ip=${GBPSFC4} outer_dst_ip=${GBPSFC5} eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP} inner_dst_ip=${SERVER_IP} next_hop_ip=${GBPSFC4} nsp=${NSP} received_nsi=254
+ Inspect Service Function in_port=${VXLAN_GPE_PORT} out_port=${VXLAN_GPE_PORT} outer_src_ip=${GBPSFC4} outer_dst_ip=${GBPSFC5} eth_type=${ETHER_TYPE} inner_src_ip=${CLIENT_IP}
+ ... inner_dst_ip=${SERVER_IP} next_hop_ip=${GBPSFC4} nsp=${NSP} received_nsi=254
On GBPSFC4 Send HTTP req h35_2-h36_2 to GBPSFC1
[Documentation] HTTP traffic inspection.
Switch Connection GPSFC4_CONNECTION
- Inspect Service Function Forwarder in_port=${VXLAN_GPE_PORT} out_port=${VXLAN_GPE_PORT} outer_src_ip=${GBPSFC5} outer_dst_ip=${GBPSFC4} eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP} inner_dst_ip=${SERVER_IP} next_hop_ip=${GBPSFC1} nsp=${NSP} nsi=253 proto=${PROTO}
+ Inspect Service Function Forwarder in_port=${VXLAN_GPE_PORT} out_port=${VXLAN_GPE_PORT} outer_src_ip=${GBPSFC5} outer_dst_ip=${GBPSFC4} eth_type=${ETHER_TYPE} inner_src_ip=${CLIENT_IP}
+ ... inner_dst_ip=${SERVER_IP} next_hop_ip=${GBPSFC1} nsp=${NSP} nsi=253 proto=${PROTO}
On GBPSFC1 Send HTTP req h35_2-h36_2 to h36_2
[Documentation] HTTP traffic inspection.
Switch Connection GPSFC1_CONNECTION
- Inspect Classifier Inbound in_port=${VXLAN_GPE_PORT} out_port=6 eth_type=${ETHER_TYPE} inner_src_ip=${CLIENT_IP} inner_dst_ip=${SERVER_IP}
- ... outer_src_ip=${GBPSFC4} outer_dst_ip=${GBPSFC1} nsp=${NSP} nsi=253 proto=${PROTO}
+ Inspect Classifier Inbound in_port=${VXLAN_GPE_PORT} out_port=6 eth_type=${ETHER_TYPE} inner_src_ip=${CLIENT_IP} inner_dst_ip=${SERVER_IP} outer_src_ip=${GBPSFC4}
+ ... outer_dst_ip=${GBPSFC1} nsp=${NSP} nsi=253 proto=${PROTO}
On GBPSFC1 Send HTTP resp h36_2-h35_2 to h35_2
[Documentation] HTTP traffic inspection.
Switch Connection GPSFC1_CONNECTION
- ${flow} Inspect Classifier Outbound in_port=6 out_port=4 eth_type=${ETHER_TYPE} inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP} proto=${PROTO} src_port=${SERVICE_PORT}
+ ${flow} Inspect Classifier Outbound in_port=6 out_port=4 eth_type=${ETHER_TYPE} inner_src_ip=${SERVER_IP} inner_dst_ip=${CLIENT_IP}
+ ... proto=${PROTO} src_port=${SERVICE_PORT}
Stop Endless Curl on h36_2 on port 80
[Documentation] Stopping endless HTTP session after traffic inspection finishes.
Stop HTTP on h36_2 on Port 80
[Documentation] Stopping HTTP service on the docker container.
Stop HTTP Service on Docker ${SERVER_NAME}
-
*** Settings ***
-Documentation Deep inspection of HTTP traffic on asymmetric chain.
-... Nodes are located on different VMs.
+Documentation Deep inspection of HTTP traffic on asymmetric chain.
+... Nodes are located on different VMs.
+Suite Setup Start Connections
+Suite Teardown Close Connections
Library SSHLibrary
Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
Resource ../../../../../libraries/GBP/ConnUtils.robot
Resource ../Variables.robot
Resource ../Connections.robot
-Suite Setup Start Connections
-Suite Teardown Close Connections
*** Variables ***
*** Testcases ***
-
Start HTTP on h36_4 on Port 80
[Documentation] Starting HTTP service on docker container.
- Set Test Variables client_name=h35_3 client_ip=10.0.35.3 server_name=h36_4 server_ip=10.0.36.4
- ... service_port=80 ether_type=0x0800 proto=6 vxlan_gpe_port=2 vxlan_port=3
+ Set Test Variables client_name=h35_3 client_ip=10.0.35.3 server_name=h36_4 server_ip=10.0.36.4 service_port=80 ether_type=0x0800
+ ... proto=6 vxlan_gpe_port=2 vxlan_port=3
Switch Connection GPSFC6_CONNECTION
Start HTTP Service on Docker ${SERVER_NAME} ${SERVICE_PORT}
Curl h36_2 from h35_3
- [Documentation] Test HTTP request from a docker container to serving docker container.
+ [Documentation] Test HTTP request from a docker container to serving docker container.
Switch Connection GPSFC1_CONNECTION
Curl from Docker ${CLIENT_NAME} ${SERVER_IP} service_port=${SERVICE_PORT}
On GBPSFC1 Send HTTP req h35_3-h36_4 to GBPSFC2
[Documentation] HTTP traffic inspection.
Switch Connection GPSFC1_CONNECTION
- ${flow} Inspect Classifier Outbound in_port=5 out_port=${VXLAN_GPE_PORT} eth_type=${ETHER_TYPE} inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP} next_hop_ip=${GBPSFC2} nsi=255 proto=${PROTO} dst_port=${SERVICE_PORT}
+ ${flow} Inspect Classifier Outbound in_port=5 out_port=${VXLAN_GPE_PORT} eth_type=${ETHER_TYPE} inner_src_ip=${CLIENT_IP} inner_dst_ip=${SERVER_IP}
+ ... next_hop_ip=${GBPSFC2} nsi=255 proto=${PROTO} dst_port=${SERVICE_PORT}
${nsp_35_3-nsp_36_4} GET NSP Value From Flow ${flow}
Set Global Variable ${NSP} ${nsp_35_3-nsp_36_4}
On GBPSFC2 Send HTTP req h35_3-h36_4 to GBPSFC3
[Documentation] HTTP traffic inspection.
Switch Connection GPSFC2_CONNECTION
- Inspect Service Function Forwarder in_port=${VXLAN_GPE_PORT} out_port=${VXLAN_GPE_PORT} outer_src_ip=${GBPSFC1} outer_dst_ip=${GBPSFC2} eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP} inner_dst_ip=${SERVER_IP} next_hop_ip=${GBPSFC3} nsp=${NSP} nsi=255 proto=${PROTO}
+ Inspect Service Function Forwarder in_port=${VXLAN_GPE_PORT} out_port=${VXLAN_GPE_PORT} outer_src_ip=${GBPSFC1} outer_dst_ip=${GBPSFC2} eth_type=${ETHER_TYPE} inner_src_ip=${CLIENT_IP}
+ ... inner_dst_ip=${SERVER_IP} next_hop_ip=${GBPSFC3} nsp=${NSP} nsi=255 proto=${PROTO}
On GBPSFC3 Send HTTP req h35_3-h36_4 to GBPSFC2
[Documentation] HTTP traffic inspection.
Switch Connection GPSFC3_CONNECTION
- Inspect Service Function in_port=${VXLAN_GPE_PORT} out_port=${VXLAN_GPE_PORT} outer_src_ip=${GBPSFC2} outer_dst_ip=${GBPSFC3} eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP} inner_dst_ip=${SERVER_IP} next_hop_ip=${GBPSFC2} nsp=${NSP} received_nsi=255
+ Inspect Service Function in_port=${VXLAN_GPE_PORT} out_port=${VXLAN_GPE_PORT} outer_src_ip=${GBPSFC2} outer_dst_ip=${GBPSFC3} eth_type=${ETHER_TYPE} inner_src_ip=${CLIENT_IP}
+ ... inner_dst_ip=${SERVER_IP} next_hop_ip=${GBPSFC2} nsp=${NSP} received_nsi=255
On GBPSFC2 Send HTTP req h35_3-h36_4 to GBPSFC4
[Documentation] HTTP traffic inspection.
Switch Connection GPSFC2_CONNECTION
- Inspect Service Function Forwarder in_port=${VXLAN_GPE_PORT} out_port=${VXLAN_GPE_PORT} outer_src_ip=${GBPSFC3} outer_dst_ip=${GBPSFC2} eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP} inner_dst_ip=${SERVER_IP} next_hop_ip=${GBPSFC4} nsp=${NSP} nsi=254 proto=${PROTO}
+ Inspect Service Function Forwarder in_port=${VXLAN_GPE_PORT} out_port=${VXLAN_GPE_PORT} outer_src_ip=${GBPSFC3} outer_dst_ip=${GBPSFC2} eth_type=${ETHER_TYPE} inner_src_ip=${CLIENT_IP}
+ ... inner_dst_ip=${SERVER_IP} next_hop_ip=${GBPSFC4} nsp=${NSP} nsi=254 proto=${PROTO}
On GBPSFC4 Send HTTP req h35_3-h36_4 to GBPSFC5
[Documentation] HTTP traffic inspection.
Switch Connection GPSFC4_CONNECTION
- Inspect Service Function Forwarder in_port=${VXLAN_GPE_PORT} out_port=${VXLAN_GPE_PORT} outer_src_ip=${GBPSFC2} outer_dst_ip=${GBPSFC4} eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP} inner_dst_ip=${SERVER_IP} next_hop_ip=${GBPSFC5} nsp=${NSP} nsi=254 proto=${PROTO}
+ Inspect Service Function Forwarder in_port=${VXLAN_GPE_PORT} out_port=${VXLAN_GPE_PORT} outer_src_ip=${GBPSFC2} outer_dst_ip=${GBPSFC4} eth_type=${ETHER_TYPE} inner_src_ip=${CLIENT_IP}
+ ... inner_dst_ip=${SERVER_IP} next_hop_ip=${GBPSFC5} nsp=${NSP} nsi=254 proto=${PROTO}
On GBPSFC5 Send HTTP req h35_3-h36_4 to GBPSFC4
[Documentation] HTTP traffic inspection.
Switch Connection GPSFC5_CONNECTION
- Inspect Service Function in_port=${VXLAN_GPE_PORT} out_port=${VXLAN_GPE_PORT} outer_src_ip=${GBPSFC4} outer_dst_ip=${GBPSFC5} eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP} inner_dst_ip=${SERVER_IP} next_hop_ip=${GBPSFC4} nsp=${NSP} received_nsi=254
+ Inspect Service Function in_port=${VXLAN_GPE_PORT} out_port=${VXLAN_GPE_PORT} outer_src_ip=${GBPSFC4} outer_dst_ip=${GBPSFC5} eth_type=${ETHER_TYPE} inner_src_ip=${CLIENT_IP}
+ ... inner_dst_ip=${SERVER_IP} next_hop_ip=${GBPSFC4} nsp=${NSP} received_nsi=254
On GBPSFC4 Send HTTP req h35_3-h36_4 to GBPSFC6
[Documentation] HTTP traffic inspection.
Switch Connection GPSFC4_CONNECTION
- Inspect Service Function Forwarder in_port=${VXLAN_GPE_PORT} out_port=${VXLAN_GPE_PORT} outer_src_ip=${GBPSFC5} outer_dst_ip=${GBPSFC4} eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP} inner_dst_ip=${SERVER_IP} next_hop_ip=${GBPSFC6} nsp=${NSP} nsi=253 proto=${PROTO}
+ Inspect Service Function Forwarder in_port=${VXLAN_GPE_PORT} out_port=${VXLAN_GPE_PORT} outer_src_ip=${GBPSFC5} outer_dst_ip=${GBPSFC4} eth_type=${ETHER_TYPE} inner_src_ip=${CLIENT_IP}
+ ... inner_dst_ip=${SERVER_IP} next_hop_ip=${GBPSFC6} nsp=${NSP} nsi=253 proto=${PROTO}
On GBPSFC6 Send HTTP req h35_3-h36_4 to h36_4
[Documentation] HTTP traffic inspection.
Switch Connection GPSFC6_CONNECTION
- Inspect Classifier Inbound in_port=${VXLAN_GPE_PORT} out_port=6 eth_type=${ETHER_TYPE} inner_src_ip=${CLIENT_IP} inner_dst_ip=${SERVER_IP}
- ... outer_src_ip=${GBPSFC4} outer_dst_ip=${GBPSFC6} nsp=${NSP} nsi=253 proto=${PROTO}
+ Inspect Classifier Inbound in_port=${VXLAN_GPE_PORT} out_port=6 eth_type=${ETHER_TYPE} inner_src_ip=${CLIENT_IP} inner_dst_ip=${SERVER_IP} outer_src_ip=${GBPSFC4}
+ ... outer_dst_ip=${GBPSFC6} nsp=${NSP} nsi=253 proto=${PROTO}
On GBPSFC6 Send HTTP resp h36_4-h35_3 to GBPSFC1
[Documentation] HTTP traffic inspection.
Switch Connection GPSFC6_CONNECTION
- ${flow} Inspect Classifier Outbound in_port=6 out_port=${VXLAN_PORT} eth_type=${ETHER_TYPE} inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP} next_hop_ip=${GBPSFC1} proto=${PROTO} src_port=${SERVICE_PORT}
+ ${flow} Inspect Classifier Outbound in_port=6 out_port=${VXLAN_PORT} eth_type=${ETHER_TYPE} inner_src_ip=${SERVER_IP} inner_dst_ip=${CLIENT_IP}
+ ... next_hop_ip=${GBPSFC1} proto=${PROTO} src_port=${SERVICE_PORT}
On GBPSFC1 Send HTTP resp h36_4-h35_3 to h35_3
[Documentation] HTTP traffic inspection.
Switch Connection GPSFC1_CONNECTION
- Inspect Classifier Inbound in_port=${VXLAN_PORT} out_port=5 eth_type=${ETHER_TYPE} inner_src_ip=${SERVER_IP} inner_dst_ip=${CLIENT_IP}
- ... outer_src_ip=${GBPSFC6} outer_dst_ip=${GBPSFC1} proto=${PROTO}
+ Inspect Classifier Inbound in_port=${VXLAN_PORT} out_port=5 eth_type=${ETHER_TYPE} inner_src_ip=${SERVER_IP} inner_dst_ip=${CLIENT_IP} outer_src_ip=${GBPSFC6}
+ ... outer_dst_ip=${GBPSFC1} proto=${PROTO}
Stop Endless Curl on h36_2 on port 80
[Documentation] Stopping endless HTTP session after traffic inspection finishes.
[Documentation] Stopping HTTP service on the docker container.
Switch Connection GPSFC6_CONNECTION
Stop HTTP Service on Docker ${SERVER_NAME}
-
Resource ../Variables.robot
*** Test Cases ***
-
Delete Service Function Paths
[Documentation] Delete Service Function Paths from ODL
[Tags] GBPSFCTEAR
Remove All Elements At URI And Verify ${SFP_PATH}
-
Delete Service Function Chains
[Documentation] Delete Service Function Chains from ODL
[Tags] GBPSFCTEAR
[Documentation] Delete OVSDB topology from ODL
[Tags] GBPSFCTEAR
${resp} RequestsLibrary.Get session ${TOPOLOGY_PATH}
- Run Keyword If ${resp.status_code} == 200
- ... Remove All Elements At URI And Verify ${TOPOLOGY_PATH}
+ Run Keyword If ${resp.status_code} == 200 Remove All Elements At URI And Verify ${TOPOLOGY_PATH}
Resource ../Variables.robot
Resource ../GBPSFC_6node.robot
-
*** Variables ***
-${timeout} = 10s
-
+${timeout} 10s
*** Test Cases ***
Teardown Suite
Log Teardown suite in asymetric-chain
- :FOR ${GBPSFC} IN @{GBPSFCs}
+ : FOR ${GBPSFC} IN @{GBPSFCs}
\ GBPSFC_6node.Teardown Node ${GBPSFC} ${CURDIR} timeout=${timeout}
[Documentation] Clean All Tenants In Datastore After Tests
Remove All Elements At URI ${GBP_TENANTS_API}
-
*** Keywords ***
Init Variables Master
[Documentation] Sets variables specific to latest(master) version
[Return] ${id}
Verify Intent:Add Command is Availible
- [Documentation] Verifies that odl-nic-console is up and intent:add command is available to be used.
- ... Should be used with the command "Wait Until Keyword Succeeds" to poll until command is availible.
+ [Documentation] Verifies that odl-nic-console is up and intent:add command is available to be used.
+ ... Should be used with the command "Wait Until Keyword Succeeds" to poll until command is availible.
${output}= Issue Command On Karaf Console intent:add
Should Not Contain ${output} Command not found
-
Verify Intent Added
[Arguments] ${id} ${intent}
[Documentation] This will check if the id exists via intent:list -c, then compares intent details with arguments passed in with Add Intent
Resource ../../../libraries/Utils.robot
*** Variables ***
-${ODL_VERSION} lithium-SR3
-${OPENSTACK_BRANCH} stable/liberty
-${NETWORKING-ODL_BRANCH} ${OPENSTACK_BRANCH}
-${TEMPEST_REGEX} tempest.api.network
-${ODL_BOOT_WAIT_URL} restconf/operational/network-topology:network-topology/topology/netvirt:1
+${ODL_VERSION} lithium-SR3
+${OPENSTACK_BRANCH} stable/liberty
+${NETWORKING-ODL_BRANCH} ${OPENSTACK_BRANCH}
+${TEMPEST_REGEX} tempest.api.network
+${ODL_BOOT_WAIT_URL} restconf/operational/network-topology:network-topology/topology/netvirt:1
${default_devstack_prompt_timeout} 10s
-${devstack_workspace} ~/ds_workspace
-${DEVSTACK_SYSTEM_PASSWORD} # set to empty, but provide for others to override if desired
-${CLEAN_DEVSTACK_HOST} False
+${devstack_workspace} ~/ds_workspace
+${DEVSTACK_SYSTEM_PASSWORD} \ # set to empty, but provide for others to override if desired
+${CLEAN_DEVSTACK_HOST} False
*** Test Cases ***
Run Devstack Gate Wrapper
Write Commands Until Prompt rm -rf devstack-gate
Write Commands Until Prompt git clone https://git.openstack.org/openstack-infra/devstack-gate timeout=30s
-
Clean DevStack Host In Case It Is Not Sterile
[Documentation] In upstream CI, the expectation is that the devstack VM is fresh, sterile and ready
... for any version of devstack, networking-odl, and OpenDaylight. During local test development,
Write Commands Until Prompt sudo ovs-vsctl del-br br-int
Write Commands Until Prompt sudo ovs-vsctl del-manager
-
Write Commands Until Prompt
[Arguments] ${cmd} ${timeout}=${default_devstack_prompt_timeout}
[Documentation] quick wrapper for Write and Read Until Prompt Keywords to make test cases more readable
Show Devstack Debugs
Write Commands Until Prompt gunzip /opt/stack/logs/devstacklog.txt.gz
Write Commands Until Prompt tail -n1000 /opt/stack/logs/devstacklog.txt timeout=600s
-
Add a portmap for interface if2
[Documentation] Create a portmap on Interface if2 of vBridge1
- Add a portmap Tenant1 vBridge1 if2 openflow:3 s3-eth1
+ Add a portmap Tenant1 vBridge1 if2 openflow:3 s3-eth1
Ping h1 to h3
[Documentation] Ping h1 to h3, verify no packet loss
- BuiltIn.Wait_Until_Keyword_Succeeds 20 1 Mininet Ping Should Succeed h1 h3
+ BuiltIn.Wait_Until_Keyword_Succeeds 20 1 Mininet Ping Should Succeed h1 h3
Add a vBridge vBridge2
[Documentation] Add a vBridge vBridge2 in vtn Tenant1
Add a portmap for interface if3
[Documentation] Create a portmap on Interface if3 of vBridge1
- Add a portmap Tenant1 vBridge2 if3 openflow:2 s2-eth2
+ Add a portmap Tenant1 vBridge2 if3 openflow:2 s2-eth2
Add a portmap for interface if4
[Documentation] Create a portmap on Interface if4 of vBridge1
- Add a portmap Tenant1 vBridge2 if4 openflow:3 s3-eth2
+ Add a portmap Tenant1 vBridge2 if4 openflow:3 s3-eth2
Ping h2 to h4
[Documentation] Ping h2 to h4, verify no packet loss
Resource ../../../libraries/VtnMaKeywords.robot
*** Test Cases ***
-
Add a flowcondition in restconfig
[Documentation] Create a flowcondition cond_1 using restconfig api
Add a flowcondition cond_1
Add a portmap for interface if2
[Documentation] Create a portmap on Interface if2 of vBridge1
- Add a portmap Tenant1 vBridge1 if2 openflow:3 s3-eth1
+ Add a portmap Tenant1 vBridge1 if2 openflow:3 s3-eth1
Ping h1 to h3
[Documentation] Ping h1 to h3, verify no packet loss
- BuiltIn.Wait_Until_Keyword_Succeeds 20 1 Mininet Ping Should Succeed h1 h3
+ BuiltIn.Wait_Until_Keyword_Succeeds 20 1 Mininet Ping Should Succeed h1 h3
Add a vBridge vBridge2
[Documentation] Add a vBridge vBridge2 in vtn Tenant1
Add a portmap for interface if3
[Documentation] Create a portmap on Interface if3 of vBridge1
- Add a portmap Tenant1 vBridge1 if3 openflow:2 s2-eth2
+ Add a portmap Tenant1 vBridge1 if3 openflow:2 s2-eth2
Add a portmap for interface if4
[Documentation] Create a portmap on Interface if4 of vBridge1
- Add a portmap Tenant1 vBridge1 if4 openflow:3 s3-eth2
+ Add a portmap Tenant1 vBridge1 if4 openflow:3 s3-eth2
Ping h2 to h4
[Documentation] Ping h2 to h4, verify no packet loss