Upgrade RF syntax for v3.2 compatibility
[integration/test.git] / csit / suites / openstack / extensions / sfc.robot
index 8c28f9d7592bff36b5a6021d252e606d65101654..b7f85783d72af8beae3e516fdbfc983751606b3c 100644 (file)
@@ -23,24 +23,36 @@ ${SECURITY_GROUP}    sg-sfc
 @{NON_SF_VMS}     sourcevm    destvm
 @{SUBNET_CIDRS}    30.0.0.0/24
 @{PORTS}          p1in    p1out    source_vm_port    dest_vm_port
 @{NON_SF_VMS}     sourcevm    destvm
 @{SUBNET_CIDRS}    30.0.0.0/24
 @{PORTS}          p1in    p1out    source_vm_port    dest_vm_port
-${CURL_COMMAND}    curl -v --connect-timeout 25
-${HTTP_SUCCESS}    200 OK
-${HTTP_FAILURE}    connect() timed out!
-${WEBSERVER_80}    while true; do echo -e "HTTP/1.0 200 OK\r\nContent-Length: 21\r\n\r\nWelcome to web-server80" | sudo nc -l -p 80 ; done
-${WEBSERVER_81}    while true; do echo -e "HTTP/1.0 200 OK\r\nContent-Length: 21\r\n\r\nWelcome to web-server81" | sudo nc -l -p 81 ; done
-${WEBSERVER_82}    while true; do echo -e "HTTP/1.0 200 OK\r\nContent-Length: 21\r\n\r\nWelcome to web-server82" | sudo nc -l -p 82 ; done
-${CLOUD_IMAGE}    "https://cloud-images.ubuntu.com/releases/18.04/release/ubuntu-18.04-server-cloudimg-amd64.img"
-${CLOUD_IMAGE_NAME}    ubuntu
-${CLOUD_FLAVOR_NAME}    ubuntu
-${CLOUD_USER_NAME}    ubuntu
-${VXLAN_TOOL_URL}    "https://git.opendaylight.org/gerrit/gitweb?p=sfc.git;a=blob_plain;f=sfc-test/nsh-tools/vxlan_tool.py;h=1445292405bc17516d03e4a448ac2e0f65d38e79;hb=HEAD"
+${NC_COMMAND}     nc -zv -w 5
+${RES_SUCCESS}    open
+${RES_FAILURE}    Operation timed out
+${WEBSERVER_80}    (python -m SimpleHTTPServer 80 > /dev/null 2>&1 &)
+${WEBSERVER_81}    (python -m SimpleHTTPServer 81 > /dev/null 2>&1 &)
+${WEBSERVER_82}    (python -m SimpleHTTPServer 82 > /dev/null 2>&1 &)
+${WEBSERVER_83}    (python -m SimpleHTTPServer 83 > /dev/null 2>&1 &)
+${WEBSERVER_84}    (python -m SimpleHTTPServer 84 > /dev/null 2>&1 &)
+${WEBSERVER_85}    (python -m SimpleHTTPServer 85 > /dev/null 2>&1 &)
+${WEBSERVER_100}    (python -m SimpleHTTPServer 100 > /dev/null 2>&1 &)
+${WEBSERVER_101}    (python -m SimpleHTTPServer 101 > /dev/null 2>&1 &)
+${WEBSERVER_102}    (python -m SimpleHTTPServer 102 > /dev/null 2>&1 &)
+${WEBSERVER_103}    (python -m SimpleHTTPServer 103 > /dev/null 2>&1 &)
+${WEBSERVER_CMDS}    ${WEBSERVER_80} && ${WEBSERVER_81} && ${WEBSERVER_82} && ${WEBSERVER_83} && ${WEBSERVER_84} && ${WEBSERVER_85} && ${WEBSERVER_100} && ${WEBSERVER_101} && ${WEBSERVER_102} && ${WEBSERVER_103}
+${CLOUD_IMAGE}    "https://artifacts.opnfv.org/sfc/images/sfc_nsh_fraser.qcow2"
+${CLOUD_IMAGE_NAME}    sfc_nsh_fraser
+${CLOUD_FLAVOR_NAME}    sfc_nsh_fraser
 @{NETVIRT_DIAG_SERVICES}    OPENFLOW    IFM    ITM    DATASTORE    ELAN
 @{NETVIRT_DIAG_SERVICES}    OPENFLOW    IFM    ITM    DATASTORE    ELAN
