Support OVSDB entity name format in Phosphorus
[integration/test.git] / csit / libraries / OVSDB.robot
index c05d86b9a3bab122263c68e442f3b57cede1bb46..39290747e3a9a0586d795e16e3b4aec8710787f7 100644 (file)
@@ -34,7 +34,7 @@ Create OVSDB Node
     BuiltIn.Log    URI is ${uri}
     BuiltIn.Log    data: ${body}
     ${resp} =    RequestsLibrary.Post Request    session    ${uri}    data=${body}
-    OVSDB.Log Request    ${resp.content}
+    OVSDB.Log Request    ${resp.text}
     BuiltIn.Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
 
 Connect To Ovsdb Node
@@ -47,7 +47,7 @@ Connect To Ovsdb Node
     BuiltIn.Log    URI is ${uri}
     BuiltIn.Log    data: ${body}
     ${resp} =    RequestsLibrary.Put Request    session    ${uri}    data=${body}
-    OVSDB.Log Request    ${resp.content}
+    OVSDB.Log Request    ${resp.text}
     BuiltIn.Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
 
 Disconnect From Ovsdb Node
@@ -71,7 +71,7 @@ Add Bridge To Ovsdb Node
     BuiltIn.Log    URI is ${uri}
     BuiltIn.Log    data: ${body}
     ${resp} =    RequestsLibrary.Put Request    session    ${uri}    data=${body}
-    OVSDB.Log Request    ${resp.content}
+    OVSDB.Log Request    ${resp.text}
     BuiltIn.Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
 
 Delete Bridge From Ovsdb Node
@@ -122,21 +122,22 @@ Get OVSDB UUID
     ...    node-id stripped of "ovsdb://uuid/". If not found, ${EMPTY} will be returned.
     ${uuid} =    Set Variable    ${EMPTY}
     ${resp} =    RequestsLibrary.Get Request    ${controller_http_session}    ${OPERATIONAL_TOPO_API}/topology/ovsdb:1
-    OVSDB.Log Request    ${resp.content}
+    OVSDB.Log Request    ${resp.text}
     BuiltIn.Should Be Equal As Strings    ${resp.status_code}    200
-    ${resp_json} =    RequestsLibrary.To Json    ${resp.content}
+    ${resp_json} =    RequestsLibrary.To Json    ${resp.text}
     ${topologies} =    Collections.Get From Dictionary    ${resp_json}    topology
     ${topology} =    Collections.Get From List    ${topologies}    0
     ${node_list} =    Collections.Get From Dictionary    ${topology}    node
     BuiltIn.Log    ${node_list}
     # Since bridges are also listed as nodes, but will not have the extra "ovsdb:connection-info data,
     # we need to use "Run Keyword And Ignore Error" below.
-    : FOR    ${node}    IN    @{node_list}
-    \    ${node_id} =    Collections.Get From Dictionary    ${node}    node-id
-    \    ${node_uuid} =    String.Replace String    ${node_id}    ovsdb://uuid/    ${EMPTY}
-    \    ${status}    ${connection_info} =    BuiltIn.Run Keyword And Ignore Error    Collections.Get From Dictionary    ${node}    ovsdb:connection-info
-    \    ${status}    ${remote_ip} =    BuiltIn.Run Keyword And Ignore Error    Collections.Get From Dictionary    ${connection_info}    remote-ip
-    \    ${uuid} =    Set Variable If    '${remote_ip}' == '${ovs_system_ip}'    ${node_uuid}    ${uuid}
+    FOR    ${node}    IN    @{node_list}
+        ${node_id} =    Collections.Get From Dictionary    ${node}    node-id
+        ${node_uuid} =    String.Replace String    ${node_id}    ovsdb://uuid/    ${EMPTY}
+        ${status}    ${connection_info} =    BuiltIn.Run Keyword And Ignore Error    Collections.Get From Dictionary    ${node}    ovsdb:connection-info
+        ${status}    ${remote_ip} =    BuiltIn.Run Keyword And Ignore Error    Collections.Get From Dictionary    ${connection_info}    remote-ip
+        ${uuid} =    Set Variable If    '${remote_ip}' == '${ovs_system_ip}'    ${node_uuid}    ${uuid}
+    END
     [Return]    ${uuid}
 
 Collect OVSDB Debugs
