+ ${line} ${bridge_name} = Builtin.Should Match Regexp ${result} Bridge ([\\w-]+)
+ RETURN ${uuid} ${bridge_name}
+
+Delete OVS Controller
+ [Documentation] Delete controller from OVS
+ [Arguments] ${ovs_ip} ${bridge}=${INTEGRATION_BRIDGE}
+ ${del_ctr} = Utils.Run Command On Remote System ${ovs_ip} sudo ovs-vsctl del-controller ${bridge}
+ BuiltIn.Log ${del_ctr}
+
+Delete OVS Manager
+ [Documentation] Delete manager from OVS
+ [Arguments] ${ovs_ip}
+ ${del_mgr} = Utils.Run Command On Remote System ${ovs_ip} sudo ovs-vsctl del-manager
+ BuiltIn.Log ${del_mgr}
+
+Delete Groups On Bridge
+ [Documentation] Delete OVS groups from ${br}
+ [Arguments] ${ovs_ip} ${br}=${INTEGRATION_BRIDGE}
+ ${del_grp} = Utils.Run Command On Remote System ${ovs_ip} sudo ovs-ofctl -O Openflow13 del-groups ${br}
+ BuiltIn.Log ${del_grp}
+
+Get Ports From Bridge By Type
+ [Documentation] Get ${type} ports for a bridge ${br} on node ${ovs_ip}.
+ [Arguments] ${ovs_ip} ${br} ${type}
+ ${ports} = Utils.Run Command On Remote System ${ovs_ip} sudo ovs-vsctl list-ports ${br} | grep "${type}"
+ ${ports_list} = String.Split to lines ${ports}
+ RETURN ${ports_list}
+
+Delete Ports On Bridge By Type
+ [Documentation] List all ports of ${br} and delete ${type} ports
+ [Arguments] ${ovs_ip} ${br} ${type}
+ ${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}
+ 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
+ [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.
+ [Arguments] ${conn_id} ${table_id} ${tun_id} ${mac}=""
+ ${tun_id} = BuiltIn.Convert To Hex ${tun_id} prefix=0x lowercase=yes
+ IF "${table_id}" == "${INTERNAL_TUNNEL_TABLE}"
+ ${cmd} = 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
+ ${cmd} = BuiltIn.Set Variable
+ ... sudo ovs-ofctl dump-flows br-int -OOpenFlow13 | grep table=${table_id} | grep ${mac}
+ END
+ SSHLibrary.Switch Connection ${conn_id}
+ ${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}
+ IF "${table_id}" == "${ELAN_DMACTABLE}"
+ ${packet_count} ${tunnel_id} = BuiltIn.Set Variable ${output}[0] ${output}[1]
+ ELSE IF "${table_id}" == "${INTERNAL_TUNNEL_TABLE}"
+ ${packet_count} ${tunnel_id} = BuiltIn.Set Variable ${output}[2] ${output}[3]
+ ELSE IF "${table_id}" == "${L3_TABLE}"
+ ${packet_count} ${tunnel_id} = BuiltIn.Set Variable ${output}[0] ${output}[1]
+ ELSE
+ ${packet_count} ${tunnel_id} = Set Variable ${None} ${None}
+ END
+ ${tunnel_id} = Convert To Integer ${tunnel_id} 16
+ RETURN ${tunnel_id} ${packet_count}
+
+Verify Dump Flows For Specific Table
+ [Documentation] To Verify flows are present for the corresponding table Number
+ [Arguments] ${compute_ip} ${table_num} ${flag} ${additional_args}=${EMPTY} @{matching_paras}
+ ${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}
+ IF ${flag}==True
+ BuiltIn.Should Contain ${flow_output} ${matching_str}
+ ELSE
+ BuiltIn.Should Not Contain ${flow_output} ${matching_str}
+ END
+ END
+
+Verify Vni Segmentation Id and Tunnel Id
+ [Documentation] Get tunnel id and packet count from specified table id and destination port mac address
+ [Arguments] ${port1} ${port2} ${net1} ${net2} ${vm1_ip} ${vm2_ip}
+ ... ${ip}=""
+ ${port_mac1} = OpenStackOperations.Get Port Mac ${port1}
+ ${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}
+ ... 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}
+ ... 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}
+ ... 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}
+ ... tun_id=${segmentation_id2}
+ BuiltIn.Should Be Equal As Numbers ${segmentation_id2} ${ingress_tun_id}
+ IF '${ip}'=='ipv4'
+ ${ping_cmd} = BuiltIn.Set Variable ping -c ${DEFAULT_PING_COUNT} ${vm2_ip}
+ ELSE
+ ${ping_cmd} = BuiltIn.Set Variable ping6 -c ${DEFAULT_PING_COUNT} ${vm2_ip}
+ END
+ ${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}
+ ... ${segmentation_id1}
+ ... ${segmentation_id2}
+ ... ${port_mac1}
+ ... ${port_mac2}
+
+Verify Vni Packet Count After Traffic
+ [Documentation] Verify the packet count after the traffic sent
+ [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}
+ ${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}
+ ${diff_count_ingress_port2} = BuiltIn.Evaluate ${after_count_ingress_port2} - ${before_count_ingress_port2}
+ BuiltIn.Should Be True ${diff_count_egress_port1} >= ${DEFAULT_PING_COUNT}
+ 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
+ [Documentation] Return flow entries on the given Node.
+ [Arguments] ${conn_id} ${switch}=${INTEGRATION_BRIDGE}
+ 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
+ [Documentation] Verify ovsdb state for the given DPN
+ [Arguments] ${dpn_ip} ${state}=ACTIVE
+ ${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
+ [Documentation] Verify Flows Are Present On The Given Node
+ [Arguments] ${conn_id} ${match}
+ ${output} = OVSDB.Get Flow Entries On Node ${conn_id}
+ BuiltIn.Should Contain ${output} ${match}