+${ETH_IN}         eth0
+${ETH_OUT}        eth1
+${CLOUD_IMAGE_USER}    root
+${CLOUD_IMAGE_PASS}    opnfv
+${CLOULD_IMAGE_CONSOLE}    root
 
 *** Test Cases ***
 Create Flow Classifiers For Basic Test
     [Documentation]    Create SFC Flow Classifier for TCP traffic between source VM and destination VM
     OpenStackOperations.Create SFC Flow Classifier    FC_80    @{NET1_VM_IPS}[0]    @{NET1_VM_IPS}[1]    tcp    source_vm_port    args=--destination-port 80:80
     OpenStackOperations.Create SFC Flow Classifier    FC_81    @{NET1_VM_IPS}[0]    @{NET1_VM_IPS}[1]    tcp    source_vm_port    args=--destination-port 81:81
 
 *** Test Cases ***
 Create Flow Classifiers For Basic Test
     [Documentation]    Create SFC Flow Classifier for TCP traffic between source VM and destination VM
     OpenStackOperations.Create SFC Flow Classifier    FC_80    @{NET1_VM_IPS}[0]    @{NET1_VM_IPS}[1]    tcp    source_vm_port    args=--destination-port 80:80
     OpenStackOperations.Create SFC Flow Classifier    FC_81    @{NET1_VM_IPS}[0]    @{NET1_VM_IPS}[1]    tcp    source_vm_port    args=--destination-port 81:81
+    OpenStackOperations.Create SFC Flow Classifier    FC_83_85    @{NET1_VM_IPS}[0]    @{NET1_VM_IPS}[1]    tcp    source_vm_port    args=--destination-port 83:85
 
 Create Port Pair
     [Documentation]    Create SFC Port Pairs
 
 Create Port Pair
     [Documentation]    Create SFC Port Pairs
@@ -51,12 +63,14 @@ Create Port Pair Groups
     OpenStackOperations.Create SFC Port Pair Group    SFPPG1    SFPP1
 
 Test Communication From Vm Instance1 In net_1 No SF
     OpenStackOperations.Create SFC Port Pair Group    SFPPG1    SFPP1
 
 Test Communication From Vm Instance1 In net_1 No SF
-    [Documentation]    Login to the source VM instance, and send a HTTP GET using curl to the destination VM instance, If the SF handles the traffic, there will be delay causing the time for curl to be higher.
+    [Documentation]    Login to the source VM instance, and send a nc req to the destination VM instance, If the SF handles the traffic, there will be delay causing the time for nc to be higher.
     ${DEST_VM_LIST}    BuiltIn.Create List    @{NET1_VM_IPS}[1]
     ${DEST_VM_LIST}    BuiltIn.Create List    @{NET1_VM_IPS}[1]
-    ${curl_resp}    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${CURL_COMMAND} http://@{NET1_VM_IPS}[1]
-    BuiltIn.Should Contain    ${curl_resp}    ${HTTP_SUCCESS}
-    ${curl_resp}    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${CURL_COMMAND} http://@{NET1_VM_IPS}[1]:81
-    BuiltIn.Should Contain    ${curl_resp}    ${HTTP_SUCCESS}
+    ${nc_resp}    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND} @{NET1_VM_IPS}[1] 80    user=${CLOUD_IMAGE_USER}    password=${CLOUD_IMAGE_PASS}
+    ...    console=${CLOULD_IMAGE_CONSOLE}
+    BuiltIn.Should Contain    ${nc_resp}    ${RES_SUCCESS}
+    ${nc_resp}    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND} @{NET1_VM_IPS}[1] 81    user=${CLOUD_IMAGE_USER}    password=${CLOUD_IMAGE_PASS}
+    ...    console=${CLOULD_IMAGE_CONSOLE}
+    BuiltIn.Should Contain    ${nc_resp}    ${RES_SUCCESS}
     [Teardown]    BuiltIn.Run Keywords    OpenStackOperations.Get Test Teardown Debugs
     ...    AND    OpenStackOperations.Get Test Teardown Debugs For SFC
     ...    AND    OpenStackOperations.Exit From Vm Console
     [Teardown]    BuiltIn.Run Keywords    OpenStackOperations.Get Test Teardown Debugs
     ...    AND    OpenStackOperations.Get Test Teardown Debugs For SFC
     ...    AND    OpenStackOperations.Exit From Vm Console
@@ -66,84 +80,191 @@ Create Port Chain For Src->Dest Port 80
     OpenStackOperations.Create SFC Port Chain    SFPC1    args=--port-pair-group SFPPG1 --flow-classifier FC_80
 
 Test Communication From Vm Instance1 In net_1 Port 80 via SF
     OpenStackOperations.Create SFC Port Chain    SFPC1    args=--port-pair-group SFPPG1 --flow-classifier FC_80
 
 Test Communication From Vm Instance1 In net_1 Port 80 via SF
-    [Documentation]    Login to the source VM instance, and send a HTTP GET using curl to the destination VM instance, If the SF handles the traffic, there will be delay causing the time for curl to be higher.
-    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ens2 --output ens3 --verbose off
-    Wait Until Keyword Succeeds    3x    10s    Access Http And Check Status    @{NETWORKS}[0]    ${CURL_COMMAND} http://@{NET1_VM_IPS}[1]    ${HTTP_SUCCESS}
-    Wait Until Keyword Succeeds    3x    10s    Access Http And Check Status    @{NETWORKS}[0]    ${CURL_COMMAND} http://@{NET1_VM_IPS}[1]:81    ${HTTP_SUCCESS}
+    [Documentation]    Login to the source VM instance, and send a nc req to the destination VM instance, If the SF handles the traffic, there will be delay causing the time for nc to be higher.
+    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    80    ${RES_SUCCESS}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    81    ${RES_SUCCESS}
     Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
     Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