@@ -161,9 +162,7 @@ Clean OVSDB Test Environment
 Restart OVSDB
     [Arguments]    ${ovs_ip}
     [Documentation]    Restart the OVS node without cleaning the current configuration.
-    ${output} =    Utils.Run Command On Mininet    ${ovs_ip}    sudo /usr/share/openvswitch/scripts/ovs-ctl stop
-    BuiltIn.Log    ${output}
-    ${output} =    Utils.Run Command On Mininet    ${ovs_ip}    sudo /usr/share/openvswitch/scripts/ovs-ctl start
+    ${output} =    Utils.Run Command On Mininet    ${ovs_ip}    sudo systemctl restart openvswitch
     BuiltIn.Log    ${output}
 
 Set Controller In OVS Bridge
@@ -185,9 +184,10 @@ Add Multiple Managers to OVS
     ${index_list} =    ClusterManagement.List Indices Or All    given_list=${controller_index_list}
     Utils.Clean Mininet System    ${tools_system}
     ${ovs_opt} =    BuiltIn.Set Variable
-    : FOR    ${index}    IN    @{index_list}
-    \    ${ovs_opt} =    BuiltIn.Catenate    ${ovs_opt}    ${SPACE}tcp:${ODL_SYSTEM_${index}_IP}:${ovs_mgr_port}
-    \    BuiltIn.Log    ${ovs_opt}
+    FOR    ${index}    IN    @{index_list}
+        ${ovs_opt} =    BuiltIn.Catenate    ${ovs_opt}    ${SPACE}tcp:${ODL_SYSTEM_${index}_IP}:${ovs_mgr_port}
+        BuiltIn.Log    ${ovs_opt}
+    END
     Utils.Run Command On Mininet    ${tools_system}    sudo ovs-vsctl set-manager ${ovs_opt}
     ${output} =    BuiltIn.Wait Until Keyword Succeeds    5s    1s    Verify OVS Reports Connected    ${tools_system}
     BuiltIn.Log    ${output}
@@ -248,17 +248,17 @@ Get Port Metadata
 Log Config And Operational Topology
     [Documentation]    For debugging purposes, this will log both config and operational topo data stores
     ${resp}    RequestsLibrary.Get Request    session    ${CONFIG_TOPO_API}
-    OVSDB.Log Request    ${resp.content}
+    OVSDB.Log Request    ${resp.text}
     ${resp} =    RequestsLibrary.Get Request    session    ${OPERATIONAL_TOPO_API}
-    OVSDB.Log Request    ${resp.content}
+    OVSDB.Log Request    ${resp.text}
 
 Config and Operational Topology Should Be Empty
     [Documentation]    This will check that only the expected output is there for both operational and config
     ...    topology data stores. Empty probably means that only ovsdb:1 is there.
     ${config_resp}    RequestsLibrary.Get Request    session    ${CONFIG_TOPO_API}
     ${operational_resp}    RequestsLibrary.Get Request    session    ${OPERATIONAL_TOPO_API}
-    BuiltIn.Should Contain    ${config_resp.content}    {"topology-id":"ovsdb:1"}
-    BuiltIn.Should Contain    ${operational_resp.content}    {"topology-id":"ovsdb:1"}
+    BuiltIn.Should Contain    ${config_resp.text}    {"topology-id":"ovsdb:1"}
+    BuiltIn.Should Contain    ${operational_resp.text}    {"topology-id":"ovsdb:1"}
 
 Modify Multi Port Body
     [Arguments]    ${ovs_1_port_name}    ${ovs_2_port_name}    ${bridge}
@@ -278,7 +278,7 @@ Modify Multi Port Body
     BuiltIn.Log    URI is ${uri}
     BuiltIn.Log    data: ${body}
     ${resp} =    RequestsLibrary.Put Request    session    ${uri}    data=${body}
