Asymmetric demo scenario.
Change-Id: Ib92bc83ee254a8fe0c64617dbc2a0e8baa720322
Signed-off-by: Tomas Cechvala <tcechval@cisco.com>
--- /dev/null
+*** Settings ***
+Library SSHLibrary
+Resource ../../../../libraries/Utils.robot
+Resource ../../../../libraries/GBP/ConnUtils.robot
+Variables ../../../../variables/Variables.py
+Resource Variables.robot
+
+*** Keywords ***
+
+Start Connections
+ [Documentation] Establishes connections to remote VMs.
+ SSHLibrary.Open Connection ${GBPSFC1} alias=GPSFC1_CONNECTION
+ Utils.Flexible Mininet Login
+ SSHLibrary.Open Connection ${GBPSFC2} alias=GPSFC2_CONNECTION
+ Utils.Flexible Mininet Login
+ SSHLibrary.Open Connection ${GBPSFC3} alias=GPSFC3_CONNECTION
+ Utils.Flexible Mininet Login
+ SSHLibrary.Open Connection ${GBPSFC4} alias=GPSFC4_CONNECTION
+ Utils.Flexible Mininet Login
+ SSHLibrary.Open Connection ${GBPSFC5} alias=GPSFC5_CONNECTION
+ Utils.Flexible Mininet Login
+ SSHLibrary.Open Connection ${GBPSFC6} alias=GPSFC6_CONNECTION
+ Utils.Flexible Mininet Login
+
+Close Connections
+ [Documentation] Closes connections to remote VMs.
+ Switch Connection GPSFC1_CONNECTION
+ SSHLibrary.Close Connection
+ Switch Connection GPSFC2_CONNECTION
+ SSHLibrary.Close Connection
+ Switch Connection GPSFC3_CONNECTION
+ SSHLibrary.Close Connection
+ Switch Connection GPSFC4_CONNECTION
+ SSHLibrary.Close Connection
+ Switch Connection GPSFC5_CONNECTION
+ SSHLibrary.Close Connection
+ Switch Connection GPSFC6_CONNECTION
+ SSHLibrary.Close Connection
--- /dev/null
+*** Settings ***
+Library SSHLibrary
+Resource Variables.robot
+Resource ../../../../libraries/Utils.robot
+Resource ../../../../libraries/GBP/ConnUtils.robot
+Variables ../../../../variables/Variables.py
+
+*** Keywords ***
+
+Setup Node
+ [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}
+ 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}
+ 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
+
+Teardown Node
+ [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
+ Should Be Empty ${stderr}
+ ${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
+ Should Be Empty ${stderr}
+ SSHLibrary.Close Connection
+
+Setup Nodes
+ [Arguments] ${GBPSFCs} ${init_scripts_dir}
+ ${sw_index} Set Variable 0
+ :FOR ${GBPSFC} IN @{GBPSFCs}
+ \ Setup Node ${GBPSFC} ${sw_index} ${init_scripts_dir} timeout=10s
+ \ ${sw_index} Evaluate ${sw_index} + 1
+
--- /dev/null
+*** 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.
+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
+
+*** 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}
+ 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 ODL Variables
+ [Documentation] Initialize ODL version specific variables
+ log ${ODL_VERSION}
+ Run Keyword If "${ODL_VERSION}" == "stable-lithium" or "${ODL_VERSION}" == "stable/lithium" Set ODL Variables Lithium
+ ... ELSE Set ODL Variables Master
+
+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 ${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 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 ${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/
--- /dev/null
+*** Settings ***
+Documentation Setup/teardown for GBPSFC 6-node topology
+Suite Setup Setup Everything
+Suite Teardown Teardown Everything
+Library SSHLibrary
+Library RequestsLibrary
+Resource ../../../../libraries/Utils.robot
+Resource ../../../../libraries/GBP/ConnUtils.robot
+Resource Variables.robot
+Variables ../../../../variables/Variables.py
+
+
+
+*** Variables ***
+${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}
+ Delete All Sessions
+ :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
+ \ ${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
+ \ ${stdout} ${stderr} ${rc} ConnUtils.Execute in VE pip freeze | grep ipaddr -q || pip install ipaddr timeout=${timeout}
+ \ Should Be Equal As Numbers ${rc} 0
+ \ SSHLibrary.Close Connection
+ Set ODL Variables
+
+Teardown Everything
+ [Documentation] Clearing remote VM - removing copied scripts.
+ Log stop_suite_in_6_node
+ :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
--- /dev/null
+*** Settings ***
+Resource ../Variables.robot
+Resource ../GBPSFC_6node.robot
+
+*** Test Cases ***
+Initialize Nodes
+ Setup Nodes ${GBPSFCs} ${CURDIR}/init_scripts
--- /dev/null
+*** Settings ***
+Documentation Waiting for manager and switch 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 For Manager Connected on GBPSFC4
+ Switch Connection GPSFC4_CONNECTION
+ Wait Until Keyword Succeeds 2 min 3s Manager is Connected
Variables ../../../../../variables/Variables.py
Resource ../../../../../libraries/Utils.robot
Resource ../Variables.robot
-
-*** Variables ***
-${GBP_TENANT_ID} f5c7d344-d1c7-4208-8531-2c2693657e12
-${TENANT_PATH} /restconf/config/policy:tenants/tenant/${GBP_TENANT_ID}
-${TENANT_FILE} ${CURDIR}/../../../../../variables/gbp/demo-asymmetric-chain/tenants.json
-${TUNNELS_PATH} /restconf/config/opendaylight-inventory:nodes
-${TUNNELS_FILE} ${CURDIR}/../../../../../variables/gbp/demo-asymmetric-chain/tunnels.json
-${ENDPOINTS_PATH} /restconf/operations/endpoint:register-endpoint
-${SF_PATH} /restconf/config/service-function:service-functions
-${SF_FILE} ${CURDIR}/../../../../../variables/gbp/demo-asymmetric-chain/service_functions.json
-${SFF_PATH} /restconf/config/service-function-forwarder:service-function-forwarders
-${SFF_FILE} ${CURDIR}/../../../../../variables/gbp/demo-asymmetric-chain/service_function_forwarders.json
-${SFC_PATH} /restconf/config/service-function-chain:service-function-chains
-${SFC_FILE} ${CURDIR}/../../../../../variables/gbp/demo-asymmetric-chain/service_function_chains.json
-${SFP_PATH} /restconf/config/service-function-path:service-function-paths
-${SFP_FILE} ${CURDIR}/../../../../../variables/gbp/demo-asymmetric-chain/service_function_paths.json
-${h35_2_FILE} ${CURDIR}/../../../../../variables/gbp/demo-asymmetric-chain/vethl-h35_2.json
-${h35_3_FILE} ${CURDIR}/../../../../../variables/gbp/demo-asymmetric-chain/vethl-h35_3.json
-${h35_4_FILE} ${CURDIR}/../../../../../variables/gbp/demo-asymmetric-chain/vethl-h35_4.json
-${h35_5_FILE} ${CURDIR}/../../../../../variables/gbp/demo-asymmetric-chain/vethl-h35_5.json
-${h36_2_FILE} ${CURDIR}/../../../../../variables/gbp/demo-asymmetric-chain/vethl-h36_2.json
-${h36_3_FILE} ${CURDIR}/../../../../../variables/gbp/demo-asymmetric-chain/vethl-h36_3.json
-${h36_4_FILE} ${CURDIR}/../../../../../variables/gbp/demo-asymmetric-chain/vethl-h36_4.json
-${h36_5_FILE} ${CURDIR}/../../../../../variables/gbp/demo-asymmetric-chain/vethl-h36_5.json
-@{ENDPOINT_FILES} ${h35_2_FILE} ${h35_3_FILE} ${h35_4_FILE} ${h35_5_FILE} ${h36_2_FILE} ${h36_3_FILE} ${h36_4_FILE}
-... ${h36_5_FILE}
+Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
*** Test Cases ***
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
+Wait For Manager and Switch Connected on GBPSFC2
+ [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
+ 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
+ SSHLibrary.Close Connection
+
Put Service Function Chains
[Documentation] Register Service Function Chains to ODL
- Add Elements To URI From File ${SFC_PATH} ${SFC_FILE}
+ Add Elements To URI From File ${SFC_PATH} ${SFC_ASYMM_FILE}
Put Service Function Paths
[Documentation] Register Service Function Paths to ODL
- Add Elements To URI From File ${SFP_PATH} ${SFP_FILE}
+ Add Elements To URI From File ${SFP_PATH} ${SFP_ASYMM_FILE}
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
Put Tenant
[Documentation] Send Tenant Data to ODL
- Add Elements To URI From File ${TENANT_PATH} ${TENANT_FILE}
+ Add Elements To URI From File ${TENANT_PATH} ${TENANT_ASYMM_FILE}
Register Endpoints
[Documentation] Endpoints registration
- : FOR ${endpoint_file} IN @{ENDPOINT_FILES}
- \ Post Elements To URI From File ${ENDPOINTS_PATH} ${endpoint_file}
+ @{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}
+
--- /dev/null
+*** Settings ***
+Documentation Documentation Waiting for flows to appear on switches.
+Library SSHLibrary
+Resource ../../../../../libraries/Utils.robot
+Resource ../../../../../libraries/GBP/ConnUtils.robot
+Resource ../../../../../libraries/GBP/DockerUtils.robot
+Resource ../../../../../libraries/GBP/OpenFlowUtils.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
+ Wait For Flows On Switch ${GBPSFC1} sw1
+
+Wait For Flows on GBPSFC2
+ [Documentation] Waiting for flows to appear on OVS switch.
+ Switch Connection GPSFC2_CONNECTION
+ Wait For Flows On Switch ${GBPSFC2} sw2
+
+Wait For Flows on GBPSFC3
+ [Documentation] Waiting for flows to appear on OVS switch.
+ Switch Connection GPSFC3_CONNECTION
+ Wait For Flows On Switch ${GBPSFC3} sw3
+
+Wait For Flows on GBPSFC4
+ [Documentation] Waiting for flows to appear on OVS switch.
+ Switch Connection GPSFC4_CONNECTION
+ Wait For Flows On Switch ${GBPSFC4} sw4
+
+Wait For Flows on GBPSFC5
+ [Documentation] Waiting for flows to appear on OVS switch.
+ Switch Connection GPSFC5_CONNECTION
+ Wait For Flows On Switch ${GBPSFC5} sw5
+
+Wait For Flows on GBPSFC6
+ [Documentation] Waiting for flows to appear on OVS switch.
+ Switch Connection GPSFC6_CONNECTION
+ Wait For Flows On Switch ${GBPSFC6} sw6
+
--- /dev/null
+*** Settings ***
+Documentation Deep icmp traffic inspection.
+... Nodes are located on the same VM in different subnets and are members of the same EPG.
+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
+ Switch Connection GPSFC1_CONNECTION
+ Ping from Docker ${CLIENT_NAME} ${SERVER_IP}
+
+Start Endless Ping from h35_2 to h36_2
+ [Documentation] Starting of endless pinging for traffic inspection.
+ Start Endless 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}
+
+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}
+
+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}
+
+
--- /dev/null
+*** Settings ***
+Documentation Deep icmp traffic inspection.
+... Nodes are located on the same VM in the same subnet and are members of the same EPG.
+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
+ Switch Connection GPSFC1_CONNECTION
+ Ping from Docker ${CLIENT_NAME} ${SERVER_IP}
+
+Start Endless Ping from h35_2 to h35_3
+ [Documentation] Starting of endless pinging for traffic inspection.
+ Start Endless 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}
+
+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}
+
+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}
+
+
--- /dev/null
+*** Settings ***
+Documentation Deep icmp traffic inspection.
+... Nodes are located on the same VM, in different subnets and are members of the same EPG.
+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
+ Switch Connection GPSFC6_CONNECTION
+ Ping from Docker ${CLIENT_NAME} ${SERVER_IP}
+
+Start Endless Ping from h36_4 to h35_4
+ [Documentation] Starting of endless pinging for traffic inspection.
+ Start Endless 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}
+
+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}
+
+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}
+
+
--- /dev/null
+*** Settings ***
+Documentation Deep icmp traffic inspection.
+... Nodes are located on different VMs in different subnets and are members of different EPGs.
+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
+ Switch Connection GPSFC6_CONNECTION
+ Ping from Docker ${CLIENT_NAME} ${SERVER_IP}
+
+Start Endless Ping from h36_5 to h35_2
+ [Documentation] Starting of endless pinging for traffic inspection.
+ Start Endless 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}
+
+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}
+
+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}
+
+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}
+
+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}
+
+
--- /dev/null
+*** Settings ***
+Documentation Deep inspection of HTTP traffic on asymmetric chain.
+... Nodes are located on the same VM.
+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
+ Switch Connection GPSFC1_CONNECTION
+ 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.
+ 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
+
+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}
+ ${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}
+
+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
+
+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}
+
+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}
+
+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
+
+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}
+
+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}
+
+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}
+
+Stop Endless Curl on h36_2 on port 80
+ [Documentation] Stopping endless HTTP session after traffic inspection finishes.
+ Stop Endless Curl from Docker ${CLIENT_NAME}
+
+Stop HTTP on h36_2 on Port 80
+ [Documentation] Stopping HTTP service on the docker container.
+ Stop HTTP Service on Docker ${SERVER_NAME}
+
--- /dev/null
+*** Settings ***
+Documentation Deep inspection of HTTP traffic on asymmetric chain.
+... Nodes are located on different VMs.
+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
+ 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.
+ Switch Connection GPSFC1_CONNECTION
+ Curl from Docker ${CLIENT_NAME} ${SERVER_IP} service_port=${SERVICE_PORT}
+
+Start Endless Curl on h35_3 on port 80
+ [Documentation] Starting endless HTTP session for traffic inspection.
+ Start Endless Curl from Docker ${CLIENT_NAME} ${SERVER_IP} ${SERVICE_PORT} sleep=1
+
+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}
+ ${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}
+
+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
+
+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}
+
+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}
+
+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
+
+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}
+
+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}
+
+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}
+
+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}
+
+Stop Endless Curl on h36_2 on port 80
+ [Documentation] Stopping endless HTTP session after traffic inspection finishes.
+ Switch Connection GPSFC1_CONNECTION
+ Stop Endless Curl from Docker ${CLIENT_NAME}
+
+Stop HTTP on h36_2 on Port 80
+ [Documentation] Stopping HTTP service on the docker container.
+ Switch Connection GPSFC6_CONNECTION
+ Stop HTTP Service on Docker ${SERVER_NAME}
+
Variables ../../../../../variables/Variables.py
Resource ../../../../../libraries/Utils.robot
Resource ../../../../../libraries/GBP/RestconfUtils.robot
-
-*** Variables ***
-${GBP_TENENT_ID} f5c7d344-d1c7-4208-8531-2c2693657e12
-${TENANT_PATH} /restconf/config/policy:tenants/tenant/${GBP_TENENT_ID}
-${TUNNELS_PATH} /restconf/config/opendaylight-inventory:nodes
-${OPER_ENDPOINTS_PATH} /restconf/operational/endpoint:endpoints
-${UNREG_ENDPOINTS_PATH} /restconf/operations/endpoint:unregister-endpoint
-${SF_PATH} /restconf/config/service-function:service-functions
-${SFF_PATH} /restconf/config/service-function-forwarder:service-function-forwarders
-${SFC_PATH} /restconf/config/service-function-chain:service-function-chains
-${SFP_PATH} /restconf/config/service-function-path:service-function-paths
-${OPER_NODES} /restconf/operational/opendaylight-inventory:nodes/
+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
Unregister Endpoints
[Documentation] Unregister Endpoints Endpoints from ODL
[Tags] GBPSFCTEAR
- Unregister Endpoints ${OPER_ENDPOINTS_PATH}
+ RestconfUtils.Unregister Endpoints
+
+Delete OVSDB Topology If Present
+ [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}
--- /dev/null
+*** Settings ***
+Library SSHLibrary
+Resource ../../../../../libraries/Utils.robot
+Resource ../../../../../libraries/GBP/ConnUtils.robot
+Variables ../../../../../variables/Variables.py
+Resource ../Variables.robot
+Resource ../GBPSFC_6node.robot
+
+
+*** Variables ***
+${timeout} = 10s
+
+
+*** Test Cases ***
+Teardown Suite
+ Log Teardown suite in asymetric-chain
+ :FOR ${GBPSFC} IN @{GBPSFCs}
+ \ GBPSFC_6node.Teardown Node ${GBPSFC} ${CURDIR} timeout=${timeout}
--- /dev/null
+# Config for switches, tunnelIP is the local IP address.
+switches = [{'name': 'sw1',
+ 'type': 'gbp',
+ 'dpid': '1'},
+ {'name': 'sw2',
+ 'type': 'sff',
+ 'dpid': '2'},
+ {'name': 'sw3',
+ 'type': 'sf',
+ 'dpid': '3'},
+ {'name': 'sw4',
+ 'type': 'sff',
+ 'dpid': '4'},
+ {'name': 'sw5',
+ 'type': 'sf',
+ 'dpid': '5'},
+ {'name': 'sw6',
+ 'type': 'gbp',
+ 'dpid': '6'},
+ {'name': 'sw7',
+ 'type': 'none',
+ 'dpid': '7'},
+ {'name': 'sw8',
+ 'type': 'none',
+ 'dpid': '8'}
+ ]
+
+defaultContainerImage = 'alagalah/odlpoc_ovs230'
+
+# Note that tenant name and endpointGroup name come from policy_config.py
+
+hosts = [{'name': 'h35_2',
+ 'mac': '00:00:00:00:35:02',
+ 'ip': '10.0.35.2/24',
+ 'switch': 'sw1'},
+ {'name': 'h35_3',
+ 'ip': '10.0.35.3/24',
+ 'mac': '00:00:00:00:35:03',
+ 'switch': 'sw1'},
+ {'name': 'h35_4',
+ 'ip': '10.0.35.4/24',
+ 'mac': '00:00:00:00:35:04',
+ 'switch': 'sw6'},
+ {'name': 'h35_5',
+ 'ip': '10.0.35.5/24',
+ 'mac': '00:00:00:00:35:05',
+ 'switch': 'sw6'},
+ {'name': 'h36_2',
+ 'ip': '10.0.36.2/24',
+ 'mac': '00:00:00:00:36:02',
+ 'switch': 'sw1'},
+ {'name': 'h36_3',
+ 'ip': '10.0.36.3/24',
+ 'mac': '00:00:00:00:36:03',
+ 'switch': 'sw1'},
+ {'name': 'h36_4',
+ 'ip': '10.0.36.4/24',
+ 'mac': '00:00:00:00:36:04',
+ 'switch': 'sw6'},
+ {'name': 'h36_5',
+ 'ip': '10.0.36.5/24',
+ 'mac': '00:00:00:00:36:05',
+ 'switch': 'sw6'}
+ ]
--- /dev/null
+#!/usr/bin/env bash
+
+set -e
+
+SFF_IP=$1
+SFF_HEX=$(printf '%02X' ${SFF_IP//./ })
+SFF_HEX=0x$SFF_HEX
+sw=$(sudo ovs-vsctl show | egrep -E 'Bridge.*sw' | awk '{print $2}' | sed -e 's/^"//' -e 's/"$//')
+
+if [ $sw = "sw3" ] || [ $sw = "sw5" ] ; then
+ # delete NORMAL, if present
+ sudo ovs-ofctl --strict del-flows $sw priority=0
+ sudo ovs-ofctl add-flow $sw "priority=1000,nsi=255 actions=move:NXM_NX_NSH_C1[]->NXM_NX_NSH_C1[],move:NXM_NX_NSH_C2[]->NXM_NX_NSH_C2[],move:NXM_NX_TUN_ID[0..31]->NXM_NX_TUN_ID[0..31],load:$SFF_HEX->NXM_NX_TUN_IPV4_DST[],set_nsi:254,IN_PORT" -OOpenFlow13
+ sudo ovs-ofctl add-flow $sw "priority=1000,nsi=254 actions=move:NXM_NX_NSH_C1[]->NXM_NX_NSH_C1[],move:NXM_NX_NSH_C2[]->NXM_NX_NSH_C2[],move:NXM_NX_TUN_ID[0..31]->NXM_NX_TUN_ID[0..31],load:$SFF_HEX->NXM_NX_TUN_IPV4_DST[],set_nsi:253,IN_PORT" -OOpenFlow13
+else
+ echo "Invalid SF for this demo";
+ exit
+fi
+++ /dev/null
-*** Settings ***
-Documentation Test suite for setting up infrastructure for demo-symmetric-chain
-Suite Setup Create Session session http://${CONTROLLER}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
-Suite Teardown Delete All Sessions
-Library RequestsLibrary
-Library OperatingSystem
-Variables ../../../../../variables/Variables.py
-Resource ../../../../../libraries/Utils.robot
-Resource ../Variables.robot
-
-*** Variables ***
-${GBP_TENANT_ID} f5c7d344-d1c7-4208-8531-2c2693657e12
-${TENANT_PATH} /restconf/config/policy:tenants/tenant/${GBP_TENANT_ID}
-${TENANT_FILE} ${CURDIR}/../../../../../variables/gbp/demo-symmetric-chain/tenants.json
-${TUNNELS_PATH} /restconf/config/opendaylight-inventory:nodes
-${TUNNELS_FILE} ${CURDIR}/../../../../../variables/gbp/demo-symmetric-chain/tunnels.json
-${ENDPOINTS_PATH} /restconf/operations/endpoint:register-endpoint
-${SF_PATH} /restconf/config/service-function:service-functions
-${SF_FILE} ${CURDIR}/../../../../../variables/gbp/demo-symmetric-chain/service_functions.json
-${SFF_PATH} /restconf/config/service-function-forwarder:service-function-forwarders
-${SFF_FILE} ${CURDIR}/../../../../../variables/gbp/demo-symmetric-chain/service_function_forwarders.json
-${SFC_PATH} /restconf/config/service-function-chain:service-function-chains
-${SFC_FILE} ${CURDIR}/../../../../../variables/gbp/demo-symmetric-chain/service_function_chains.json
-${SFP_PATH} /restconf/config/service-function-path:service-function-paths
-${SFP_FILE} ${CURDIR}/../../../../../variables/gbp/demo-symmetric-chain/service_function_paths.json
-${h35_2_FILE} ${CURDIR}/../../../../../variables/gbp/demo-symmetric-chain/vethl-h35_2.json
-${h35_3_FILE} ${CURDIR}/../../../../../variables/gbp/demo-symmetric-chain/vethl-h35_3.json
-${h35_4_FILE} ${CURDIR}/../../../../../variables/gbp/demo-symmetric-chain/vethl-h35_4.json
-${h35_5_FILE} ${CURDIR}/../../../../../variables/gbp/demo-symmetric-chain/vethl-h35_5.json
-${h36_2_FILE} ${CURDIR}/../../../../../variables/gbp/demo-symmetric-chain/vethl-h36_2.json
-${h36_3_FILE} ${CURDIR}/../../../../../variables/gbp/demo-symmetric-chain/vethl-h36_3.json
-${h36_4_FILE} ${CURDIR}/../../../../../variables/gbp/demo-symmetric-chain/vethl-h36_4.json
-${h36_5_FILE} ${CURDIR}/../../../../../variables/gbp/demo-symmetric-chain/vethl-h36_5.json
-@{ENDPOINT_FILES} ${h35_2_FILE} ${h35_3_FILE} ${h35_4_FILE} ${h35_5_FILE} ${h36_2_FILE} ${h36_3_FILE} ${h36_4_FILE}
-... ${h36_5_FILE}
-
-*** Test Cases ***
-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}
- ${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}
- ${resp} RequestsLibrary.Put session ${SFF_PATH} ${edited_json} ${HEADERS}
- Should Be Equal As Strings ${resp.status_code} 200
-
-Put Service Function Chains
- [Documentation] Register Service Function Chains to ODL
- Add Elements To URI From File ${SFC_PATH} ${SFC_FILE}
-
-Put Service Function Paths
- [Documentation] Register Service Function Paths to ODL
- Add Elements To URI From File ${SFP_PATH} ${SFP_FILE}
-
-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}
- ${resp} RequestsLibrary.Put session ${TUNNELS_PATH} ${edited_json} ${HEADERS}
- Should Be Equal As Strings ${resp.status_code} 200
-
-Put Tenant
- [Documentation] Send Tenant Data to ODL
- Add Elements To URI From File ${TENANT_PATH} ${TENANT_FILE}
-
-Register Endpoints
- [Documentation] Endpoints registration
- : FOR ${endpoint_file} IN @{ENDPOINT_FILES}
- \ Post Elements To URI From File ${ENDPOINTS_PATH} ${endpoint_file}
+++ /dev/null
-*** Settings ***
-Documentation Test suite for cleaning up / unregister infrastructure constructs like endpoints for demo-symmetric-chain
-Suite Setup Create Session session http://${CONTROLLER}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
-Suite Teardown Delete All Sessions
-Library RequestsLibrary
-Library OperatingSystem
-Library Collections
-Library json
-Variables ../../../../../variables/Variables.py
-Resource ../../../../../libraries/Utils.robot
-Resource ../../../../../libraries/GBP/RestconfUtils.robot
-
-*** Variables ***
-${GBP_TENENT_ID} f5c7d344-d1c7-4208-8531-2c2693657e12
-${TENANT_PATH} /restconf/config/policy:tenants/tenant/${GBP_TENENT_ID}
-${TUNNELS_PATH} /restconf/config/opendaylight-inventory:nodes
-${OPER_ENDPOINTS_PATH} /restconf/operational/endpoint:endpoints
-${UNREG_ENDPOINTS_PATH} /restconf/operations/endpoint:unregister-endpoint
-${SF_PATH} /restconf/config/service-function:service-functions
-${SFF_PATH} /restconf/config/service-function-forwarder:service-function-forwarders
-${SFC_PATH} /restconf/config/service-function-chain:service-function-chains
-${SFP_PATH} /restconf/config/service-function-path:service-function-paths
-${OPER_NODES} /restconf/operational/opendaylight-inventory:nodes/
-
-*** 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
- Remove All Elements At URI And Verify ${SFC_PATH}
-
-Delete Service Functions
- [Documentation] Delete Service Function from ODL
- [Tags] GBPSFCTEAR
- Remove All Elements At URI And Verify ${SF_PATH}
-
-Delete Service Function Forwarders
- [Documentation] Delete Service Function Forwarders from ODL
- [Tags] GBPSFCTEAR
- Remove All Elements At URI And Verify ${SFF_PATH}
-
-Delete Tunnels
- [Documentation] Delete Tenant from ODL
- [Tags] GBPSFCTEAR
- Remove All Elements At URI And Verify ${TUNNELS_PATH}
-
-Delete Tenant
- [Documentation] Delete Tenant from ODL
- [Tags] GBPSFCTEAR
- Remove All Elements At URI And Verify ${TENANT_PATH}
-
-Unregister Endpoints
- [Documentation] Unregister Endpoints Endpoints from ODL
- [Tags] GBPSFCTEAR
- Unregister Endpoints ${OPER_ENDPOINTS_PATH}
--- /dev/null
+# Place the suites in run order:
+integration/test/csit/suites/groupbasedpolicy/GBPSFC/6-node
\ No newline at end of file
--- /dev/null
+{
+ "tenant":[
+ {
+ "id":"tenant-red",
+ "name":"DockerTenant",
+ "forwarding-context":{
+ "l2-flood-domain":[
+ {
+ "id":"flood-domain-1",
+ "parent":"bridge-domain1"
+ },
+ {
+ "id":"flood-domain-2",
+ "parent":"bridge-domain1"
+ }
+ ],
+ "l3-context":[
+ {
+ "id":"l3-context-vrf-red"
+ }
+ ],
+ "l2-bridge-domain":[
+ {
+ "id":"bridge-domain1",
+ "parent":"l3-context-vrf-red"
+ }
+ ],
+ "subnet":[
+ {
+ "id":"subnet-10.0.36.0/24",
+ "virtual-router-ip":"10.0.36.1",
+ "parent":"flood-domain-2",
+ "ip-prefix":"10.0.36.1/24"
+ },
+ {
+ "id":"subnet-10.0.35.0/24",
+ "virtual-router-ip":"10.0.35.1",
+ "parent":"flood-domain-1",
+ "ip-prefix":"10.0.35.1/24"
+ }
+ ]
+ },
+ "policy":{
+ "endpoint-group":[
+ {
+ "id":"webservers",
+ "name":"webservers",
+ "provider-named-selector":[
+ {
+ "name":"webservers-clients-icmp-http-contract",
+ "contract":[
+ "icmp-http-contract"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"clients",
+ "name":"clients",
+ "consumer-named-selector":[
+ {
+ "name":"webservers-clients-icmp-http-contract",
+ "contract":[
+ "icmp-http-contract"
+ ]
+ }
+ ]
+ }
+ ],
+ "subject-feature-instances":{
+ "classifier-instance":[
+ {
+ "name":"icmp",
+ "classifier-definition-id":"Classifier-IP-Protocol",
+ "parameter-value":[
+ {
+ "name":"proto",
+ "int-value":1
+ }
+ ]
+ },
+ {
+ "name":"http-dest",
+ "classifier-definition-id":"Classifier-L4",
+ "parameter-value":[
+ {
+ "int-value":"6",
+ "name":"proto"
+ },
+ {
+ "int-value":"80",
+ "name":"destport"
+ }
+ ]
+ },
+ {
+ "name":"http-src",
+ "classifier-definition-id":"Classifier-L4",
+ "parameter-value":[
+ {
+ "int-value":"6",
+ "name":"proto"
+ },
+ {
+ "int-value":"80",
+ "name":"sourceport"
+ }
+ ]
+ }
+ ],
+ "action-instance":[
+ {
+ "name":"chain1",
+ "action-definition-id":"Action-Chain",
+ "parameter-value":[
+ {
+ "name":"sfc-chain-name",
+ "string-value":"SFCGBP"
+ }
+ ]
+ },
+ {
+ "name":"allow1",
+ "action-definition-id":"Action-Allow"
+ }
+ ]
+ },
+ "contract":[
+ {
+ "id":"icmp-http-contract",
+ "subject":[
+ {
+ "name":"icmp-subject",
+ "rule":[
+ {
+ "name":"allow-icmp-rule",
+ "order":0,
+ "classifier-ref":[
+ {
+ "name":"icmp",
+ "instance-name":"icmp"
+ }
+ ],
+ "action-ref":[
+ {
+ "name":"allow1",
+ "order":0
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name":"http-subject",
+ "rule":[
+ {
+ "name":"http-chain-rule",
+ "classifier-ref":[
+ {
+ "name":"http-dest",
+ "instance-name":"http-dest",
+ "direction":"in"
+ }
+ ],
+ "action-ref":[
+ {
+ "name":"chain1",
+ "order":0
+ }
+ ]
+ },
+ {
+ "name":"http-out-rule",
+ "classifier-ref":[
+ {
+ "name":"http-src",
+ "instance-name":"http-src",
+ "direction":"out"
+ }
+ ],
+ "action-ref":[
+ {
+ "name":"allow1",
+ "order":0
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "clause":[
+ {
+ "name":"icmp-http-clause",
+ "subject-refs":[
+ "icmp-subject",
+ "http-subject"
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+}
\ No newline at end of file
--- /dev/null
+{
+ "service-function-forwarders":{
+ "service-function-forwarder":[
+ {
+ "name":"SFF1",
+ "service-node":"OVSDB2",
+ "service-function-forwarder-ovs:ovs-bridge":{
+ "bridge-name":"sw2"
+ },
+ "service-function-dictionary":[
+ {
+ "name":"firewall-72",
+ "sff-sf-data-plane-locator":{
+ "sf-dpl-name":"2",
+ "sff-dpl-name":"sfc-tun2"
+ }
+ }
+ ],
+ "sff-data-plane-locator":[
+ {
+ "name":"sfc-tun2",
+ "data-plane-locator":{
+ "transport":"service-locator:vxlan-gpe",
+ "port":6633,
+ "ip":"_SFF1"
+ },
+ "service-function-forwarder-ovs:ovs-options":{
+ "remote-ip":"flow",
+ "dst-port":"6633",
+ "key":"flow",
+ "nsp":"flow",
+ "nsi":"flow",
+ "nshc1":"flow",
+ "nshc2":"flow",
+ "nshc3":"flow",
+ "nshc4":"flow"
+ }
+ }
+ ]
+ },
+ {
+ "name":"SFF2",
+ "service-node":"OVSDB2",
+ "service-function-forwarder-ovs:ovs-bridge":{
+ "bridge-name":"sw4"
+ },
+ "service-function-dictionary":[
+ {
+ "name":"dpi-74",
+ "sff-sf-data-plane-locator":{
+ "sf-dpl-name":"3",
+ "sff-dpl-name":"sfc-tun4"
+ }
+ }
+ ],
+ "sff-data-plane-locator":[
+ {
+ "name":"sfc-tun4",
+ "data-plane-locator":{
+ "transport":"service-locator:vxlan-gpe",
+ "port":6633,
+ "ip":"_SFF2"
+ },
+ "service-function-forwarder-ovs:ovs-options":{
+ "remote-ip":"flow",
+ "dst-port":"6633",
+ "key":"flow",
+ "nsp":"flow",
+ "nsi":"flow",
+ "nshc1":"flow",
+ "nshc2":"flow",
+ "nshc3":"flow",
+ "nshc4":"flow"
+ }
+ }
+ ]
+ }
+ ]
+ }
+}
\ No newline at end of file
+++ /dev/null
-{
- "tenant": [
- {
- "id": "tenant-red",
- "l2-flood-domain": [
- {
- "id": "flood-domain-1",
- "parent": "bridge-domain1"
- },
- {
- "id": "flood-domain-2",
- "parent": "bridge-domain1"
- }
- ],
- "name": "DockerTenant",
- "l3-context": [
- {
- "id": "l3-context-vrf-red"
- }
- ],
- "l2-bridge-domain": [
- {
- "id": "bridge-domain1",
- "parent": "l3-context-vrf-red"
- }
- ],
- "subnet": [
- {
- "id": "subnet-10.0.36.0/24",
- "virtual-router-ip": "10.0.36.1",
- "parent": "flood-domain-2",
- "ip-prefix": "10.0.36.1/24"
- },
- {
- "id": "subnet-10.0.35.0/24",
- "virtual-router-ip": "10.0.35.1",
- "parent": "flood-domain-1",
- "ip-prefix": "10.0.35.1/24"
- }
- ],
- "endpoint-group": [
- {
- "id": "webservers",
- "name": "webservers",
- "provider-named-selector": [
- {
- "name": "webservers-clients-icmp-http-contract",
- "contract": [
- "icmp-http-contract"
- ]
- }
- ]
- },
- {
- "id": "clients",
- "name": "clients",
- "consumer-named-selector": [
- {
- "name": "webservers-clients-icmp-http-contract",
- "contract": [
- "icmp-http-contract"
- ]
- }
- ]
- }
- ],
- "subject-feature-instances": {
- "classifier-instance": [
- {
- "name": "icmp",
- "classifier-definition-id": "Classifier-IP-Protocol",
- "parameter-value": [
- {
- "name": "proto",
- "int-value": 1
- }
- ]
- },
- {
- "name": "http-dest",
- "classifier-definition-id": "Classifier-L4",
- "parameter-value": [
- {
- "int-value": "6",
- "name": "proto"
- },
- {
- "int-value": "80",
- "name": "destport"
- }
- ]
- },
- {
- "name": "http-src",
- "classifier-definition-id": "Classifier-L4",
- "parameter-value": [
- {
- "int-value": "6",
- "name": "proto"
- },
- {
- "int-value": "80",
- "name": "sourceport"
- }
- ]
- }
- ],
- "action-instance": [
- {
- "name": "chain1",
- "action-definition-id": "Action-Chain",
- "parameter-value": [
- {
- "name": "sfc-chain-name",
- "string-value": "SFCGBP"
- }
- ]
- },
- {
- "name": "allow1",
- "action-definition-id": "Action-Allow"
- }
- ]
- },
- "contract": [
- {
- "id": "icmp-http-contract",
- "subject": [
- {
- "name": "icmp-subject",
- "rule": [
- {
- "name": "allow-icmp-rule",
- "order": 0,
- "classifier-ref": [
- {
- "name": "icmp",
- "instance-name": "icmp"
- }
- ],
- "action-ref": [
- {
- "name": "allow1",
- "order": 0
- }
- ]
- }
- ]
- },
- {
- "name": "http-subject",
- "rule": [
- {
- "name": "http-chain-rule",
- "classifier-ref": [
- {
- "name": "http-dest",
- "instance-name": "http-dest",
- "direction": "in"
- }
- ],
- "action-ref": [
- {
- "name": "chain1",
- "order": 0
- }
- ]
- },
- {
- "name": "http-out-rule",
- "classifier-ref": [
- {
- "name": "http-src",
- "instance-name": "http-src",
- "direction": "out"
- }
- ],
- "action-ref": [
- {
- "name": "allow1",
- "order": 0
- }
- ]
- }
- ]
- }
- ],
- "clause": [
- {
- "name": "icmp-http-clause",
- "subject-refs": [
- "icmp-subject",
- "http-subject"
- ]
- }
- ]
- }
- ]
- }
- ]
-}
+++ /dev/null
-{
- "service-function-forwarders": {
- "service-function-forwarder": [
- {
- "name": "SFF1",
- "service-node": "OVSDB2",
- "service-function-forwarder-ovs:ovs-bridge": {
- "bridge-name": "sw2"
- },
- "service-function-dictionary": [
- {
- "name": "firewall-72",
- "type": "service-function-type:firewall",
- "sff-sf-data-plane-locator": {
- "port": 6633,
- "ip": "_SFF1",
- "transport": "service-locator:vxlan-gpe"
- }
- }
- ],
- "sff-data-plane-locator": [
- {
- "name": "sfc-tun2",
- "data-plane-locator": {
- "transport": "service-locator:vxlan-gpe",
- "port": 6633,
- "ip": "_SFF1"
- },
- "service-function-forwarder-ovs:ovs-options": {
- "remote-ip": "flow",
- "dst-port": "6633",
- "key": "flow",
- "nsp": "flow",
- "nsi": "flow",
- "nshc1": "flow",
- "nshc2": "flow",
- "nshc3": "flow",
- "nshc4": "flow"
- }
- }
- ]
- },
- {
- "name": "SFF2",
- "service-node": "OVSDB2",
- "service-function-forwarder-ovs:ovs-bridge": {
- "bridge-name": "sw4"
- },
- "service-function-dictionary": [
- {
- "name": "dpi-74",
- "type": "service-function-type:dpi",
- "sff-sf-data-plane-locator": {
- "port": 6633,
- "ip": "_SFF2",
- "transport": "service-locator:vxlan-gpe"
- }
- }
- ],
- "sff-data-plane-locator": [
- {
- "name": "sfc-tun4",
- "data-plane-locator": {
- "transport": "service-locator:vxlan-gpe",
- "port": 6633,
- "ip": "_SFF2"
- },
- "service-function-forwarder-ovs:ovs-options": {
- "remote-ip": "flow",
- "dst-port": "6633",
- "key": "flow",
- "nsp": "flow",
- "nsi": "flow",
- "nshc1": "flow",
- "nshc2": "flow",
- "nshc3": "flow",
- "nshc4": "flow"
- }
- }
- ]
- }
- ]
- }
-}
\ No newline at end of file
+++ /dev/null
-{
- "service-functions": {
- "service-function": [
- {
- "name": "firewall-72",
- "ip-mgmt-address": "_SF1",
- "type": "service-function-type:firewall",
- "nsh-aware": "true",
- "sf-data-plane-locator": [
- {
- "name": "2",
- "port": 6633,
- "ip": "_SF1",
- "transport": "service-locator:vxlan-gpe",
- "service-function-forwarder": "SFF1"
- }
- ]
- },
- {
- "name": "dpi-74",
- "ip-mgmt-address": "_SF2",
- "type": "service-function-type:dpi",
- "nsh-aware": "true",
- "sf-data-plane-locator": [
- {
- "name": "3",
- "port": 6633,
- "ip": "_SF2",
- "transport": "service-locator:vxlan-gpe",
- "service-function-forwarder": "SFF2"
- }
- ]
- }
- ]
- }
-}
\ No newline at end of file
+++ /dev/null
-{
- "opendaylight-inventory:nodes": {
- "node": [
- {
- "id": "openflow:1",
- "ofoverlay:tunnel": [
- {
- "tunnel-type": "overlay:tunnel-type-vxlan-gpe",
- "node-connector-id": "openflow:1:1",
- "ip": "_CLASSIFIER1",
- "port": 6633
- },
- {
- "tunnel-type": "overlay:tunnel-type-vxlan",
- "node-connector-id": "openflow:1:2",
- "ip": "_CLASSIFIER1",
- "port": 4789
- }
- ]
- },
- {
- "id": "openflow:6",
- "ofoverlay:tunnel": [
- {
- "tunnel-type": "overlay:tunnel-type-vxlan-gpe",
- "node-connector-id": "openflow:6:1",
- "ip": "_CLASSIFIER2",
- "port": 6633
- },
- {
- "tunnel-type": "overlay:tunnel-type-vxlan",
- "node-connector-id": "openflow:6:2",
- "ip": "_CLASSIFIER2",
- "port": 4789
- }
- ]
- }
- ]
- }
-}