-    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ens2 --output ens3 --verbose off --block 80
+    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off --block 80
     BuiltIn.Comment    Port 80 communication should fail as the SF blocks the same
     BuiltIn.Comment    Port 80 communication should fail as the SF blocks the same
-    Wait Until Keyword Succeeds    3x    10s    Access Http And Check Status    @{NETWORKS}[0]    ${CURL_COMMAND} http://@{NET1_VM_IPS}[1]    ${HTTP_FAILURE}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    80    ${RES_FAILURE}
     BuiltIn.Comment    Test to confirm Port 81 is not blocked
     BuiltIn.Comment    Test to confirm Port 81 is not blocked
-    Wait Until Keyword Succeeds    3x    10s    Access Http And Check Status    @{NETWORKS}[0]    ${CURL_COMMAND} http://@{NET1_VM_IPS}[1]:81    ${HTTP_SUCCESS}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    81    ${RES_SUCCESS}
     Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
     Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
-    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ens2 --output ens3 --verbose off --block 81
-    Wait Until Keyword Succeeds    3x    10s    Access Http And Check Status    @{NETWORKS}[0]    ${CURL_COMMAND} http://@{NET1_VM_IPS}[1]    ${HTTP_SUCCESS}
-    Wait Until Keyword Succeeds    3x    10s    Access Http And Check Status    @{NETWORKS}[0]    ${CURL_COMMAND} http://@{NET1_VM_IPS}[1]:81    ${HTTP_SUCCESS}
+    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off --block 81
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    80    ${RES_SUCCESS}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    81    ${RES_SUCCESS}
     Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
     [Teardown]    BuiltIn.Run Keywords    OpenStackOperations.Get Test Teardown Debugs
     ...    AND    OpenStackOperations.Get Test Teardown Debugs For SFC
     ...    AND    OpenStackOperations.Exit From Vm Console
 
 Update Port Chain To Use Flow Classifier For Port 81
     Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
     [Teardown]    BuiltIn.Run Keywords    OpenStackOperations.Get Test Teardown Debugs
     ...    AND    OpenStackOperations.Get Test Teardown Debugs For SFC
     ...    AND    OpenStackOperations.Exit From Vm Console
 
 Update Port Chain To Use Flow Classifier For Port 81
-    [Documentation]    Update Port Chain to use FC_82 and FC_83 instead of FC_80 and FC_81
+    [Documentation]    Update Port Chain to use FC_81 instead of FC_80
     OpenStackOperations.Update SFC Port Chain With A New Flow Classifier    SFPC1    FC_81
     OpenStackOperations.Update SFC Port Chain Removing A Flow Classifier    SFPC1    FC_80
 
 Test Communication From Vm Instance1 In net_1 Port 81 via SF
     OpenStackOperations.Update SFC Port Chain With A New Flow Classifier    SFPC1    FC_81
     OpenStackOperations.Update SFC Port Chain Removing A Flow Classifier    SFPC1    FC_80
 
 Test Communication From Vm Instance1 In net_1 Port 81 via SF
-    [Documentation]    Login to the source VM instance, and send a HTTP GET using curl to the destination VM instance, If the SF handles the traffic, there will be delay causing the time for curl to be higher.
+    [Documentation]    Login to the source VM instance, and send a nc req to the destination VM instance.
     Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
     Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
-    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ens2 --output ens3 --verbose off
-    Wait Until Keyword Succeeds    3x    10s    Access Http And Check Status    @{NETWORKS}[0]    ${CURL_COMMAND} http://@{NET1_VM_IPS}[1]    ${HTTP_SUCCESS}
-    Wait Until Keyword Succeeds    3x    10s    Access Http And Check Status    @{NETWORKS}[0]    ${CURL_COMMAND} http://@{NET1_VM_IPS}[1]:81    ${HTTP_SUCCESS}
-    ...    cmd_timeout=60s
+    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    80    ${RES_SUCCESS}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    81    ${RES_SUCCESS}
     Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
     Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
-    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ens2 --output ens3 --verbose off --block 81
-    Wait Until Keyword Succeeds    3x    10s    Access Http And Check Status    @{NETWORKS}[0]    ${CURL_COMMAND} http://@{NET1_VM_IPS}[1]    ${HTTP_SUCCESS}
-    Wait Until Keyword Succeeds    3x    10s    Access Http And Check Status    @{NETWORKS}[0]    ${CURL_COMMAND} http://@{NET1_VM_IPS}[1]:81    ${HTTP_FAILURE}
-    ...    cmd_timeout=60s
+    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off --block 81
     BuiltIn.Comment    Port 81 communication should fail as the SF blocks the same
     BuiltIn.Comment    Port 81 communication should fail as the SF blocks the same
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    80    ${RES_SUCCESS}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    81    ${RES_FAILURE}
     BuiltIn.Comment    Test to confirm Port 80 does not continue to get routed through SF
     Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
     BuiltIn.Comment    Test to confirm Port 80 does not continue to get routed through SF
     Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