-    OVSDB.Log Request    ${resp.content}
+    OVSDB.Log Request    ${resp.text}
     BuiltIn.Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
     [Return]    ${body}
 
@@ -290,7 +290,7 @@ Create Qos
     BuiltIn.Log    URI is ${uri}
     BuiltIn.Log    data: ${body}
     ${resp} =    RequestsLibrary.Put Request    session    ${uri}    data=${body}
-    OVSDB.Log Request    ${resp.content}
+    OVSDB.Log Request    ${resp.text}
     BuiltIn.Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
 
 Create Queue
@@ -301,7 +301,7 @@ Create Queue
     BuiltIn.Log    URI is ${uri}
     BuiltIn.Log    data: ${body}
     ${resp} =    RequestsLibrary.Put Request    session    ${uri}    data=${body}
-    OVSDB.Log Request    ${resp.content}
+    OVSDB.Log Request    ${resp.text}
     BuiltIn.Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
 
 Update Qos
@@ -311,13 +311,13 @@ Update Qos
     BuiltIn.Log    URL is ${uri}
     BuiltIn.Log    data: ${body}
     ${resp} =    RequestsLibrary.Put Request    session    ${uri}    data=${body}
-    OVSDB.Log Request    ${resp.content}
+    OVSDB.Log Request    ${resp.text}
     BuiltIn.Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
 
 Create Qos Linked Queue
     ${body}    OperatingSystem.Get File    ${OVSDB_CONFIG_DIR}/bug_7160/create_qoslinkedqueue.json
     ${resp}    RequestsLibrary.Put Request    session    ${CONFIG_TOPO_API}/topology/ovsdb:1/node/ovsdb:HOST1    data=${body}
-    OVSDB.Log Request    ${resp.content}
+    OVSDB.Log Request    ${resp.text}
     BuiltIn.Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
 
 Add OVS Logging
@@ -326,8 +326,9 @@ Add OVS Logging
     SSHLibrary.Switch Connection    ${conn_id}
     @{modules} =    BuiltIn.Create List    bridge:file:dbg    connmgr:file:dbg    inband:file:dbg    ofp_actions:file:dbg    ofp_errors:file:dbg
     ...    ofp_msgs:file:dbg    ovsdb_error:file:dbg    rconn:file:dbg    tunnel:file:dbg    vconn:file:dbg
-    : FOR    ${module}    IN    @{modules}
-    \    Utils.Write Commands Until Expected Prompt    sudo ovs-appctl --target ovs-vswitchd vlog/set ${module}    ${DEFAULT_LINUX_PROMPT_STRICT}
+    FOR    ${module}    IN    @{modules}
+        Utils.Write Commands Until Expected Prompt    sudo ovs-appctl --target ovs-vswitchd vlog/set ${module}    ${DEFAULT_LINUX_PROMPT_STRICT}
+    END
     Utils.Write Commands Until Expected Prompt    sudo ovs-appctl --target ovs-vswitchd vlog/list    ${DEFAULT_LINUX_PROMPT_STRICT}
 
 Reset OVS Logging
@@ -346,8 +347,9 @@ Suite Teardown
     [Arguments]    ${uris}=@{EMPTY}
     [Documentation]    Cleans up test environment, close existing sessions.
     OVSDB.Clean OVSDB Test Environment    ${TOOLS_SYSTEM_IP}
-    : FOR    ${uri}    IN    @{uris}
-    \    RequestsLibrary.Delete Request    session    ${uri}
+    FOR    ${uri}    IN    @{uris}
+        RequestsLibrary.Delete Request    session    ${uri}
+    END
     ${resp} =    RequestsLibrary.Get Request    session    ${CONFIG_TOPO_API}
     OVSDB.Log Config And Operational Topology
     RequestsLibrary.Delete All Sessions
@@ -380,7 +382,7 @@ Get Bridge Data
     [Documentation]    This keyword returns first bridge name and UUID from list of bridges.
     ${result} =    SSHLibrary.Execute Command    sudo ovs-vsctl show
     ${uuid} =    String.Get Line    ${result}    0
-    ${line}    ${bridge_name}    Builtin.Should Match Regexp    ${result}    Bridge "(\\w+)"
+    ${line}    ${bridge_name}    Builtin.Should Match Regexp    ${result}    Bridge ([\\w-]+)
     [Return]    ${uuid}    ${bridge_name}
 
 Delete OVS Controller
@@ -412,41 +414,43 @@ Delete Ports On Bridge By Type
     [Arguments]    ${ovs_ip}    ${br}    ${type}
     [Documentation]    List all ports of ${br} and delete ${type} ports
     ${ports_present} =    Get Ports From Bridge By Type    ${ovs_ip}    ${br}    ${type}
-    : FOR    ${port}    IN    @{ports_present}
-    \    ${del-ports} =    Utils.Run Command On Remote System    ${ovs_ip}    sudo ovs-vsctl del-port ${br} ${port}
-    \    BuiltIn.Log    ${del-ports}
+    FOR    ${port}    IN    @{ports_present}
+        ${del-ports} =    Utils.Run Command On Remote System    ${ovs_ip}    sudo ovs-vsctl del-port ${br} ${port}
+        BuiltIn.Log    ${del-ports}
+    END
     ${ports_present_after_delete} =    Get Ports From Bridge By Type    ${ovs_ip}    ${br}    ${type}
     BuiltIn.Log    ${ports_present_after_delete}
 
 Get Tunnel Id And Packet Count
-    [Arguments]    ${conn_id}    ${table_id}    ${direction}    ${tun_id}    ${dst_mac}=""
-    [Documentation]    Get tunnel id and packet count from specified table id and destination port mac address
+    [Arguments]    ${conn_id}    ${table_id}    ${tun_id}    ${mac}=""
+    [Documentation]    Get tunnel id and packet count from specified table id
+    ...    Using regex get the n_packet and the tunnel_id from the table flow.
     ${tun_id} =    BuiltIn.Convert To Hex    ${tun_id}    prefix=0x    lowercase=yes
-    ${base_cmd} =    BuiltIn.Set Variable    sudo ovs-ofctl dump-flows br-int -OOpenFlow13 | grep table=${table_id} | grep ${tun_id}
-    ${full_cmd} =    BuiltIn.Run Keyword If    "${direction}" == "Egress"    BuiltIn.Catenate    ${base_cmd}    | grep ${dst_mac} | awk '{split($7,a,"[:-]"); print a[2]}'
-    ...    ELSE    BuiltIn.Catenate    ${base_cmd} | awk '{split($6,a,"[,=]"); {print a[4]}}'
-    SSHLibrary.Switch Connection    ${conn_id}
-    Utils.Write Commands Until Expected Prompt    ${base_cmd}    ${DEFAULT_LINUX_PROMPT_STRICT}
-    ${output} =    Utils.Write Commands Until Expected Prompt    ${full_cmd}    ${DEFAULT_LINUX_PROMPT_STRICT}
-    @{list} =    String.Split String    ${output}
-    ${output} =    Set Variable    @{list}[0]
-    ${tunnel_id} =    Convert To Integer    ${output}    16
-    ${full_cmd} =    BuiltIn.Run Keyword If    "${direction}" == "Egress"    BuiltIn.Catenate    ${base_cmd}    | grep ${dst_mac} | awk '{split($4,a,"[=,]"); {print a[2]}}'
-    ...    ELSE    BuiltIn.Catenate    ${base_cmd} | awk '{split($4,a,"[=,]"); {print a[2]}}'
+    ${cmd} =    BuiltIn.Run Keyword If    "${table_id}" == "${INTERNAL_TUNNEL_TABLE}"    BuiltIn.Set Variable    sudo ovs-ofctl dump-flows br-int -OOpenFlow13 | grep table=${table_id} | grep ${mac} | grep tun_id=${tun_id} | grep goto_table:${ELAN_DMACTABLE}
+    ...    ELSE    BuiltIn.Set Variable    sudo ovs-ofctl dump-flows br-int -OOpenFlow13 | grep table=${table_id} | grep ${mac}
     SSHLibrary.Switch Connection    ${conn_id}