-    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ens2 --output ens3 --verbose off --block 80
-    Wait Until Keyword Succeeds    3x    10s    Access Http And Check Status    @{NETWORKS}[0]    ${CURL_COMMAND} http://@{NET1_VM_IPS}[1]    ${HTTP_SUCCESS}
-    Wait Until Keyword Succeeds    3x    10s    Access Http And Check Status    @{NETWORKS}[0]    ${CURL_COMMAND} http://@{NET1_VM_IPS}[1]:81    ${HTTP_SUCCESS}
-    ...    cmd_timeout=60s
+    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off --block 80
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    80    ${RES_SUCCESS}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    81    ${RES_SUCCESS}
     Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
     [Teardown]    BuiltIn.Run Keywords    OpenStackOperations.Get Test Teardown Debugs
     ...    AND    OpenStackOperations.Get Test Teardown Debugs For SFC
     ...    AND    OpenStackOperations.Exit From Vm Console
 
     Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
     [Teardown]    BuiltIn.Run Keywords    OpenStackOperations.Get Test Teardown Debugs
     ...    AND    OpenStackOperations.Get Test Teardown Debugs For SFC
     ...    AND    OpenStackOperations.Exit From Vm Console
 
+Update Port Chain To Use Flow Classifier For Port Range 83-85
+    [Documentation]    Update Port Chain to use FC_83_85
+    OpenStackOperations.Update SFC Port Chain With A New Flow Classifier    SFPC1    FC_83_85
+
+Test Communication From Vm Instance1 In net_1 Port 84 And 85 via SF
+    [Documentation]    Login to the source VM instance, and send a nc req to the destination VM instance.
+    Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
+    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    80    ${RES_SUCCESS}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    83    ${RES_SUCCESS}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    84    ${RES_SUCCESS}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    85    ${RES_SUCCESS}
+    Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
+    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off --block 83
+    BuiltIn.Comment    Port 83 communication should fail as the SF blocks the same
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    80    ${RES_SUCCESS}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    83    ${RES_FAILURE}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    84    ${RES_SUCCESS}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    85    ${RES_SUCCESS}
+    Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
+    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off --block 84
+    BuiltIn.Comment    Port 84 communication should fail as the SF blocks the same
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    80    ${RES_SUCCESS}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    84    ${RES_FAILURE}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    83    ${RES_SUCCESS}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    85    ${RES_SUCCESS}
+    Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
+    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off --block 85
+    BuiltIn.Comment    Port 85 communication should fail as the SF blocks the same
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    80    ${RES_SUCCESS}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    83    ${RES_SUCCESS}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    84    ${RES_SUCCESS}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    85    ${RES_FAILURE}
+    Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
+    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off --block 80
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    80    ${RES_SUCCESS}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    83    ${RES_SUCCESS}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    84    ${RES_SUCCESS}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND}
+    ...    85    ${RES_SUCCESS}
+
+Update Port Chain To Use Flow Classifier For Input Port Range 101-103
+    [Documentation]    Update Port Chain to use FC_101_103
+    BuiltIn.Comment    Removing and Deleting Existing Conflicting Flow Classifiers
+    OpenStackOperations.Update SFC Port Chain Removing A Flow Classifier    SFPC1    FC_81
+    OpenStackOperations.Update SFC Port Chain Removing A Flow Classifier    SFPC1    FC_83_85
+    OpenStackOperations.Delete SFC Flow Classifier    FC_80
+    OpenStackOperations.Delete SFC Flow Classifier    FC_81
+    OpenStackOperations.Delete SFC Flow Classifier    FC_83_85
+    OpenStackOperations.Create SFC Flow Classifier    FC_101_103    @{NET1_VM_IPS}[0]    @{NET1_VM_IPS}[1]    tcp    source_vm_port    args=--source-port 101:103
+    OpenStackOperations.Update SFC Port Chain With A New Flow Classifier    SFPC1    FC_101_103
+
+Test Communication From Vm Instance1 In net_1 Port 100 And 102 via SF
+    [Documentation]    Login to the source VM instance, and send a nc req to the destination VM instance.
+    Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
+    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND} -p 80
+    ...    83    ${RES_SUCCESS}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND} -p 100
+    ...    83    ${RES_SUCCESS}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND} -p 101
+    ...    83    ${RES_SUCCESS}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND} -p 102
+    ...    83    ${RES_SUCCESS}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND} -p 103
+    ...    83    ${RES_SUCCESS}
+    Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
+    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off --block 83
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND} -p 80
+    ...    83    ${RES_SUCCESS}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND} -p 100
+    ...    83    ${RES_SUCCESS}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND} -p 101
+    ...    83    ${RES_FAILURE}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND} -p 102
+    ...    83    ${RES_FAILURE}
+    Wait Until Keyword Succeeds    3x    10s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND} -p 103
+    ...    83    ${RES_FAILURE}
+
 Delete And Recreate Port Chain And Flow Classifiers For Symmetric Test
     OpenStackOperations.Create SFC Flow Classifier    FC_SYM    @{NET1_VM_IPS}[0]    @{NET1_VM_IPS}[1]    tcp    source_vm_port    args=--destination-port 82:82 --source-port 2000 --logical-destination-port dest_vm_port
     OpenStackOperations.Delete SFC Port Chain    SFPC1
     OpenStackOperations.Create SFC Port Chain    SFPSYM    args=--port-pair-group SFPPG1 --flow-classifier FC_SYM --chain-parameters symmetric=true
 
 Test Communication From Vm Instance1 For Symmetric Chain
 Delete And Recreate Port Chain And Flow Classifiers For Symmetric Test
     OpenStackOperations.Create SFC Flow Classifier    FC_SYM    @{NET1_VM_IPS}[0]    @{NET1_VM_IPS}[1]    tcp    source_vm_port    args=--destination-port 82:82 --source-port 2000 --logical-destination-port dest_vm_port
     OpenStackOperations.Delete SFC Port Chain    SFPC1
     OpenStackOperations.Create SFC Port Chain    SFPSYM    args=--port-pair-group SFPPG1 --flow-classifier FC_SYM --chain-parameters symmetric=true
 
 Test Communication From Vm Instance1 For Symmetric Chain