-    ${output} =    Utils.Write Commands Until Expected Prompt    ${full_cmd}    ${DEFAULT_LINUX_PROMPT_STRICT}
-    @{list} =    String.Split String    ${output}
-    ${packet_count} =    BuiltIn.Set Variable    @{list}[0]
+    ${output} =    Utils.Write Commands Until Expected Prompt    ${cmd}    ${DEFAULT_LINUX_PROMPT_STRICT}
+    @{list}=    Split to lines    ${output}
+    ${output} =    Set Variable    ${list}[0]
+    ${output} =    String.Get Regexp Matches    ${output}    n_packets=([0-9]+),.*set_field:(0x[0-9a-z]+)|n_packets=([0-9]+),.*tun_id=(0x[0-9a-z]+)    1    2    3
+    ...    4
+    ${output} =    BuiltIn.Set Variable    ${output}[0]
+    ${output}    Convert To List    ${output}
+    ${packet_count}    ${tunnel_id} =    BuiltIn.Run Keyword If    "${table_id}" == "${ELAN_DMACTABLE}"    BuiltIn.Set Variable    ${output}[0]    ${output}[1]
+    ...    ELSE IF    "${table_id}" == "${INTERNAL_TUNNEL_TABLE}"    BuiltIn.Set Variable    ${output}[2]    ${output}[3]
+    ...    ELSE IF    "${table_id}" == "${L3_TABLE}"    BuiltIn.Set Variable    ${output}[0]    ${output}[1]
+    ${tunnel_id} =    Convert To Integer    ${tunnel_id}    16
     [Return]    ${tunnel_id}    ${packet_count}
 
 Verify Dump Flows For Specific Table
     [Arguments]    ${compute_ip}    ${table_num}    ${flag}    ${additional_args}=${EMPTY}    @{matching_paras}
     [Documentation]    To Verify flows are present for the corresponding table Number
-    ${flow_output} =    Utils.Run Command On Remote System    ${compute_ip}    ${DUMP_FLOWS}|grep table=${table_num} ${additional_args}
+    ${flow_output} =    Utils.Run Command On Remote System    ${compute_ip}    sudo ovs-ofctl -O OpenFlow13 dump-flows ${INTEGRATION_BRIDGE}|grep table=${table_num} ${additional_args}
     Log    ${flow_output}
-    : FOR    ${matching_str}    IN    @{matching_paras}
-    \    BuiltIn.Run Keyword If    ${flag}==True    BuiltIn.Should Contain    ${flow_output}    ${matching_str}
-    \    ...    ELSE    BuiltIn.Should Not Contain    ${flow_output}    ${matching_str}
+    FOR    ${matching_str}    IN    @{matching_paras}
+        BuiltIn.Run Keyword If    ${flag}==True    BuiltIn.Should Contain    ${flow_output}    ${matching_str}
+        ...    ELSE    BuiltIn.Should Not Contain    ${flow_output}    ${matching_str}
+    END
 
 Verify Vni Segmentation Id and Tunnel Id
     [Arguments]    ${port1}    ${port2}    ${net1}    ${net2}    ${vm1_ip}    ${vm2_ip}
@@ -456,32 +460,29 @@ Verify Vni Segmentation Id and Tunnel Id
     ${port_mac2} =    OpenStackOperations.Get Port Mac    ${port2}
     ${segmentation_id1} =    OpenStackOperations.Get Network Segmentation Id    ${net1}
     ${segmentation_id2} =    OpenStackOperations.Get Network Segmentation Id    ${net2}
-    ${egress_tun_id}    ${before_count_egress_port1} =    OVSDB.Get Tunnel Id And Packet Count    ${OS_CMP1_CONN_ID}    ${L3_TABLE}    direction=${EGRESS}    tun_id=${segmentation_id2}
-    ...    dst_mac=${port_mac2}
+    ${egress_tun_id}    ${before_count_egress_port1} =    OVSDB.Get Tunnel Id And Packet Count    ${OS_CMP1_CONN_ID}    ${L3_TABLE}    tun_id=${segmentation_id2}    mac=${port_mac2}
     BuiltIn.Should Be Equal As Numbers    ${segmentation_id2}    ${egress_tun_id}
-    ${egress_tun_id}    ${before_count_egress_port2} =    OVSDB.Get Tunnel Id And Packet Count    ${OS_CMP2_CONN_ID}    ${L3_TABLE}    direction=${EGRESS}    tun_id=${segmentation_id1}
-    ...    dst_mac=${port_mac1}
+    ${egress_tun_id}    ${before_count_egress_port2} =    OVSDB.Get Tunnel Id And Packet Count    ${OS_CMP2_CONN_ID}    ${L3_TABLE}    tun_id=${segmentation_id1}    mac=${port_mac1}
     BuiltIn.Should Be Equal As Numbers    ${segmentation_id1}    ${egress_tun_id}
-    ${ingress_tun_id}    ${before_count_ingress_port1} =    OVSDB.Get Tunnel Id And Packet Count    ${OS_CMP1_CONN_ID}    ${INTERNAL_TUNNEL_TABLE}    direction=${INGRESS}    tun_id=${segmentation_id1}
+    ${ingress_tun_id}    ${before_count_ingress_port1} =    OVSDB.Get Tunnel Id And Packet Count    ${OS_CMP1_CONN_ID}    ${INTERNAL_TUNNEL_TABLE}    tun_id=${segmentation_id1}
     BuiltIn.Should Be Equal As Numbers    ${segmentation_id1}    ${ingress_tun_id}
-    ${ingress_tun_id}    ${before_count_ingress_port2} =    OVSDB.Get Tunnel Id And Packet Count    ${OS_CMP2_CONN_ID}    ${INTERNAL_TUNNEL_TABLE}    direction=${INGRESS}    tun_id=${segmentation_id2}
+    ${ingress_tun_id}    ${before_count_ingress_port2} =    OVSDB.Get Tunnel Id And Packet Count    ${OS_CMP2_CONN_ID}    ${INTERNAL_TUNNEL_TABLE}    tun_id=${segmentation_id2}
     BuiltIn.Should Be Equal As Numbers    ${segmentation_id2}    ${ingress_tun_id}
     ${ping_cmd} =    BuiltIn.Run Keyword If    '${ip}'=='ipv4'    BuiltIn.Set Variable    ping -c ${DEFAULT_PING_COUNT} ${vm2_ip}
     ...    ELSE    BuiltIn.Set Variable    ping6 -c ${DEFAULT_PING_COUNT} ${vm2_ip}
     ${output} =    OpenStackOperations.Execute Command on VM Instance    ${net1}    ${vm1_ip}    ${ping_cmd}
     BuiltIn.Should Contain    ${output}    64 bytes
     BuiltIn.Wait Until Keyword Succeeds    60s    5s    OVSDB.Verify Vni Packet Count After Traffic    ${before_count_egress_port1}    ${before_count_egress_port2}    ${before_count_ingress_port1}
-    ...    ${before_count_ingress_port2}
+    ...    ${before_count_ingress_port2}    ${segmentation_id1}    ${segmentation_id2}    ${port_mac1}    ${port_mac2}
 
 Verify Vni Packet Count After Traffic
-    [Arguments]    ${before_count_egress_port1}    ${before_count_egress_port2}    ${before_count_ingress_port1}    ${before_count_ingress_port2}
+    [Arguments]    ${before_count_egress_port1}    ${before_count_egress_port2}    ${before_count_ingress_port1}    ${before_count_ingress_port2}    ${segmentation_id1}    ${segmentation_id2}
+    ...    ${port_mac1}    ${port_mac2}
     [Documentation]    Verify the packet count after the traffic sent