-    [Documentation]    Login to the source VM instance, and send a HTTP GET using curl to the destination VM instance, If the SF handles the traffic, there will be delay causing the time for curl to be higher.
+    [Documentation]    Login to the source VM instance, and send a nc req to the destination VM instance.
     Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
     Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
-    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ens2 --output ens3 --verbose off
-    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ens3 --output ens2 --verbose off
-    Wait Until Keyword Succeeds    8x    20s    Access Http And Check Status    @{NETWORKS}[0]    ${CURL_COMMAND} --local-port 2000 -m 60 http://@{NET1_VM_IPS}[1]:82    ${HTTP_SUCCESS}
-    ...    cmd_timeout=80s
+    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off
+    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ${ETH_OUT} --output ${ETH_IN} --verbose off
+    Wait Until Keyword Succeeds    8x    20s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND} -p 2000
+    ...    82    ${RES_SUCCESS}
     BuiltIn.Comment    Test to confirm the SRC->DEST Port 82 is routed through SF
     Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
     BuiltIn.Comment    Test to confirm the SRC->DEST Port 82 is routed through SF
     Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
-    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ens2 --output ens3 --verbose off --block 82
-    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ens3 --output ens2 --verbose off
-    Wait Until Keyword Succeeds    8x    20s    Access Http And Check Status    @{NETWORKS}[0]    ${CURL_COMMAND} --local-port 2000 -m 60 http://@{NET1_VM_IPS}[1]:82    ${HTTP_FAILURE}
-    ...    cmd_timeout=80s
+    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off --block 82
+    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ${ETH_OUT} --output ${ETH_IN} --verbose off
+    Wait Until Keyword Succeeds    8x    20s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND} -p 2000
+    ...    82    ${RES_FAILURE}
     BuiltIn.Comment    Test to confirm DEST->SRC Port 2000 path SFC traversal
     Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
     BuiltIn.Comment    Test to confirm DEST->SRC Port 2000 path SFC traversal
     Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
-    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ens2 --output ens3 --verbose off
-    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ens3 --output ens2 --verbose off --block 2000
-    Wait Until Keyword Succeeds    8x    20s    Access Http And Check Status    @{NETWORKS}[0]    ${CURL_COMMAND} --local-port 2000 -m 60 http://@{NET1_VM_IPS}[1]:82    ${HTTP_FAILURE}
-    ...    cmd_timeout=80s
+    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off
+    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ${ETH_OUT} --output ${ETH_IN} --verbose off --block 2000
+    Wait Until Keyword Succeeds    8x    20s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND} -p 2000
+    ...    82    ${RES_FAILURE}
     BuiltIn.Comment    Test to confirm the Normalcy restored
     Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
     BuiltIn.Comment    Test to confirm the Normalcy restored
     Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
-    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ens2 --output ens3 --verbose off
-    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ens3 --output ens2 --verbose off
-    Wait Until Keyword Succeeds    8x    20s    Access Http And Check Status    @{NETWORKS}[0]    ${CURL_COMMAND} --local-port 2000 -m 60 http://@{NET1_VM_IPS}[1]:82    ${HTTP_SUCCESS}
-    ...    cmd_timeout=80s
+    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off
+    Start Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}    args=--do forward --interface ${ETH_OUT} --output ${ETH_IN} --verbose off
+    Wait Until Keyword Succeeds    8x    20s    Check Network Reachability    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${NC_COMMAND} -p 2000
+    ...    82    ${RES_SUCCESS}
     Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
     [Teardown]    BuiltIn.Run Keywords    OpenStackOperations.Get Test Teardown Debugs
     ...    AND    OpenStackOperations.Get Test Teardown Debugs For SFC
     Stop Vxlan Tool in SF    @{NETWORKS}[0]    ${SF1_IP}
     [Teardown]    BuiltIn.Run Keywords    OpenStackOperations.Get Test Teardown Debugs
     ...    AND    OpenStackOperations.Get Test Teardown Debugs For SFC