-    ${tun_id}    ${after_count_egress_port2} =    OVSDB.Get Tunnel Id And Packet Count    ${OS_CMP2_CONN_ID}    ${L3_TABLE}    direction=${EGRESS}    tun_id=${segmentation_id1}
-    ...    dst_mac=${port_mac1}
-    ${tun_id}    ${after_count_ingress_port2} =    OVSDB.Get Tunnel Id And Packet Count    ${OS_CMP2_CONN_ID}    ${INTERNAL_TUNNEL_TABLE}    direction=${INGRESS}    tun_id=${segmentation_id2}
-    ${tun_id}    ${after_count_egress_port1} =    OVSDB.Get Tunnel Id And Packet Count    ${OS_CMP1_CONN_ID}    ${L3_TABLE}    direction=${EGRESS}    tun_id=${segmentation_id2}
-    ...    dst_mac=${port_mac2}
-    ${tun_id}    ${after_count_ingress_port1} =    OVSDB.Get Tunnel Id And Packet Count    ${OS_CMP1_CONN_ID}    ${INTERNAL_TUNNEL_TABLE}    direction=${INGRESS}    tun_id=${segmentation_id1}
+    ${tun_id}    ${after_count_egress_port2} =    OVSDB.Get Tunnel Id And Packet Count    ${OS_CMP2_CONN_ID}    ${L3_TABLE}    tun_id=${segmentation_id1}    mac=${port_mac1}
+    ${tun_id}    ${after_count_ingress_port2} =    OVSDB.Get Tunnel Id And Packet Count    ${OS_CMP2_CONN_ID}    ${INTERNAL_TUNNEL_TABLE}    tun_id=${segmentation_id2}
+    ${tun_id}    ${after_count_egress_port1} =    OVSDB.Get Tunnel Id And Packet Count    ${OS_CMP1_CONN_ID}    ${L3_TABLE}    tun_id=${segmentation_id2}    mac=${port_mac2}
+    ${tun_id}    ${after_count_ingress_port1} =    OVSDB.Get Tunnel Id And Packet Count    ${OS_CMP1_CONN_ID}    ${INTERNAL_TUNNEL_TABLE}    tun_id=${segmentation_id1}
     ${diff_count_egress_port1} =    BuiltIn.Evaluate    ${after_count_egress_port1} - ${before_count_egress_port1}
     ${diff_count_ingress_port1} =    BuiltIn.Evaluate    ${after_count_ingress_port1} - ${before_count_ingress_port1}
     ${diff_count_egress_port2} =    BuiltIn.Evaluate    ${after_count_egress_port2} - ${before_count_egress_port2}
@@ -490,3 +491,24 @@ Verify Vni Packet Count After Traffic
     BuiltIn.Should Be True    ${diff_count_ingress_port1} >= ${DEFAULT_PING_COUNT}
     BuiltIn.Should Be True    ${diff_count_egress_port2} >= ${DEFAULT_PING_COUNT}
     BuiltIn.Should Be True    ${diff_count_ingress_port2} >= ${DEFAULT_PING_COUNT}
+
+Get Flow Entries On Node
+    [Arguments]    ${conn_id}    ${switch}=${INTEGRATION_BRIDGE}
+    [Documentation]    Return flow entries on the given Node.
+    SSHLibrary.Switch Connection    ${conn_id}
+    ${output} =    Utils.Write Commands Until Expected Prompt    sudo ovs-ofctl -O OpenFlow13 dump-flows ${switch}    ${DEFAULT_LINUX_PROMPT_STRICT}
+    BuiltIn.Log    ${output}
+    [Return]    ${output}
+
+Verify Ovsdb State
+    [Arguments]    ${dpn_ip}    ${state}=ACTIVE
+    [Documentation]    Verify ovsdb state for the given DPN
+    ${output} =    Utils.Run Command On Remote System And Log    ${dpn_ip}    sudo ovsdb-client dump -f list Open_vSwitch Controller | grep state
+    BuiltIn.Log    ${output}
+    BuiltIn.Should Contain    ${output}    state=${state}
+
+Verify Flows Are Present On Node
+    [Arguments]    ${conn_id}    ${match}
+    [Documentation]    Verify Flows Are Present On The Given Node
+    ${output} =    OVSDB.Get Flow Entries On Node    ${conn_id}
+    BuiltIn.Should Contain    ${output}    ${match}