@@ -155,19 +276,21 @@ Delete Configurations
     ...    of the Suite Teardown, all steps will be attempted. This prevents robot framework from bailing
     ...    on the rest of a test case if one step intermittently has trouble and fails. The goal is to attempt
     ...    to leave the test environment as clean as possible upon completion of this suite.
     ...    of the Suite Teardown, all steps will be attempted. This prevents robot framework from bailing
     ...    on the rest of a test case if one step intermittently has trouble and fails. The goal is to attempt
     ...    to leave the test environment as clean as possible upon completion of this suite.
-    : FOR    ${vm}    IN    @{NET_1_VMS}
-    \    OpenStackOperations.Delete Vm Instance    ${vm}
+    FOR    ${vm}    IN    @{NET_1_VMS}
+        OpenStackOperations.Delete Vm Instance    ${vm}
+    END
     OpenStackOperations.Delete SFC Port Chain    SFPSYM
     OpenStackOperations.Delete SFC Port Pair Group    SFPPG1
     OpenStackOperations.Delete SFC Port Pair    SFPP1
     OpenStackOperations.Delete SFC Port Chain    SFPSYM
     OpenStackOperations.Delete SFC Port Pair Group    SFPPG1
     OpenStackOperations.Delete SFC Port Pair    SFPP1
-    OpenStackOperations.Delete SFC Flow Classifier    FC_80
-    OpenStackOperations.Delete SFC Flow Classifier    FC_81
+    OpenStackOperations.Delete SFC Flow Classifier    FC_101_103
     OpenStackOperations.Delete SFC Flow Classifier    FC_SYM
     OpenStackOperations.Delete SFC Flow Classifier    FC_SYM
-    : FOR    ${port}    IN    @{PORTS}
-    \    OpenStackOperations.Delete Port    ${port}
+    FOR    ${port}    IN    @{PORTS}
+        OpenStackOperations.Delete Port    ${port}
+    END
     OpenStackOperations.Delete SubNet    l2_subnet_1
     OpenStackOperations.Delete SubNet    l2_subnet_1
-    : FOR    ${network}    IN    @{NETWORKS}
-    \    OpenStackOperations.Delete Network    ${network}
+    FOR    ${network}    IN    @{NETWORKS}
+        OpenStackOperations.Delete Network    ${network}
+    END
     OpenStackOperations.Delete SecurityGroup    ${SECURITY_GROUP}
 
 *** Keywords ***
     OpenStackOperations.Delete SecurityGroup    ${SECURITY_GROUP}
 
 *** Keywords ***
@@ -189,23 +312,27 @@ Create Basic Networks
     OpenStackOperations.Get Suite Debugs
 
 Create Ports For Testing
     OpenStackOperations.Get Suite Debugs
 
 Create Ports For Testing
-    : FOR    ${port}    IN    @{PORTS}
-    \    OpenStackOperations.Create Port    @{NETWORKS}[0]    ${port}    sg=${SECURITY_GROUP}
+    FOR    ${port}    IN    @{PORTS}
+        OpenStackOperations.Create Port    @{NETWORKS}[0]    ${port}    sg=${SECURITY_GROUP}
+    END
     OpenStackOperations.Update Port    p1in    additional_args=--no-security-group
     OpenStackOperations.Update Port    p1in    additional_args=--disable-port-security
     OpenStackOperations.Update Port    p1out    additional_args=--no-security-group
     OpenStackOperations.Update Port    p1out    additional_args=--disable-port-security
     OpenStackOperations.Update Port    p1in    additional_args=--no-security-group
     OpenStackOperations.Update Port    p1in    additional_args=--disable-port-security
     OpenStackOperations.Update Port    p1out    additional_args=--no-security-group
     OpenStackOperations.Update Port    p1out    additional_args=--disable-port-security
+    CompareStream.Run_Keyword_If_Equals    oxygen    OpenStackOperations.Update Port    source_vm_port    additional_args=--no-security-group
+    CompareStream.Run_Keyword_If_Equals    oxygen    OpenStackOperations.Update Port    source_vm_port    additional_args=--disable-port-security
+    CompareStream.Run_Keyword_If_Equals    oxygen    OpenStackOperations.Update Port    dest_vm_port    additional_args=--no-security-group
+    CompareStream.Run_Keyword_If_Equals    oxygen    OpenStackOperations.Update Port    dest_vm_port    additional_args=--disable-port-security
     OpenStackOperations.Get Suite Debugs
 
 Create Instances For Testing
     OpenStackOperations.Get Suite Debugs
 
 Create Instances For Testing
-    BuiltIn.Comment    Create one ubuntu instances and two cirros instances
+    ${SF_COMP_HOST} =    BuiltIn.Set Variable If    2 < ${NUM_OS_SYSTEM}    ${OS_CMP2_HOSTNAME}    ${OS_CMP1_HOSTNAME}
     OpenStackOperations.Add New Image From Url    ${CLOUD_IMAGE}    ${CLOUD_IMAGE_NAME}
     OpenStackOperations.Add New Image From Url    ${CLOUD_IMAGE}    ${CLOUD_IMAGE_NAME}
-    OpenStackOperations.Create Flavor    ${CLOUD_FLAVOR_NAME}    2048    4
-    OpenStackOperations.Generate And Add Keypair    sfctest    odlsfctest
-    OpenStackOperations.Create Vm Instance With Ports And Key On Compute Node    p1in    p1out    sf1    ${OS_CMP1_HOSTNAME}    image=${CLOUD_IMAGE_NAME}    flavor=${CLOUD_FLAVOR_NAME}
-    ...    sg=${SECURITY_GROUP}    keyname=sfctest
-    OpenStackOperations.Create Vm Instance With Port On Compute Node    source_vm_port    sourcevm    ${OS_CMP1_HOSTNAME}    sg=${SECURITY_GROUP}    flavor=cirros256
-    OpenStackOperations.Create Vm Instance With Port On Compute Node    dest_vm_port    destvm    ${OS_CMP1_HOSTNAME}    sg=${SECURITY_GROUP}    flavor=cirros256
+    OpenStackOperations.Create Flavor    ${CLOUD_FLAVOR_NAME}    512    1
+    OpenStackOperations.Create Vm Instance With Ports On Compute Node    p1in    p1out    sf1    ${SF_COMP_HOST}    image=${CLOUD_IMAGE_NAME}    flavor=${CLOUD_FLAVOR_NAME}
+    ...    sg=${SECURITY_GROUP}
+    OpenStackOperations.Create Vm Instance With Port On Compute Node    source_vm_port    sourcevm    ${OS_CMP1_HOSTNAME}    image=${CLOUD_IMAGE_NAME}    flavor=${CLOUD_FLAVOR_NAME}    sg=${SECURITY_GROUP}
+    OpenStackOperations.Create Vm Instance With Port On Compute Node    dest_vm_port    destvm    ${OS_CMP1_HOSTNAME}    image=${CLOUD_IMAGE_NAME}    flavor=${CLOUD_FLAVOR_NAME}    sg=${SECURITY_GROUP}
     OpenStackOperations.Show Debugs    @{NET_1_VMS}
     OpenStackOperations.Get Suite Debugs
 
     OpenStackOperations.Show Debugs    @{NET_1_VMS}
     OpenStackOperations.Get Suite Debugs
 
@@ -226,36 +353,34 @@ Check Vm Instances Have Ip Address And Ready For Test
     ${NET1_VM_IPS}    BuiltIn.Create List    ${src_ip}    ${dest_ip}
     BuiltIn.Set Suite Variable    @{NET1_VM_IPS}
     BuiltIn.Set Suite Variable    ${SF1_IP}
     ${NET1_VM_IPS}    BuiltIn.Create List    ${src_ip}    ${dest_ip}
     BuiltIn.Set Suite Variable    @{NET1_VM_IPS}
     BuiltIn.Set Suite Variable    ${SF1_IP}
-    BuiltIn.Wait Until Keyword Succeeds    300s    60s    OpenStackOperations.Check If Instance Is Ready For Ssh Login Using PublicKey    @{NETWORKS}[0]    ${SF1_IP}    user=ubuntu
-    ...    idfile=/tmp/odlsfctest
-    BuiltIn.Wait Until Keyword Succeeds    300s    60s    OpenStackOperations.Check If Instance Is Ready For Ssh Login Using Password    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]
-    BuiltIn.Wait Until Keyword Succeeds    300s    60s    OpenStackOperations.Check If Instance Is Ready For Ssh Login Using Password    @{NETWORKS}[0]    @{NET1_VM_IPS}[1]
+    BuiltIn.Set Suite Variable    ${OS_SYSTEM_PROMPT}    \#
+    BuiltIn.Wait Until Keyword Succeeds    300s    60s    OpenStackOperations.Check If Instance Is Ready For Ssh Login Using Password    @{NETWORKS}[0]    ${SF1_IP}    user=${CLOUD_IMAGE_USER}
+    ...    password=${CLOUD_IMAGE_PASS}    console=${CLOULD_IMAGE_CONSOLE}
+    BuiltIn.Wait Until Keyword Succeeds    300s    60s    OpenStackOperations.Check If Instance Is Ready For Ssh Login Using Password    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    user=${CLOUD_IMAGE_USER}
+    ...    password=${CLOUD_IMAGE_PASS}    console=${CLOULD_IMAGE_CONSOLE}
+    BuiltIn.Wait Until Keyword Succeeds    300s    60s    OpenStackOperations.Check If Instance Is Ready For Ssh Login Using Password    @{NETWORKS}[0]    @{NET1_VM_IPS}[1]    user=${CLOUD_IMAGE_USER}
+    ...    password=${CLOUD_IMAGE_PASS}    console=${CLOULD_IMAGE_CONSOLE}
     OpenStackOperations.Show Debugs    @{NET_1_VMS}
     OpenStackOperations.Get Suite Debugs
 
 Start Applications on VM Instances For Test
     BuiltIn.Comment    Run Web server Scripts on destination vm listening to 80,81 and 82 ports
     OpenStackOperations.Show Debugs    @{NET_1_VMS}
     OpenStackOperations.Get Suite Debugs
 
 Start Applications on VM Instances For Test
     BuiltIn.Comment    Run Web server Scripts on destination vm listening to 80,81 and 82 ports
-    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{NET1_VM_IPS}[1]    ${WEBSERVER_80} &
-    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{NET1_VM_IPS}[1]    ${WEBSERVER_81} &
-    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{NET1_VM_IPS}[1]    ${WEBSERVER_82} &
-    BuiltIn.Comment    Get vxlan_tool script
-    Utils.Download File On Openstack Node    ${OS_CNTL_CONN_ID}    vxlan_tool.py    ${VXLAN_TOOL_URL}
-    BuiltIn.Comment    Copy vxlan_tool script to SFC VM
-    OpenStackOperations.Copy File To VM Instance With PublicKey Auth    @{NETWORKS}[0]    ${SF1_IP}    /tmp/vxlan_tool.py    user=${CLOUD_USER_NAME}    idfile=/tmp/odlsfctest
-    BuiltIn.Comment    Bring up the second Interface for egress
-    Execute Command on VM Instance with PublicKey Auth    @{NETWORKS}[0]    ${SF1_IP}    sudo ifconfig ens3 up    user=${CLOUD_USER_NAME}    idfile=/tmp/odlsfctest
+    ${resp}    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{NET1_VM_IPS}[1]    ${WEBSERVER_CMDS} && (echo done)    user=${CLOUD_IMAGE_USER}    password=${CLOUD_IMAGE_PASS}
+    ...    console=${CLOULD_IMAGE_CONSOLE}
+    BuiltIn.Should Contain    ${resp}    done
 
 Start Vxlan Tool in SF
     [Arguments]    ${network}    ${sf_vm_ip}    ${args}=${EMPTY}
     [Documentation]    Starts the tool in the SF VM's
 
 Start Vxlan Tool in SF
     [Arguments]    ${network}    ${sf_vm_ip}    ${args}=${EMPTY}
     [Documentation]    Starts the tool in the SF VM's
-    Execute Command on VM Instance with PublicKey Auth    ${network}    ${sf_vm_ip}    nohup sudo python3 /tmp/vxlan_tool.py ${args} &    user=ubuntu    idfile=/tmp/odlsfctest
+    OpenStackOperations.Execute Command on VM Instance    ${network}    ${sf_vm_ip}    nohup python vxlan_tool.py ${args} &    user=${CLOUD_IMAGE_USER}    password=${CLOUD_IMAGE_PASS}    console=${CLOULD_IMAGE_CONSOLE}
 
 Stop Vxlan Tool in SF
     [Arguments]    ${network}    ${sf_vm_ip}
     [Documentation]    Starts the tool in the SF VM's
 
 Stop Vxlan Tool in SF
     [Arguments]    ${network}    ${sf_vm_ip}
     [Documentation]    Starts the tool in the SF VM's
-    Execute Command on VM Instance With PublicKey Auth    ${network}    ${sf_vm_ip}    sudo pkill python3    user=ubuntu    idfile=/tmp/odlsfctest
+    OpenStackOperations.Execute Command on VM Instance    ${network}    ${sf_vm_ip}    pkill python    user=${CLOUD_IMAGE_USER}    password=${CLOUD_IMAGE_PASS}    console=${CLOULD_IMAGE_CONSOLE}
 
 
-Access Http And Check Status
-    [Arguments]    ${vm_ip}    ${curl_command}    ${ret_code}    ${cmd_timeout}=30s
-    ${curl_resp}    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{NET1_VM_IPS}[0]    ${curl_command}    cmd_timeout=${cmd_timeout}
-    BuiltIn.Should Contain    ${curl_resp}    ${ret_code}
+Check Network Reachability
+    [Arguments]    ${net_name}    ${source_vm_ip}    ${command}    ${port}    ${ret_code}    ${cmd_timeout}=30s
+    ${nc_resp}    OpenStackOperations.Execute Command on VM Instance    ${net_name}    ${source_vm_ip}    ${command} @{NET1_VM_IPS}[1] ${port}    cmd_timeout=${cmd_timeout}    user=${CLOUD_IMAGE_USER}
+    ...    password=${CLOUD_IMAGE_PASS}    console=${CLOULD_IMAGE_CONSOLE}
+    BuiltIn.Should Contain    ${nc_resp}    ${ret_code}